diff options
Diffstat (limited to 'source/gameengine')
32 files changed, 975 insertions, 713 deletions
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index 028dcbe4601..4dbddaf2d62 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -42,6 +42,10 @@ #pragma warning (disable:4786) #endif +#ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 +#endif + #include "KX_BlenderGL.h" #include "KX_BlenderCanvas.h" #include "KX_BlenderKeyboardDevice.h" diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp index a100c3aaa0a..8f93ad1a0aa 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp @@ -36,6 +36,7 @@ #include <windows.h> #endif //WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #else #include <GL/gl.h> diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp index 113556f0b11..ee47f86157e 100644 --- a/source/gameengine/Converter/BL_ActionActuator.cpp +++ b/source/gameengine/Converter/BL_ActionActuator.cpp @@ -168,16 +168,16 @@ bool BL_ActionActuator::Update(double curtime, bool frame) // maybe there are events for us in the queue ! if (frame) { - for (vector<CValue*>::iterator i=m_events.end(); !(i==m_events.begin());) + for (vector<CValue*>::iterator i=m_events.begin(); !(i==m_events.end());i++) { - i--; if ((*i)->GetNumber() == 0.0f) bNegativeEvent = true; else bPositiveEvent= true; (*i)->Release(); - m_events.pop_back(); + } + m_events.clear(); if (bPositiveEvent) m_flag |= ACT_FLAG_ACTIVE; diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index a2801db7069..10d5e65ed9f 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -352,7 +352,7 @@ BL_Material* ConvertMaterial( Mesh* mesh, Material *mat, TFace* tface, MFace* material->flag[i] |= ( tface->transp &TF_ADD )?CALCALPHA:0; material->ras_mode|= ( tface->transp &(TF_ADD | TF_ALPHA))?TRANSP:0; material->mapping[i].mapping |= ( (material->img[i]->flag & IMA_REFLECT)!=0 )?USEREFL:0; - material->blend_mode[i] = BLEND_MUL; + //material->blend_mode[i] = BLEND_MUL; i++;// skip to the next image valid_index++; } @@ -371,12 +371,13 @@ BL_Material* ConvertMaterial( Mesh* mesh, Material *mat, TFace* tface, MFace* // ----------------------- if( mttmp->tex->imaflag &TEX_USEALPHA ) { material->flag[i] |= USEALPHA; - material->ras_mode |= TRANSP; } // ----------------------- else if( mttmp->tex->imaflag &TEX_CALCALPHA ) { material->flag[i] |= CALCALPHA; - material->ras_mode |= TRANSP; + } + else if(mttmp->tex->flag &TEX_NEGALPHA) { + material->flag[i] |= USENEGALPHA; } material->color_blend[i] = mttmp->colfac; @@ -845,8 +846,10 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* // ----------------------------------- // pre calculate texture generation - for(int matid=0; matid<meshobj->NumMaterials(); matid++) - meshobj->GetMaterialBucket(matid)->GetPolyMaterial()->OnConstruction(); + for(RAS_MaterialBucket::Set::iterator mit = meshobj->GetFirstMaterial(); + mit != meshobj->GetLastMaterial(); ++ mit) { + (*mit)->GetPolyMaterial()->OnConstruction(); + } // ----------------------------------- diff --git a/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp b/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp index dc714fb5fb6..9cad9fcf932 100644 --- a/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp +++ b/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp @@ -38,6 +38,7 @@ #include <windows.h> #endif // WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp index 3d81046e8e9..9bc01e1408e 100644 --- a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp +++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp @@ -38,6 +38,7 @@ #endif #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #else #include <GL/gl.h> diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index c5324776edb..2ab98750881 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -41,6 +41,7 @@ #endif #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else diff --git a/source/gameengine/Ketsji/BL_Material.h b/source/gameengine/Ketsji/BL_Material.h index 0b8856690d4..cf753414245 100644 --- a/source/gameengine/Ketsji/BL_Material.h +++ b/source/gameengine/Ketsji/BL_Material.h @@ -112,7 +112,8 @@ enum BL_flag USEALPHA=4, // use actual alpha channel TEXALPHA=8, // use alpha combiner functions TEXNEG=16, // negate blending - HASIPO=32 + HASIPO=32, + USENEGALPHA=64 }; // BL_Material::ras_mode diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp index 7e0b6df3a3a..4c41101b462 100644 --- a/source/gameengine/Ketsji/BL_Shader.cpp +++ b/source/gameengine/Ketsji/BL_Shader.cpp @@ -3,6 +3,7 @@ #include <windows.h> #endif // WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else @@ -31,7 +32,7 @@ const bool BL_Shader::Ok()const return (mShader !=0 && mOk && mUse); } -BL_Shader::BL_Shader(int n, PyTypeObject *T) +BL_Shader::BL_Shader(PyTypeObject *T) : PyObjectPlus(T), mShader(0), mVert(0), @@ -40,19 +41,14 @@ BL_Shader::BL_Shader(int n, PyTypeObject *T) mOk(0), mUse(0), vertProg(""), - fragProg("") + fragProg(""), + mError(0), + mLog(0) + { // if !RAS_EXT_support._ARB_shader_objects this class will not be used - mBlending.src = -1; - mBlending.dest = -1; - mBlending.const_color[0] = 0.0; - mBlending.const_color[1] = 0.0; - mBlending.const_color[2] = 0.0; - mBlending.const_color[3] = 1.0; - - for (int i=0; i<MAXTEX; i++) - { + for (int i=0; i<MAXTEX; i++) { mSampler[i].type = 0; mSampler[i].pass = 0; mSampler[i].unit = -1; @@ -66,16 +62,20 @@ using namespace bgl; BL_Shader::~BL_Shader() { #ifdef GL_ARB_shader_objects + if(mLog) { + MEM_freeN(mLog); + mLog=0; + } if( mShader ) { - glDeleteObjectARB(mShader); + bgl::blDeleteObjectARB(mShader); mShader = 0; } if( mFrag ) { - glDeleteObjectARB(mFrag); + bgl::blDeleteObjectARB(mFrag); mFrag = 0; } if( mVert ) { - glDeleteObjectARB(mVert); + bgl::blDeleteObjectARB(mVert); mVert = 0; } @@ -83,7 +83,7 @@ BL_Shader::~BL_Shader() fragProg = 0; mOk = 0; - glUseProgramObjectARB(0); + bgl::blUseProgramObjectARB(0); #endif//GL_ARB_shader_objects } @@ -91,68 +91,74 @@ BL_Shader::~BL_Shader() bool BL_Shader::LinkProgram() { #ifdef GL_ARB_shader_objects - int numchars=0; - char* log=0; + int vertlen = 0, fraglen=0, proglen=0; + int vertstatus=0, fragstatus=0, progstatus=0; + unsigned int tmpVert=0, tmpFrag=0, tmpProg=0; + int char_len=0; + + if(mError) + goto programError; if(!vertProg || !fragProg){ spit("Invalid GLSL sources"); return false; } - - // create our objects - unsigned int tmpVert = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); - unsigned int tmpFrag = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); - unsigned int tmpProg = glCreateProgramObjectARB(); - - if(!tmpVert || !tmpFrag || !tmpProg){ - glDeleteObjectARB(tmpVert); - glDeleteObjectARB(tmpFrag); - glDeleteObjectARB(tmpProg); + if( !RAS_EXT_support._ARB_fragment_shader) { + spit("Fragment shaders not supported"); return false; } - // set/compile vertex shader - glShaderSourceARB(tmpVert, 1, (const char**)&vertProg, 0); - glCompileShaderARB(tmpVert); - glGetObjectParameterivARB(tmpVert, GL_OBJECT_INFO_LOG_LENGTH_ARB, &vertlen); - - if( vertlen > 0 && !PrintInfo(vertlen,tmpVert, "Vertex Shader") ){ - spit("Vertex shader failed"); - glDeleteObjectARB(tmpVert); - glDeleteObjectARB(tmpFrag); - glDeleteObjectARB(tmpProg); - mOk = 0; + if( !RAS_EXT_support._ARB_vertex_shader) { + spit("Vertex shaders not supported"); return false; } - // set/compile fragment shader - glShaderSourceARB(tmpFrag, 1,(const char**)&fragProg, 0); - glCompileShaderARB(tmpFrag); - glGetObjectParameterivARB(tmpFrag, GL_OBJECT_INFO_LOG_LENGTH_ARB, &fraglen); - if(fraglen >0 && !PrintInfo(fraglen,tmpFrag, "Fragment Shader") ){ - spit("Fragment shader failed"); - glDeleteObjectARB(tmpVert); - glDeleteObjectARB(tmpFrag); - glDeleteObjectARB(tmpProg); - mOk = 0; - return false; + + // -- vertex shader ------------------ + tmpVert = bgl::blCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); + bgl::blShaderSourceARB(tmpVert, 1, (const char**)&vertProg, 0); + bgl::blCompileShaderARB(tmpVert); + bgl::blGetObjectParameterivARB(tmpVert, GL_OBJECT_INFO_LOG_LENGTH_ARB, &vertlen); + // print info if any + if( vertlen > 1){ + PrintInfo(vertlen,tmpVert, &char_len); + goto programError; } - - // set compiled vert/frag shader & link - glAttachObjectARB(tmpProg, tmpVert); - glAttachObjectARB(tmpProg, tmpFrag); - glLinkProgramARB(tmpProg); - - glGetObjectParameterivARB(tmpProg, GL_OBJECT_INFO_LOG_LENGTH_ARB, &proglen); - if(proglen > 0){ - PrintInfo(proglen,tmpProg, "GLSL Shader"); + // check for compile errors + bgl::blGetObjectParameterivARB(tmpVert, GL_OBJECT_COMPILE_STATUS_ARB, &vertstatus); + if(!vertstatus) + goto programError; + + // -- fragment shader ---------------- + tmpFrag = bgl::blCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); + bgl::blShaderSourceARB(tmpFrag, 1,(const char**)&fragProg, 0); + bgl::blCompileShaderARB(tmpFrag); + bgl::blGetObjectParameterivARB(tmpFrag, GL_OBJECT_INFO_LOG_LENGTH_ARB, &fraglen); + if(fraglen >1 ){ + PrintInfo(fraglen,tmpFrag, &char_len); + goto programError; } - else{ - spit("Program failed"); - glDeleteObjectARB(tmpVert); - glDeleteObjectARB(tmpFrag); - glDeleteObjectARB(tmpProg); - mOk = 0; - return false; + bgl::blGetObjectParameterivARB(tmpFrag, GL_OBJECT_COMPILE_STATUS_ARB, &fragstatus); + if(!fragstatus) + goto programError; + + + // -- program ------------------------ + // set compiled vert/frag shader & link + tmpProg = bgl::blCreateProgramObjectARB(); + bgl::blAttachObjectARB(tmpProg, tmpVert); + bgl::blAttachObjectARB(tmpProg, tmpFrag); + bgl::blLinkProgramARB(tmpProg); + bgl::blGetObjectParameterivARB(tmpProg, GL_OBJECT_INFO_LOG_LENGTH_ARB, &proglen); + bgl::blGetObjectParameterivARB(tmpProg, GL_OBJECT_LINK_STATUS_ARB, &progstatus); + if(!progstatus) + goto programError; + + if(proglen > 0) { + // print success + PrintInfo(proglen,tmpProg, &char_len); + if(char_len >0) + spit(mLog); + mError = 0; } // set @@ -161,34 +167,42 @@ bool BL_Shader::LinkProgram() mFrag = tmpFrag; mOk = 1; return true; + +programError: + if(tmpVert) { + bgl::blDeleteObjectARB(tmpVert); + tmpVert=0; + } + if(tmpFrag) { + bgl::blDeleteObjectARB(tmpFrag); + tmpFrag=0; + } + + if(tmpProg) { + bgl::blDeleteObjectARB(tmpProg); + tmpProg=0; + } + + mOk = 0; + mUse=0; + mError = 1; + spit("----------"); + spit("GLSL Error "); + if(mLog) + spit(mLog); + spit("--------------------"); + return false; #else return false; #endif//GL_ARB_shader_objects } -bool BL_Shader::PrintInfo(int len, unsigned int handle, const char *type) +void BL_Shader::PrintInfo(int len, unsigned int handle, int* num) { #ifdef GL_ARB_shader_objects - int numchars=0; - char *log = (char*)MEM_mallocN(sizeof(char)*len, "print_log"); - if(!log) { - spit("BL_Shader::PrintInfo() MEM_mallocN failed"); - return false; - } - glGetInfoLogARB(handle, len, &numchars, log); - - if(numchars >0){ - spit(type); - spit(log); - MEM_freeN(log); - log=0; - return false; - } - MEM_freeN(log); - log=0; - return true; -#else - return false + mLog = (char*)MEM_mallocN(sizeof(char)*len, "print_log"); + //MT_assert(mLog, "Failed to create memory"); + bgl::blGetInfoLogARB(handle, len, num, mLog); #endif//GL_ARB_shader_objects } @@ -234,13 +248,6 @@ const uSampler* BL_Shader::getSampler(int i) return &mSampler[i]; } -const uBlending *BL_Shader::getBlending( int pass ) -{ - return &mBlending; -} - - - void BL_Shader::InitializeSampler( int type, int unit, @@ -287,7 +294,6 @@ PyMethodDef BL_Shader::Methods[] = KX_PYMETHODTABLE( BL_Shader, setSampler ), KX_PYMETHODTABLE( BL_Shader, setUniformMatrix4 ), KX_PYMETHODTABLE( BL_Shader, setUniformMatrix3 ), - // KX_PYMETHODTABLE( BL_Shader, setBlending ), {NULL,NULL} //Sentinel }; @@ -332,15 +338,14 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSource," setSource(vertexProgram, fragmentProg vertProg = v; fragProg = f; if( LinkProgram() ) { - glUseProgramObjectARB( mShader ); + bgl::blUseProgramObjectARB( mShader ); mUse = apply!=0; Py_Return; } vertProg = 0; fragProg = 0; mUse = 0; - glUseProgramObjectARB( 0 ); - PyErr_Format(PyExc_ValueError, "GLSL Error"); + Py_Return; } return NULL; #else @@ -352,9 +357,9 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSource," setSource(vertexProgram, fragmentProg KX_PYMETHODDEF_DOC( BL_Shader, delSource, "delSource( )" ) { #ifdef GL_ARB_shader_objects - glDeleteObjectARB(mShader); - glDeleteObjectARB(mFrag); - glDeleteObjectARB(mVert); + bgl::blDeleteObjectARB(mShader); + bgl::blDeleteObjectARB(mFrag); + bgl::blDeleteObjectARB(mVert); mShader = 0; mFrag = 0; mVert = 0; @@ -362,13 +367,12 @@ KX_PYMETHODDEF_DOC( BL_Shader, delSource, "delSource( )" ) fragProg = 0; mOk = 0; mUse = 0; - glUseProgramObjectARB(0); + bgl::blUseProgramObjectARB(0); #endif Py_Return; } - KX_PYMETHODDEF_DOC( BL_Shader, isValid, "isValid()" ) { return PyInt_FromLong( ( mShader !=0 && mOk ) ); @@ -384,21 +388,22 @@ KX_PYMETHODDEF_DOC( BL_Shader, getFragmentProg ,"getFragmentProg( )" ) return PyString_FromString(fragProg?fragProg:""); } - KX_PYMETHODDEF_DOC( BL_Shader, validate, "validate()") { #ifdef GL_ARB_shader_objects - if(mShader==0) - { + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } + + if(mShader==0) { PyErr_Format(PyExc_TypeError, "invalid shader object"); return NULL; } - int stat = 0; - glValidateProgramARB(mShader); - glGetObjectParameterivARB(mShader, GL_OBJECT_VALIDATE_STATUS_ARB, &stat); - - return PyInt_FromLong((stat!=0)); + bgl::blValidateProgramARB(mShader); + bgl::blGetObjectParameterivARB(mShader, GL_OBJECT_VALIDATE_STATUS_ARB, &stat); + return PyInt_FromLong(0); #else Py_Return; #endif//GL_ARB_shader_objects @@ -408,6 +413,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, validate, "validate()") KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" ) { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } + char *uniform=""; int index=-1; if(PyArg_ParseTuple(args, "si", &uniform, &index)) @@ -417,7 +427,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" ) PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader, uniform); + int loc= bgl::blGetUniformLocationARB(mShader, uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); @@ -446,7 +456,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setNumberOfPasses, "setNumberOfPasses( max-pass ) if(!PyArg_ParseTuple(args, "i", &pass)) return NULL; - mPass = pass; + mPass = 1; Py_Return; } @@ -454,6 +464,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, setNumberOfPasses, "setNumberOfPasses( max-pass ) KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" ) { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } + char *uniform=""; float value=0; if(PyArg_ParseTuple(args, "sf", &uniform, &value )) @@ -463,15 +478,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" ) PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader, uniform); + int loc= bgl::blGetUniformLocationARB(mShader, uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB( mShader ); - glUniform1fARB( loc, value ); + bgl::blUseProgramObjectARB( mShader ); + bgl::blUniform1fARB( loc, value ); Py_Return; } @@ -486,6 +501,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" ) KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char *uniform=""; float array[2]={ 0,0 }; if(PyArg_ParseTuple(args, "sff", &uniform, &array[0],&array[1] )) @@ -495,15 +514,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)") PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB( mShader ); - glUniform2fARB(loc, array[0],array[1] ); + bgl::blUseProgramObjectARB( mShader ); + bgl::blUniform2fARB(loc, array[0],array[1] ); Py_Return; } @@ -518,6 +537,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)") KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char *uniform=""; float array[3]={0,0,0}; if(PyArg_ParseTuple(args, "sfff", &uniform, &array[0],&array[1],&array[2])) @@ -527,15 +550,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ") PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB(mShader); - glUniform3fARB(loc, array[0],array[1],array[2]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform3fARB(loc, array[0],array[1],array[2]); Py_Return; } @@ -550,6 +573,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ") KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) ") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char *uniform=""; float array[4]={0,0,0,0}; if(PyArg_ParseTuple(args, "sffff", &uniform, &array[0],&array[1],&array[2], &array[3])) @@ -559,15 +586,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) " PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB(mShader); - glUniform4fARB(loc, array[0],array[1],array[2], array[3]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform4fARB(loc, array[0],array[1],array[2], array[3]); Py_Return; } } @@ -581,6 +608,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) " KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" ) { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char *uniform=""; int value=0; if(PyArg_ParseTuple(args, "si", &uniform, &value )) @@ -590,15 +621,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" ) PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader, uniform); + int loc= bgl::blGetUniformLocationARB(mShader, uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB( mShader ); - glUniform1iARB( loc, value ); + bgl::blUseProgramObjectARB( mShader ); + bgl::blUniform1iARB( loc, value ); Py_Return; } } @@ -612,6 +643,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" ) KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char *uniform=""; int array[2]={ 0,0 }; if(PyArg_ParseTuple(args, "sii", &uniform, &array[0],&array[1] )) @@ -621,15 +656,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)") PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB( mShader ); - glUniform2iARB(loc, array[0],array[1] ); + bgl::blUseProgramObjectARB( mShader ); + bgl::blUniform2iARB(loc, array[0],array[1] ); Py_Return; } } @@ -643,6 +678,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)") KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char *uniform=""; int array[3]={0,0,0}; if(PyArg_ParseTuple(args, "siii", &uniform, &array[0],&array[1],&array[2])) @@ -652,15 +691,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ") PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB(mShader); - glUniform3iARB(loc, array[0],array[1],array[2]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform3iARB(loc, array[0],array[1],array[2]); Py_Return; } } @@ -673,6 +712,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ") KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) ") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char *uniform=""; int array[4]={0,0,0, 0}; if(PyArg_ParseTuple(args, "siiii", &uniform, &array[0],&array[1],&array[2], &array[3] )) @@ -682,15 +725,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) " PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); Py_Return; }else { - glUseProgramObjectARB(mShader); - glUniform4iARB(loc, array[0],array[1],array[2], array[3]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform4iARB(loc, array[0],array[1],array[2], array[3]); Py_Return; } } @@ -703,6 +746,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) " KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or list3 or list4) )") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char*uniform = ""; PyObject *listPtr =0; float array_data[4] = {0.f,0.f,0.f,0.f}; @@ -714,7 +761,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); @@ -735,20 +782,20 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis { case 2: { - glUseProgramObjectARB(mShader); - glUniform2fARB(loc, array_data[0],array_data[1]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform2fARB(loc, array_data[0],array_data[1]); Py_Return; } break; case 3: { - glUseProgramObjectARB(mShader); - glUniform3fARB(loc, array_data[0],array_data[1], array_data[2]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform3fARB(loc, array_data[0],array_data[1], array_data[2]); Py_Return; }break; case 4: { - glUseProgramObjectARB(mShader); - glUniform4fARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform4fARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]); Py_Return; }break; default: @@ -770,6 +817,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3 or list4) )") { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } char*uniform = ""; PyObject *listPtr =0; int array_data[4] = {0,0,0,0}; @@ -781,7 +832,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3 PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); @@ -802,20 +853,20 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3 { case 2: { - glUseProgramObjectARB(mShader); - glUniform2iARB(loc, array_data[0],array_data[1]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform2iARB(loc, array_data[0],array_data[1]); Py_Return; } break; case 3: { - glUseProgramObjectARB(mShader); - glUniform3iARB(loc, array_data[0],array_data[1], array_data[2]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform3iARB(loc, array_data[0],array_data[1], array_data[2]); Py_Return; }break; case 4: { - glUseProgramObjectARB(mShader); - glUniform4iARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniform4iARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]); Py_Return; }break; default: @@ -838,6 +889,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4, "setUniformMatrix4(uniform-name, mat-4x4, transpose(row-major=true, col-major=false)" ) { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } + float matr[16] = { 1,0,0,0, 0,1,0,0, @@ -855,7 +911,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4, PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); @@ -868,8 +924,8 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4, if (PyMatTo(matrix, mat)) { mat.getValue(matr); - glUseProgramObjectARB(mShader); - glUniformMatrix4fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniformMatrix4fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr); Py_Return; } } @@ -886,6 +942,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3, "setUniformMatrix3(uniform-name, list[3x3], transpose(row-major=true, col-major=false)" ) { #ifdef GL_ARB_shader_objects + if(mError) { + Py_INCREF(Py_None); + return Py_None; + } + float matr[9] = { 1,0,0, 0,1,0, @@ -902,7 +963,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3, PyErr_Format(PyExc_ValueError, "invalid shader object"); return NULL; } - int loc= glGetUniformLocationARB(mShader , uniform); + int loc= bgl::blGetUniformLocationARB(mShader , uniform); if( loc==-1 ) { spit("Invalid uniform value: " << uniform << "."); @@ -915,8 +976,8 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3, if (PyMatTo(matrix, mat)) { mat.getValue(matr); - glUseProgramObjectARB(mShader); - glUniformMatrix3fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr); + bgl::blUseProgramObjectARB(mShader); + bgl::blUniformMatrix3fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr); Py_Return; } } @@ -927,16 +988,3 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3, Py_Return; #endif//GL_ARB_shader_objects } - - -KX_PYMETHODDEF_DOC( BL_Shader, setBlending, "setBlending(src, dest)" ) -{ - int src, dest; - if(PyArg_ParseTuple(args, "ii", &src, &dest)) - { - mBlending.src = src; - mBlending.dest = dest; - Py_Return; - } - return NULL; -} diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h index 2e08eeb0d70..25db6a0b9f4 100644 --- a/source/gameengine/Ketsji/BL_Shader.h +++ b/source/gameengine/Ketsji/BL_Shader.h @@ -18,17 +18,6 @@ typedef struct uSampler #define SAMP_2D 1 #define SAMP_CUBE 2 - -// ----------------------------------- -typedef struct uBlending -{ - unsigned int pass; - int src; // GL_ blend func values - int dest; - float const_color[4]; -}uBlending; -// ----------------------------------- - // ---------------- class BL_Shader : public PyObjectPlus { @@ -41,14 +30,15 @@ private: bool mOk; bool mUse; uSampler mSampler[MAXTEX]; - uBlending mBlending; char* vertProg; char* fragProg; - bool LinkProgram(); - bool PrintInfo(int len, unsigned int handle, const char *type); + bool mError; + char* mLog; + bool LinkProgram(); + void PrintInfo( int len, unsigned int handle,int *num); public: - BL_Shader(int n, PyTypeObject *T=&Type); + BL_Shader(PyTypeObject *T=&Type); virtual ~BL_Shader(); char* GetVertPtr(); @@ -59,11 +49,10 @@ public: // --- int getNumPass() {return mPass;} bool use() {return mUse;} - + bool GetError() {return mError;} // --- // access const uSampler* getSampler(int i); - const uBlending* getBlending( int pass ); const bool Ok()const; unsigned int GetProg(); @@ -108,8 +97,6 @@ public: // these come from within the material buttons // sampler2d/samplerCube work KX_PYMETHOD_DOC( BL_Shader, setSampler); - // user blending funcs - KX_PYMETHOD_DOC( BL_Shader, setBlending ); }; diff --git a/source/gameengine/Ketsji/BL_Texture.cpp b/source/gameengine/Ketsji/BL_Texture.cpp index 0ed7a9c33cf..2b01d3df560 100644 --- a/source/gameengine/Ketsji/BL_Texture.cpp +++ b/source/gameengine/Ketsji/BL_Texture.cpp @@ -3,6 +3,7 @@ #include <windows.h> #endif // WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else @@ -20,7 +21,6 @@ #include "DNA_image_types.h" #include "IMB_imbuf_types.h" #include "BKE_image.h" -//#include "IMB_imbuf.h" #include "BLI_blenlib.h" #include "RAS_GLExtensionManager.h" @@ -35,6 +35,7 @@ using namespace bgl; extern "C" { // envmaps #include "IMB_imbuf.h" + void my_envmap_split_ima(EnvMap *env); void my_free_envmapdata(EnvMap *env); } @@ -345,18 +346,18 @@ void my_envmap_split_ima(EnvMap *env) ima->ok= 1; env->cube[part]= ima; } - IMB_rectcpy(env->cube[0]->ibuf, env->ima->ibuf, - 0, 0, 0, 0, dx, dx); - IMB_rectcpy(env->cube[1]->ibuf, env->ima->ibuf, - 0, 0, dx, 0, dx, dx); - IMB_rectcpy(env->cube[2]->ibuf, env->ima->ibuf, - 0, 0, 2*dx, 0, dx, dx); - IMB_rectcpy(env->cube[3]->ibuf, env->ima->ibuf, - 0, 0, 0, dx, dx, dx); - IMB_rectcpy(env->cube[4]->ibuf, env->ima->ibuf, - 0, 0, dx, dx, dx, dx); - IMB_rectcpy(env->cube[5]->ibuf, env->ima->ibuf, - 0, 0, 2*dx, dx, dx, dx); + IMB_rectop(env->cube[0]->ibuf, env->ima->ibuf, + 0, 0, 0, 0, dx, dx, IMB_rectcpy, 0); + IMB_rectop(env->cube[1]->ibuf, env->ima->ibuf, + 0, 0, dx, 0, dx, dx, IMB_rectcpy, 0); + IMB_rectop(env->cube[2]->ibuf, env->ima->ibuf, + 0, 0, 2*dx, 0, dx, dx, IMB_rectcpy, 0); + IMB_rectop(env->cube[3]->ibuf, env->ima->ibuf, + 0, 0, 0, dx, dx, dx, IMB_rectcpy, 0); + IMB_rectop(env->cube[4]->ibuf, env->ima->ibuf, + 0, 0, dx, dx, dx, dx, IMB_rectcpy, 0); + IMB_rectop(env->cube[5]->ibuf, env->ima->ibuf, + 0, 0, 2*dx, dx, dx, dx, IMB_rectcpy, 0); env->ok= 2; } } diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp index ebf040d3c5d..429a9ea7a65 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp @@ -10,6 +10,7 @@ #include <windows.h> #endif // WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else @@ -22,6 +23,7 @@ #include "KX_Scene.h" #include "KX_Light.h" #include "KX_GameObject.h" +#include "KX_MeshProxy.h" #include "MT_Vector3.h" #include "MT_Vector4.h" @@ -75,7 +77,10 @@ KX_BlenderMaterial::KX_BlenderMaterial( mMaterial(data), mShader(0), mScene(scene), + mUserDefBlend(0), + mModified(0), mPass(0) + { ///RAS_EXT_support._ARB_multitexture == true if were here @@ -101,8 +106,8 @@ KX_BlenderMaterial::KX_BlenderMaterial( // prevent material bleeding for(int i=0; i<mMaterial->num_enabled; i++) { m_multimode += - (mMaterial->flag[i] + - mMaterial->blend_mode[i] + ( mMaterial->flag[i] + + mMaterial->blend_mode[i] ); } m_multimode += mMaterial->IdMode+mMaterial->ras_mode; @@ -132,14 +137,9 @@ void KX_BlenderMaterial::OnConstruction() if(!gTextureDict) gTextureDict = PyDict_New(); */ - #ifdef GL_ARB_shader_objects - if( RAS_EXT_support._ARB_shader_objects ) - mShader = new BL_Shader( mMaterial->num_enabled ); - #endif - int i; for(i=0; i<mMaterial->num_enabled; i++) { - glActiveTextureARB(GL_TEXTURE0_ARB+i); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i); #ifdef GL_ARB_texture_cube_map if( mMaterial->mapping[i].mapping & USEENV ) { if(!RAS_EXT_support._ARB_texture_cube_map) { @@ -149,9 +149,6 @@ void KX_BlenderMaterial::OnConstruction() if(!mTextures[i].InitCubeMap( mMaterial->cubemap[i] ) ) spit("unable to initialize image("<<i<<") in "<< mMaterial->matname<< ", image will not be available"); - - if( RAS_EXT_support._ARB_shader_objects ) - mShader->InitializeSampler(SAMP_CUBE, i, 0, mTextures[i]); } else { @@ -160,9 +157,6 @@ void KX_BlenderMaterial::OnConstruction() if( ! mTextures[i].InitFromImage(mMaterial->img[i], (mMaterial->flag[i] &MIPMAP)!=0 )) spit("unable to initialize image("<<i<<") in "<< mMaterial->matname<< ", image will not be available"); - - if( RAS_EXT_support._ARB_shader_objects ) - mShader->InitializeSampler(SAMP_2D, i, 0, mTextures[i]); } #ifdef GL_ARB_texture_cube_map } @@ -170,24 +164,27 @@ void KX_BlenderMaterial::OnConstruction() /*PyDict_SetItemString(gTextureDict, mTextures[i].GetName().Ptr(), PyInt_FromLong(mTextures[i]));*/ } #endif//GL_ARB_multitexture + + mBlendFunc[0] =0; + mBlendFunc[1] =0; } void KX_BlenderMaterial::OnExit() { #ifdef GL_ARB_multitexture - + #ifdef GL_ARB_shader_objects if( RAS_EXT_support._ARB_shader_objects && mShader ) { //note, the shader here is allocated, per unique material //and this function is called per face - glUseProgramObjectARB(0); + bgl::blUseProgramObjectARB(0); delete mShader; mShader = 0; } #endif //GL_ARB_shader_objects for(int i=0; i<mMaterial->num_enabled; i++) { - glActiveTextureARB(GL_TEXTURE0_ARB+i); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i); mTextures[i].DeleteTex(); @@ -213,7 +210,7 @@ void KX_BlenderMaterial::OnExit() gTextureDict = 0; }*/ - glActiveTextureARB(GL_TEXTURE0_ARB); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB); #ifdef GL_ARB_texture_cube_map if(RAS_EXT_support._ARB_texture_cube_map) @@ -238,7 +235,7 @@ void KX_BlenderMaterial::DisableTexData() #ifdef GL_ARB_multitexture int i=(MAXTEX>=bgl::max_texture_units?bgl::max_texture_units:MAXTEX)-1; for(; i>=0; i--) { - glActiveTextureARB(GL_TEXTURE0_ARB+i); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); @@ -268,13 +265,13 @@ void KX_BlenderMaterial::setShaderData( bool enable ) int i; if( !enable || !mShader->Ok() ) { // frame cleanup. - glUseProgramObjectARB( 0 ); + bgl::blUseProgramObjectARB( 0 ); DisableTexData(); return; } DisableTexData(); - glUseProgramObjectARB( mShader->GetProg() ); + bgl::blUseProgramObjectARB( mShader->GetProg() ); // for each enabled unit for(i=0; i<mMaterial->num_enabled; i++) { @@ -282,7 +279,7 @@ void KX_BlenderMaterial::setShaderData( bool enable ) const uSampler *samp = mShader->getSampler(i); if( samp->loc == -1 || samp->glTexture == 0 ) continue; - glActiveTextureARB(GL_TEXTURE0_ARB+i); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i); #ifdef GL_ARB_texture_cube_map if( mMaterial->mapping[i].mapping &USEENV ) { @@ -297,9 +294,17 @@ void KX_BlenderMaterial::setShaderData( bool enable ) } #endif//GL_ARB_texture_cube_map // use a sampler - glUniform1iARB(samp->loc, i ); + bgl::blUniform1iARB(samp->loc, i ); + } + + if(!mUserDefBlend) { + setDefaultBlending(); + }else + { + glEnable(GL_BLEND); + // tested to be valid enums + glBlendFunc(mBlendFunc[0], mBlendFunc[1]); } - glDisable(GL_BLEND); #endif//GL_ARB_shader_objects #endif//GL_ARB_multitexture @@ -314,7 +319,7 @@ void KX_BlenderMaterial::setTexData( bool enable ) #ifdef GL_ARB_shader_objects if(RAS_EXT_support._ARB_shader_objects) { // switch back to fixed func - glUseProgramObjectARB( 0 ); + bgl::blUseProgramObjectARB( 0 ); } #endif//GL_ARB_shader_objects @@ -336,7 +341,7 @@ void KX_BlenderMaterial::setTexData( bool enable ) // no material connected to the object if( mTextures[0] ) { if( !mTextures[0].Ok() ) return; - glActiveTextureARB(GL_TEXTURE0_ARB); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB); glBindTexture( GL_TEXTURE_2D, mTextures[0] ); glEnable(GL_TEXTURE_2D); setTextureEnvironment( -1 ); // modulate @@ -352,7 +357,7 @@ void KX_BlenderMaterial::setTexData( bool enable ) for(i=0; (i<mMaterial->num_enabled); i++) { if( !mTextures[i].Ok() ) continue; - glActiveTextureARB(GL_TEXTURE0_ARB+i); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i); #ifdef GL_ARB_texture_cube_map // use environment maps @@ -388,15 +393,16 @@ void KX_BlenderMaterial::setTexData( bool enable ) #ifdef GL_ARB_texture_cube_map } #endif//GL_ARB_texture_cube_map - - // if either unit has set blending - // and its the last pass - lastblend += setBlending( i ); // dry run - if(lastblend >0 && i==mMaterial->num_enabled-1) - setBlending( i, true ); - else if(lastblend == 0 && i==mMaterial->num_enabled-1) - glDisable(GL_BLEND); } + if(!mUserDefBlend) { + setDefaultBlending(); + }else + { + glEnable(GL_BLEND); + // tested to be valid enums + glBlendFunc(mBlendFunc[0], mBlendFunc[1]); + } + #endif//GL_ARB_multitexture } @@ -548,7 +554,7 @@ KX_BlenderMaterial::Activate( return dopass; } else { - glUseProgramObjectARB( 0 ); + bgl::blUseProgramObjectARB( 0 ); mPass = 0; dopass = false; return dopass; @@ -587,9 +593,8 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex ) glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB ); GLfloat blend_operand = GL_SRC_COLOR; - GLfloat blend_operand_prev = GL_SRC_COLOR; + GLfloat blend_operand_prev = GL_SRC_COLOR; - // all sources here are RGB by default GLenum combiner = GL_COMBINE_RGB_ARB; GLenum source0 = GL_SOURCE0_RGB_ARB; GLenum source1 = GL_SOURCE1_RGB_ARB; @@ -597,6 +602,7 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex ) GLenum op0 = GL_OPERAND0_RGB_ARB; GLenum op1 = GL_OPERAND1_RGB_ARB; GLenum op2 = GL_OPERAND2_RGB_ARB; + GLfloat alphaOp = GL_SRC_ALPHA; // switch to alpha combiners if( (mMaterial->flag[textureIndex] &TEXALPHA) ) { @@ -608,7 +614,6 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex ) op1 = GL_OPERAND1_ALPHA_ARB; op2 = GL_OPERAND2_ALPHA_ARB; blend_operand = GL_SRC_ALPHA; - blend_operand_prev = GL_SRC_ALPHA; // invert if(mMaterial->flag[textureIndex] &TEXNEG) { @@ -618,27 +623,42 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex ) } else { if(mMaterial->flag[textureIndex] &TEXNEG) { - blend_operand_prev = GL_ONE_MINUS_SRC_COLOR; + blend_operand_prev=GL_ONE_MINUS_SRC_COLOR; blend_operand = GL_ONE_MINUS_SRC_COLOR; } } - // on Texture0 GL_PREVIOUS_ARB is the primary color - // on Texture1 GL_PREVIOUS_ARB is Texture0 env + bool using_alpha = false; + + if(mMaterial->flag[textureIndex] &USEALPHA){ + alphaOp = GL_ONE_MINUS_SRC_ALPHA; + using_alpha=true; + } + else if(mMaterial->flag[textureIndex] &USENEGALPHA){ + alphaOp = GL_SRC_ALPHA; + using_alpha = true; + } + switch( mMaterial->blend_mode[textureIndex] ) { case BLEND_MIX: { // ------------------------------ - GLfloat base_col[4]; - base_col[0] = base_col[1] = base_col[2] = 0.f; - base_col[3] = 1.f-mMaterial->color_blend[textureIndex]; - glTexEnvfv( GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,base_col ); + if(!using_alpha) { + GLfloat base_col[4]; + base_col[0] = base_col[1] = base_col[2] = 0.f; + base_col[3] = 1.f-mMaterial->color_blend[textureIndex]; + glTexEnvfv( GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,base_col ); + } glTexEnvf( GL_TEXTURE_ENV, combiner, GL_INTERPOLATE_ARB); glTexEnvf( GL_TEXTURE_ENV, source0, GL_PREVIOUS_ARB); glTexEnvf( GL_TEXTURE_ENV, op0, blend_operand_prev ); glTexEnvf( GL_TEXTURE_ENV, source1, GL_TEXTURE ); glTexEnvf( GL_TEXTURE_ENV, op1, blend_operand); - glTexEnvf( GL_TEXTURE_ENV, source2, GL_CONSTANT_ARB ); - glTexEnvf( GL_TEXTURE_ENV, op2, GL_SRC_ALPHA); + if(!using_alpha) + glTexEnvf( GL_TEXTURE_ENV, source2, GL_CONSTANT_ARB ); + else + glTexEnvf( GL_TEXTURE_ENV, source2, GL_TEXTURE ); + + glTexEnvf( GL_TEXTURE_ENV, op2, alphaOp); }break; case BLEND_MUL: { @@ -647,7 +667,10 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex ) glTexEnvf( GL_TEXTURE_ENV, source0, GL_PREVIOUS_ARB); glTexEnvf( GL_TEXTURE_ENV, op0, blend_operand_prev); glTexEnvf( GL_TEXTURE_ENV, source1, GL_TEXTURE ); - glTexEnvf( GL_TEXTURE_ENV, op1, blend_operand); + if(using_alpha) + glTexEnvf( GL_TEXTURE_ENV, op1, alphaOp); + else + glTexEnvf( GL_TEXTURE_ENV, op1, blend_operand); }break; case BLEND_ADD: { @@ -656,7 +679,10 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex ) glTexEnvf( GL_TEXTURE_ENV, source0, GL_PREVIOUS_ARB ); glTexEnvf( GL_TEXTURE_ENV, op0, blend_operand_prev ); glTexEnvf( GL_TEXTURE_ENV, source1, GL_TEXTURE ); - glTexEnvf( GL_TEXTURE_ENV, op1, blend_operand ); + if(using_alpha) + glTexEnvf( GL_TEXTURE_ENV, op1, alphaOp); + else + glTexEnvf( GL_TEXTURE_ENV, op1, blend_operand); }break; case BLEND_SUB: { @@ -674,37 +700,16 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex ) glTexEnvf( GL_TEXTURE_ENV, source0, GL_PREVIOUS_ARB ); glTexEnvf( GL_TEXTURE_ENV, op0, blend_operand_prev ); glTexEnvf( GL_TEXTURE_ENV, source1, GL_TEXTURE ); - glTexEnvf( GL_TEXTURE_ENV, op1, blend_operand); + if(using_alpha) + glTexEnvf( GL_TEXTURE_ENV, op1, alphaOp); + else + glTexEnvf( GL_TEXTURE_ENV, op1, blend_operand); } break; } + glTexEnvf( GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.0); #endif //!GL_ARB_texture_env_combine } -bool KX_BlenderMaterial::setBlending( int ind, bool enable) -{ - if(!enable) { - if(mMaterial->flag[ind] &CALCALPHA ) return true; - else if(mMaterial->flag[ind] &USEALPHA ) return true; - return false; - } - else { - // additive - if(mMaterial->flag[ind] &CALCALPHA ) { - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - return true; - } - - // use alpha channel - else if(mMaterial->flag[ind] &USEALPHA ) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - return true; - } - } - return false; -} - bool KX_BlenderMaterial::setDefaultBlending() { if( mMaterial->transp &TF_ADD) { @@ -873,6 +878,7 @@ PyMethodDef KX_BlenderMaterial::Methods[] = { KX_PYMETHODTABLE( KX_BlenderMaterial, getShader ), KX_PYMETHODTABLE( KX_BlenderMaterial, getMaterialIndex ), + KX_PYMETHODTABLE( KX_BlenderMaterial, setBlending ), // KX_PYMETHODTABLE( KX_BlenderMaterial, getTexture ), // KX_PYMETHODTABLE( KX_BlenderMaterial, setTexture ), @@ -914,20 +920,78 @@ int KX_BlenderMaterial::_setattr(const STR_String& attr, PyObject *pyvalue) return PyObjectPlus::_setattr(attr, pyvalue); } + KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()") { - #ifdef GL_ARB_shader_objects - if(!RAS_EXT_support._ARB_shader_objects) { - PyErr_Format(PyExc_SystemError, "GLSL not supported"); - return NULL; +#ifdef GL_ARB_fragment_shader + if( !RAS_EXT_support._ARB_fragment_shader) { + if(!mModified) + spit("Fragment shaders not supported"); + + mModified = true; + Py_Return; + } +#endif + +#ifdef GL_ARB_vertex_shader + if( !RAS_EXT_support._ARB_vertex_shader) { + if(!mModified) + spit("Vertex shaders not supported"); + + mModified = true; + Py_Return; + } +#endif + +#ifdef GL_ARB_shader_objects + if(!RAS_EXT_support._ARB_shader_objects) { + if(!mModified) + spit("GLSL not supported"); + mModified = true; + Py_Return; } else { - Py_INCREF(mShader); - return mShader; + // returns Py_None on error + // the calling script will need to check + + if(!mShader && !mModified) { + mShader = new BL_Shader(); + for(int i= 0; i<mMaterial->num_enabled; i++) { + if(mMaterial->mapping[i].mapping & USEENV ) + mShader->InitializeSampler(SAMP_CUBE, i, 0, mTextures[i]); + else + mShader->InitializeSampler(SAMP_2D, i, 0, mTextures[i]); + } + mModified = true; + } + + if(mShader && !mShader->GetError()) { + Py_INCREF(mShader); + return mShader; + }else + { + // decref all references to the object + // then delete it! + // We will then go back to fixed functionality + // for this material + if(mShader) { + if(mShader->ob_refcnt > 1) { + Py_DECREF(mShader); + } + else { + delete mShader; + mShader=0; + } + } + } + Py_Return; } - #else + PyErr_Format(PyExc_ValueError, "GLSL Error"); + return NULL; + +#else Py_Return; - #endif//GL_ARB_shader_objects +#endif//GL_ARB_shader_objects } KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getMaterialIndex, "getMaterialIndex()") @@ -947,3 +1011,45 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setTexture , "setTexture( index, tex)") return NULL; } +static unsigned int GL_array[11] = { + GL_ZERO, + GL_ONE, + GL_SRC_COLOR, + GL_ONE_MINUS_SRC_COLOR, + GL_DST_COLOR, + GL_ONE_MINUS_DST_COLOR, + GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, + GL_DST_ALPHA, + GL_ONE_MINUS_DST_ALPHA, + GL_SRC_ALPHA_SATURATE +}; + +KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( GameLogic.src, GameLogic.dest)") +{ + unsigned int b[2]; + if(PyArg_ParseTuple(args, "ii", &b[0], &b[1])) + { + bool value_found[2] = {false, false}; + for(int i=0; i<11; i++) + { + if(b[0] == GL_array[i]) { + value_found[0] = true; + mBlendFunc[0] = b[0]; + } + if(b[1] == GL_array[i]) { + value_found[1] = true; + mBlendFunc[1] = b[1]; + } + if(value_found[0] && value_found[1]) break; + } + if(!value_found[0] || !value_found[1]) { + PyErr_Format(PyExc_ValueError, "invalid enum."); + return NULL; + } + mUserDefBlend = true; + Py_Return; + } + return NULL; +} + diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index 57348144890..a250dcf81c4 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -72,6 +72,7 @@ public: KX_PYMETHOD_DOC( KX_BlenderMaterial, getTexture ); KX_PYMETHOD_DOC( KX_BlenderMaterial, setTexture ); + KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending ); // -------------------------------- // pre calculate to avoid pops/lag at startup virtual void OnConstruction( ); @@ -82,6 +83,10 @@ private: KX_Scene* mScene; BL_Texture mTextures[MAXTEX]; // texture array + bool mUserDefBlend; + unsigned int mBlendFunc[2]; + bool mModified; + // message centers void setTexData( bool enable ); void setShaderData( bool enable ); @@ -90,7 +95,6 @@ private: void setEnvMap( bool val, bool cube=false); void setTexMatrixData(int i); bool setDefaultBlending(); - bool setBlending( int ind, bool enable=false ); void setObjectMatrixData(int i); // cleanup stuff diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index 022c5d0c3ee..41bece58e84 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -127,8 +127,10 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system) m_firstframe(true), - m_previoustime(0.0), - m_deltatime(0.0), + m_frameTime(0.f), + m_clockTime(0.f), + m_previousClockTime(0.f), + m_exitcode(KX_EXIT_REQUEST_NO_REQUEST), m_exitstring(""), @@ -258,13 +260,19 @@ void KX_KetsjiEngine::SetSceneConverter(KX_ISceneConverter* sceneconverter) */ void KX_KetsjiEngine::StartEngine() { - m_previoustime = m_kxsystem->GetTimeInSeconds(); + m_clockTime = m_kxsystem->GetTimeInSeconds(); + m_frameTime = m_kxsystem->GetTimeInSeconds(); + m_previousClockTime = m_kxsystem->GetTimeInSeconds(); + m_firstframe = true; m_bInitialized = true; m_ticrate = DEFAULT_LOGIC_TIC_RATE; m_currentFrame = 0; - m_sceneconverter->ResetPhysicsObjectsAnimationIpo(); + if (m_game2ipo) + { + m_sceneconverter->ResetPhysicsObjectsAnimationIpo(); + } } @@ -317,33 +325,32 @@ void KX_KetsjiEngine::EndFrame() } - +#include "PIL_time.h" void KX_KetsjiEngine::NextFrame() { m_logger->StartLog(tc_services, m_kxsystem->GetTimeInSeconds(), true); - - double curtime; + if (m_bFixedTime) - curtime = m_previoustime + 1.0/m_ticrate; + m_clockTime += 1.0/m_ticrate; else - curtime = m_kxsystem->GetTimeInSeconds(); - m_deltatime += curtime - m_previoustime; - float realDeltaTime = curtime - m_previoustime; - + m_clockTime = m_kxsystem->GetTimeInSeconds(); - double localtime = curtime - m_deltatime; + double deltatime = m_clockTime - m_frameTime; // Compute the number of logic frames to do each update (fixed tic bricks) - int frames = (int) (m_deltatime*m_ticrate); - m_deltatime -= double(frames)/m_ticrate; + int frames =int(deltatime*m_ticrate); + +// if (!frames) +// PIL_sleep_ms(4); KX_SceneList::iterator sceneit; while (frames) { - localtime += 1.0/m_ticrate; + m_frameTime += 1.0/m_ticrate; + for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); ++sceneit) // for each scene, call the proceed functions { @@ -361,15 +368,15 @@ void KX_KetsjiEngine::NextFrame() // if the scene was suspended recalcutlate the delta tu "curtime" m_suspendedtime = scene->getSuspendedTime(); if (scene->getSuspendedTime()!=0.0) - scene->setSuspendedDelta(scene->getSuspendedDelta()+curtime-scene->getSuspendedTime()); + scene->setSuspendedDelta(scene->getSuspendedDelta()+m_clockTime-scene->getSuspendedTime()); m_suspendeddelta = scene->getSuspendedDelta(); m_logger->StartLog(tc_network, m_kxsystem->GetTimeInSeconds(), true); - scene->GetNetworkScene()->proceed(localtime); + scene->GetNetworkScene()->proceed(m_frameTime); m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); - scene->UpdateParents(localtime); + scene->UpdateParents(m_frameTime); m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true); // set Python hooks for each scene @@ -381,36 +388,39 @@ void KX_KetsjiEngine::NextFrame() // Update scenegraph after physics step. This maps physics calculations // into node positions. m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); - scene->UpdateParents(localtime); + scene->UpdateParents(m_frameTime); // Process sensors, and controllers m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true); - scene->LogicBeginFrame(localtime); + scene->LogicBeginFrame(m_frameTime); // Scenegraph needs to be updated again, because Logic Controllers // can affect the local matrices. m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); - scene->UpdateParents(localtime); + scene->UpdateParents(m_frameTime); // Process actuators // Do some cleanup work for this logic frame m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true); - scene->LogicUpdateFrame(localtime, true); + scene->LogicUpdateFrame(m_frameTime, true); scene->LogicEndFrame(); // Actuators can affect the scenegraph m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); - scene->UpdateParents(localtime); + scene->UpdateParents(m_frameTime); m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true); scene->GetPhysicsEnvironment()->beginFrame(); // Perform physics calculations on the scene. This can involve // many iterations of the physics solver. - scene->GetPhysicsEnvironment()->proceedDeltaTime(localtime,realDeltaTime); - m_previoustime = curtime; + scene->GetPhysicsEnvironment()->proceedDeltaTime(m_frameTime,1.0/m_ticrate);//m_deltatimerealDeltaTime); + m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); + scene->UpdateParents(m_frameTime); + + if (m_game2ipo) { m_sceneconverter->WritePhysicsObjectToAnimationIpo(m_currentFrame++); @@ -420,7 +430,7 @@ void KX_KetsjiEngine::NextFrame() } // suspended else if(scene->getSuspendedTime()==0.0) - scene->setSuspendedTime(curtime); + scene->setSuspendedTime(m_clockTime); DoSound(scene); @@ -447,55 +457,63 @@ void KX_KetsjiEngine::NextFrame() frames--; } - // Logic update sub frame: this will let some logic bricks run at the - // full frame rate. - for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); ++sceneit) - // for each scene, call the proceed functions - { - KX_Scene* scene = *sceneit; + bool bUseAsyncLogicBricks= false; - if (!scene->IsSuspended()) + if (bUseAsyncLogicBricks) + { + // Logic update sub frame: this will let some logic bricks run at the + // full frame rate. + for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); ++sceneit) + // for each scene, call the proceed functions { - // if the scene was suspended recalcutlate the delta tu "curtime" - m_suspendedtime = scene->getSuspendedTime(); - if (scene->getSuspendedTime()!=0.0) - scene->setSuspendedDelta(scene->getSuspendedDelta()+curtime-scene->getSuspendedTime()); - m_suspendeddelta = scene->getSuspendedDelta(); - - // set Python hooks for each scene - PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment()); - PHY_SetActiveScene(scene); - - m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); - scene->UpdateParents(curtime); - - // Perform physics calculations on the scene. This can involve - // many iterations of the physics solver. - m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true); - scene->GetPhysicsEnvironment()->proceedDeltaTime(curtime,0.f); - // Update scenegraph after physics step. This maps physics calculations - // into node positions. - m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); - scene->UpdateParents(curtime); - - // Do some cleanup work for this logic frame - m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true); - scene->LogicUpdateFrame(curtime, false); + KX_Scene* scene = *sceneit; + + if (!scene->IsSuspended()) + { + // if the scene was suspended recalcutlate the delta tu "curtime" + m_suspendedtime = scene->getSuspendedTime(); + if (scene->getSuspendedTime()!=0.0) + scene->setSuspendedDelta(scene->getSuspendedDelta()+m_clockTime-scene->getSuspendedTime()); + m_suspendeddelta = scene->getSuspendedDelta(); + + // set Python hooks for each scene + PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment()); + PHY_SetActiveScene(scene); + + m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); + scene->UpdateParents(m_clockTime); - // Actuators can affect the scenegraph - m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); - scene->UpdateParents(curtime); - - scene->setSuspendedTime(0.0); - } // suspended - else - if(scene->getSuspendedTime()==0.0) - scene->setSuspendedTime(curtime); + // Perform physics calculations on the scene. This can involve + // many iterations of the physics solver. + m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true); + scene->GetPhysicsEnvironment()->proceedDeltaTime(m_clockTime,0.f); + // Update scenegraph after physics step. This maps physics calculations + // into node positions. + m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); + scene->UpdateParents(m_clockTime); + + // Do some cleanup work for this logic frame + m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true); + scene->LogicUpdateFrame(m_clockTime, false); - DoSound(scene); + // Actuators can affect the scenegraph + m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); + scene->UpdateParents(m_clockTime); + + scene->setSuspendedTime(0.0); + } // suspended + else + if(scene->getSuspendedTime()==0.0) + scene->setSuspendedTime(m_clockTime); - m_logger->StartLog(tc_services, m_kxsystem->GetTimeInSeconds(), true); + DoSound(scene); + + m_logger->StartLog(tc_services, m_kxsystem->GetTimeInSeconds(), true); + } } + + + m_previousClockTime = m_clockTime; // Start logging time spend outside main loop m_logger->StartLog(tc_outside, m_kxsystem->GetTimeInSeconds(), true); diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h index bea558e4427..c476cdb5894 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.h +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h @@ -99,8 +99,10 @@ private: bool m_firstframe; int m_currentFrame; - double m_previoustime; - double m_deltatime; + double m_frameTime;//discrete timestamp of the 'game logic frame' + double m_clockTime;//current time + double m_previousClockTime;//previous clock time + static double m_ticrate; static double m_suspendedtime; diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp index 2317f9c3a9c..0e7ebc6442e 100644 --- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp +++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp @@ -362,7 +362,7 @@ static PyObject* gPyRemoveConstraint(PyObject* self, { if (PHY_GetActiveEnvironment()) { - PHY_GetActiveEnvironment()->removeConstraint((void *)constraintid); + PHY_GetActiveEnvironment()->removeConstraint(constraintid); } } Py_INCREF(Py_None); return Py_None; diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index e2a11c0035e..6f7b73ee4fa 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -39,6 +39,7 @@ #include <windows.h> #endif // WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else @@ -277,39 +278,74 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *) #define pprint(x) std::cout << x << std::endl; bgl::BL_EXTInfo ext = bgl::RAS_EXT_support; bool count=0; + bool support=0; pprint("Supported Extensions..."); - #ifdef GL_ARB_shader_objects - pprint(" GL_ARB_shader_objects supported? "<< (ext._ARB_shader_objects? "yes.":"no.")); +#ifdef GL_ARB_shader_objects + pprint(" GL_ARB_shader_objects supported? "<< (ext._ARB_shader_objects?"yes.":"no.")); count = 1; - #endif - #ifdef GL_ARB_vertex_shader - pprint(" GL_ARB_vertex_shader supported? "<< (ext._ARB_vertex_shader? "yes.":"no.")); - count = 1; - #endif - #ifdef GL_ARB_fragment_shader - pprint(" GL_ARB_fragment_shader supported? "<< (ext._ARB_fragment_shader? "yes.":"no.")); - count = 1; - #endif - #ifdef GL_ARB_texture_cube_map - pprint(" GL_ARB_texture_cube_map supported? "<< (ext._ARB_texture_cube_map? "yes.":"no.")); +#endif + +#ifdef GL_ARB_vertex_shader + support= ext._ARB_vertex_shader; + pprint(" GL_ARB_vertex_shader supported? "<< (support?"yes.":"no.")); count = 1; - #endif - #ifdef GL_EXT_texture3D - pprint(" GL_EXT_texture3D supported? "<< (ext._EXT_texture3D? "yes.":"no.")); + if(support){ + pprint(" ----------Details----------"); + int max=0; + glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, (GLint*)&max); + pprint(" Max uniform components." << max); + + glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, (GLint*)&max); + pprint(" Max varying floats." << max); + + glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, (GLint*)&max); + pprint(" Max vertex texture units." << max); + + glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, (GLint*)&max); + pprint(" Max combined texture units." << max); + pprint(""); + } +#endif +#ifdef GL_ARB_fragment_shader + support=ext._ARB_fragment_shader; + pprint(" GL_ARB_fragment_shader supported? "<< (support?"yes.":"no.")); count = 1; - #endif - #ifdef GL_EXT_blend_color - pprint(" GL_EXT_blend_color supported? "<< (ext._EXT_blend_color? "yes.":"no.")); + if(support){ + pprint(" ----------Details----------"); + int max=0; + glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, (GLint*)&max); + pprint(" Max uniform components." << max); + pprint(""); + } +#endif +#ifdef GL_ARB_texture_cube_map + support = ext._ARB_texture_cube_map; + pprint(" GL_ARB_texture_cube_map supported? "<< (support?"yes.":"no.")); count = 1; - #endif - #ifdef GL_ARB_multitexture - pprint(" GL_ARB_multitexture supported? "<< (ext._ARB_multitexture? "yes.":"no.")); + if(support){ + pprint(" ----------Details----------"); + int size=0; + glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, (GLint*)&size); + pprint(" Max cubemap size." << size); + pprint(""); + } +#endif +#ifdef GL_ARB_multitexture + support = ext._ARB_multitexture; count = 1; - #endif - #ifdef GL_ARB_texture_env_combine - pprint(" GL_ARB_texture_env_combine supported? "<< (ext._ARB_texture_env_combine? "yes.":"no.")); + pprint(" GL_ARB_multitexture supported? "<< (support?"yes.":"no.")); + if(support){ + pprint(" ----------Details----------"); + int units=0; + glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, (GLint*)&units); + pprint(" Max texture units available. " << units); + pprint(""); + } +#endif +#ifdef GL_ARB_texture_env_combine + pprint(" GL_ARB_texture_env_combine supported? "<< (ext._ARB_texture_env_combine?"yes.":"no.")); count = 1; - #endif +#endif if(!count) pprint("No extenstions are used in this build"); @@ -707,6 +743,19 @@ PyObject* initGameLogic(KX_Scene* scene) // quick hack to get gravity hook KX_MACRO_addTypesToDict(d, KX_ACTIONACT_LOOPEND, BL_ActionActuator::KX_ACT_ACTION_LOOPEND); KX_MACRO_addTypesToDict(d, KX_ACTIONACT_PROPERTY, BL_ActionActuator::KX_ACT_ACTION_PROPERTY); + /*8. GL_BlendFunc */ + KX_MACRO_addTypesToDict(d, BL_ZERO, GL_ZERO); + KX_MACRO_addTypesToDict(d, BL_ONE, GL_ONE); + KX_MACRO_addTypesToDict(d, BL_SRC_COLOR, GL_SRC_COLOR); + KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR); + KX_MACRO_addTypesToDict(d, BL_DST_COLOR, GL_DST_COLOR); + KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_DST_COLOR); + KX_MACRO_addTypesToDict(d, BL_SRC_ALPHA, GL_SRC_ALPHA); + KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + KX_MACRO_addTypesToDict(d, BL_DST_ALPHA, GL_DST_ALPHA); + KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA); + KX_MACRO_addTypesToDict(d, BL_SRC_ALPHA_SATURATE, GL_SRC_ALPHA_SATURATE); + // Check for errors if (PyErr_Occurred()) { diff --git a/source/gameengine/Ketsji/Makefile b/source/gameengine/Ketsji/Makefile index 963031d9686..ee0b1e42f22 100644 --- a/source/gameengine/Ketsji/Makefile +++ b/source/gameengine/Ketsji/Makefile @@ -39,6 +39,7 @@ include nan_compile.mk CCFLAGS += $(LEVEL_1_CPP_WARNINGS) CPPFLAGS += $(OGL_CPPFLAGS) +CPPFLAGS += -I$(OPENGL_HEADERS) CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION) -I../../blender/python CPPFLAGS += -I$(NAN_STRING)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp index 0a0b4939ea5..cdf617f1722 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp @@ -192,7 +192,7 @@ void CcdPhysicsEnvironment::removeCcdPhysicsController(CcdPhysicsController* ctr if ((&p2p->GetRigidBodyA() == ctrl->GetRigidBody() || (&p2p->GetRigidBodyB() == ctrl->GetRigidBody()))) { - removeConstraint(p2p); + removeConstraint(p2p->GetConstraintId()); //only 1 constraint per constroller break; } @@ -209,7 +209,7 @@ void CcdPhysicsEnvironment::removeCcdPhysicsController(CcdPhysicsController* ctr if ((&p2p->GetRigidBodyA() == ctrl->GetRigidBody() || (&p2p->GetRigidBodyB() == ctrl->GetRigidBody()))) { - removeConstraint(p2p); + removeConstraint(p2p->GetConstraintId()); //only 1 constraint per constroller break; } @@ -301,14 +301,28 @@ void CcdPhysicsEnvironment::beginFrame() } -/// Perform an integration step of duration 'timeStep'. bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep) { + + if (!SimdFuzzyZero(timeStep)) + { + //Blender runs 30hertz, so subdivide so we get 60 hertz + proceedDeltaTimeOneStep(0.5f*timeStep); + proceedDeltaTimeOneStep(0.5f*timeStep); + } else + { + //todo: interpolate + } + return true; +} +/// Perform an integration step of duration 'timeStep'. +bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep) +{ // printf("CcdPhysicsEnvironment::proceedDeltaTime\n"); - if (timeStep == 0.f) + if (SimdFuzzyZero(timeStep)) return true; if (m_debugDrawer) @@ -318,9 +332,6 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep) - //clamp hardcoded for now - if (timeStep > 0.02) - timeStep = 0.02; //this is needed because scaling is not known in advance, and scaling has to propagate to the shape if (!m_scalingPropagated) @@ -758,7 +769,9 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl } m_p2pConstraints.push_back(p2p); - return 0; + + //64 bit systems can't cast pointer to int. could use size_t instead. + return p2p->GetConstraintId(); break; } @@ -773,17 +786,24 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl } -void CcdPhysicsEnvironment::removeConstraint(void* p2p) +void CcdPhysicsEnvironment::removeConstraint(int constraintId) { - std::vector<Point2PointConstraint*>::iterator i = - std::find(m_p2pConstraints.begin(), m_p2pConstraints.end(), - (Point2PointConstraint *)p2p); + std::vector<Point2PointConstraint*>::iterator i; + + //std::find(m_p2pConstraints.begin(), m_p2pConstraints.end(), + // (Point2PointConstraint *)p2p); - if (!(i == m_p2pConstraints.end()) ) - { - std::swap(*i, m_p2pConstraints.back()); - m_p2pConstraints.pop_back(); - } + for (i=m_p2pConstraints.begin(); + !(i==m_p2pConstraints.end()); i++) + { + Point2PointConstraint* p2p = (*i); + if (p2p->GetConstraintId() == constraintId) + { + std::swap(*i, m_p2pConstraints.back()); + m_p2pConstraints.pop_back(); + break; + } + } } PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h index 6050af2f3c8..1b2527aa5bb 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h @@ -63,6 +63,8 @@ class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment virtual void endFrame() {}; /// Perform an integration step of duration 'timeStep'. virtual bool proceedDeltaTime(double curTime,float timeStep); + bool proceedDeltaTimeOneStep(float timeStep); + virtual void setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep){}; //returns 0.f if no fixed timestep is used @@ -75,7 +77,7 @@ class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type, float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ); - virtual void removeConstraint(void* constraintid); + virtual void removeConstraint(int constraintid); virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp index 0b6f8a4ded4..0532a9a8cf7 100644 --- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp @@ -101,7 +101,7 @@ int DummyPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ct } -void DummyPhysicsEnvironment::removeConstraint(void * constraintid) +void DummyPhysicsEnvironment::removeConstraint(int constraintid) { if (constraintid) { diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h index 0a359feea6d..a400459afe6 100644 --- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h +++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h @@ -61,7 +61,7 @@ public: float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ); - virtual void removeConstraint(void * constraintid); + virtual void removeConstraint(int constraintid); virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ); diff --git a/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp b/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp index 081a2fb9794..656051be4f5 100644 --- a/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp +++ b/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp @@ -183,7 +183,7 @@ bool SM_Scene::proceed(MT_Scalar curtime, MT_Scalar ticrate) if (!m_frames) { if (ticrate > 0.) - m_frames = (unsigned int)(curtime*ticrate + 1.0); + m_frames = (unsigned int)(curtime*ticrate) + 1.0; else m_frames = (unsigned int)(curtime*65536.0); } @@ -275,7 +275,11 @@ bool SM_Scene::proceed(MT_Scalar curtime, MT_Scalar ticrate) for (i = m_objectList.begin(); i != m_objectList.end(); ++i) (*i)->interpolate(curtime); - m_frames = (unsigned int)(curtime*ticrate + 1.0); + //only update the m_frames after an actual physics timestep + if (num_samples) + { + m_frames = (unsigned int)(curtime*ticrate) + 1.0; + } } else { diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp index 8d03fd4b0f4..ead6dcc0106 100644 --- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp @@ -117,7 +117,7 @@ int SumoPhysicsEnvironment::createConstraint( return constraintid; } -void SumoPhysicsEnvironment::removeConstraint(void * constraintid) +void SumoPhysicsEnvironment::removeConstraint(int constraintid) { if (constraintid) { diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h index c93e34825b9..e1641407166 100644 --- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h +++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h @@ -66,7 +66,7 @@ public: float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ); - virtual void removeConstraint(void * constraintid); + virtual void removeConstraint(int constraintid); virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ); diff --git a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h index 1158563527a..078f84d4de2 100644 --- a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h +++ b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h @@ -83,7 +83,7 @@ class PHY_IPhysicsEnvironment virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type, float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ)=0; - virtual void removeConstraint(void * constraintid)=0; + virtual void removeConstraint(int constraintid)=0; virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)=0; diff --git a/source/gameengine/Rasterizer/Makefile b/source/gameengine/Rasterizer/Makefile index 6a1421ae90b..5f8eace8adb 100644 --- a/source/gameengine/Rasterizer/Makefile +++ b/source/gameengine/Rasterizer/Makefile @@ -42,7 +42,9 @@ CPPFLAGS += -I$(OPENGL_HEADERS) CPPFLAGS += -I$(NAN_STRING)/include CPPFLAGS += -I$(NAN_MOTO)/include CPPFLAGS += -I../../kernel/gen_system - +ifeq ($(OS),darwin) + CPPFLAGS += -fpascal-strings +endif ############### SOURCEDIR = source/gameengine/Rasterizer diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile index c03aab3422e..40f3fc50005 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile @@ -44,4 +44,6 @@ CPPFLAGS += -I$(NAN_STRING)/include CPPFLAGS += -I$(NAN_MOTO)/include CPPFLAGS += -I../../../kernel/gen_system CPPFLAGS += -I.. - +ifeq ($(OS),darwin) + CPPFLAGS += -fpascal-strings +endif diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp index 344fdbbf164..af3a9bca03e 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp @@ -47,7 +47,7 @@ #elif defined(__APPLE__) # include <Carbon/Carbon.h> - +# define GL_GLEXT_LEGACY 1 # include <OpenGL/gl.h> #else /* UNIX */ @@ -322,88 +322,88 @@ BL_EXTInfo RAS_EXT_support; #ifdef GL_ARB_multitexture int max_texture_units = 2; -PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; -PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB; -PFNGLMULTITEXCOORD1DARBPROC glMultiTexCoord1dARB; -PFNGLMULTITEXCOORD1DVARBPROC glMultiTexCoord1dvARB; -PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1fARB; -PFNGLMULTITEXCOORD1FVARBPROC glMultiTexCoord1fvARB; -PFNGLMULTITEXCOORD1IARBPROC glMultiTexCoord1iARB; -PFNGLMULTITEXCOORD1IVARBPROC glMultiTexCoord1ivARB; -PFNGLMULTITEXCOORD1SARBPROC glMultiTexCoord1sARB; -PFNGLMULTITEXCOORD1SVARBPROC glMultiTexCoord1svARB; -PFNGLMULTITEXCOORD2DARBPROC glMultiTexCoord2dARB; -PFNGLMULTITEXCOORD2DVARBPROC glMultiTexCoord2dvARB; -PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB; -PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB; -PFNGLMULTITEXCOORD2IARBPROC glMultiTexCoord2iARB; -PFNGLMULTITEXCOORD2IVARBPROC glMultiTexCoord2ivARB; -PFNGLMULTITEXCOORD2SARBPROC glMultiTexCoord2sARB; -PFNGLMULTITEXCOORD2SVARBPROC glMultiTexCoord2svARB; -PFNGLMULTITEXCOORD3DARBPROC glMultiTexCoord3dARB; -PFNGLMULTITEXCOORD3DVARBPROC glMultiTexCoord3dvARB; -PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB; -PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB; -PFNGLMULTITEXCOORD3IARBPROC glMultiTexCoord3iARB; -PFNGLMULTITEXCOORD3IVARBPROC glMultiTexCoord3ivARB; -PFNGLMULTITEXCOORD3SARBPROC glMultiTexCoord3sARB; -PFNGLMULTITEXCOORD3SVARBPROC glMultiTexCoord3svARB; -PFNGLMULTITEXCOORD4DARBPROC glMultiTexCoord4dARB; -PFNGLMULTITEXCOORD4DVARBPROC glMultiTexCoord4dvARB; -PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB; -PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB; -PFNGLMULTITEXCOORD4IARBPROC glMultiTexCoord4iARB; -PFNGLMULTITEXCOORD4IVARBPROC glMultiTexCoord4ivARB; -PFNGLMULTITEXCOORD4SARBPROC glMultiTexCoord4sARB; -PFNGLMULTITEXCOORD4SVARBPROC glMultiTexCoord4svARB; + PFNGLACTIVETEXTUREARBPROC blActiveTextureARB; + PFNGLCLIENTACTIVETEXTUREARBPROC blClientActiveTextureARB; + PFNGLMULTITEXCOORD1DARBPROC blMultiTexCoord1dARB; + PFNGLMULTITEXCOORD1DVARBPROC blMultiTexCoord1dvARB; + PFNGLMULTITEXCOORD1FARBPROC blMultiTexCoord1fARB; + PFNGLMULTITEXCOORD1FVARBPROC blMultiTexCoord1fvARB; + PFNGLMULTITEXCOORD1IARBPROC blMultiTexCoord1iARB; + PFNGLMULTITEXCOORD1IVARBPROC blMultiTexCoord1ivARB; + PFNGLMULTITEXCOORD1SARBPROC blMultiTexCoord1sARB; + PFNGLMULTITEXCOORD1SVARBPROC blMultiTexCoord1svARB; + PFNGLMULTITEXCOORD2DARBPROC blMultiTexCoord2dARB; + PFNGLMULTITEXCOORD2DVARBPROC blMultiTexCoord2dvARB; + PFNGLMULTITEXCOORD2FARBPROC blMultiTexCoord2fARB; + PFNGLMULTITEXCOORD2FVARBPROC blMultiTexCoord2fvARB; + PFNGLMULTITEXCOORD2IARBPROC blMultiTexCoord2iARB; + PFNGLMULTITEXCOORD2IVARBPROC blMultiTexCoord2ivARB; + PFNGLMULTITEXCOORD2SARBPROC blMultiTexCoord2sARB; + PFNGLMULTITEXCOORD2SVARBPROC blMultiTexCoord2svARB; + PFNGLMULTITEXCOORD3DARBPROC blMultiTexCoord3dARB; + PFNGLMULTITEXCOORD3DVARBPROC blMultiTexCoord3dvARB; + PFNGLMULTITEXCOORD3FARBPROC blMultiTexCoord3fARB; + PFNGLMULTITEXCOORD3FVARBPROC blMultiTexCoord3fvARB; + PFNGLMULTITEXCOORD3IARBPROC blMultiTexCoord3iARB; + PFNGLMULTITEXCOORD3IVARBPROC blMultiTexCoord3ivARB; + PFNGLMULTITEXCOORD3SARBPROC blMultiTexCoord3sARB; + PFNGLMULTITEXCOORD3SVARBPROC blMultiTexCoord3svARB; + PFNGLMULTITEXCOORD4DARBPROC blMultiTexCoord4dARB; + PFNGLMULTITEXCOORD4DVARBPROC blMultiTexCoord4dvARB; + PFNGLMULTITEXCOORD4FARBPROC blMultiTexCoord4fARB; + PFNGLMULTITEXCOORD4FVARBPROC blMultiTexCoord4fvARB; + PFNGLMULTITEXCOORD4IARBPROC blMultiTexCoord4iARB; + PFNGLMULTITEXCOORD4IVARBPROC blMultiTexCoord4ivARB; + PFNGLMULTITEXCOORD4SARBPROC blMultiTexCoord4sARB; + PFNGLMULTITEXCOORD4SVARBPROC blMultiTexCoord4svARB; #endif #ifdef GL_ARB_shader_objects -PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; -PFNGLGETHANDLEARBPROC glGetHandleARB; -PFNGLDETACHOBJECTARBPROC glDetachObjectARB; -PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; -PFNGLSHADERSOURCEARBPROC glShaderSourceARB; -PFNGLCOMPILESHADERARBPROC glCompileShaderARB; -PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; -PFNGLATTACHOBJECTARBPROC glAttachObjectARB; -PFNGLLINKPROGRAMARBPROC glLinkProgramARB; -PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; -PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB; -PFNGLUNIFORM1FARBPROC glUniform1fARB; -PFNGLUNIFORM2FARBPROC glUniform2fARB; -PFNGLUNIFORM3FARBPROC glUniform3fARB; -PFNGLUNIFORM4FARBPROC glUniform4fARB; -PFNGLUNIFORM1IARBPROC glUniform1iARB; -PFNGLUNIFORM2IARBPROC glUniform2iARB; -PFNGLUNIFORM3IARBPROC glUniform3iARB; -PFNGLUNIFORM4IARBPROC glUniform4iARB; -PFNGLUNIFORM1FVARBPROC glUniform1fvARB; -PFNGLUNIFORM2FVARBPROC glUniform2fvARB; -PFNGLUNIFORM3FVARBPROC glUniform3fvARB; -PFNGLUNIFORM4FVARBPROC glUniform4fvARB; -PFNGLUNIFORM1IVARBPROC glUniform1ivARB; -PFNGLUNIFORM2IVARBPROC glUniform2ivARB; -PFNGLUNIFORM3IVARBPROC glUniform3ivARB; -PFNGLUNIFORM4IVARBPROC glUniform4ivARB; -PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB; -PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB; -PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB; -PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB; -PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; -PFNGLGETINFOLOGARBPROC glGetInfoLogARB; -PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB; -PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; -PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB; -PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB; -PFNGLGETUNIFORMIVARBPROC glGetUniformivARB; -PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB; + PFNGLDELETEOBJECTARBPROC blDeleteObjectARB; + PFNGLGETHANDLEARBPROC blGetHandleARB; + PFNGLDETACHOBJECTARBPROC blDetachObjectARB; + PFNGLCREATESHADEROBJECTARBPROC blCreateShaderObjectARB; + PFNGLSHADERSOURCEARBPROC blShaderSourceARB; + PFNGLCOMPILESHADERARBPROC blCompileShaderARB; + PFNGLCREATEPROGRAMOBJECTARBPROC blCreateProgramObjectARB; + PFNGLATTACHOBJECTARBPROC blAttachObjectARB; + PFNGLLINKPROGRAMARBPROC blLinkProgramARB; + PFNGLUSEPROGRAMOBJECTARBPROC blUseProgramObjectARB; + PFNGLVALIDATEPROGRAMARBPROC blValidateProgramARB; + PFNGLUNIFORM1FARBPROC blUniform1fARB; + PFNGLUNIFORM2FARBPROC blUniform2fARB; + PFNGLUNIFORM3FARBPROC blUniform3fARB; + PFNGLUNIFORM4FARBPROC blUniform4fARB; + PFNGLUNIFORM1IARBPROC blUniform1iARB; + PFNGLUNIFORM2IARBPROC blUniform2iARB; + PFNGLUNIFORM3IARBPROC blUniform3iARB; + PFNGLUNIFORM4IARBPROC blUniform4iARB; + PFNGLUNIFORM1FVARBPROC blUniform1fvARB; + PFNGLUNIFORM2FVARBPROC blUniform2fvARB; + PFNGLUNIFORM3FVARBPROC blUniform3fvARB; + PFNGLUNIFORM4FVARBPROC blUniform4fvARB; + PFNGLUNIFORM1IVARBPROC blUniform1ivARB; + PFNGLUNIFORM2IVARBPROC blUniform2ivARB; + PFNGLUNIFORM3IVARBPROC blUniform3ivARB; + PFNGLUNIFORM4IVARBPROC blUniform4ivARB; + PFNGLUNIFORMMATRIX2FVARBPROC blUniformMatrix2fvARB; + PFNGLUNIFORMMATRIX3FVARBPROC blUniformMatrix3fvARB; + PFNGLUNIFORMMATRIX4FVARBPROC blUniformMatrix4fvARB; + PFNGLGETOBJECTPARAMETERFVARBPROC blGetObjectParameterfvARB; + PFNGLGETOBJECTPARAMETERIVARBPROC blGetObjectParameterivARB; + PFNGLGETINFOLOGARBPROC blGetInfoLogARB; + PFNGLGETATTACHEDOBJECTSARBPROC blGetAttachedObjectsARB; + PFNGLGETUNIFORMLOCATIONARBPROC blGetUniformLocationARB; + PFNGLGETACTIVEUNIFORMARBPROC blGetActiveUniformARB; + PFNGLGETUNIFORMFVARBPROC blGetUniformfvARB; + PFNGLGETUNIFORMIVARBPROC blGetUniformivARB; + PFNGLGETSHADERSOURCEARBPROC blGetShaderSourceARB; #endif #ifdef GL_ARB_vertex_shader -PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB; -PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB; -PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB; +PFNGLBINDATTRIBLOCATIONARBPROC blBindAttribLocationARB; +PFNGLGETACTIVEATTRIBARBPROC blGetActiveAttribARB; +PFNGLGETATTRIBLOCATIONARBPROC blGetAttribLocationARB; #endif } // namespace bgl @@ -464,41 +464,41 @@ static void LinkExtensions() #ifdef GL_ARB_multitexture if (QueryExtension("GL_ARB_multitexture")) { - bgl::glActiveTextureARB = reinterpret_cast<PFNGLACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glActiveTextureARB")); - bgl::glClientActiveTextureARB = reinterpret_cast<PFNGLCLIENTACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glClientActiveTextureARB")); - bgl::glMultiTexCoord1dARB = reinterpret_cast<PFNGLMULTITEXCOORD1DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dARB")); - bgl::glMultiTexCoord1dvARB = reinterpret_cast<PFNGLMULTITEXCOORD1DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dvARB")); - bgl::glMultiTexCoord1fARB = reinterpret_cast<PFNGLMULTITEXCOORD1FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fARB")); - bgl::glMultiTexCoord1fvARB = reinterpret_cast<PFNGLMULTITEXCOORD1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fvARB")); - bgl::glMultiTexCoord1iARB = reinterpret_cast<PFNGLMULTITEXCOORD1IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1iARB")); - bgl::glMultiTexCoord1ivARB = reinterpret_cast<PFNGLMULTITEXCOORD1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1ivARB")); - bgl::glMultiTexCoord1sARB = reinterpret_cast<PFNGLMULTITEXCOORD1SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1sARB")); - bgl::glMultiTexCoord1svARB = reinterpret_cast<PFNGLMULTITEXCOORD1SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1svARB")); - bgl::glMultiTexCoord2dARB = reinterpret_cast<PFNGLMULTITEXCOORD2DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dARB")); - bgl::glMultiTexCoord2dvARB = reinterpret_cast<PFNGLMULTITEXCOORD2DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dvARB")); - bgl::glMultiTexCoord2fARB = reinterpret_cast<PFNGLMULTITEXCOORD2FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fARB")); - bgl::glMultiTexCoord2fvARB = reinterpret_cast<PFNGLMULTITEXCOORD2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fvARB")); - bgl::glMultiTexCoord2iARB = reinterpret_cast<PFNGLMULTITEXCOORD2IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2iARB")); - bgl::glMultiTexCoord2ivARB = reinterpret_cast<PFNGLMULTITEXCOORD2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2ivARB")); - bgl::glMultiTexCoord2sARB = reinterpret_cast<PFNGLMULTITEXCOORD2SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2sARB")); - bgl::glMultiTexCoord2svARB = reinterpret_cast<PFNGLMULTITEXCOORD2SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2svARB")); - bgl::glMultiTexCoord3dARB = reinterpret_cast<PFNGLMULTITEXCOORD3DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dARB")); - bgl::glMultiTexCoord3dvARB = reinterpret_cast<PFNGLMULTITEXCOORD3DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dvARB")); - bgl::glMultiTexCoord3fARB = reinterpret_cast<PFNGLMULTITEXCOORD3FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fARB")); - bgl::glMultiTexCoord3fvARB = reinterpret_cast<PFNGLMULTITEXCOORD3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fvARB")); - bgl::glMultiTexCoord3iARB = reinterpret_cast<PFNGLMULTITEXCOORD3IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3iARB")); - bgl::glMultiTexCoord3ivARB = reinterpret_cast<PFNGLMULTITEXCOORD3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3ivARB")); - bgl::glMultiTexCoord3sARB = reinterpret_cast<PFNGLMULTITEXCOORD3SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3sARB")); - bgl::glMultiTexCoord3svARB = reinterpret_cast<PFNGLMULTITEXCOORD3SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3svARB")); - bgl::glMultiTexCoord4dARB = reinterpret_cast<PFNGLMULTITEXCOORD4DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dARB")); - bgl::glMultiTexCoord4dvARB = reinterpret_cast<PFNGLMULTITEXCOORD4DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dvARB")); - bgl::glMultiTexCoord4fARB = reinterpret_cast<PFNGLMULTITEXCOORD4FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fARB")); - bgl::glMultiTexCoord4fvARB = reinterpret_cast<PFNGLMULTITEXCOORD4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fvARB")); - bgl::glMultiTexCoord4iARB = reinterpret_cast<PFNGLMULTITEXCOORD4IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4iARB")); - bgl::glMultiTexCoord4ivARB = reinterpret_cast<PFNGLMULTITEXCOORD4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4ivARB")); - bgl::glMultiTexCoord4sARB = reinterpret_cast<PFNGLMULTITEXCOORD4SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4sARB")); - bgl::glMultiTexCoord4svARB = reinterpret_cast<PFNGLMULTITEXCOORD4SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4svARB")); - if (bgl::glActiveTextureARB && bgl::glClientActiveTextureARB && bgl::glMultiTexCoord1dARB && bgl::glMultiTexCoord1dvARB && bgl::glMultiTexCoord1fARB && bgl::glMultiTexCoord1fvARB && bgl::glMultiTexCoord1iARB && bgl::glMultiTexCoord1ivARB && bgl::glMultiTexCoord1sARB && bgl::glMultiTexCoord1svARB && bgl::glMultiTexCoord2dARB && bgl::glMultiTexCoord2dvARB && bgl::glMultiTexCoord2fARB && bgl::glMultiTexCoord2fvARB && bgl::glMultiTexCoord2iARB && bgl::glMultiTexCoord2ivARB && bgl::glMultiTexCoord2sARB && bgl::glMultiTexCoord2svARB && bgl::glMultiTexCoord3dARB && bgl::glMultiTexCoord3dvARB && bgl::glMultiTexCoord3fARB && bgl::glMultiTexCoord3fvARB && bgl::glMultiTexCoord3iARB && bgl::glMultiTexCoord3ivARB && bgl::glMultiTexCoord3sARB && bgl::glMultiTexCoord3svARB && bgl::glMultiTexCoord4dARB && bgl::glMultiTexCoord4dvARB && bgl::glMultiTexCoord4fARB && bgl::glMultiTexCoord4fvARB && bgl::glMultiTexCoord4iARB && bgl::glMultiTexCoord4ivARB && bgl::glMultiTexCoord4sARB && bgl::glMultiTexCoord4svARB) { + bgl::blActiveTextureARB = reinterpret_cast<PFNGLACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glActiveTextureARB")); + bgl::blClientActiveTextureARB = reinterpret_cast<PFNGLCLIENTACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glClientActiveTextureARB")); + bgl::blMultiTexCoord1dARB = reinterpret_cast<PFNGLMULTITEXCOORD1DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dARB")); + bgl::blMultiTexCoord1dvARB = reinterpret_cast<PFNGLMULTITEXCOORD1DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dvARB")); + bgl::blMultiTexCoord1fARB = reinterpret_cast<PFNGLMULTITEXCOORD1FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fARB")); + bgl::blMultiTexCoord1fvARB = reinterpret_cast<PFNGLMULTITEXCOORD1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fvARB")); + bgl::blMultiTexCoord1iARB = reinterpret_cast<PFNGLMULTITEXCOORD1IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1iARB")); + bgl::blMultiTexCoord1ivARB = reinterpret_cast<PFNGLMULTITEXCOORD1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1ivARB")); + bgl::blMultiTexCoord1sARB = reinterpret_cast<PFNGLMULTITEXCOORD1SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1sARB")); + bgl::blMultiTexCoord1svARB = reinterpret_cast<PFNGLMULTITEXCOORD1SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1svARB")); + bgl::blMultiTexCoord2dARB = reinterpret_cast<PFNGLMULTITEXCOORD2DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dARB")); + bgl::blMultiTexCoord2dvARB = reinterpret_cast<PFNGLMULTITEXCOORD2DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dvARB")); + bgl::blMultiTexCoord2fARB = reinterpret_cast<PFNGLMULTITEXCOORD2FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fARB")); + bgl::blMultiTexCoord2fvARB = reinterpret_cast<PFNGLMULTITEXCOORD2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fvARB")); + bgl::blMultiTexCoord2iARB = reinterpret_cast<PFNGLMULTITEXCOORD2IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2iARB")); + bgl::blMultiTexCoord2ivARB = reinterpret_cast<PFNGLMULTITEXCOORD2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2ivARB")); + bgl::blMultiTexCoord2sARB = reinterpret_cast<PFNGLMULTITEXCOORD2SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2sARB")); + bgl::blMultiTexCoord2svARB = reinterpret_cast<PFNGLMULTITEXCOORD2SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2svARB")); + bgl::blMultiTexCoord3dARB = reinterpret_cast<PFNGLMULTITEXCOORD3DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dARB")); + bgl::blMultiTexCoord3dvARB = reinterpret_cast<PFNGLMULTITEXCOORD3DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dvARB")); + bgl::blMultiTexCoord3fARB = reinterpret_cast<PFNGLMULTITEXCOORD3FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fARB")); + bgl::blMultiTexCoord3fvARB = reinterpret_cast<PFNGLMULTITEXCOORD3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fvARB")); + bgl::blMultiTexCoord3iARB = reinterpret_cast<PFNGLMULTITEXCOORD3IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3iARB")); + bgl::blMultiTexCoord3ivARB = reinterpret_cast<PFNGLMULTITEXCOORD3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3ivARB")); + bgl::blMultiTexCoord3sARB = reinterpret_cast<PFNGLMULTITEXCOORD3SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3sARB")); + bgl::blMultiTexCoord3svARB = reinterpret_cast<PFNGLMULTITEXCOORD3SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3svARB")); + bgl::blMultiTexCoord4dARB = reinterpret_cast<PFNGLMULTITEXCOORD4DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dARB")); + bgl::blMultiTexCoord4dvARB = reinterpret_cast<PFNGLMULTITEXCOORD4DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dvARB")); + bgl::blMultiTexCoord4fARB = reinterpret_cast<PFNGLMULTITEXCOORD4FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fARB")); + bgl::blMultiTexCoord4fvARB = reinterpret_cast<PFNGLMULTITEXCOORD4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fvARB")); + bgl::blMultiTexCoord4iARB = reinterpret_cast<PFNGLMULTITEXCOORD4IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4iARB")); + bgl::blMultiTexCoord4ivARB = reinterpret_cast<PFNGLMULTITEXCOORD4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4ivARB")); + bgl::blMultiTexCoord4sARB = reinterpret_cast<PFNGLMULTITEXCOORD4SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4sARB")); + bgl::blMultiTexCoord4svARB = reinterpret_cast<PFNGLMULTITEXCOORD4SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4svARB")); + if (bgl::blActiveTextureARB && bgl::blClientActiveTextureARB && bgl::blMultiTexCoord1dARB && bgl::blMultiTexCoord1dvARB && bgl::blMultiTexCoord1fARB && bgl::blMultiTexCoord1fvARB && bgl::blMultiTexCoord1iARB && bgl::blMultiTexCoord1ivARB && bgl::blMultiTexCoord1sARB && bgl::blMultiTexCoord1svARB && bgl::blMultiTexCoord2dARB && bgl::blMultiTexCoord2dvARB && bgl::blMultiTexCoord2fARB && bgl::blMultiTexCoord2fvARB && bgl::blMultiTexCoord2iARB && bgl::blMultiTexCoord2ivARB && bgl::blMultiTexCoord2sARB && bgl::blMultiTexCoord2svARB && bgl::blMultiTexCoord3dARB && bgl::blMultiTexCoord3dvARB && bgl::blMultiTexCoord3fARB && bgl::blMultiTexCoord3fvARB && bgl::blMultiTexCoord3iARB && bgl::blMultiTexCoord3ivARB && bgl::blMultiTexCoord3sARB && bgl::blMultiTexCoord3svARB && bgl::blMultiTexCoord4dARB && bgl::blMultiTexCoord4dvARB && bgl::blMultiTexCoord4fARB && bgl::blMultiTexCoord4fvARB && bgl::blMultiTexCoord4iARB && bgl::blMultiTexCoord4ivARB && bgl::blMultiTexCoord4sARB && bgl::blMultiTexCoord4svARB) { EnableExtension(_GL_ARB_multitexture); RAS_EXT_support._ARB_multitexture = 1; if (doDebugMessages) @@ -509,49 +509,49 @@ static void LinkExtensions() } #endif -#ifdef GL_ARB_shader_objects +#if GL_ARB_shader_objects if (QueryExtension("GL_ARB_shader_objects")) { - glDeleteObjectARB = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDeleteObjectARB")); - glGetHandleARB = reinterpret_cast<PFNGLGETHANDLEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetHandleARB")); - glDetachObjectARB = reinterpret_cast<PFNGLDETACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDetachObjectARB")); - glCreateShaderObjectARB = reinterpret_cast<PFNGLCREATESHADEROBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateShaderObjectARB")); - glShaderSourceARB = reinterpret_cast<PFNGLSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glShaderSourceARB")); - glCompileShaderARB = reinterpret_cast<PFNGLCOMPILESHADERARBPROC>(bglGetProcAddress((const GLubyte *) "glCompileShaderARB")); - glCreateProgramObjectARB = reinterpret_cast<PFNGLCREATEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateProgramObjectARB")); - glAttachObjectARB = reinterpret_cast<PFNGLATTACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glAttachObjectARB")); - glLinkProgramARB = reinterpret_cast<PFNGLLINKPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glLinkProgramARB")); - glUseProgramObjectARB = reinterpret_cast<PFNGLUSEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glUseProgramObjectARB")); - glValidateProgramARB = reinterpret_cast<PFNGLVALIDATEPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glValidateProgramARB")); - glUniform1fARB = reinterpret_cast<PFNGLUNIFORM1FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fARB")); - glUniform2fARB = reinterpret_cast<PFNGLUNIFORM2FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fARB")); - glUniform3fARB = reinterpret_cast<PFNGLUNIFORM3FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fARB")); - glUniform4fARB = reinterpret_cast<PFNGLUNIFORM4FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fARB")); - glUniform1iARB = reinterpret_cast<PFNGLUNIFORM1IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1iARB")); - glUniform2iARB = reinterpret_cast<PFNGLUNIFORM2IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2iARB")); - glUniform3iARB = reinterpret_cast<PFNGLUNIFORM3IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3iARB")); - glUniform4iARB = reinterpret_cast<PFNGLUNIFORM4IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4iARB")); - glUniform1fvARB = reinterpret_cast<PFNGLUNIFORM1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fvARB")); - glUniform2fvARB = reinterpret_cast<PFNGLUNIFORM2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fvARB")); - glUniform3fvARB = reinterpret_cast<PFNGLUNIFORM3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fvARB")); - glUniform4fvARB = reinterpret_cast<PFNGLUNIFORM4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fvARB")); - glUniform1ivARB = reinterpret_cast<PFNGLUNIFORM1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1ivARB")); - glUniform2ivARB = reinterpret_cast<PFNGLUNIFORM2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2ivARB")); - glUniform3ivARB = reinterpret_cast<PFNGLUNIFORM3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3ivARB")); - glUniform4ivARB = reinterpret_cast<PFNGLUNIFORM4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4ivARB")); - glUniformMatrix2fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix2fvARB")); - glUniformMatrix3fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix3fvARB")); - glUniformMatrix4fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix4fvARB")); - glGetObjectParameterfvARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterfvARB")); - glGetObjectParameterivARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterivARB")); - glGetInfoLogARB = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(bglGetProcAddress((const GLubyte *) "glGetInfoLogARB")); - glGetAttachedObjectsARB = reinterpret_cast<PFNGLGETATTACHEDOBJECTSARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttachedObjectsARB")); - glGetUniformLocationARB = reinterpret_cast<PFNGLGETUNIFORMLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformLocationARB")); - glGetActiveUniformARB = reinterpret_cast<PFNGLGETACTIVEUNIFORMARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveUniformARB")); - glGetUniformfvARB = reinterpret_cast<PFNGLGETUNIFORMFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformfvARB")); - glGetUniformivARB = reinterpret_cast<PFNGLGETUNIFORMIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformivARB")); - glGetShaderSourceARB = reinterpret_cast<PFNGLGETSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetShaderSourceARB")); - if (glDeleteObjectARB && glGetHandleARB && glDetachObjectARB && glCreateShaderObjectARB && glShaderSourceARB && glCompileShaderARB && glCreateProgramObjectARB && glAttachObjectARB && glLinkProgramARB && glUseProgramObjectARB && glValidateProgramARB && glUniform1fARB && glUniform2fARB && glUniform3fARB && glUniform4fARB && glUniform1iARB && glUniform2iARB && glUniform3iARB && glUniform4iARB && glUniform1fvARB && glUniform2fvARB && glUniform3fvARB && glUniform4fvARB && glUniform1ivARB && glUniform2ivARB && glUniform3ivARB && glUniform4ivARB && glUniformMatrix2fvARB && glUniformMatrix3fvARB && glUniformMatrix4fvARB && glGetObjectParameterfvARB && glGetObjectParameterivARB && glGetInfoLogARB && glGetAttachedObjectsARB && glGetUniformLocationARB && glGetActiveUniformARB && glGetUniformfvARB && glGetUniformivARB && glGetShaderSourceARB) { + bgl::blDeleteObjectARB = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDeleteObjectARB")); + bgl::blGetHandleARB = reinterpret_cast<PFNGLGETHANDLEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetHandleARB")); + bgl::blDetachObjectARB = reinterpret_cast<PFNGLDETACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDetachObjectARB")); + bgl::blCreateShaderObjectARB = reinterpret_cast<PFNGLCREATESHADEROBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateShaderObjectARB")); + bgl::blShaderSourceARB = reinterpret_cast<PFNGLSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glShaderSourceARB")); + bgl::blCompileShaderARB = reinterpret_cast<PFNGLCOMPILESHADERARBPROC>(bglGetProcAddress((const GLubyte *) "glCompileShaderARB")); + bgl::blCreateProgramObjectARB = reinterpret_cast<PFNGLCREATEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateProgramObjectARB")); + bgl::blAttachObjectARB = reinterpret_cast<PFNGLATTACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glAttachObjectARB")); + bgl::blLinkProgramARB = reinterpret_cast<PFNGLLINKPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glLinkProgramARB")); + bgl::blUseProgramObjectARB = reinterpret_cast<PFNGLUSEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glUseProgramObjectARB")); + bgl::blValidateProgramARB = reinterpret_cast<PFNGLVALIDATEPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glValidateProgramARB")); + bgl::blUniform1fARB = reinterpret_cast<PFNGLUNIFORM1FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fARB")); + bgl::blUniform2fARB = reinterpret_cast<PFNGLUNIFORM2FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fARB")); + bgl::blUniform3fARB = reinterpret_cast<PFNGLUNIFORM3FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fARB")); + bgl::blUniform4fARB = reinterpret_cast<PFNGLUNIFORM4FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fARB")); + bgl::blUniform1iARB = reinterpret_cast<PFNGLUNIFORM1IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1iARB")); + bgl::blUniform2iARB = reinterpret_cast<PFNGLUNIFORM2IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2iARB")); + bgl::blUniform3iARB = reinterpret_cast<PFNGLUNIFORM3IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3iARB")); + bgl::blUniform4iARB = reinterpret_cast<PFNGLUNIFORM4IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4iARB")); + bgl::blUniform1fvARB = reinterpret_cast<PFNGLUNIFORM1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fvARB")); + bgl::blUniform2fvARB = reinterpret_cast<PFNGLUNIFORM2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fvARB")); + bgl::blUniform3fvARB = reinterpret_cast<PFNGLUNIFORM3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fvARB")); + bgl::blUniform4fvARB = reinterpret_cast<PFNGLUNIFORM4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fvARB")); + bgl::blUniform1ivARB = reinterpret_cast<PFNGLUNIFORM1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1ivARB")); + bgl::blUniform2ivARB = reinterpret_cast<PFNGLUNIFORM2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2ivARB")); + bgl::blUniform3ivARB = reinterpret_cast<PFNGLUNIFORM3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3ivARB")); + bgl::blUniform4ivARB = reinterpret_cast<PFNGLUNIFORM4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4ivARB")); + bgl::blUniformMatrix2fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix2fvARB")); + bgl::blUniformMatrix3fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix3fvARB")); + bgl::blUniformMatrix4fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix4fvARB")); + bgl::blGetObjectParameterfvARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterfvARB")); + bgl::blGetObjectParameterivARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterivARB")); + bgl::blGetInfoLogARB = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(bglGetProcAddress((const GLubyte *) "glGetInfoLogARB")); + bgl::blGetAttachedObjectsARB = reinterpret_cast<PFNGLGETATTACHEDOBJECTSARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttachedObjectsARB")); + bgl::blGetUniformLocationARB = reinterpret_cast<PFNGLGETUNIFORMLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformLocationARB")); + bgl::blGetActiveUniformARB = reinterpret_cast<PFNGLGETACTIVEUNIFORMARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveUniformARB")); + bgl::blGetUniformfvARB = reinterpret_cast<PFNGLGETUNIFORMFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformfvARB")); + bgl::blGetUniformivARB = reinterpret_cast<PFNGLGETUNIFORMIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformivARB")); + bgl::blGetShaderSourceARB = reinterpret_cast<PFNGLGETSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetShaderSourceARB")); + if (bgl::blDeleteObjectARB && bgl::blGetHandleARB && bgl::blDetachObjectARB && bgl::blCreateShaderObjectARB && bgl::blShaderSourceARB && bgl::blCompileShaderARB && bgl::blCreateProgramObjectARB && bgl::blAttachObjectARB && bgl::blLinkProgramARB && bgl::blUseProgramObjectARB && bgl::blValidateProgramARB && bgl::blUniform1fARB && bgl::blUniform2fARB && bgl::blUniform3fARB && bgl::blUniform4fARB && bgl::blUniform1iARB && bgl::blUniform2iARB && bgl::blUniform3iARB && bgl::blUniform4iARB && bgl::blUniform1fvARB && bgl::blUniform2fvARB && bgl::blUniform3fvARB && bgl::blUniform4fvARB && bgl::blUniform1ivARB && bgl::blUniform2ivARB && bgl::blUniform3ivARB && bgl::blUniform4ivARB && bgl::blUniformMatrix2fvARB && bgl::blUniformMatrix3fvARB && bgl::blUniformMatrix4fvARB && bgl::blGetObjectParameterfvARB && bgl::blGetObjectParameterivARB && bgl::blGetInfoLogARB && bgl::blGetAttachedObjectsARB && bgl::blGetUniformLocationARB && bgl::blGetActiveUniformARB && bgl::blGetUniformfvARB && bgl::blGetUniformivARB && bgl::blGetShaderSourceARB) { EnableExtension(_GL_ARB_shader_objects); RAS_EXT_support._ARB_shader_objects =1; if (doDebugMessages) @@ -562,13 +562,13 @@ static void LinkExtensions() } #endif -#ifdef GL_ARB_vertex_shader +#if GL_ARB_vertex_shader if (QueryExtension("GL_ARB_vertex_shader")) { - glBindAttribLocationARB = reinterpret_cast<PFNGLBINDATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glBindAttribLocationARB")); - glGetActiveAttribARB = reinterpret_cast<PFNGLGETACTIVEATTRIBARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveAttribARB")); - glGetAttribLocationARB = reinterpret_cast<PFNGLGETATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttribLocationARB")); - if (glBindAttribLocationARB && glGetActiveAttribARB && glGetAttribLocationARB) { + bgl::blBindAttribLocationARB = reinterpret_cast<PFNGLBINDATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glBindAttribLocationARB")); + bgl::blGetActiveAttribARB = reinterpret_cast<PFNGLGETACTIVEATTRIBARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveAttribARB")); + bgl::blGetAttribLocationARB = reinterpret_cast<PFNGLGETATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttribLocationARB")); + if (bgl::blBindAttribLocationARB && bgl::blGetActiveAttribARB && bgl::blGetAttribLocationARB) { EnableExtension(_GL_ARB_vertex_shader); RAS_EXT_support._ARB_vertex_shader = 1; if (doDebugMessages) diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h index 2d862ea3853..a5dad19222b 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h @@ -39,6 +39,7 @@ #elif defined(__APPLE__) # define __glext_h_ +# define GL_GLEXT_LEGACY 1 # include <OpenGL/gl.h> # include <OpenGL/glu.h> # undef __glext_h_ @@ -52,6 +53,7 @@ #endif #include "glext.h" + #include "EXT_separate_specular_color.h" #include "ARB_multitexture.h" namespace bgl @@ -379,8 +381,8 @@ namespace bgl void InitExtensions(int debug); #if defined(PFNGLPNTRIANGLESIATIPROC) -extern PFNGLPNTRIANGLESIATIPROC glPNTrianglesiATI; -extern PFNGLPNTRIANGLESFATIPROC glPNTrianglesfATI; +extern PFNGLPNTRIANGLESIATIPROC blPNTrianglesiATI; +extern PFNGLPNTRIANGLESFATIPROC blPNTrianglesfATI; #endif @@ -413,89 +415,89 @@ extern BL_EXTInfo RAS_EXT_support; #ifdef GL_ARB_multitexture // defined in glext.h now... extern int max_texture_units; -extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; -extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB; -extern PFNGLMULTITEXCOORD1DARBPROC glMultiTexCoord1dARB; -extern PFNGLMULTITEXCOORD1DVARBPROC glMultiTexCoord1dvARB; -extern PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1fARB; -extern PFNGLMULTITEXCOORD1FVARBPROC glMultiTexCoord1fvARB; -extern PFNGLMULTITEXCOORD1IARBPROC glMultiTexCoord1iARB; -extern PFNGLMULTITEXCOORD1IVARBPROC glMultiTexCoord1ivARB; -extern PFNGLMULTITEXCOORD1SARBPROC glMultiTexCoord1sARB; -extern PFNGLMULTITEXCOORD1SVARBPROC glMultiTexCoord1svARB; -extern PFNGLMULTITEXCOORD2DARBPROC glMultiTexCoord2dARB; -extern PFNGLMULTITEXCOORD2DVARBPROC glMultiTexCoord2dvARB; -extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB; -extern PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB; -extern PFNGLMULTITEXCOORD2IARBPROC glMultiTexCoord2iARB; -extern PFNGLMULTITEXCOORD2IVARBPROC glMultiTexCoord2ivARB; -extern PFNGLMULTITEXCOORD2SARBPROC glMultiTexCoord2sARB; -extern PFNGLMULTITEXCOORD2SVARBPROC glMultiTexCoord2svARB; -extern PFNGLMULTITEXCOORD3DARBPROC glMultiTexCoord3dARB; -extern PFNGLMULTITEXCOORD3DVARBPROC glMultiTexCoord3dvARB; -extern PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB; -extern PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB; -extern PFNGLMULTITEXCOORD3IARBPROC glMultiTexCoord3iARB; -extern PFNGLMULTITEXCOORD3IVARBPROC glMultiTexCoord3ivARB; -extern PFNGLMULTITEXCOORD3SARBPROC glMultiTexCoord3sARB; -extern PFNGLMULTITEXCOORD3SVARBPROC glMultiTexCoord3svARB; -extern PFNGLMULTITEXCOORD4DARBPROC glMultiTexCoord4dARB; -extern PFNGLMULTITEXCOORD4DVARBPROC glMultiTexCoord4dvARB; -extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB; -extern PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB; -extern PFNGLMULTITEXCOORD4IARBPROC glMultiTexCoord4iARB; -extern PFNGLMULTITEXCOORD4IVARBPROC glMultiTexCoord4ivARB; -extern PFNGLMULTITEXCOORD4SARBPROC glMultiTexCoord4sARB; -extern PFNGLMULTITEXCOORD4SVARBPROC glMultiTexCoord4svARB; +extern PFNGLACTIVETEXTUREARBPROC blActiveTextureARB; +extern PFNGLCLIENTACTIVETEXTUREARBPROC blClientActiveTextureARB; +extern PFNGLMULTITEXCOORD1DARBPROC blMultiTexCoord1dARB; +extern PFNGLMULTITEXCOORD1DVARBPROC blMultiTexCoord1dvARB; +extern PFNGLMULTITEXCOORD1FARBPROC blMultiTexCoord1fARB; +extern PFNGLMULTITEXCOORD1FVARBPROC blMultiTexCoord1fvARB; +extern PFNGLMULTITEXCOORD1IARBPROC blMultiTexCoord1iARB; +extern PFNGLMULTITEXCOORD1IVARBPROC blMultiTexCoord1ivARB; +extern PFNGLMULTITEXCOORD1SARBPROC blMultiTexCoord1sARB; +extern PFNGLMULTITEXCOORD1SVARBPROC blMultiTexCoord1svARB; +extern PFNGLMULTITEXCOORD2DARBPROC blMultiTexCoord2dARB; +extern PFNGLMULTITEXCOORD2DVARBPROC blMultiTexCoord2dvARB; +extern PFNGLMULTITEXCOORD2FARBPROC blMultiTexCoord2fARB; +extern PFNGLMULTITEXCOORD2FVARBPROC blMultiTexCoord2fvARB; +extern PFNGLMULTITEXCOORD2IARBPROC blMultiTexCoord2iARB; +extern PFNGLMULTITEXCOORD2IVARBPROC blMultiTexCoord2ivARB; +extern PFNGLMULTITEXCOORD2SARBPROC blMultiTexCoord2sARB; +extern PFNGLMULTITEXCOORD2SVARBPROC blMultiTexCoord2svARB; +extern PFNGLMULTITEXCOORD3DARBPROC blMultiTexCoord3dARB; +extern PFNGLMULTITEXCOORD3DVARBPROC blMultiTexCoord3dvARB; +extern PFNGLMULTITEXCOORD3FARBPROC blMultiTexCoord3fARB; +extern PFNGLMULTITEXCOORD3FVARBPROC blMultiTexCoord3fvARB; +extern PFNGLMULTITEXCOORD3IARBPROC blMultiTexCoord3iARB; +extern PFNGLMULTITEXCOORD3IVARBPROC blMultiTexCoord3ivARB; +extern PFNGLMULTITEXCOORD3SARBPROC blMultiTexCoord3sARB; +extern PFNGLMULTITEXCOORD3SVARBPROC blMultiTexCoord3svARB; +extern PFNGLMULTITEXCOORD4DARBPROC blMultiTexCoord4dARB; +extern PFNGLMULTITEXCOORD4DVARBPROC blMultiTexCoord4dvARB; +extern PFNGLMULTITEXCOORD4FARBPROC blMultiTexCoord4fARB; +extern PFNGLMULTITEXCOORD4FVARBPROC blMultiTexCoord4fvARB; +extern PFNGLMULTITEXCOORD4IARBPROC blMultiTexCoord4iARB; +extern PFNGLMULTITEXCOORD4IVARBPROC blMultiTexCoord4ivARB; +extern PFNGLMULTITEXCOORD4SARBPROC blMultiTexCoord4sARB; +extern PFNGLMULTITEXCOORD4SVARBPROC blMultiTexCoord4svARB; #endif #ifdef GL_ARB_shader_objects -extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; -extern PFNGLGETHANDLEARBPROC glGetHandleARB; -extern PFNGLDETACHOBJECTARBPROC glDetachObjectARB; -extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; -extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB; -extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB; -extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; -extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB; -extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB; -extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; -extern PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB; -extern PFNGLUNIFORM1FARBPROC glUniform1fARB; -extern PFNGLUNIFORM2FARBPROC glUniform2fARB; -extern PFNGLUNIFORM3FARBPROC glUniform3fARB; -extern PFNGLUNIFORM4FARBPROC glUniform4fARB; -extern PFNGLUNIFORM1IARBPROC glUniform1iARB; -extern PFNGLUNIFORM2IARBPROC glUniform2iARB; -extern PFNGLUNIFORM3IARBPROC glUniform3iARB; -extern PFNGLUNIFORM4IARBPROC glUniform4iARB; -extern PFNGLUNIFORM1FVARBPROC glUniform1fvARB; -extern PFNGLUNIFORM2FVARBPROC glUniform2fvARB; -extern PFNGLUNIFORM3FVARBPROC glUniform3fvARB; -extern PFNGLUNIFORM4FVARBPROC glUniform4fvARB; -extern PFNGLUNIFORM1IVARBPROC glUniform1ivARB; -extern PFNGLUNIFORM2IVARBPROC glUniform2ivARB; -extern PFNGLUNIFORM3IVARBPROC glUniform3ivARB; -extern PFNGLUNIFORM4IVARBPROC glUniform4ivARB; -extern PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB; -extern PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB; -extern PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB; -extern PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB; -extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; -extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB; -extern PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB; -extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; -extern PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB; -extern PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB; -extern PFNGLGETUNIFORMIVARBPROC glGetUniformivARB; -extern PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB; +extern PFNGLDELETEOBJECTARBPROC blDeleteObjectARB; +extern PFNGLGETHANDLEARBPROC blGetHandleARB; +extern PFNGLDETACHOBJECTARBPROC blDetachObjectARB; +extern PFNGLCREATESHADEROBJECTARBPROC blCreateShaderObjectARB; +extern PFNGLSHADERSOURCEARBPROC blShaderSourceARB; +extern PFNGLCOMPILESHADERARBPROC blCompileShaderARB; +extern PFNGLCREATEPROGRAMOBJECTARBPROC blCreateProgramObjectARB; +extern PFNGLATTACHOBJECTARBPROC blAttachObjectARB; +extern PFNGLLINKPROGRAMARBPROC blLinkProgramARB; +extern PFNGLUSEPROGRAMOBJECTARBPROC blUseProgramObjectARB; +extern PFNGLVALIDATEPROGRAMARBPROC blValidateProgramARB; +extern PFNGLUNIFORM1FARBPROC blUniform1fARB; +extern PFNGLUNIFORM2FARBPROC blUniform2fARB; +extern PFNGLUNIFORM3FARBPROC blUniform3fARB; +extern PFNGLUNIFORM4FARBPROC blUniform4fARB; +extern PFNGLUNIFORM1IARBPROC blUniform1iARB; +extern PFNGLUNIFORM2IARBPROC blUniform2iARB; +extern PFNGLUNIFORM3IARBPROC blUniform3iARB; +extern PFNGLUNIFORM4IARBPROC blUniform4iARB; +extern PFNGLUNIFORM1FVARBPROC blUniform1fvARB; +extern PFNGLUNIFORM2FVARBPROC blUniform2fvARB; +extern PFNGLUNIFORM3FVARBPROC blUniform3fvARB; +extern PFNGLUNIFORM4FVARBPROC blUniform4fvARB; +extern PFNGLUNIFORM1IVARBPROC blUniform1ivARB; +extern PFNGLUNIFORM2IVARBPROC blUniform2ivARB; +extern PFNGLUNIFORM3IVARBPROC blUniform3ivARB; +extern PFNGLUNIFORM4IVARBPROC blUniform4ivARB; +extern PFNGLUNIFORMMATRIX2FVARBPROC blUniformMatrix2fvARB; +extern PFNGLUNIFORMMATRIX3FVARBPROC blUniformMatrix3fvARB; +extern PFNGLUNIFORMMATRIX4FVARBPROC blUniformMatrix4fvARB; +extern PFNGLGETOBJECTPARAMETERFVARBPROC blGetObjectParameterfvARB; +extern PFNGLGETOBJECTPARAMETERIVARBPROC blGetObjectParameterivARB; +extern PFNGLGETINFOLOGARBPROC blGetInfoLogARB; +extern PFNGLGETATTACHEDOBJECTSARBPROC blGetAttachedObjectsARB; +extern PFNGLGETUNIFORMLOCATIONARBPROC blGetUniformLocationARB; +extern PFNGLGETACTIVEUNIFORMARBPROC blGetActiveUniformARB; +extern PFNGLGETUNIFORMFVARBPROC blGetUniformfvARB; +extern PFNGLGETUNIFORMIVARBPROC blGetUniformivARB; +extern PFNGLGETSHADERSOURCEARBPROC blGetShaderSourceARB; #endif #ifdef GL_ARB_vertex_shader -extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB; -extern PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB; -extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB; +extern PFNGLBINDATTRIBLOCATIONARBPROC blBindAttribLocationARB; +extern PFNGLGETACTIVEATTRIBARBPROC blGetActiveAttribARB; +extern PFNGLGETATTRIBLOCATIONARBPROC blGetAttribLocationARB; #endif } /* namespace bgl */ diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp index 7a140fd0f7e..38dfb7836b2 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp @@ -41,6 +41,7 @@ #include <windows.h> #endif // WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else @@ -1265,10 +1266,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1281,10 +1282,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1296,10 +1297,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1311,10 +1312,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1336,10 +1337,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1352,10 +1353,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1368,10 +1369,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1385,10 +1386,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1416,10 +1417,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1432,10 +1433,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1448,10 +1449,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1471,10 +1472,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1488,10 +1489,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1504,10 +1505,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti( if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1620,10 +1621,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1638,10 +1639,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1656,10 +1657,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1674,10 +1675,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1721,10 +1722,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1740,10 +1741,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1759,10 +1760,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ @@ -1777,10 +1778,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1824,10 +1825,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1840,10 +1841,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1856,10 +1857,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1896,10 +1897,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1913,10 +1914,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); @@ -1930,10 +1931,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV && vertexarray[(indexarray[vindex])].getUnit() == unit ) { - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2()); continue; } - bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); + bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1()); } // ------------------------------ glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ()); diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp index 77beed5ead1..b6d8e74c2d5 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp @@ -38,6 +38,7 @@ #include <windows.h> #endif // WIN32 #ifdef __APPLE__ +#define GL_GLEXT_LEGACY 1 #include <OpenGL/gl.h> #else #include <GL/gl.h> |