--- Renderer.c 2007-11-05 19:18:14.000000000 -0500 +++ Renderer.c 2007-11-05 12:37:14.165130500 -0500 @@ -5,6 +5,21 @@ #include #include +#ifdef _OS_WINDOWS_ +PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL; +PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL; + +int InitARB() { + glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress( "glActiveTextureARB" ); + glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress( "glMultiTexCoord2fARB" ); + return (glActiveTextureARB && glMultiTexCoord2fARB); +} +#else +int InitARB() { + return 1; +} +#endif + SDL_Surface *screen; int InitRenderer(Renderer *renderer,char *palfile) @@ -32,6 +47,10 @@ fprintf(stderr,"Unable to set video mode: %s\n",SDL_GetError()); return 0; } + + if(!InitARB()) { + fprintf(stderr,"Unable to initialize ARB extensions\n"); + } glClearColor(0,0,0,0); glViewport(0,0,screen->w,screen->h); @@ -201,9 +220,9 @@ { MapTile *tile=&map->tiles[x+y*map->w]; - glActiveTexture(GL_TEXTURE0); + glActiveTextureARB(GL_TEXTURE0); glDisable(GL_TEXTURE_2D); - glActiveTexture(GL_TEXTURE1); + glActiveTextureARB(GL_TEXTURE1); glDisable(GL_TEXTURE_2D); glBegin(GL_QUADS); @@ -231,9 +250,9 @@ glEnd(); - glActiveTexture(GL_TEXTURE0); + glActiveTextureARB(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); - glActiveTexture(GL_TEXTURE1); + glActiveTextureARB(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); if(x>0) @@ -248,18 +267,18 @@ float u=CalcTextureExtent(high,low); int tex=AnimateTexture(tile->textures[0],game->frame); - glActiveTexture(GL_TEXTURE0); + glActiveTextureARB(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,renderer->textures[tex]); - glActiveTexture(GL_TEXTURE1); + glActiveTextureARB(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D,renderer->lights[tex]); glBegin(GL_QUADS); glColor3f(c01,c01,c01); - glTexCoord2f(0,1); glMultiTexCoord2f(GL_TEXTURE1,0,1); glVertex3i(x,low,y+1); - glTexCoord2f(u,1); glMultiTexCoord2f(GL_TEXTURE1,u,1); glVertex3i(x,high,y+1); + glTexCoord2f(0,1); glMultiTexCoord2fARB(GL_TEXTURE1,0,1); glVertex3i(x,low,y+1); + glTexCoord2f(u,1); glMultiTexCoord2fARB(GL_TEXTURE1,u,1); glVertex3i(x,high,y+1); glColor3f(c00,c00,c00); - glTexCoord2f(u,0); glMultiTexCoord2f(GL_TEXTURE1,u,0); glVertex3i(x,high,y); - glTexCoord2f(0,0); glMultiTexCoord2f(GL_TEXTURE1,0,0); glVertex3i(x,low,y); + glTexCoord2f(u,0); glMultiTexCoord2fARB(GL_TEXTURE1,u,0); glVertex3i(x,high,y); + glTexCoord2f(0,0); glMultiTexCoord2fARB(GL_TEXTURE1,0,0); glVertex3i(x,low,y); glEnd(); } @@ -271,18 +290,18 @@ float u=CalcTextureExtent(high,low); int tex=AnimateTexture(tile->textures[2],game->frame); - glActiveTexture(GL_TEXTURE0); + glActiveTextureARB(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,renderer->textures[tex]); - glActiveTexture(GL_TEXTURE1); + glActiveTextureARB(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D,renderer->lights[tex]); glBegin(GL_QUADS); glColor3f(c00,c00,c00); - glTexCoord2f(0,0); glMultiTexCoord2f(GL_TEXTURE1,0,0); glVertex3i(x,high,y); - glTexCoord2f(u,0); glMultiTexCoord2f(GL_TEXTURE1,u,0); glVertex3i(x,low,y); + glTexCoord2f(0,0); glMultiTexCoord2fARB(GL_TEXTURE1,0,0); glVertex3i(x,high,y); + glTexCoord2f(u,0); glMultiTexCoord2fARB(GL_TEXTURE1,u,0); glVertex3i(x,low,y); glColor3f(c01,c01,c01); - glTexCoord2f(u,1); glMultiTexCoord2f(GL_TEXTURE1,u,1); glVertex3i(x,low,y+1); - glTexCoord2f(0,1); glMultiTexCoord2f(GL_TEXTURE1,0,1); glVertex3i(x,high,y+1); + glTexCoord2f(u,1); glMultiTexCoord2fARB(GL_TEXTURE1,u,1); glVertex3i(x,low,y+1); + glTexCoord2f(0,1); glMultiTexCoord2fARB(GL_TEXTURE1,0,1); glVertex3i(x,high,y+1); glEnd(); } } @@ -299,18 +318,18 @@ float u=CalcTextureExtent(high,low); int tex=AnimateTexture(tile->textures[1],game->frame); - glActiveTexture(GL_TEXTURE0); + glActiveTextureARB(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,renderer->textures[tex]); - glActiveTexture(GL_TEXTURE1); + glActiveTextureARB(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D,renderer->lights[tex]); glBegin(GL_QUADS); glColor3f(c00,c00,c00); - glTexCoord2f(0,0); glMultiTexCoord2f(GL_TEXTURE1,0,0); glVertex3i(x,low,y); - glTexCoord2f(u,0); glMultiTexCoord2f(GL_TEXTURE1,u,0); glVertex3i(x,high,y); + glTexCoord2f(0,0); glMultiTexCoord2fARB(GL_TEXTURE1,0,0); glVertex3i(x,low,y); + glTexCoord2f(u,0); glMultiTexCoord2fARB(GL_TEXTURE1,u,0); glVertex3i(x,high,y); glColor3f(c10,c10,c10); - glTexCoord2f(u,1); glMultiTexCoord2f(GL_TEXTURE1,u,1); glVertex3i(x+1,high,y); - glTexCoord2f(0,1); glMultiTexCoord2f(GL_TEXTURE1,0,1); glVertex3i(x+1,low,y); + glTexCoord2f(u,1); glMultiTexCoord2fARB(GL_TEXTURE1,u,1); glVertex3i(x+1,high,y); + glTexCoord2f(0,1); glMultiTexCoord2fARB(GL_TEXTURE1,0,1); glVertex3i(x+1,low,y); glEnd(); } @@ -322,18 +341,18 @@ float u=CalcTextureExtent(high,low); int tex=AnimateTexture(tile->textures[3],game->frame); - glActiveTexture(GL_TEXTURE0); + glActiveTextureARB(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,renderer->textures[tex]); - glActiveTexture(GL_TEXTURE1); + glActiveTextureARB(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D,renderer->lights[tex]); glBegin(GL_QUADS); glColor3f(c10,c10,c10); - glTexCoord2f(0,1); glMultiTexCoord2f(GL_TEXTURE1,0,1); glVertex3i(x+1,high,y); - glTexCoord2f(u,1); glMultiTexCoord2f(GL_TEXTURE1,u,1); glVertex3i(x+1,low,y); + glTexCoord2f(0,1); glMultiTexCoord2fARB(GL_TEXTURE1,0,1); glVertex3i(x+1,high,y); + glTexCoord2f(u,1); glMultiTexCoord2fARB(GL_TEXTURE1,u,1); glVertex3i(x+1,low,y); glColor3f(c00,c00,c00); - glTexCoord2f(u,0); glMultiTexCoord2f(GL_TEXTURE1,u,0); glVertex3i(x,low,y); - glTexCoord2f(0,0); glMultiTexCoord2f(GL_TEXTURE1,0,0); glVertex3i(x,high,y); + glTexCoord2f(u,0); glMultiTexCoord2fARB(GL_TEXTURE1,u,0); glVertex3i(x,low,y); + glTexCoord2f(0,0); glMultiTexCoord2fARB(GL_TEXTURE1,0,0); glVertex3i(x,high,y); glEnd(); } }