This topic is now archived and is closed to further replies.


OpenGL OpenGL Extensions with SDL

Recommended Posts

Hi people, I''m trying to get OpenGL Extensions working with SDL. I''m getting the function pointers via SDL_GL_GetProcAdress(). So far, receving the functions works. But when I want to call an extensions I''m getting a function pointer error.
typedef void (*GL_ActiveTextureARB_Func)(GLenum);
typedef void (*GL_MultiTexCoord2fARB_Func)(GLenum, GLfloat, GLfloat);

class tGLExtensions

   void   initExtensions();

   //OpenGL Extensions
   GL_ActiveTextureARB_Func   glActiveTextureARB;
   GL_MultiTexCoord2fARB_Func   glMultiTexCoord2fARB;
   glActiveTextureARB = NULL;
   glMultiTexCoord2fARB = NULL;

void tGLExtensions::initExtensions()
   tLogger::write(LLEVEL_NORMAL,"[-] initializing OpenGL extensions\n");

   //multitexuring extensions
   glActiveTextureARB =(GL_ActiveTextureARB_Func) SDL_GL_GetProcAddress("glActiveTextureARB");
      tLogger::write(LLEVEL_NORMAL,"[-] multitexturing is not available\n");
      glMultiTexCoord2fARB = (GL_MultiTexCoord2fARB_Func) SDL_GL_GetProcAddress("glMultiTexCoord2fARB");
         tLogger::write(LLEVEL_PANIC,"[!] failed to activate glMultiTexCoord2fARB\n");

      tLogger::write(LLEVEL_NORMAL,"[-] activated multitexturing extensions\n");

   tLogger::write(LLEVEL_NORMAL,"[-] initialized OpenGL extensions\n");
An example for calling an extension: tSystem::getInstance()->getRenderDevice()->glActiveTextureARB(GL_TEXTURE0_ARB); (RenderDevice inherits tGLExtensions...) I''m getting this error on VC6: "The value of ESD was not properbly saved across a function call...." does anyone know what I''m doing wrong ??

Share this post

Link to post
Share on other sites
> tSystem::getInstance()->getRenderDevice()->glActiveTextureARB(GL_TEXTURE0_ARB);
OMFG that''s awful - gone a bit overboard there, eh?
Seriously, though, I think your problem is that the pointers are called with __thiscall convention, while normal C functions are __cdecl. The this parameter isn''t cleaned up, so esp is off by 4. Not good.
Why not do the sensible thing and make those function pointers global (like all other gl functions)?

Share this post

Link to post
Share on other sites