diff --git a/BBGE/Core.cpp b/BBGE/Core.cpp index 07fe44d..ceb0571 100644 --- a/BBGE/Core.cpp +++ b/BBGE/Core.cpp @@ -950,8 +950,6 @@ void Core::shutdownGraphicsLibrary(bool killVideo) SDL_WM_GrabInput(SDL_GRAB_OFF); #endif - FrameBuffer::resetOpenGL(); - gScreen = 0; #if BBGE_BUILD_OPENGL_DYNAMIC unload_all_glsyms(); diff --git a/BBGE/FrameBuffer.cpp b/BBGE/FrameBuffer.cpp index c4300b2..387364b 100644 --- a/BBGE/FrameBuffer.cpp +++ b/BBGE/FrameBuffer.cpp @@ -21,29 +21,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "FrameBuffer.h" #include "Core.h" #include "RenderBase.h" -#include "glext.h" //WARNING: FrameBuffer objects have to have reloadDevice/unloadDevice called manually! -#ifdef BBGE_BUILD_FRAMEBUFFER - PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT = NULL; - PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT = NULL; - PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT = NULL; - PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT = NULL; - PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL; - PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT = NULL; - PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT = NULL; - PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT = NULL; - PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT = NULL; - PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT = NULL; - PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT = NULL; - PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT = NULL; - PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT = NULL; - PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT = NULL; - PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL; - PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT = NULL; -#endif - FrameBuffer::FrameBuffer() { inited = false; @@ -132,26 +112,6 @@ bool FrameBuffer::init(int width, int height, bool fitToScreen) } else { - if (!glIsRenderbufferEXT) - { - glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)SDL_GL_GetProcAddress("glIsRenderbufferEXT"); - glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)SDL_GL_GetProcAddress("glBindRenderbufferEXT"); - glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)SDL_GL_GetProcAddress("glDeleteRenderbuffersEXT"); - glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)SDL_GL_GetProcAddress("glGenRenderbuffersEXT"); - glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)SDL_GL_GetProcAddress("glRenderbufferStorageEXT"); - glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)SDL_GL_GetProcAddress("glGetRenderbufferParameterivEXT"); - glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)SDL_GL_GetProcAddress("glIsFramebufferEXT"); - glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)SDL_GL_GetProcAddress("glBindFramebufferEXT"); - glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)SDL_GL_GetProcAddress("glDeleteFramebuffersEXT"); - glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)SDL_GL_GetProcAddress("glGenFramebuffersEXT"); - glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)SDL_GL_GetProcAddress("glCheckFramebufferStatusEXT"); - glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)SDL_GL_GetProcAddress("glFramebufferTexture1DEXT"); - glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)SDL_GL_GetProcAddress("glFramebufferTexture2DEXT"); - glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)SDL_GL_GetProcAddress("glFramebufferTexture3DEXT"); - glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)SDL_GL_GetProcAddress("glFramebufferRenderbufferEXT"); - glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)SDL_GL_GetProcAddress("glGetFramebufferAttachmentParameterivEXT"); - } - if( !glIsRenderbufferEXT || !glBindRenderbufferEXT || !glDeleteRenderbuffersEXT || !glGenRenderbuffersEXT || !glRenderbufferStorageEXT || !glGetRenderbufferParameterivEXT || !glIsFramebufferEXT || !glBindFramebufferEXT || !glDeleteFramebuffersEXT || @@ -269,30 +229,6 @@ void FrameBuffer::unloadDevice() debugLog("done"); } -void FrameBuffer::resetOpenGL() -{ -#if defined(BBGE_BUILD_FRAMEBUFFER) - // set these back to NULL and reload them upon reinit, otherwise they - // might point to a bogus address when the shared library is reloaded. - glIsRenderbufferEXT = NULL; - glBindRenderbufferEXT = NULL; - glDeleteRenderbuffersEXT = NULL; - glGenRenderbuffersEXT = NULL; - glRenderbufferStorageEXT = NULL; - glGetRenderbufferParameterivEXT = NULL; - glIsFramebufferEXT = NULL; - glBindFramebufferEXT = NULL; - glDeleteFramebuffersEXT = NULL; - glGenFramebuffersEXT = NULL; - glCheckFramebufferStatusEXT = NULL; - glFramebufferTexture1DEXT = NULL; - glFramebufferTexture2DEXT = NULL; - glFramebufferTexture3DEXT = NULL; - glFramebufferRenderbufferEXT = NULL; - glGetFramebufferAttachmentParameterivEXT = NULL; -#endif -} - void FrameBuffer::reloadDevice() { debugLog("frameBuffer::reloadDevice"); diff --git a/BBGE/FrameBuffer.h b/BBGE/FrameBuffer.h index 8da0593..89d554d 100644 --- a/BBGE/FrameBuffer.h +++ b/BBGE/FrameBuffer.h @@ -44,8 +44,6 @@ public: void unloadDevice(); void reloadDevice(); - static void resetOpenGL(); - protected: int _w, _h; bool _fitToScreen; diff --git a/BBGE/GLLoad.cpp b/BBGE/GLLoad.cpp index 7f66cc4..a87e666 100644 --- a/BBGE/GLLoad.cpp +++ b/BBGE/GLLoad.cpp @@ -21,6 +21,50 @@ PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT = NULL; +#ifdef BBGE_BUILD_SHADERS +// GL_ARB_shader_objects +PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL; +PFNGLDELETEOBJECTARBPROC glDeleteObjectARB = NULL; +PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL; +PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL; +PFNGLSHADERSOURCEARBPROC glShaderSourceARB = NULL; +PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL; +PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB = NULL; +PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL; +PFNGLGETINFOLOGARBPROC glGetInfoLogARB = NULL; +PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL; +PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL; +PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB = NULL; +PFNGLUNIFORM1FVARBPROC glUniform1fvARB = NULL; +PFNGLUNIFORM2FVARBPROC glUniform2fvARB = NULL; +PFNGLUNIFORM3FVARBPROC glUniform3fvARB = NULL; +PFNGLUNIFORM4FVARBPROC glUniform4fvARB = NULL; +PFNGLUNIFORM1IVARBPROC glUniform1ivARB = NULL; +PFNGLUNIFORM2IVARBPROC glUniform2ivARB = NULL; +PFNGLUNIFORM3IVARBPROC glUniform3ivARB = NULL; +PFNGLUNIFORM4IVARBPROC glUniform4ivARB = NULL; +#endif + +#ifdef BBGE_BUILD_FRAMEBUFFER +PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT = NULL; +PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT = NULL; +PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT = NULL; +PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT = NULL; +PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT = NULL; +PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT = NULL; +PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT = NULL; +PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT = NULL; +PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT = NULL; +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT = NULL; +#endif + + unsigned g_dbg_numRenderCalls = 0; // extern @@ -57,6 +101,48 @@ bool lookup_all_glsyms() // optional functions glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)SDL_GL_GetProcAddress("glGenerateMipmapEXT"); +#if defined(BBGE_BUILD_FRAMEBUFFER) + glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)SDL_GL_GetProcAddress("glIsRenderbufferEXT"); + glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)SDL_GL_GetProcAddress("glBindRenderbufferEXT"); + glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)SDL_GL_GetProcAddress("glDeleteRenderbuffersEXT"); + glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)SDL_GL_GetProcAddress("glGenRenderbuffersEXT"); + glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)SDL_GL_GetProcAddress("glRenderbufferStorageEXT"); + glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)SDL_GL_GetProcAddress("glGetRenderbufferParameterivEXT"); + glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)SDL_GL_GetProcAddress("glIsFramebufferEXT"); + glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)SDL_GL_GetProcAddress("glBindFramebufferEXT"); + glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)SDL_GL_GetProcAddress("glDeleteFramebuffersEXT"); + glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)SDL_GL_GetProcAddress("glGenFramebuffersEXT"); + glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)SDL_GL_GetProcAddress("glCheckFramebufferStatusEXT"); + glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)SDL_GL_GetProcAddress("glFramebufferTexture1DEXT"); + glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)SDL_GL_GetProcAddress("glFramebufferTexture2DEXT"); + glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)SDL_GL_GetProcAddress("glFramebufferTexture3DEXT"); + glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)SDL_GL_GetProcAddress("glFramebufferRenderbufferEXT"); + glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)SDL_GL_GetProcAddress("glGetFramebufferAttachmentParameterivEXT"); +#endif + +#if defined(BBGE_BUILD_SHADERS) + glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glCreateProgramObjectARB"); + glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)SDL_GL_GetProcAddress("glDeleteObjectARB"); + glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glUseProgramObjectARB"); + glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)SDL_GL_GetProcAddress("glCreateShaderObjectARB"); + glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)SDL_GL_GetProcAddress("glShaderSourceARB"); + glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)SDL_GL_GetProcAddress("glCompileShaderARB"); + glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)SDL_GL_GetProcAddress("glGetObjectParameterivARB"); + glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)SDL_GL_GetProcAddress("glAttachObjectARB"); + glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)SDL_GL_GetProcAddress("glGetInfoLogARB"); + glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)SDL_GL_GetProcAddress("glLinkProgramARB"); + glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)SDL_GL_GetProcAddress("glGetUniformLocationARB"); + glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)SDL_GL_GetProcAddress("glGetActiveUniformARB"); + glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)SDL_GL_GetProcAddress("glUniform1fvARB"); + glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)SDL_GL_GetProcAddress("glUniform2fvARB"); + glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)SDL_GL_GetProcAddress("glUniform3fvARB"); + glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)SDL_GL_GetProcAddress("glUniform4fvARB"); + glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)SDL_GL_GetProcAddress("glUniform1ivARB"); + glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)SDL_GL_GetProcAddress("glUniform2ivARB"); + glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)SDL_GL_GetProcAddress("glUniform3ivARB"); + glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)SDL_GL_GetProcAddress("glUniform4ivARB"); +#endif + return retval; } #endif @@ -73,6 +159,51 @@ void unload_all_glsyms() #endif glGenerateMipmapEXT = NULL; + +#if defined(BBGE_BUILD_FRAMEBUFFER) + // set these back to NULL and reload them upon reinit, otherwise they + // might point to a bogus address when the shared library is reloaded. + glIsRenderbufferEXT = NULL; + glBindRenderbufferEXT = NULL; + glDeleteRenderbuffersEXT = NULL; + glGenRenderbuffersEXT = NULL; + glRenderbufferStorageEXT = NULL; + glGetRenderbufferParameterivEXT = NULL; + glIsFramebufferEXT = NULL; + glBindFramebufferEXT = NULL; + glDeleteFramebuffersEXT = NULL; + glGenFramebuffersEXT = NULL; + glCheckFramebufferStatusEXT = NULL; + glFramebufferTexture1DEXT = NULL; + glFramebufferTexture2DEXT = NULL; + glFramebufferTexture3DEXT = NULL; + glFramebufferRenderbufferEXT = NULL; + glGetFramebufferAttachmentParameterivEXT = NULL; +#endif + +#if defined(BBGE_BUILD_SHADERS) + glCreateProgramObjectARB = NULL; + glDeleteObjectARB = NULL; + glUseProgramObjectARB = NULL; + glCreateShaderObjectARB = NULL; + glShaderSourceARB = NULL; + glCompileShaderARB = NULL; + glGetObjectParameterivARB = NULL; + glAttachObjectARB = NULL; + glGetInfoLogARB = NULL; + glLinkProgramARB = NULL; + glGetUniformLocationARB = NULL; + glGetActiveUniformARB = NULL; + glUniform1fvARB = NULL; + glUniform2fvARB = NULL; + glUniform3fvARB = NULL; + glUniform4fvARB = NULL; + glUniform1ivARB = NULL; + glUniform2ivARB = NULL; + glUniform3ivARB = NULL; + glUniform4ivARB = NULL; +#endif + } #endif diff --git a/BBGE/RenderBase.h b/BBGE/RenderBase.h index 5144d8a..2119b4d 100644 --- a/BBGE/RenderBase.h +++ b/BBGE/RenderBase.h @@ -3,8 +3,14 @@ #include "SDL.h" +// Define this before including GL headers to avoid pulling in windows.h +#if defined(_WIN32) && !defined(APIENTRY) +# define APIENTRY __stdcall +#endif + #define GL_GLEXT_LEGACY 1 #include "gl.h" +#include "glext.h" #ifdef _WINDOWS_ #error windows.h was included! euuugh! @@ -18,5 +24,51 @@ #undef WINGDIAPI #endif +extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT; + +#ifdef BBGE_BUILD_SHADERS +// GL_ARB_shader_objects +extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; +extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; +extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; +extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; +extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB; +extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB; +extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; +extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB; +extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB; +extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB; +extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; +extern PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB; +extern PFNGLUNIFORM1FVARBPROC glUniform1fvARB ; +extern PFNGLUNIFORM2FVARBPROC glUniform2fvARB; +extern PFNGLUNIFORM3FVARBPROC glUniform3fvARB; +extern PFNGLUNIFORM4FVARBPROC glUniform4fvARB; +extern PFNGLUNIFORM1IVARBPROC glUniform1ivARB; +extern PFNGLUNIFORM2IVARBPROC glUniform2ivARB; +extern PFNGLUNIFORM3IVARBPROC glUniform3ivARB; +extern PFNGLUNIFORM4IVARBPROC glUniform4ivARB; +#endif + +#ifdef BBGE_BUILD_FRAMEBUFFER +extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT; +extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT; +extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT; +extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT; +extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT; +extern PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT; +extern PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT; +extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT; +extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT; +extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT; +extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT; +extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT; +extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT; +extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT; +extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT; +extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT; +#endif + + #endif diff --git a/BBGE/Shader.cpp b/BBGE/Shader.cpp index 1f58194..506bc04 100644 --- a/BBGE/Shader.cpp +++ b/BBGE/Shader.cpp @@ -22,33 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Shader.h" #include "algorithmx.h" #include "RenderBase.h" -#include "glext.h" #include -#ifdef BBGE_BUILD_SHADERS - // GL_ARB_shader_objects - PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL; - PFNGLDELETEOBJECTARBPROC glDeleteObjectARB = NULL; - PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL; - PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL; - PFNGLSHADERSOURCEARBPROC glShaderSourceARB = NULL; - PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL; - PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB = NULL; - PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL; - PFNGLGETINFOLOGARBPROC glGetInfoLogARB = NULL; - PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL; - PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL; - PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB = NULL; - PFNGLUNIFORM1FVARBPROC glUniform1fvARB = NULL; - PFNGLUNIFORM2FVARBPROC glUniform2fvARB = NULL; - PFNGLUNIFORM3FVARBPROC glUniform3fvARB = NULL; - PFNGLUNIFORM4FVARBPROC glUniform4fvARB = NULL; - PFNGLUNIFORM1IVARBPROC glUniform1ivARB = NULL; - PFNGLUNIFORM2IVARBPROC glUniform2ivARB = NULL; - PFNGLUNIFORM3IVARBPROC glUniform3ivARB = NULL; - PFNGLUNIFORM4IVARBPROC glUniform4ivARB = NULL; - -#endif bool Shader::_wasInited = false; bool Shader::_useShaders = false; @@ -62,7 +37,7 @@ void Shader::staticInit() debugLog("Initializing shaders..."); #if defined(BBGE_BUILD_SHADERS) && defined(BBGE_BUILD_OPENGL) - char *ext = (char*)glGetString( GL_EXTENSIONS ); + /*char *ext = (char*)glGetString( GL_EXTENSIONS ); if( strstr( ext, "GL_ARB_shading_language_100" ) == NULL ) { @@ -78,29 +53,10 @@ void Shader::staticInit() debugLog("GL_ARB_shader_objects extension was not found"); goto end; } - else + else*/ + // Better to just check if the function pointers are there; + // the driver might truncate the extension string or something. -- fg { - glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glCreateProgramObjectARB"); - glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)SDL_GL_GetProcAddress("glDeleteObjectARB"); - glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glUseProgramObjectARB"); - glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)SDL_GL_GetProcAddress("glCreateShaderObjectARB"); - glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)SDL_GL_GetProcAddress("glShaderSourceARB"); - glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)SDL_GL_GetProcAddress("glCompileShaderARB"); - glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)SDL_GL_GetProcAddress("glGetObjectParameterivARB"); - glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)SDL_GL_GetProcAddress("glAttachObjectARB"); - glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)SDL_GL_GetProcAddress("glGetInfoLogARB"); - glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)SDL_GL_GetProcAddress("glLinkProgramARB"); - glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)SDL_GL_GetProcAddress("glGetUniformLocationARB"); - glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)SDL_GL_GetProcAddress("glGetActiveUniformARB"); - glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)SDL_GL_GetProcAddress("glUniform1fvARB"); - glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)SDL_GL_GetProcAddress("glUniform2fvARB"); - glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)SDL_GL_GetProcAddress("glUniform3fvARB"); - glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)SDL_GL_GetProcAddress("glUniform4fvARB"); - glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)SDL_GL_GetProcAddress("glUniform1ivARB"); - glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)SDL_GL_GetProcAddress("glUniform2ivARB"); - glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)SDL_GL_GetProcAddress("glUniform3ivARB"); - glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)SDL_GL_GetProcAddress("glUniform4ivARB"); - if( !glCreateProgramObjectARB || !glDeleteObjectARB || !glUseProgramObjectARB || !glCreateShaderObjectARB || !glCreateShaderObjectARB || !glCompileShaderARB || !glGetObjectParameterivARB || !glAttachObjectARB || !glGetInfoLogARB ||