Moved some OpenGL utilities into OOOpenGL.
git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@976 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
parent
97f91f6a18
commit
55f832da66
@ -305,6 +305,7 @@
|
|||||||
1A472917096B5454000E78D8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A472916096B5454000E78D8 /* CoreAudio.framework */; };
|
1A472917096B5454000E78D8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A472916096B5454000E78D8 /* CoreAudio.framework */; };
|
||||||
1A472921096B5468000E78D8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A47291F096B5468000E78D8 /* AudioToolbox.framework */; };
|
1A472921096B5468000E78D8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A47291F096B5468000E78D8 /* AudioToolbox.framework */; };
|
||||||
1A472922096B5468000E78D8 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A472920096B5468000E78D8 /* AudioUnit.framework */; };
|
1A472922096B5468000E78D8 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A472920096B5468000E78D8 /* AudioUnit.framework */; };
|
||||||
|
1A5AA3230C0098AF0029C78A /* OOOpenGL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5AA3220C0098AF0029C78A /* OOOpenGL.m */; };
|
||||||
1A5DB1EA0BBD8F0000D57389 /* OOConstToString.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A5DB1E80BBD8F0000D57389 /* OOConstToString.h */; };
|
1A5DB1EA0BBD8F0000D57389 /* OOConstToString.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A5DB1E80BBD8F0000D57389 /* OOConstToString.h */; };
|
||||||
1A5DB1EB0BBD8F0000D57389 /* OOConstToString.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5DB1E90BBD8F0000D57389 /* OOConstToString.m */; };
|
1A5DB1EB0BBD8F0000D57389 /* OOConstToString.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5DB1E90BBD8F0000D57389 /* OOConstToString.m */; };
|
||||||
1A5DBAA60BC000DC00D57389 /* OOJavaScriptEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A5DBA9A0BC000DC00D57389 /* OOJavaScriptEngine.h */; };
|
1A5DBAA60BC000DC00D57389 /* OOJavaScriptEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A5DBA9A0BC000DC00D57389 /* OOJavaScriptEngine.h */; };
|
||||||
@ -1115,6 +1116,7 @@
|
|||||||
1A472916096B5454000E78D8 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
1A472916096B5454000E78D8 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
||||||
1A47291F096B5468000E78D8 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
|
1A47291F096B5468000E78D8 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
|
||||||
1A472920096B5468000E78D8 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
1A472920096B5468000E78D8 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||||
|
1A5AA3220C0098AF0029C78A /* OOOpenGL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOOpenGL.m; sourceTree = "<group>"; };
|
||||||
1A5BF2720916D47300BF238F /* Oolite-importer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "Oolite-importer.xcodeproj"; path = "Oolite-importer/Oolite-importer.xcodeproj"; sourceTree = "<group>"; };
|
1A5BF2720916D47300BF238F /* Oolite-importer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "Oolite-importer.xcodeproj"; path = "Oolite-importer/Oolite-importer.xcodeproj"; sourceTree = "<group>"; };
|
||||||
1A5DB1E80BBD8F0000D57389 /* OOConstToString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOConstToString.h; sourceTree = "<group>"; };
|
1A5DB1E80BBD8F0000D57389 /* OOConstToString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOConstToString.h; sourceTree = "<group>"; };
|
||||||
1A5DB1E90BBD8F0000D57389 /* OOConstToString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOConstToString.m; sourceTree = "<group>"; };
|
1A5DB1E90BBD8F0000D57389 /* OOConstToString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOConstToString.m; sourceTree = "<group>"; };
|
||||||
@ -1692,6 +1694,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
25F3E63A0994F08A002F25FD /* OOOpenGL.h */,
|
25F3E63A0994F08A002F25FD /* OOOpenGL.h */,
|
||||||
|
1A5AA3220C0098AF0029C78A /* OOOpenGL.m */,
|
||||||
1A2A1DEA0BD2A28E00152975 /* OOMacroOpenGL.h */,
|
1A2A1DEA0BD2A28E00152975 /* OOMacroOpenGL.h */,
|
||||||
1A43234A0BCFC9BB00F65914 /* OOOpenGLExtensionManager.h */,
|
1A43234A0BCFC9BB00F65914 /* OOOpenGLExtensionManager.h */,
|
||||||
1A43234B0BCFC9BB00F65914 /* OOOpenGLExtensionManager.m */,
|
1A43234B0BCFC9BB00F65914 /* OOOpenGLExtensionManager.m */,
|
||||||
@ -2569,6 +2572,7 @@
|
|||||||
1A2A1B170BD2774300152975 /* OODrawable.m in Sources */,
|
1A2A1B170BD2774300152975 /* OODrawable.m in Sources */,
|
||||||
1A2A1B2D0BD277D800152975 /* OOSelfDrawingEntity.m in Sources */,
|
1A2A1B2D0BD277D800152975 /* OOSelfDrawingEntity.m in Sources */,
|
||||||
1A2A1CAD0BD2914F00152975 /* OOMesh.m in Sources */,
|
1A2A1CAD0BD2914F00152975 /* OOMesh.m in Sources */,
|
||||||
|
1A5AA3230C0098AF0029C78A /* OOOpenGL.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -186,7 +186,7 @@ MA 02110-1301, USA.
|
|||||||
glDisable(GL_FOG);
|
glDisable(GL_FOG);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"DustEntity after drawing %@", self]);
|
CheckOpenGLErrors(@"DustEntity after drawing %@", self);
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ MA 02110-1301, USA.
|
|||||||
#import "OOOpenGLExtensionManager.h"
|
#import "OOOpenGLExtensionManager.h"
|
||||||
|
|
||||||
|
|
||||||
static NSString * const kOOLogOpenGLStateDump = @"rendering.opengl.stateDump";
|
|
||||||
static NSString * const kOOLogEntityDataNotFound = @"entity.loadMesh.failed.fileNotFound";
|
static NSString * const kOOLogEntityDataNotFound = @"entity.loadMesh.failed.fileNotFound";
|
||||||
static NSString * const kOOLogEntityTooManyVertices = @"entity.loadMesh.failed.tooManyVertices";
|
static NSString * const kOOLogEntityTooManyVertices = @"entity.loadMesh.failed.tooManyVertices";
|
||||||
static NSString * const kOOLogEntityTooManyFaces = @"entity.loadMesh.failed.tooManyFaces";
|
static NSString * const kOOLogEntityTooManyFaces = @"entity.loadMesh.failed.tooManyFaces";
|
||||||
@ -222,7 +221,7 @@ static NSString * const kOOLogEntityTooManyFaces = @"entity.loadMesh.failed.to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!isSmoothShaded) glShadeModel(GL_SMOOTH);
|
if (!isSmoothShaded) glShadeModel(GL_SMOOTH);
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"Entity after drawing %@", self]);
|
CheckOpenGLErrors(@"OOSelfDrawingEntity after drawing %@", self);
|
||||||
brokenInRender = NO;
|
brokenInRender = NO;
|
||||||
NS_HANDLER
|
NS_HANDLER
|
||||||
if (!brokenInRender)
|
if (!brokenInRender)
|
||||||
@ -354,9 +353,6 @@ static NSString * const kOOLogEntityTooManyFaces = @"entity.loadMesh.failed.to
|
|||||||
glNewList(displayListName, GL_COMPILE);
|
glNewList(displayListName, GL_COMPILE);
|
||||||
[self drawEntity:YES:NO]; // immediate YES translucent NO
|
[self drawEntity:YES:NO]; // immediate YES translucent NO
|
||||||
glEndList();
|
glEndList();
|
||||||
//
|
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"Entity after generateDisplayList for %@", self]);
|
|
||||||
//
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1543,12 +1543,11 @@ static Vector circleVertex[65]; // holds vector coordinates for a unit circle
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
default :
|
||||||
// NSLog(@"drawParticle immediate:%@ translucent:%@", immediate? @"YES":@"NO", translucent? @"YES":@"NO");
|
|
||||||
[self drawParticle];
|
[self drawParticle];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"ParticleEntity after drawing %@ %@", self, debug_type]);
|
CheckOpenGLErrors(@"ParticleEntity after drawing %@ %@", self, debug_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) drawSubEntity:(BOOL) immediate :(BOOL) translucent
|
- (void) drawSubEntity:(BOOL) immediate :(BOOL) translucent
|
||||||
|
@ -1493,7 +1493,7 @@ void setUpSinTable()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
glFrontFace(GL_CCW); // face culling - front faces are AntiClockwise!
|
glFrontFace(GL_CCW); // face culling - front faces are AntiClockwise!
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"PlanetEntity after drawing %@", self]);
|
CheckOpenGLErrors(@"PlanetEntity after drawing %@", self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawBall (double radius, int step, double z_distance)
|
void drawBall (double radius, int step, double z_distance)
|
||||||
|
@ -2081,8 +2081,6 @@ double scoopSoundPlayTime = 0.0;
|
|||||||
return; // don't draw
|
return; // don't draw
|
||||||
|
|
||||||
[super drawEntity: immediate : translucent];
|
[super drawEntity: immediate : translucent];
|
||||||
|
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"after drawing PlayerEntity %@", self]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) massLocked
|
- (BOOL) massLocked
|
||||||
|
@ -151,7 +151,7 @@ Ringdata ringentity;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"RingEntity after drawing %@", self]);
|
CheckOpenGLErrors(@"RingEntity after drawing %@", self);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) canCollide
|
- (BOOL) canCollide
|
||||||
|
@ -242,7 +242,7 @@ static OOTexture *sStarTexture, *sBlobTexture;
|
|||||||
glEnable(GL_DEPTH_TEST); // read the depth buffer
|
glEnable(GL_DEPTH_TEST); // read the depth buffer
|
||||||
glDepthMask(GL_TRUE); // restore write to depth buffer
|
glDepthMask(GL_TRUE); // restore write to depth buffer
|
||||||
}
|
}
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"SkyEntity after drawing %@", self]);
|
CheckOpenGLErrors(@"SkyEntity after drawing %@", self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -478,8 +478,6 @@ static OOTexture *sStarTexture, *sBlobTexture;
|
|||||||
glNewList(displayListName, GL_COMPILE);
|
glNewList(displayListName, GL_COMPILE);
|
||||||
[self drawEntity:YES:NO]; // immediate YES translucent NO
|
[self drawEntity:YES:NO]; // immediate YES translucent NO
|
||||||
glEndList();
|
glEndList();
|
||||||
|
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"Entity after generateDisplayList for %@", self]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ MA 02110-1301, USA.
|
|||||||
|
|
||||||
glEnable(GL_CULL_FACE); // face culling
|
glEnable(GL_CULL_FACE); // face culling
|
||||||
}
|
}
|
||||||
CheckOpenGLErrors(@"after drawing WormholeEntity.");
|
CheckOpenGLErrors(@"WormholeEntity after drawing %@", self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawWormholeCorona (double inner_radius, double outer_radius, int step, double z_distance, GLfloat* col4v1)
|
void drawWormholeCorona (double inner_radius, double outer_radius, int step, double z_distance, GLfloat* col4v1)
|
||||||
|
@ -316,7 +316,7 @@ float char_widths[128] = {
|
|||||||
NSLog(@"DEBUG HeadUpDisplay does not respond to '%@'",[info objectForKey:SELECTOR_KEY]);
|
NSLog(@"DEBUG HeadUpDisplay does not respond to '%@'",[info objectForKey:SELECTOR_KEY]);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"HeadUpDisplay after drawHUDItem %@", info]);
|
CheckOpenGLErrors(@"HeadUpDisplay after drawHUDItem %@", info);
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,22 +136,6 @@ shaderBindingTarget:(id<OOWeakReferenceSupport>)object;
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
// TODO: move this stuff to OOOpenGL
|
|
||||||
|
|
||||||
// keep track of various OpenGL states
|
|
||||||
void my_glEnable(GLenum gl_state);
|
|
||||||
void my_glDisable(GLenum gl_state);
|
|
||||||
|
|
||||||
// log a list of current states
|
|
||||||
//
|
|
||||||
void LogOpenGLState();
|
|
||||||
|
|
||||||
// check for OpenGL errors, reporting them if where is not nil
|
|
||||||
//
|
|
||||||
BOOL CheckOpenGLErrors(NSString* where);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#import "OOCacheManager.h"
|
#import "OOCacheManager.h"
|
||||||
@interface OOCacheManager (Octree)
|
@interface OOCacheManager (Octree)
|
||||||
|
|
||||||
|
@ -35,8 +35,6 @@ MA 02110-1301, USA.
|
|||||||
#import "OOOpenGLExtensionManager.h"
|
#import "OOOpenGLExtensionManager.h"
|
||||||
|
|
||||||
|
|
||||||
static NSString * const kOOLogOpenGLExtensionsVAR = @"rendering.opengl.extensions.var";
|
|
||||||
static NSString * const kOOLogOpenGLStateDump = @"rendering.opengl.stateDump";
|
|
||||||
static NSString * const kOOLogMeshDataNotFound = @"mesh.load.failed.fileNotFound";
|
static NSString * const kOOLogMeshDataNotFound = @"mesh.load.failed.fileNotFound";
|
||||||
static NSString * const kOOLogMeshTooManyVertices = @"mesh.load.failed.tooManyVertices";
|
static NSString * const kOOLogMeshTooManyVertices = @"mesh.load.failed.tooManyVertices";
|
||||||
static NSString * const kOOLogMeshTooManyFaces = @"mesh.load.failed.tooManyFaces";
|
static NSString * const kOOLogMeshTooManyFaces = @"mesh.load.failed.tooManyFaces";
|
||||||
@ -249,7 +247,7 @@ shaderBindingTarget:(id<OOWeakReferenceSupport>)object
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
[OOMaterial applyNone];
|
[OOMaterial applyNone];
|
||||||
CheckOpenGLErrors([NSString stringWithFormat:@"OOMesh after drawing %@", self]);
|
CheckOpenGLErrors(@"OOMesh after drawing %@", self);
|
||||||
|
|
||||||
glPopAttrib();
|
glPopAttrib();
|
||||||
}
|
}
|
||||||
@ -274,7 +272,7 @@ shaderBindingTarget:(id<OOWeakReferenceSupport>)object
|
|||||||
|
|
||||||
- (Geometry *)geometry
|
- (Geometry *)geometry
|
||||||
{
|
{
|
||||||
Geometry *result = [(Geometry *)[Geometry alloc] initWithCapacity:faceCount];
|
Geometry *result = [[Geometry alloc] initWithCapacity:faceCount];
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < faceCount; i++)
|
for (i = 0; i < faceCount; i++)
|
||||||
{
|
{
|
||||||
@ -1237,350 +1235,6 @@ shaderBindingTarget:(id<OOWeakReferenceSupport>)target
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
// log a list of current states
|
|
||||||
//
|
|
||||||
// we need to report on the material properties
|
|
||||||
GLfloat stored_mat_ambient[4];
|
|
||||||
GLfloat stored_mat_diffuse[4];
|
|
||||||
GLfloat stored_mat_emission[4];
|
|
||||||
GLfloat stored_mat_specular[4];
|
|
||||||
GLfloat stored_mat_shininess[1];
|
|
||||||
//
|
|
||||||
GLfloat stored_current_color[4];
|
|
||||||
//
|
|
||||||
GLint stored_gl_shade_model[1];
|
|
||||||
//
|
|
||||||
GLint stored_gl_texture_env_mode[1];
|
|
||||||
//
|
|
||||||
GLint stored_gl_cull_face_mode[1];
|
|
||||||
//
|
|
||||||
GLint stored_gl_front_face[1];
|
|
||||||
//
|
|
||||||
GLint stored_gl_blend_src[1];
|
|
||||||
GLint stored_gl_blend_dst[1];
|
|
||||||
//
|
|
||||||
GLenum stored_errCode;
|
|
||||||
//
|
|
||||||
void LogOpenGLState()
|
|
||||||
{
|
|
||||||
if (!OOLogWillDisplayMessagesInClass(kOOLogOpenGLStateDump)) return;
|
|
||||||
|
|
||||||
// we need to report on the material properties
|
|
||||||
GLfloat mat_ambient[4];
|
|
||||||
GLfloat mat_diffuse[4];
|
|
||||||
GLfloat mat_emission[4];
|
|
||||||
GLfloat mat_specular[4];
|
|
||||||
GLfloat mat_shininess[1];
|
|
||||||
//
|
|
||||||
GLfloat current_color[4];
|
|
||||||
//
|
|
||||||
GLint gl_shade_model[1];
|
|
||||||
//
|
|
||||||
GLint gl_texture_env_mode[1];
|
|
||||||
NSString* tex_env_mode_string = nil;
|
|
||||||
//
|
|
||||||
GLint gl_cull_face_mode[1];
|
|
||||||
NSString* cull_face_mode_string = nil;
|
|
||||||
//
|
|
||||||
GLint gl_front_face[1];
|
|
||||||
NSString* front_face_string = nil;
|
|
||||||
//
|
|
||||||
GLint gl_blend_src[1];
|
|
||||||
NSString* blend_src_string = nil;
|
|
||||||
GLint gl_blend_dst[1];
|
|
||||||
NSString* blend_dst_string = nil;
|
|
||||||
//
|
|
||||||
GLenum errCode;
|
|
||||||
const GLubyte *errString;
|
|
||||||
|
|
||||||
glGetMaterialfv( GL_FRONT, GL_AMBIENT, mat_ambient);
|
|
||||||
glGetMaterialfv( GL_FRONT, GL_DIFFUSE, mat_diffuse);
|
|
||||||
glGetMaterialfv( GL_FRONT, GL_EMISSION, mat_emission);
|
|
||||||
glGetMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular);
|
|
||||||
glGetMaterialfv( GL_FRONT, GL_SHININESS, mat_shininess);
|
|
||||||
//
|
|
||||||
glGetFloatv( GL_CURRENT_COLOR, current_color);
|
|
||||||
//
|
|
||||||
glGetIntegerv( GL_SHADE_MODEL, gl_shade_model);
|
|
||||||
//
|
|
||||||
glGetIntegerv( GL_BLEND_SRC, gl_blend_src);
|
|
||||||
switch (gl_blend_src[0])
|
|
||||||
{
|
|
||||||
case GL_ZERO:
|
|
||||||
blend_src_string = @"GL_ZERO";
|
|
||||||
break;
|
|
||||||
case GL_ONE:
|
|
||||||
blend_src_string = @"GL_ONE";
|
|
||||||
break;
|
|
||||||
case GL_DST_COLOR:
|
|
||||||
blend_src_string = @"GL_DST_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_SRC_COLOR:
|
|
||||||
blend_src_string = @"GL_SRC_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_DST_COLOR:
|
|
||||||
blend_src_string = @"GL_ONE_MINUS_DST_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_SRC_COLOR:
|
|
||||||
blend_src_string = @"GL_ONE_MINUS_SRC_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_SRC_ALPHA:
|
|
||||||
blend_src_string = @"GL_SRC_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_DST_ALPHA:
|
|
||||||
blend_src_string = @"GL_DST_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_SRC_ALPHA:
|
|
||||||
blend_src_string = @"GL_ONE_MINUS_SRC_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_DST_ALPHA:
|
|
||||||
blend_src_string = @"GL_ONE_MINUS_DST_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_SRC_ALPHA_SATURATE:
|
|
||||||
blend_src_string = @"GL_SRC_ALPHA_SATURATE";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
glGetIntegerv( GL_BLEND_DST, gl_blend_dst);
|
|
||||||
switch (gl_blend_dst[0])
|
|
||||||
{
|
|
||||||
case GL_ZERO:
|
|
||||||
blend_dst_string = @"GL_ZERO";
|
|
||||||
break;
|
|
||||||
case GL_ONE:
|
|
||||||
blend_dst_string = @"GL_ONE";
|
|
||||||
break;
|
|
||||||
case GL_DST_COLOR:
|
|
||||||
blend_dst_string = @"GL_DST_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_SRC_COLOR:
|
|
||||||
blend_dst_string = @"GL_SRC_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_DST_COLOR:
|
|
||||||
blend_dst_string = @"GL_ONE_MINUS_DST_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_SRC_COLOR:
|
|
||||||
blend_dst_string = @"GL_ONE_MINUS_SRC_COLOR";
|
|
||||||
break;
|
|
||||||
case GL_SRC_ALPHA:
|
|
||||||
blend_dst_string = @"GL_SRC_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_DST_ALPHA:
|
|
||||||
blend_dst_string = @"GL_DST_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_SRC_ALPHA:
|
|
||||||
blend_dst_string = @"GL_ONE_MINUS_SRC_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_ONE_MINUS_DST_ALPHA:
|
|
||||||
blend_dst_string = @"GL_ONE_MINUS_DST_ALPHA";
|
|
||||||
break;
|
|
||||||
case GL_SRC_ALPHA_SATURATE:
|
|
||||||
blend_dst_string = @"GL_SRC_ALPHA_SATURATE";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
glGetIntegerv( GL_CULL_FACE_MODE, gl_cull_face_mode);
|
|
||||||
switch (gl_cull_face_mode[0])
|
|
||||||
{
|
|
||||||
case GL_BACK:
|
|
||||||
cull_face_mode_string = @"GL_BACK";
|
|
||||||
break;
|
|
||||||
case GL_FRONT:
|
|
||||||
cull_face_mode_string = @"GL_FRONT";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
glGetIntegerv( GL_FRONT_FACE, gl_front_face);
|
|
||||||
switch (gl_front_face[0])
|
|
||||||
{
|
|
||||||
case GL_CCW:
|
|
||||||
front_face_string = @"GL_CCW";
|
|
||||||
break;
|
|
||||||
case GL_CW:
|
|
||||||
front_face_string = @"GL_CW";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, gl_texture_env_mode);
|
|
||||||
switch (gl_texture_env_mode[0])
|
|
||||||
{
|
|
||||||
case GL_DECAL:
|
|
||||||
tex_env_mode_string = @"GL_DECAL";
|
|
||||||
break;
|
|
||||||
case GL_REPLACE:
|
|
||||||
tex_env_mode_string = @"GL_REPLACE";
|
|
||||||
break;
|
|
||||||
case GL_MODULATE:
|
|
||||||
tex_env_mode_string = @"GL_MODULATE";
|
|
||||||
break;
|
|
||||||
case GL_BLEND:
|
|
||||||
tex_env_mode_string = @"GL_BLEND";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
if ((errCode =glGetError()) != GL_NO_ERROR)
|
|
||||||
{
|
|
||||||
errString = gluErrorString(errCode);
|
|
||||||
OOLog(kOOLogOpenGLError, @"OpenGL error: '%s' (%u) in: %@", errString, errCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-- MATERIALS --*/
|
|
||||||
if ((stored_mat_ambient[0] != mat_ambient[0])||(stored_mat_ambient[1] != mat_ambient[1])||(stored_mat_ambient[2] != mat_ambient[2])||(stored_mat_ambient[3] != mat_ambient[2]))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_AMBIENT ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
mat_ambient[0], mat_ambient[1], mat_ambient[2], mat_ambient[3]);
|
|
||||||
if ((stored_mat_diffuse[0] != mat_diffuse[0])||(stored_mat_diffuse[1] != mat_diffuse[1])||(stored_mat_diffuse[2] != mat_diffuse[2])||(stored_mat_diffuse[3] != mat_diffuse[2]))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_DIFFUSE ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
mat_diffuse[0], mat_diffuse[1], mat_diffuse[2], mat_diffuse[3]);
|
|
||||||
if ((stored_mat_emission[0] != mat_emission[0])||(stored_mat_emission[1] != mat_emission[1])||(stored_mat_emission[2] != mat_emission[2])||(stored_mat_emission[3] != mat_emission[2]))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_EMISSION ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
mat_emission[0], mat_emission[1], mat_emission[2], mat_emission[3]);
|
|
||||||
if ((stored_mat_specular[0] != mat_specular[0])||(stored_mat_specular[1] != mat_specular[1])||(stored_mat_specular[2] != mat_specular[2])||(stored_mat_specular[3] != mat_specular[2]))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_SPECULAR ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
mat_specular[0], mat_specular[1], mat_specular[2], mat_specular[3]);
|
|
||||||
if (stored_mat_shininess[0] != mat_shininess[0])
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_SHININESS ( %.2ff)", mat_shininess[0]);
|
|
||||||
stored_mat_ambient[0] = mat_ambient[0]; stored_mat_ambient[1] = mat_ambient[1]; stored_mat_ambient[2] = mat_ambient[2]; stored_mat_ambient[3] = mat_ambient[3];
|
|
||||||
stored_mat_diffuse[0] = mat_diffuse[0]; stored_mat_diffuse[1] = mat_diffuse[1]; stored_mat_diffuse[2] = mat_diffuse[2]; stored_mat_diffuse[3] = mat_diffuse[3];
|
|
||||||
stored_mat_emission[0] = mat_emission[0]; stored_mat_emission[1] = mat_emission[1]; stored_mat_emission[2] = mat_emission[2]; stored_mat_emission[3] = mat_emission[3];
|
|
||||||
stored_mat_specular[0] = mat_specular[0]; stored_mat_specular[1] = mat_specular[1]; stored_mat_specular[2] = mat_specular[2]; stored_mat_specular[3] = mat_specular[3];
|
|
||||||
stored_mat_shininess[0] = mat_shininess[0];
|
|
||||||
/*-- MATERIALS --*/
|
|
||||||
|
|
||||||
//
|
|
||||||
/*-- LIGHTS --*/
|
|
||||||
if (glIsEnabled(GL_LIGHTING))
|
|
||||||
{
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHTING :ENABLED:");
|
|
||||||
if (glIsEnabled(GL_LIGHT0))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT0 :ENABLED:");
|
|
||||||
if (glIsEnabled(GL_LIGHT1))
|
|
||||||
{
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 :ENABLED:");
|
|
||||||
GLfloat light_ambient[4];
|
|
||||||
GLfloat light_diffuse[4];
|
|
||||||
GLfloat light_specular[4];
|
|
||||||
glGetLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);
|
|
||||||
glGetLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);
|
|
||||||
glGetLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 GL_AMBIENT ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
light_ambient[0], light_ambient[1], light_ambient[2], light_ambient[3]);
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 GL_DIFFUSE ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
light_diffuse[0], light_diffuse[1], light_diffuse[2], light_diffuse[3]);
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 GL_SPECULAR ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
light_specular[0], light_specular[1], light_specular[2], light_specular[3]);
|
|
||||||
}
|
|
||||||
if (glIsEnabled(GL_LIGHT2))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT2 :ENABLED:");
|
|
||||||
if (glIsEnabled(GL_LIGHT3))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT3 :ENABLED:");
|
|
||||||
if (glIsEnabled(GL_LIGHT4))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT4 :ENABLED:");
|
|
||||||
if (glIsEnabled(GL_LIGHT5))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT5 :ENABLED:");
|
|
||||||
if (glIsEnabled(GL_LIGHT6))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT6 :ENABLED:");
|
|
||||||
if (glIsEnabled(GL_LIGHT7))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT7 :ENABLED:");
|
|
||||||
}
|
|
||||||
/*-- LIGHTS --*/
|
|
||||||
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_CURRENT_COLOR ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
|
||||||
current_color[0], current_color[1], current_color[2], current_color[3]);
|
|
||||||
//
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_TEXTURE_ENV_MODE :%@:", tex_env_mode_string);
|
|
||||||
//
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_SHADEMODEL :%@:", (gl_shade_model[0] == GL_SMOOTH)? @"GL_SMOOTH": @"GL_FLAT");
|
|
||||||
//
|
|
||||||
if (glIsEnabled(GL_FOG))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_FOG :ENABLED:");
|
|
||||||
//
|
|
||||||
if (glIsEnabled(GL_COLOR_MATERIAL))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_COLOR_MATERIAL :ENABLED:");
|
|
||||||
//
|
|
||||||
if (glIsEnabled(GL_BLEND))
|
|
||||||
{
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_BLEND :ENABLED:");
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_BLEND_FUNC (:%@:, :%@:)", blend_src_string, blend_dst_string);
|
|
||||||
}
|
|
||||||
//
|
|
||||||
if (glIsEnabled(GL_CULL_FACE))
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_CULL_FACE :ENABLED:");
|
|
||||||
//
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_CULL_FACE_MODE :%@:", cull_face_mode_string);
|
|
||||||
//
|
|
||||||
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_FRONT_FACE :%@:", front_face_string);
|
|
||||||
}
|
|
||||||
|
|
||||||
// check for OpenGL errors, reporting them if where is not nil
|
|
||||||
//
|
|
||||||
BOOL CheckOpenGLErrors(NSString* where)
|
|
||||||
{
|
|
||||||
GLenum errCode;
|
|
||||||
const GLubyte *errString = NULL;
|
|
||||||
BOOL errorOccurred = NO;
|
|
||||||
|
|
||||||
// Short-circut here, because glGetError() is quite expensive.
|
|
||||||
if (OOLogWillDisplayMessagesInClass(kOOLogOpenGLError))
|
|
||||||
{
|
|
||||||
errCode = glGetError();
|
|
||||||
|
|
||||||
if (errCode != GL_NO_ERROR)
|
|
||||||
{
|
|
||||||
errorOccurred = YES;
|
|
||||||
errString = gluErrorString(errCode);
|
|
||||||
if (where == nil) where = @"<unknown>";
|
|
||||||
|
|
||||||
OOLog(kOOLogOpenGLError, @"OpenGL error: '%s' (%u) in: %@", errString, errCode, where);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return errorOccurred;
|
|
||||||
}
|
|
||||||
|
|
||||||
// keep track of various OpenGL states
|
|
||||||
//
|
|
||||||
static BOOL mygl_texture_2d;
|
|
||||||
|
|
||||||
void my_glEnable(GLenum gl_state)
|
|
||||||
{
|
|
||||||
switch (gl_state)
|
|
||||||
{
|
|
||||||
case GL_TEXTURE_2D:
|
|
||||||
if (mygl_texture_2d)
|
|
||||||
return;
|
|
||||||
mygl_texture_2d = YES;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
glEnable(gl_state);
|
|
||||||
}
|
|
||||||
//
|
|
||||||
void my_glDisable(GLenum gl_state)
|
|
||||||
{
|
|
||||||
switch (gl_state)
|
|
||||||
{
|
|
||||||
case GL_TEXTURE_2D:
|
|
||||||
if (!mygl_texture_2d)
|
|
||||||
return;
|
|
||||||
mygl_texture_2d = NO;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
glDisable(gl_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static NSString * const kOOCacheMeshes = @"OOMesh";
|
static NSString * const kOOCacheMeshes = @"OOMesh";
|
||||||
|
|
||||||
@implementation OOCacheManager (OOMesh)
|
@implementation OOCacheManager (OOMesh)
|
||||||
@ -1602,7 +1256,6 @@ static NSString * const kOOCacheMeshes = @"OOMesh";
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static NSString * const kOOCacheOctrees = @"octrees";
|
static NSString * const kOOCacheOctrees = @"octrees";
|
||||||
|
|
||||||
@implementation OOCacheManager (Octree)
|
@implementation OOCacheManager (Octree)
|
||||||
|
@ -4,6 +4,9 @@ OOOpenGL.h
|
|||||||
|
|
||||||
Do whatever is appropriate to get gl.h, glu.h and glext.h included.
|
Do whatever is appropriate to get gl.h, glu.h and glext.h included.
|
||||||
|
|
||||||
|
Also declares OpenGL-related utility functions.
|
||||||
|
|
||||||
|
|
||||||
Oolite
|
Oolite
|
||||||
Copyright (C) 2004-2007 Giles C Williams and contributors
|
Copyright (C) 2004-2007 Giles C Williams and contributors
|
||||||
|
|
||||||
@ -74,3 +77,18 @@ typedef uintptr_t OOOpenGLContext; // Opaque context identifier
|
|||||||
|
|
||||||
|
|
||||||
#define NULL_SHADER ((GLhandleARB)0)
|
#define NULL_SHADER ((GLhandleARB)0)
|
||||||
|
|
||||||
|
|
||||||
|
/* CheckOpenGLErrors()
|
||||||
|
Check for and log OpenGL errors, and returns YES if an error occurred.
|
||||||
|
NOTE: this is controlled by the log message class rendering.opengl.error.
|
||||||
|
If logging is disabled, no error checking will occur. This is done
|
||||||
|
because glGetError() is quite expensive, requiring a full OpenGL
|
||||||
|
state sync.
|
||||||
|
*/
|
||||||
|
BOOL CheckOpenGLErrors(NSString *format, ...);
|
||||||
|
|
||||||
|
/* LogOpenGLState()
|
||||||
|
Write a bunch of OpenGL state information to the log.
|
||||||
|
*/
|
||||||
|
void LogOpenGLState(void);
|
||||||
|
325
src/Core/OOOpenGL.m
Normal file
325
src/Core/OOOpenGL.m
Normal file
@ -0,0 +1,325 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
OOOpenGL.m
|
||||||
|
|
||||||
|
Oolite
|
||||||
|
Copyright (C) 2004-2007 Giles C Williams and contributors
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "OOOpenGL.h"
|
||||||
|
#import "OOLogging.h"
|
||||||
|
|
||||||
|
|
||||||
|
static NSString * const kOOLogOpenGLStateDump = @"rendering.opengl.stateDump";
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CheckOpenGLErrors(NSString *format, ...)
|
||||||
|
{
|
||||||
|
GLenum errCode;
|
||||||
|
const GLubyte *errString = NULL;
|
||||||
|
BOOL errorOccurred = NO;
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
// Short-circut here, because glGetError() is quite expensive.
|
||||||
|
if (OOLogWillDisplayMessagesInClass(kOOLogOpenGLError))
|
||||||
|
{
|
||||||
|
errCode = glGetError();
|
||||||
|
|
||||||
|
if (errCode != GL_NO_ERROR)
|
||||||
|
{
|
||||||
|
errorOccurred = YES;
|
||||||
|
errString = gluErrorString(errCode);
|
||||||
|
if (format == nil) format = @"<unknown>";
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
format = [[NSString alloc] initWithFormat:format arguments:args];
|
||||||
|
va_end(args);
|
||||||
|
OOLog(kOOLogOpenGLError, @"OpenGL error: \"%s\" (%u), context: %@", errString, errCode, format);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errorOccurred;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static GLfloat stored_mat_ambient[4];
|
||||||
|
static GLfloat stored_mat_diffuse[4];
|
||||||
|
static GLfloat stored_mat_emission[4];
|
||||||
|
static GLfloat stored_mat_specular[4];
|
||||||
|
static GLfloat stored_mat_shininess[1];
|
||||||
|
|
||||||
|
|
||||||
|
void LogOpenGLState()
|
||||||
|
{
|
||||||
|
if (!OOLogWillDisplayMessagesInClass(kOOLogOpenGLStateDump)) return;
|
||||||
|
|
||||||
|
// we need to report on the material properties
|
||||||
|
GLfloat mat_ambient[4];
|
||||||
|
GLfloat mat_diffuse[4];
|
||||||
|
GLfloat mat_emission[4];
|
||||||
|
GLfloat mat_specular[4];
|
||||||
|
GLfloat mat_shininess[1];
|
||||||
|
//
|
||||||
|
GLfloat current_color[4];
|
||||||
|
//
|
||||||
|
GLint gl_shade_model[1];
|
||||||
|
//
|
||||||
|
GLint gl_texture_env_mode[1];
|
||||||
|
NSString* tex_env_mode_string = nil;
|
||||||
|
//
|
||||||
|
GLint gl_cull_face_mode[1];
|
||||||
|
NSString* cull_face_mode_string = nil;
|
||||||
|
//
|
||||||
|
GLint gl_front_face[1];
|
||||||
|
NSString* front_face_string = nil;
|
||||||
|
//
|
||||||
|
GLint gl_blend_src[1];
|
||||||
|
NSString* blend_src_string = nil;
|
||||||
|
GLint gl_blend_dst[1];
|
||||||
|
NSString* blend_dst_string = nil;
|
||||||
|
//
|
||||||
|
GLenum errCode;
|
||||||
|
const GLubyte *errString;
|
||||||
|
|
||||||
|
glGetMaterialfv( GL_FRONT, GL_AMBIENT, mat_ambient);
|
||||||
|
glGetMaterialfv( GL_FRONT, GL_DIFFUSE, mat_diffuse);
|
||||||
|
glGetMaterialfv( GL_FRONT, GL_EMISSION, mat_emission);
|
||||||
|
glGetMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular);
|
||||||
|
glGetMaterialfv( GL_FRONT, GL_SHININESS, mat_shininess);
|
||||||
|
//
|
||||||
|
glGetFloatv( GL_CURRENT_COLOR, current_color);
|
||||||
|
//
|
||||||
|
glGetIntegerv( GL_SHADE_MODEL, gl_shade_model);
|
||||||
|
//
|
||||||
|
glGetIntegerv( GL_BLEND_SRC, gl_blend_src);
|
||||||
|
switch (gl_blend_src[0])
|
||||||
|
{
|
||||||
|
case GL_ZERO:
|
||||||
|
blend_src_string = @"GL_ZERO";
|
||||||
|
break;
|
||||||
|
case GL_ONE:
|
||||||
|
blend_src_string = @"GL_ONE";
|
||||||
|
break;
|
||||||
|
case GL_DST_COLOR:
|
||||||
|
blend_src_string = @"GL_DST_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_SRC_COLOR:
|
||||||
|
blend_src_string = @"GL_SRC_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_DST_COLOR:
|
||||||
|
blend_src_string = @"GL_ONE_MINUS_DST_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_SRC_COLOR:
|
||||||
|
blend_src_string = @"GL_ONE_MINUS_SRC_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_SRC_ALPHA:
|
||||||
|
blend_src_string = @"GL_SRC_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_DST_ALPHA:
|
||||||
|
blend_src_string = @"GL_DST_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_SRC_ALPHA:
|
||||||
|
blend_src_string = @"GL_ONE_MINUS_SRC_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_DST_ALPHA:
|
||||||
|
blend_src_string = @"GL_ONE_MINUS_DST_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_SRC_ALPHA_SATURATE:
|
||||||
|
blend_src_string = @"GL_SRC_ALPHA_SATURATE";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
glGetIntegerv( GL_BLEND_DST, gl_blend_dst);
|
||||||
|
switch (gl_blend_dst[0])
|
||||||
|
{
|
||||||
|
case GL_ZERO:
|
||||||
|
blend_dst_string = @"GL_ZERO";
|
||||||
|
break;
|
||||||
|
case GL_ONE:
|
||||||
|
blend_dst_string = @"GL_ONE";
|
||||||
|
break;
|
||||||
|
case GL_DST_COLOR:
|
||||||
|
blend_dst_string = @"GL_DST_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_SRC_COLOR:
|
||||||
|
blend_dst_string = @"GL_SRC_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_DST_COLOR:
|
||||||
|
blend_dst_string = @"GL_ONE_MINUS_DST_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_SRC_COLOR:
|
||||||
|
blend_dst_string = @"GL_ONE_MINUS_SRC_COLOR";
|
||||||
|
break;
|
||||||
|
case GL_SRC_ALPHA:
|
||||||
|
blend_dst_string = @"GL_SRC_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_DST_ALPHA:
|
||||||
|
blend_dst_string = @"GL_DST_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_SRC_ALPHA:
|
||||||
|
blend_dst_string = @"GL_ONE_MINUS_SRC_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_ONE_MINUS_DST_ALPHA:
|
||||||
|
blend_dst_string = @"GL_ONE_MINUS_DST_ALPHA";
|
||||||
|
break;
|
||||||
|
case GL_SRC_ALPHA_SATURATE:
|
||||||
|
blend_dst_string = @"GL_SRC_ALPHA_SATURATE";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
glGetIntegerv( GL_CULL_FACE_MODE, gl_cull_face_mode);
|
||||||
|
switch (gl_cull_face_mode[0])
|
||||||
|
{
|
||||||
|
case GL_BACK:
|
||||||
|
cull_face_mode_string = @"GL_BACK";
|
||||||
|
break;
|
||||||
|
case GL_FRONT:
|
||||||
|
cull_face_mode_string = @"GL_FRONT";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
glGetIntegerv( GL_FRONT_FACE, gl_front_face);
|
||||||
|
switch (gl_front_face[0])
|
||||||
|
{
|
||||||
|
case GL_CCW:
|
||||||
|
front_face_string = @"GL_CCW";
|
||||||
|
break;
|
||||||
|
case GL_CW:
|
||||||
|
front_face_string = @"GL_CW";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, gl_texture_env_mode);
|
||||||
|
switch (gl_texture_env_mode[0])
|
||||||
|
{
|
||||||
|
case GL_DECAL:
|
||||||
|
tex_env_mode_string = @"GL_DECAL";
|
||||||
|
break;
|
||||||
|
case GL_REPLACE:
|
||||||
|
tex_env_mode_string = @"GL_REPLACE";
|
||||||
|
break;
|
||||||
|
case GL_MODULATE:
|
||||||
|
tex_env_mode_string = @"GL_MODULATE";
|
||||||
|
break;
|
||||||
|
case GL_BLEND:
|
||||||
|
tex_env_mode_string = @"GL_BLEND";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if ((errCode =glGetError()) != GL_NO_ERROR)
|
||||||
|
{
|
||||||
|
errString = gluErrorString(errCode);
|
||||||
|
OOLog(kOOLogOpenGLError, @"OpenGL error: '%s' (%u) in: %@", errString, errCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-- MATERIALS --*/
|
||||||
|
if ((stored_mat_ambient[0] != mat_ambient[0])||(stored_mat_ambient[1] != mat_ambient[1])||(stored_mat_ambient[2] != mat_ambient[2])||(stored_mat_ambient[3] != mat_ambient[2]))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_AMBIENT ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
mat_ambient[0], mat_ambient[1], mat_ambient[2], mat_ambient[3]);
|
||||||
|
if ((stored_mat_diffuse[0] != mat_diffuse[0])||(stored_mat_diffuse[1] != mat_diffuse[1])||(stored_mat_diffuse[2] != mat_diffuse[2])||(stored_mat_diffuse[3] != mat_diffuse[2]))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_DIFFUSE ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
mat_diffuse[0], mat_diffuse[1], mat_diffuse[2], mat_diffuse[3]);
|
||||||
|
if ((stored_mat_emission[0] != mat_emission[0])||(stored_mat_emission[1] != mat_emission[1])||(stored_mat_emission[2] != mat_emission[2])||(stored_mat_emission[3] != mat_emission[2]))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_EMISSION ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
mat_emission[0], mat_emission[1], mat_emission[2], mat_emission[3]);
|
||||||
|
if ((stored_mat_specular[0] != mat_specular[0])||(stored_mat_specular[1] != mat_specular[1])||(stored_mat_specular[2] != mat_specular[2])||(stored_mat_specular[3] != mat_specular[2]))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_SPECULAR ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
mat_specular[0], mat_specular[1], mat_specular[2], mat_specular[3]);
|
||||||
|
if (stored_mat_shininess[0] != mat_shininess[0])
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_SHININESS ( %.2ff)", mat_shininess[0]);
|
||||||
|
stored_mat_ambient[0] = mat_ambient[0]; stored_mat_ambient[1] = mat_ambient[1]; stored_mat_ambient[2] = mat_ambient[2]; stored_mat_ambient[3] = mat_ambient[3];
|
||||||
|
stored_mat_diffuse[0] = mat_diffuse[0]; stored_mat_diffuse[1] = mat_diffuse[1]; stored_mat_diffuse[2] = mat_diffuse[2]; stored_mat_diffuse[3] = mat_diffuse[3];
|
||||||
|
stored_mat_emission[0] = mat_emission[0]; stored_mat_emission[1] = mat_emission[1]; stored_mat_emission[2] = mat_emission[2]; stored_mat_emission[3] = mat_emission[3];
|
||||||
|
stored_mat_specular[0] = mat_specular[0]; stored_mat_specular[1] = mat_specular[1]; stored_mat_specular[2] = mat_specular[2]; stored_mat_specular[3] = mat_specular[3];
|
||||||
|
stored_mat_shininess[0] = mat_shininess[0];
|
||||||
|
/*-- MATERIALS --*/
|
||||||
|
|
||||||
|
//
|
||||||
|
/*-- LIGHTS --*/
|
||||||
|
if (glIsEnabled(GL_LIGHTING))
|
||||||
|
{
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHTING :ENABLED:");
|
||||||
|
if (glIsEnabled(GL_LIGHT0))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT0 :ENABLED:");
|
||||||
|
if (glIsEnabled(GL_LIGHT1))
|
||||||
|
{
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 :ENABLED:");
|
||||||
|
GLfloat light_ambient[4];
|
||||||
|
GLfloat light_diffuse[4];
|
||||||
|
GLfloat light_specular[4];
|
||||||
|
glGetLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);
|
||||||
|
glGetLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);
|
||||||
|
glGetLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 GL_AMBIENT ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
light_ambient[0], light_ambient[1], light_ambient[2], light_ambient[3]);
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 GL_DIFFUSE ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
light_diffuse[0], light_diffuse[1], light_diffuse[2], light_diffuse[3]);
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT1 GL_SPECULAR ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
light_specular[0], light_specular[1], light_specular[2], light_specular[3]);
|
||||||
|
}
|
||||||
|
if (glIsEnabled(GL_LIGHT2))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT2 :ENABLED:");
|
||||||
|
if (glIsEnabled(GL_LIGHT3))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT3 :ENABLED:");
|
||||||
|
if (glIsEnabled(GL_LIGHT4))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT4 :ENABLED:");
|
||||||
|
if (glIsEnabled(GL_LIGHT5))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT5 :ENABLED:");
|
||||||
|
if (glIsEnabled(GL_LIGHT6))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT6 :ENABLED:");
|
||||||
|
if (glIsEnabled(GL_LIGHT7))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_LIGHT7 :ENABLED:");
|
||||||
|
}
|
||||||
|
/*-- LIGHTS --*/
|
||||||
|
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_CURRENT_COLOR ( %.2ff, %.2ff, %.2ff, %.2ff)",
|
||||||
|
current_color[0], current_color[1], current_color[2], current_color[3]);
|
||||||
|
//
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_TEXTURE_ENV_MODE :%@:", tex_env_mode_string);
|
||||||
|
//
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_SHADEMODEL :%@:", (gl_shade_model[0] == GL_SMOOTH)? @"GL_SMOOTH": @"GL_FLAT");
|
||||||
|
//
|
||||||
|
if (glIsEnabled(GL_FOG))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_FOG :ENABLED:");
|
||||||
|
//
|
||||||
|
if (glIsEnabled(GL_COLOR_MATERIAL))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_COLOR_MATERIAL :ENABLED:");
|
||||||
|
//
|
||||||
|
if (glIsEnabled(GL_BLEND))
|
||||||
|
{
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_BLEND :ENABLED:");
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_BLEND_FUNC (:%@:, :%@:)", blend_src_string, blend_dst_string);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if (glIsEnabled(GL_CULL_FACE))
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_CULL_FACE :ENABLED:");
|
||||||
|
//
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_CULL_FACE_MODE :%@:", cull_face_mode_string);
|
||||||
|
//
|
||||||
|
OOLog(kOOLogOpenGLStateDump, @"OPENGL_DEBUG GL_FRONT_FACE :%@:", front_face_string);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user