CelestiaRenderer.mm
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:9k
源码类别:

OpenGL

开发平台:

Visual C++

  1. //
  2. //  CelestiaRenderer.mm
  3. //  celestia
  4. //
  5. //  Created by Bob Ippolito on Fri Jun 07 2002.
  6. //  Copyright (c) 2002 Chris Laurel. All rights reserved.
  7. //
  8. #import "CelestiaRenderer.h"
  9. #import "CelestiaRenderer_PrivateAPI.h"
  10. NSDictionary* _labelFlags;
  11. NSDictionary* _renderFlags;
  12. @implementation CelestiaRenderer(PrivateAPI)
  13. -(CelestiaRenderer *)initWithRenderer:(Renderer *)ren 
  14. {
  15.     self = [super init];
  16.     _data = [[NSValue alloc] initWithBytes:reinterpret_cast<void*>(&ren) objCType:@encode(Renderer*)];
  17.     return self;
  18. }
  19. -(Renderer *)renderer
  20. {
  21.     return reinterpret_cast<Renderer*>([_data pointerValue]);
  22. }
  23. @end
  24. @implementation CelestiaRenderer
  25. +(void)initialize
  26. {
  27.     _labelFlags = [[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:Renderer::StarLabels],@"Stars",[NSNumber numberWithInt:Renderer::PlanetLabels],@"Planets",[NSNumber numberWithInt:Renderer::MoonLabels],@"Moons",[NSNumber numberWithInt:Renderer::ConstellationLabels],@"Constellations",[NSNumber numberWithInt:Renderer::GalaxyLabels],@"Galaxies",[NSNumber numberWithInt:Renderer::AsteroidLabels],@"Asteroids",[NSNumber numberWithInt:Renderer::SpacecraftLabels],@"Spacecraft",nil,nil] retain];
  28.     _renderFlags = [[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:Renderer::ShowStars],@"Stars",[NSNumber 
  29. numberWithInt:Renderer::ShowPlanets],@"Planets",[NSNumber numberWithInt:Renderer::ShowGalaxies],@"Galaxies",[NSNumber numberWithInt:Renderer::ShowDiagrams],@"Diagrams",[NSNumber numberWithInt:Renderer::ShowCloudMaps],@"CloudMaps",[NSNumber numberWithInt:Renderer::ShowOrbits],@"Orbits",[NSNumber numberWithInt:Renderer::ShowCelestialSphere],@"CelestialSphere",[NSNumber numberWithInt:Renderer::ShowNightMaps],@"NightMaps",[NSNumber numberWithInt:Renderer::ShowAtmospheres],@"Atmospheres",[NSNumber numberWithInt:Renderer::ShowSmoothLines],@"SmoothLines",[NSNumber numberWithInt:Renderer::ShowEclipseShadows],@"EclipseShadows",[NSNumber numberWithInt:Renderer::ShowStarsAsPoints],@"StarsAsPoints",[NSNumber numberWithInt:Renderer::ShowRingShadows],@"RingShadows",[NSNumber numberWithInt:Renderer::ShowBoundaries],@"Boundaries",[NSNumber numberWithInt:Renderer::ShowAutoMag],@"AutoMag",[NSNumber numberWithInt:Renderer::ShowCometTails],@"CometTails",[NSNumber numberWithInt:Renderer::ShowMarkers],@"Markers",nil,nil] retain];
  30. }
  31. -(void)dealloc
  32. {
  33.     if (_data != nil) {
  34.         [_data release];
  35.         _data = nil;
  36.     }
  37.     [super dealloc];
  38. }
  39. -(NSDictionary*)renderFlags
  40. {
  41.     int iflags = [self renderer]->getRenderFlags();
  42.     NSMutableDictionary* flags = [NSMutableDictionary dictionaryWithCapacity:[_renderFlags count]];
  43.     NSEnumerator* enumerator = [_renderFlags keyEnumerator];
  44.     id obj = nil;
  45.     while ((obj = [enumerator nextObject]) != nil) {
  46.         [flags setObject:[NSNumber numberWithBool:(0!=(iflags & [[_renderFlags objectForKey:obj] intValue]))] forKey:obj];
  47.     }
  48.     return flags;
  49. }
  50.     
  51. -(void)setRenderFlags:(NSDictionary*)flags
  52. {
  53.     int iflags = 0;
  54.     NSEnumerator* enumerator = [flags keyEnumerator];
  55.     id obj = nil;
  56.     while ((obj = [enumerator nextObject]) != nil) {
  57.         if ([[flags objectForKey:obj] boolValue])
  58.             iflags |= [[_renderFlags objectForKey:obj] intValue];
  59.     }
  60.     [self renderer]->setRenderFlags(iflags);
  61. }    
  62. -(void)setRenderFlag:(NSString*)key value:(NSNumber*)value
  63. {
  64.     if ([value boolValue]) {
  65.         [self renderer]->setRenderFlags([self renderer]->getRenderFlags() | [[_renderFlags objectForKey:key] intValue]);
  66.     } else {
  67.         [self renderer]->setRenderFlags([self renderer]->getRenderFlags() &~ [[_renderFlags objectForKey:key] intValue]);
  68.     }
  69. }
  70. -(NSNumber*)renderFlag:(NSString*)key
  71. {
  72.     return [NSNumber numberWithBool:(BOOL)([[_renderFlags objectForKey:key] intValue] & [self renderer]->getRenderFlags())];
  73. }
  74. -(NSDictionary*)labelFlags
  75. {
  76.     int iflags = [self renderer]->getLabelMode();
  77.     NSMutableDictionary* flags = [NSMutableDictionary dictionaryWithCapacity:[_labelFlags count]];
  78.     NSEnumerator* enumerator = [_labelFlags keyEnumerator];
  79.     id obj = nil;
  80.     while ((obj = [enumerator nextObject]) != nil) {
  81.         [flags setObject:[NSNumber numberWithBool:(BOOL)(iflags & [[_labelFlags objectForKey:obj] intValue])] forKey:obj];
  82.     }
  83.     return flags;
  84. }
  85. -(void)setLabelFlags:(NSDictionary*)flags
  86. {
  87.     int iflags = 0;
  88.     NSEnumerator* enumerator = [flags keyEnumerator];
  89.     id obj = nil;
  90.     while ((obj = [enumerator nextObject]) != nil) {
  91.         if ([[flags objectForKey:obj] boolValue])
  92.             iflags |= [[_labelFlags objectForKey:obj] intValue];
  93.     }
  94.     [self renderer]->setLabelMode(iflags);
  95. }
  96. -(void)setLabelFlag:(NSString*)key value:(NSNumber*)value
  97. {
  98.     if ([value boolValue]) {
  99.         [self renderer]->setLabelMode([self renderer]->getLabelMode() | [[_labelFlags objectForKey:key] intValue]);
  100.     } else {
  101.         [self renderer]->setLabelMode([self renderer]->getLabelMode() &~ [[_labelFlags objectForKey:key] intValue]);
  102.     }
  103. }
  104. -(NSNumber*)labelFlag:(NSString*)key
  105. {
  106.     return [NSNumber numberWithBool:(BOOL)([[_labelFlags objectForKey:key] intValue] & [self renderer]->getLabelMode())];
  107. }
  108. -(NSNumber*)ambientLightLevel
  109. {
  110.     return [NSNumber numberWithFloat:[self renderer]->getAmbientLightLevel()];
  111. }
  112. -(void)setAmbientLightLevel:(NSNumber*)level
  113. {
  114.     [self renderer]->setAmbientLightLevel([level floatValue]);
  115. }
  116. -(void)setMinimumOrbitSize:(NSNumber*)pixels
  117. {
  118.     [self renderer]->setMinimumOrbitSize([pixels intValue]);
  119. }
  120. -(BOOL)isFragmentShaderEnabled
  121. {
  122.     return (BOOL)[self renderer]->getFragmentShaderEnabled();
  123. }
  124. -(NSNumber*)fragmentShaderEnabled
  125. {
  126.     return [NSNumber numberWithBool:[self isFragmentShaderEnabled]];
  127. }
  128. -(void)setFragmentShaderEnabled:(NSNumber*)enable
  129. {
  130.     [self renderer]->setFragmentShaderEnabled((bool)[enable boolValue]);
  131. }
  132. -(BOOL)isFragmentShaderSupported
  133. {
  134.     return (BOOL)[self renderer]->fragmentShaderSupported();
  135. }
  136. -(BOOL)isVertexShaderEnabled
  137. {
  138.     return (BOOL)[self renderer]->getVertexShaderEnabled();
  139. }
  140. -(NSNumber*)vertexShaderEnabled;
  141. {
  142.     return [NSNumber numberWithBool:[self isVertexShaderEnabled]];
  143. }
  144. -(void)setVertexShaderEnabled:(NSNumber*)enable
  145. {
  146.     [self renderer]->setVertexShaderEnabled((bool)[enable boolValue]);
  147. }
  148. -(BOOL)isVertexShaderSupported
  149. {
  150.     return (BOOL)[self renderer]->vertexShaderSupported();
  151. }
  152. /*
  153. -(NSNumber*)saturationMagnitude
  154. {
  155.     return [NSNumber numberWithFloat:[self renderer]->getSaturationMagnitude()];
  156. }
  157. -(void)setSaturationMagnitude:(NSNumber*)mag
  158. {
  159.     [self renderer]->setSaturationMagnitude([mag floatValue]);
  160. }
  161. -(NSNumber*)brightnessBias
  162. {
  163.     return [NSNumber numberWithFloat:[self renderer]->getBrightnessBias()];
  164. }
  165. -(void)setBrightnessBias:(NSNumber*)bias
  166. {
  167.     [self renderer]->setBrightnessBias([bias floatValue]);
  168. }
  169. */
  170. -(NSNumber*)resolution
  171. {
  172.     return [NSNumber numberWithUnsignedInt:[self renderer]->getResolution()];
  173. }
  174. -(void)setResolution:(NSNumber*)res
  175. {
  176.     [self renderer]->setResolution([res unsignedIntValue]);
  177. }
  178. - (int) getOrbitmask
  179. {
  180.     return [self renderer]->getOrbitMask();
  181. }
  182. - (void) setOrbitMask: (int) mask
  183. {
  184.     [self renderer]->setOrbitMask(mask);
  185. }
  186. -(void)unarchive
  187. {
  188.     if ([[NSUserDefaults standardUserDefaults] objectForKey:@"renderPreferences"]!=nil) {
  189.         id obj;
  190.         NSDictionary *prefs;
  191.         Class dictClass = [NSDictionary class];
  192.         SEL intValueSel = @selector(intValue);
  193.         SEL unsignedIntValueSel = @selector(unsignedIntValue);
  194. //        NSLog(@"deserializing render preferences from user defaults");
  195.         obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"renderPreferences"];
  196.         if (obj && [obj isKindOfClass:dictClass]) {
  197.             prefs = (NSDictionary *)obj;
  198.             if ((obj = [prefs objectForKey:@"labelFlags"]) && [obj isKindOfClass:dictClass])
  199.                 [self setLabelFlags:obj];
  200.             if ((obj = [prefs objectForKey:@"renderFlags"]) && [obj isKindOfClass:dictClass])
  201.                 [self setRenderFlags:obj];
  202. //        [self setBrightnessBias:[prefs objectForKey:@"brightnessBias"]];
  203. //        [self setSaturationMagnitude:[prefs objectForKey:@"saturationMagnitude"]];
  204. //        [self setVertexShaderEnabled:[prefs objectForKey:@"vertexShaderEnabled"]];
  205. //        [self setFragmentShaderEnabled:[prefs objectForKey:@"fragmentShaderEnabled"]];
  206.             if ((obj = [prefs objectForKey:@"resolution"]) && [obj respondsToSelector:unsignedIntValueSel])
  207.                 [self setResolution:obj];
  208.             if ((obj = [prefs objectForKey:@"orbitMask"]) && [obj respondsToSelector:intValueSel])
  209.                 [self setOrbitMask:[obj intValue]];
  210.         }
  211.     }
  212. }
  213. -(void)archive
  214. {
  215.     [[NSUserDefaults standardUserDefaults] setObject:[NSDictionary dictionaryWithObjectsAndKeys:[self labelFlags],@"labelFlags",[self renderFlags],@"renderFlags",[self resolution],@"resolution",[self vertexShaderEnabled],@"vertexShaderEnabled",[self fragmentShaderEnabled],@"fragmentShaderEnabled",
  216.     [NSNumber numberWithInt: [self getOrbitmask]], @"orbitMask",
  217.     
  218.     nil,nil] forKey:@"renderPreferences"];
  219. }
  220. @end