diff options
Diffstat (limited to 'source/gameengine/Rasterizer/RAS_OpenGLRasterizer')
4 files changed, 46 insertions, 6 deletions
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp index 2c7112e2e3c..26727b1d1e4 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp @@ -265,7 +265,10 @@ bool QueryVersion(int major, int minor) if (gl_major == 0) { - STR_String gl_version = STR_String((const char *) glGetString(GL_VERSION)); + const char *gl_version_str = (const char *) glGetString(GL_VERSION); + if (!gl_version_str) + return false; + STR_String gl_version = STR_String(gl_version_str); int i = gl_version.Find('.'); gl_major = gl_version.Left(i).ToInt(); gl_minor = gl_version.Mid(i+1, gl_version.FindOneOf(". ", i+1) - i - 1).ToInt(); @@ -308,6 +311,11 @@ to their source. Cunning like a weasel. ******************************************************************************/ +#if defined(GL_ATI_pn_triangles) +PFNGLPNTRIANGLESIATIPROC glPNTrianglesiATI; +PFNGLPNTRIANGLESFATIPROC glPNTrianglesfATI; +#endif + } // namespace bgl @@ -327,6 +335,28 @@ static void LinkExtensions() static bool doDebugMessages = m_debug; extensions = STR_String((const char *) glGetString(GL_EXTENSIONS)).Explode(' '); +#if defined(GL_ATI_pn_triangles) + if (QueryExtension("GL_ATI_pn_triangles")) + { + glPNTrianglesiATI = reinterpret_cast<PFNGLPNTRIANGLESIATIPROC>(bglGetProcAddress((const GLubyte *) "glPNTrianglesiATI")); + glPNTrianglesfATI = reinterpret_cast<PFNGLPNTRIANGLESFATIPROC>(bglGetProcAddress((const GLubyte *) "glPNTrianglesfATI")); + if (glPNTrianglesiATI && glPNTrianglesfATI) { + EnableExtension(_GL_ATI_pn_triangles); + if (doDebugMessages) + std::cout << "Enabled GL_ATI_pn_triangles" << std::endl; + } else { + std::cout << "ERROR: GL_ATI_pn_triangles implementation is broken!" << std::endl; + } + } +#endif + + if (QueryExtension("GL_EXT_separate_specular_color")) + { + EnableExtension(_GL_EXT_separate_specular_color); + if (doDebugMessages) + std::cout << "Detected GL_EXT_separate_specular_color" << std::endl; + } + doDebugMessages = false; } diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h index 50a67ee7d6b..e43912ec2a5 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h @@ -38,6 +38,7 @@ #include <GL/gl.h> #endif +#include "EXT_separate_specular_color.h" namespace bgl { @@ -363,8 +364,12 @@ namespace bgl */ void InitExtensions(int debug); - +#if defined(GL_ATI_pn_triangles) +extern PFNGLPNTRIANGLESIATIPROC glPNTrianglesiATI; +extern PFNGLPNTRIANGLESFATIPROC glPNTrianglesfATI; +#endif } /* namespace bgl */ + #endif /* __RAS_GLEXTENSIONMANAGER_H__ */ diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp index 3e93a7a74b9..4cf930072c5 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp @@ -48,6 +48,8 @@ #include "MT_CmMatrix4x4.h" #include "RAS_IRenderTools.h" // rendering text +#include "RAS_GLExtensionManager.h" + RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_ICanvas* canvas) :RAS_IRasterizer(canvas), @@ -126,6 +128,7 @@ static void Myinit_gl_stuff(void) } glPolygonStipple(patc); + } @@ -264,6 +267,8 @@ void RAS_OpenGLRasterizer::Exit() glBlendFunc(GL_ONE, GL_ZERO); glDisable(GL_LIGHTING); + if (bgl::QueryExtension(bgl::_GL_EXT_separate_specular_color) || bgl::QueryVersion(1, 2)) + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); EndFrame(); } diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/mkglext.py b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/mkglext.py index 912b4785da1..8e64ecd1741 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/mkglext.py +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/mkglext.py @@ -468,7 +468,7 @@ for i in glext_h: fns = [] fnlist = [] if (ext != ""): - line = re.search('.*(gl.*) \(.*\);', i) + line = re.search('.* (gl.*) \(.*\);', i) if (line): fns += [line.group(1)] line = re.search('.*PFN(.*)PROC.*', i) @@ -501,7 +501,7 @@ for i in glext_h: fns = [] fnlist = [] if (ext != ""): - line = re.search('.*(gl.*) \(.*\);', i) + line = re.search('.* (gl.*) \(.*\);', i) if (line): fns += [line.group(1)] line = re.search('.*PFN(.*)PROC.*', i) @@ -534,7 +534,7 @@ for i in glext_h: fns = [] fnlist = [] if (ext != ""): - line = re.search('.*(gl.*) \(.*\);', i) + line = re.search('.* (gl.*) \(.*\);', i) if (line): fns += [line.group(1)] line = re.search('.*PFN(.*)PROC.*', i) @@ -578,7 +578,7 @@ for i in glext_h: if (line): defines += [(line.group(1), line.group(2))] - line = re.search('(.*)(gl.*)(\(.*\));', i) # GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); + line = re.search('(.* )(gl.*)(\(.*\));', i) # GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); if (line): fns += [(line.group(1), line.group(2), line.group(3))] |