|
From: <cn...@us...> - 2009-07-08 05:27:15
|
Revision: 416
http://hgengine.svn.sourceforge.net/hgengine/?rev=416&view=rev
Author: cnlohr
Date: 2009-07-08 05:27:14 +0000 (Wed, 08 Jul 2009)
Log Message:
-----------
remove need for freeglut on Linux, and enable compilation and running on systems missing the not-universal
glProgramParameteriEXT function.
Modified Paths:
--------------
Mercury2/src/GLHeaders.h
Mercury2/src/Shader.cpp
Modified: Mercury2/src/GLHeaders.h
===================================================================
--- Mercury2/src/GLHeaders.h 2009-07-08 05:25:47 UTC (rev 415)
+++ Mercury2/src/GLHeaders.h 2009-07-08 05:27:14 UTC (rev 416)
@@ -15,7 +15,7 @@
#include <OGLExtensions.h>
#else
#include <GL/glext.h>
-#include <GL/freeglut.h>
+#include <GL/glu.h>
#endif
#include <GLHelpers.h>
@@ -34,4 +34,4 @@
assert(0); } }
-#endif
\ No newline at end of file
+#endif
Modified: Mercury2/src/Shader.cpp
===================================================================
--- Mercury2/src/Shader.cpp 2009-07-08 05:25:47 UTC (rev 415)
+++ Mercury2/src/Shader.cpp 2009-07-08 05:27:14 UTC (rev 416)
@@ -5,12 +5,20 @@
#include <GLHeaders.h>
#include <string.h>
+//Because we need to dynamically check for glProgramParameteriEXT, even in Linux.
+#include <GL/glx.h>
+
using namespace std;
REGISTER_ASSET_TYPE( Shader );
Shader * Shader::CurrentShader = NULL;
+//On many GL Implementations, this is super wonky.
+//It may not even exist at all, so we make it optional.
+bool IsCustomGLProgramParISet = false;
+PFNGLPROGRAMPARAMETERIEXTPROC CustomGLProgramParI;
+
ShaderAttribute * ShaderAttributesSet::GetHandle( const MString & sName )
{
ShaderAttribute * ret = m_AllShaderAttributes[sName];
@@ -31,6 +39,16 @@
iTimeCode[0] = 0;
iTimeCode[1] = 0;
iTimeCode[2] = 0;
+
+#ifdef WIN32
+ CustomGLProgramParI = glProgramParameteriEXT;
+#else
+ if( !IsCustomGLProgramParISet )
+ {
+ CustomGLProgramParI = (PFNGLPROGRAMPARAMETERIEXTPROC)glXGetProcAddress( (GLubyte*)"glProgramParameteriEXT" );
+ IsCustomGLProgramParISet = true;
+ }
+#endif
}
Shader::~Shader()
@@ -272,10 +290,10 @@
glLinkProgramARB( iProgramID );
//If we're using a geometry shader, we have to do a little extra.
- if( geometryShader )
+ if( CustomGLProgramParI && geometryShader )
{
- glProgramParameteriEXT( iProgramID, GL_GEOMETRY_INPUT_TYPE_EXT, GL_TRIANGLES );
- glProgramParameteriEXT( iProgramID, GL_GEOMETRY_OUTPUT_TYPE_EXT, GL_TRIANGLE_STRIP );
+ CustomGLProgramParI( iProgramID, GL_GEOMETRY_INPUT_TYPE_EXT, GL_TRIANGLES );
+ CustomGLProgramParI( iProgramID, GL_GEOMETRY_OUTPUT_TYPE_EXT, GL_TRIANGLE_STRIP );
int ierror, i;
GLint imaxvert;
@@ -288,7 +306,7 @@
}
for( i = 1; i < imaxvert; i++ )
{
- glProgramParameteriEXT(iProgramID,GL_GEOMETRY_VERTICES_OUT_EXT,imaxvert/i);
+ CustomGLProgramParI(iProgramID,GL_GEOMETRY_VERTICES_OUT_EXT,imaxvert/i);
if( glGetError() == 0 )
break;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|