Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/Rasterizer/RAS_OpenGLRasterizer')
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp32
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h7
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp5
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/mkglext.py8
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))]