Oolite
Loading...
Searching...
No Matches
OOOpenGLExtensionManager Class Reference

#include <OOOpenGLExtensionManager.h>

+ Inheritance diagram for OOOpenGLExtensionManager:
+ Collaboration diagram for OOOpenGLExtensionManager:

Instance Methods

(void) - reset
 
(BOOL) - haveExtension:
 
(BOOL) - shadersSupported
 
(BOOL) - shadersForceDisabled
 
(OOGraphicsDetail- defaultDetailLevel
 
(OOGraphicsDetail- maximumDetailLevel
 
(GLint) - textureImageUnitCount
 
(BOOL) - vboSupported
 
(BOOL) - fboSupported
 
(BOOL) - textureCombinersSupported
 
(GLint) - textureUnitCount
 
(NSUInteger) - majorVersionNumber
 
(NSUInteger) - minorVersionNumber
 
(NSUInteger) - releaseVersionNumber
 
(void) - getVersionMajor:minor:release:
 
(BOOL) - versionIsAtLeastMajor:minor:
 
(NSString *) - vendorString
 
(NSString *) - rendererString
 
(BOOL) - usePointSmoothing
 
(BOOL) - useLineSmoothing
 
(BOOL) - useDustShader
 
(id) - init [implementation]
 
(void) - dealloc [implementation]
 
(void) - checkShadersSupported [implementation]
 
(NSDictionary *) - lookUpPerGPUSettingsWithVersionString:extensionsString: [implementation]
 
(NSComparisonResult) - CompareGPUSettingsByPriority [implementation]
 
(id) - copyWithZone: [implementation]
 
(id) - retain [implementation]
 
(NSUInteger) - retainCount [implementation]
 
(id) - autorelease [implementation]
 

Class Methods

(OOOpenGLExtensionManager *) + sharedManager
 
(static BOOL) + CheckRegExps [implementation]
 
(id) + allocWithZone: [implementation]
 

Private Attributes

NSSet * extensions
 
NSString * vendor
 
NSString * renderer
 
unsigned major
 
unsigned minor
 
unsigned release
 
BOOL usePointSmoothing
 
BOOL useLineSmoothing
 
BOOL useDustShader
 
BOOL shadersAvailable
 
BOOL shadersForceDisabled
 
OOShaderSetting defaultShaderSetting
 
OOShaderSetting maximumShaderSetting
 
GLint textureImageUnitCount
 

Detailed Description

Definition at line 115 of file OOOpenGLExtensionManager.h.

Method Documentation

◆ allocWithZone:

+ (id) allocWithZone: (NSZone *)  inZone
implementation

Provided by category OOOpenGLExtensionManager(Singleton).

Definition at line 769 of file OOOpenGLExtensionManager.m.

836 :(NSZone *)inZone
837{
838 if (sSingleton == nil)
839 {
840 sSingleton = [super allocWithZone:inZone];
841 return sSingleton;
842 }
843 return nil;
844}
static OODebugMonitor * sSingleton
return nil

◆ autorelease

- (id) autorelease
implementation

Provided by category OOOpenGLExtensionManager(Singleton).

Definition at line 769 of file OOOpenGLExtensionManager.m.

870{
871 return self;
872}

◆ CheckRegExps

+ (static BOOL) CheckRegExps (NSString *)  string
(id)  regexps 
implementation

Provided by category OOOpenGLExtensionManager(OOPrivate).

Definition at line 739 of file OOOpenGLExtensionManager.m.

740{
741 if (regexps == nil) return YES; // No restriction == match.
742 if ([regexps isKindOfClass:[NSString class]])
743 {
744 return [string oo_matchesRegularExpression:regexps];
745 }
746 if ([regexps isKindOfClass:[NSArray class]])
747 {
748 NSEnumerator *regexpEnum = nil;
749 NSString *regexp = nil;
750
751 for (regexpEnum = [regexps objectEnumerator]; (regexp = [regexpEnum nextObject]); )
752 {
753 if (EXPECT_NOT(![regexp isKindOfClass:[NSString class]]))
754 {
755 // Invalid type -- match fails.
756 return NO;
757 }
758
759 if (![string oo_matchesRegularExpression:regexp]) return NO;
760 }
761 return YES;
762 }
763
764 // Invalid type -- match fails.
765 return NO;
766}
#define EXPECT_NOT(x)

◆ CompareGPUSettingsByPriority

- (NSComparisonResult) CompareGPUSettingsByPriority (id)  a
(id)  b
(void *)  context 
implementation

Provided by category OOOpenGLExtensionManager(OOPrivate).

Definition at line 769 of file OOOpenGLExtensionManager.m.

770{
771 NSString *keyA = a;
772 NSString *keyB = b;
773 NSDictionary *configurations = context;
774 NSDictionary *dictA = [configurations oo_dictionaryForKey:keyA];
775 NSDictionary *dictB = [configurations oo_dictionaryForKey:keyB];
776 double precedenceA = [dictA oo_doubleForKey:@"precedence" defaultValue:1];
777 double precedenceB = [dictB oo_doubleForKey:@"precedence" defaultValue:1];
778
779 if (precedenceA > precedenceB) return NSOrderedAscending;
780 if (precedenceA < precedenceB) return NSOrderedDescending;
781
782 return [keyA caseInsensitiveCompare:keyB];
783}

◆ copyWithZone:

- (id) copyWithZone: (NSZone *)  inZone
implementation

Provided by category OOOpenGLExtensionManager(Singleton).

Definition at line 769 of file OOOpenGLExtensionManager.m.

847 :(NSZone *)inZone
848{
849 return self;
850}

◆ dealloc

- (void) dealloc
implementation

Definition at line 528 of file OOOpenGLExtensionManager.m.

321{
322 if (sSingleton == self) sSingleton = nil;
323
324#if OOOPENGLEXTMGR_LOCK_SET_ACCESS
325 [lock release];
326#endif
330
331 [super dealloc];
332}
#define DESTROY(x)
Definition OOCocoa.h:75

◆ defaultDetailLevel

- (OOGraphicsDetail) defaultDetailLevel

Definition at line 528 of file OOOpenGLExtensionManager.m.

381{
382#if OO_SHADERS
384 {
386 }
387 else
388 {
390 }
391#else
393#endif
394}
@ SHADERS_FULL
Definition OOOpenGL.h:40
@ SHADERS_NOT_SUPPORTED
Definition OOOpenGL.h:37
@ DETAIL_LEVEL_MAXIMUM
Definition OOTypes.h:251
@ DETAIL_LEVEL_MINIMUM
Definition OOTypes.h:244

◆ fboSupported

- (BOOL) fboSupported

Definition at line 528 of file OOOpenGLExtensionManager.m.

435{
436#if OO_USE_FBO
437 return fboSupported;
438#else
439 return NO;
440#endif
441}

◆ getVersionMajor:minor:release:

- (void) getVersionMajor: (unsigned *)  outMajor
minor: (unsigned *)  outMinor
release: (unsigned *)  outRelease 

Definition at line 528 of file OOOpenGLExtensionManager.m.

482 :(unsigned *)outMajor minor:(unsigned *)outMinor release:(unsigned *)outRelease
483{
484 if (outMajor != NULL) *outMajor = major;
485 if (outMinor != NULL) *outMinor = minor;
486 if (outRelease != NULL) *outRelease = release;
487}

◆ haveExtension:

- (BOOL) haveExtension: (NSString *)  extension

Definition at line 528 of file OOOpenGLExtensionManager.m.

343 :(NSString *)extension
344{
345// NSSet is documented as thread-safe under OS X, but I'm not sure about GNUstep. -- Ahruman
346#if OOOPENGLEXTMGR_LOCK_SET_ACCESS
347 [lock lock];
348#endif
349
350 BOOL result = [extensions containsObject:extension];
351
352#if OOOPENGLEXTMGR_LOCK_SET_ACCESS
353 [lock unlock];
354#endif
355
356 return result;
357}

◆ init

- (id) init
implementation

Definition at line 528 of file OOOpenGLExtensionManager.m.

197{
198 self = [super init];
199 if (self != nil)
200 {
201#if OOOPENGLEXTMGR_LOCK_SET_ACCESS
202 lock = [[NSLock alloc] init];
203 [lock setName:@"OOOpenGLExtensionManager extension set lock"];
204#endif
205
206 [self reset];
207 }
208
209 return self;
210}

◆ lookUpPerGPUSettingsWithVersionString:extensionsString:

- (NSDictionary *) lookUpPerGPUSettingsWithVersionString: (NSString *)  version
extensionsString: (NSString *)  extensionsStr 
implementation

Provided by category OOOpenGLExtensionManager(OOPrivate).

Definition at line 769 of file OOOpenGLExtensionManager.m.

786 :(NSString *)versionStr extensionsString:(NSString *)extensionsStr
787{
788 NSDictionary *configurations = [ResourceManager dictionaryFromFilesNamed:@"gpu-settings.plist"
789 inFolder:@"Config"
790 andMerge:YES];
791
792 NSArray *keys = [[configurations allKeys] sortedArrayUsingFunction:CompareGPUSettingsByPriority context:configurations];
793
794 NSString *key = nil;
795 NSDictionary *config = nil;
796
797 foreach (key, keys)
798 {
799 config = [configurations oo_dictionaryForKey:key];
800 if (EXPECT_NOT(config == nil)) continue;
801
802 NSDictionary *match = [config oo_dictionaryForKey:@"match"];
803 NSString *expr = nil;
804
805 expr = [match objectForKey:@"vendor"];
806 if (!CheckRegExps(vendor, expr)) continue;
807
808 expr = [match oo_stringForKey:@"renderer"];
809 if (!CheckRegExps(renderer, expr)) continue;
810
811 expr = [match oo_stringForKey:@"version"];
812 if (!CheckRegExps(versionStr, expr)) continue;
813
814 expr = [match oo_stringForKey:@"extensions"];
815 if (!CheckRegExps(extensionsStr, expr)) continue;
816
817 OOLog(@"rendering.opengl.gpuSpecific", @"Matched GPU configuration \"%@\".", key);
818 return config;
819 }
820
821 return [NSDictionary dictionary];
822}
#define OOLog(class, format,...)
Definition OOLogging.h:88
static BOOL CheckRegExps(NSString *string, id regexps)
NSDictionary * dictionaryFromFilesNamed:inFolder:andMerge:(NSString *fileName,[inFolder] NSString *folderName,[andMerge] BOOL mergeFiles)

◆ majorVersionNumber

- (NSUInteger) majorVersionNumber

Definition at line 528 of file OOOpenGLExtensionManager.m.

465{
466 return major;
467}

◆ maximumDetailLevel

- (OOGraphicsDetail) maximumDetailLevel

Definition at line 528 of file OOOpenGLExtensionManager.m.

398{
399#if OO_SHADERS
401 {
403 }
404 else
405 {
407 }
408#else
410#endif
411}

Referenced by ConsoleGetProperty().

+ Here is the caller graph for this function:

◆ minorVersionNumber

- (NSUInteger) minorVersionNumber

Definition at line 528 of file OOOpenGLExtensionManager.m.

471{
472 return minor;
473}

◆ releaseVersionNumber

- (NSUInteger) releaseVersionNumber

Definition at line 528 of file OOOpenGLExtensionManager.m.

477{
478 return release;
479}

◆ rendererString

- (NSString *) rendererString

Definition at line 528 of file OOOpenGLExtensionManager.m.

503{
504 return renderer;
505}

◆ reset

- (void) reset

Definition at line 528 of file OOOpenGLExtensionManager.m.

214{
215 const GLubyte *versionString = NULL, *curr = NULL;
216
220
221 NSString *extensionsStr = [NSString stringWithUTF8String:(char *)glGetString(GL_EXTENSIONS)];
222 extensions = [[NSSet alloc] initWithArray:ArrayOfExtensions(extensionsStr)];
223
224 vendor = [[NSString alloc] initWithUTF8String:(const char *)glGetString(GL_VENDOR)];
225 renderer = [[NSString alloc] initWithUTF8String:(const char *)glGetString(GL_RENDERER)];
226
227 versionString = glGetString(GL_VERSION);
228 if (versionString != NULL)
229 {
230 /* String is supposed to be "major.minorFOO" or
231 "major.minor.releaseFOO" where FOO is an empty string or
232 a string beginning with space.
233 */
234 curr = versionString;
235 major = IntegerFromString(&curr);
236 if (*curr == '.')
237 {
238 curr++;
239 minor = IntegerFromString(&curr);
240 }
241 if (*curr == '.')
242 {
243 curr++;
244 release = IntegerFromString(&curr);
245 }
246 }
247
248 /* For aesthetic reasons, cause the ResourceManager to initialize its
249 search paths here. If we don't, the search path dump ends up in
250 the middle of the OpenGL stuff.
251 */
253
254 OOLog(@"rendering.opengl.version", @"OpenGL renderer version: %u.%u.%u (\"%s\"). Vendor: \"%@\". Renderer: \"%@\".", major, minor, release, versionString, vendor, renderer);
255 OOLog(@"rendering.opengl.extensions", @"OpenGL extensions (%llu):\n%@", [extensions count], [[extensions allObjects] componentsJoinedByString:@", "]);
256
257 if (![self versionIsAtLeastMajor:kMinMajorVersion minor:kMinMinorVersion])
258 {
259 OOLog(@"rendering.opengl.version.insufficient", @"***** Oolite requires OpenGL version %u.%u or later.", kMinMajorVersion, kMinMinorVersion);
260 [NSException raise:@"OoliteOpenGLTooOldException"
261 format:@"Oolite requires at least OpenGL %u.%u. You have %u.%u (\"%s\").", kMinMajorVersion, kMinMinorVersion, major, minor, versionString];
262 }
263
264 NSString *versionStr = [[[NSString alloc] initWithUTF8String:(const char *)versionString] autorelease];
265 NSDictionary *gpuConfig = [self lookUpPerGPUSettingsWithVersionString:versionStr extensionsString:extensionsStr];
266
267#if OO_SHADERS
268 [self checkShadersSupported];
269
271 {
272 defaultShaderSetting = OOShaderSettingFromString([gpuConfig oo_stringForKey:@"default_shader_level"
273 defaultValue:@"SHADERS_FULL"]);
274 maximumShaderSetting = OOShaderSettingFromString([gpuConfig oo_stringForKey:@"maximum_shader_level"
275 defaultValue:@"SHADERS_FULL"]);
277 {
278 shadersAvailable = NO;
280 OOLog(kOOLogOpenGLShaderSupport, @"Shaders will not be used (disallowed for GPU type \"%@\").", [gpuConfig oo_stringForKey:@"name" defaultValue:renderer]);
281 }
283 {
285 }
286
288 {
289 OOLog(kOOLogOpenGLShaderSupport, @"%@", @"Shaders are supported.");
290 }
291 }
292 else
293 {
296 }
297
298 GLint texImageUnitOverride = [gpuConfig oo_intForKey:@"texture_image_units" defaultValue:textureImageUnitCount];
299 if (texImageUnitOverride < textureImageUnitCount) textureImageUnitCount = MAX(texImageUnitOverride, 0);
300#endif
301
302#if OO_USE_VBO
303 [self checkVBOSupported];
304#endif
305#if OO_USE_FBO
306 [self checkFBOSupported];
307#endif
308#if OO_MULTITEXTURE
309 [self checkTextureCombinersSupported];
310 GLint texUnitOverride = [gpuConfig oo_intForKey:@"texture_units" defaultValue:textureUnitCount];
311 if (texUnitOverride < textureUnitCount) textureUnitCount = MAX(texUnitOverride, 0);
312#endif
313
314 usePointSmoothing = [gpuConfig oo_boolForKey:@"smooth_points" defaultValue:YES];
315 useLineSmoothing = [gpuConfig oo_boolForKey:@"smooth_lines" defaultValue:YES];
316 useDustShader = [gpuConfig oo_boolForKey:@"use_dust_shader" defaultValue:YES];
317}
OOShaderSetting OOShaderSettingFromString(NSString *string)
#define MAX(A, B)
Definition OOMaths.h:114
static NSString *const kOOLogOpenGLShaderSupport
static unsigned IntegerFromString(const GLubyte **ioString)
@ SHADERS_OFF
Definition OOOpenGL.h:38
unsigned count

◆ retain

- (id) retain
implementation

Provided by category OOOpenGLExtensionManager(Singleton).

Definition at line 769 of file OOOpenGLExtensionManager.m.

854{
855 return self;
856}

◆ retainCount

- (NSUInteger) retainCount
implementation

Provided by category OOOpenGLExtensionManager(Singleton).

Definition at line 769 of file OOOpenGLExtensionManager.m.

860{
861 return UINT_MAX;
862}

◆ shadersForceDisabled

- (BOOL) shadersForceDisabled

◆ shadersSupported

- (BOOL) shadersSupported

Definition at line 528 of file OOOpenGLExtensionManager.m.

361{
362#if OO_SHADERS
363 return shadersAvailable;
364#else
365 return NO;
366#endif
367}

Referenced by OOShadersSupported().

+ Here is the caller graph for this function:

◆ sharedManager

+ (OOOpenGLExtensionManager *) sharedManager

Definition at line 528 of file OOOpenGLExtensionManager.m.

336{
337 // NOTE: assumes single-threaded first access. See header.
338 if (sSingleton == nil) sSingleton = [[self alloc] init];
339 return sSingleton;
340}

Referenced by ConsoleGetProperty(), and OOShadersSupported().

+ Here is the caller graph for this function:

◆ textureCombinersSupported

- (BOOL) textureCombinersSupported

Definition at line 528 of file OOOpenGLExtensionManager.m.

445{
446#if OO_MULTITEXTURE
448#else
449 return NO;
450#endif
451}

◆ textureImageUnitCount

- (GLint) textureImageUnitCount

◆ textureUnitCount

- (GLint) textureUnitCount

Definition at line 528 of file OOOpenGLExtensionManager.m.

455{
456#if OO_MULTITEXTURE
457 return textureUnitCount;
458#else
459 return 0;
460#endif
461}

◆ useDustShader

- (BOOL) useDustShader

◆ useLineSmoothing

- (BOOL) useLineSmoothing

◆ usePointSmoothing

- (BOOL) usePointSmoothing

◆ vboSupported

- (BOOL) vboSupported

Definition at line 528 of file OOOpenGLExtensionManager.m.

425{
426#if OO_USE_VBO
427 return vboSupported;
428#else
429 return NO;
430#endif
431}

◆ vendorString

- (NSString *) vendorString

Definition at line 528 of file OOOpenGLExtensionManager.m.

497{
498 return vendor;
499}

◆ versionIsAtLeastMajor:minor:

- (BOOL) versionIsAtLeastMajor: (unsigned)  maj
minor: (unsigned)  min 

Definition at line 528 of file OOOpenGLExtensionManager.m.

490 :(unsigned)maj minor:(unsigned)min
491{
492 return major > maj || (major == maj && minor >= min);
493}

Member Data Documentation

◆ defaultShaderSetting

- (OOShaderSetting) defaultShaderSetting
private

Definition at line 135 of file OOOpenGLExtensionManager.h.

◆ extensions

- (NSSet*) extensions
private

Definition at line 121 of file OOOpenGLExtensionManager.h.

◆ major

- (unsigned) major
private

Definition at line 126 of file OOOpenGLExtensionManager.h.

◆ maximumShaderSetting

- (OOShaderSetting) maximumShaderSetting
private

Definition at line 136 of file OOOpenGLExtensionManager.h.

◆ minor

- (unsigned) minor
private

Definition at line 126 of file OOOpenGLExtensionManager.h.

◆ release

- (unsigned) release
private

Provided by category OOOpenGLExtensionManager(Singleton).

Definition at line 126 of file OOOpenGLExtensionManager.h.

◆ renderer

- (NSString*) renderer
private

Definition at line 124 of file OOOpenGLExtensionManager.h.

◆ shadersAvailable

- (BOOL) shadersAvailable
private

Definition at line 133 of file OOOpenGLExtensionManager.h.

◆ shadersForceDisabled

- (BOOL) shadersForceDisabled
private

Definition at line 134 of file OOOpenGLExtensionManager.h.

◆ textureImageUnitCount

- (GLint) textureImageUnitCount
private

Definition at line 137 of file OOOpenGLExtensionManager.h.

◆ useDustShader

- (BOOL) useDustShader
private

Definition at line 130 of file OOOpenGLExtensionManager.h.

◆ useLineSmoothing

- (BOOL) useLineSmoothing
private

Definition at line 129 of file OOOpenGLExtensionManager.h.

◆ usePointSmoothing

- (BOOL) usePointSmoothing
private

Definition at line 128 of file OOOpenGLExtensionManager.h.

◆ vendor

- (NSString*) vendor
private

Definition at line 123 of file OOOpenGLExtensionManager.h.


The documentation for this class was generated from the following files: