diff options
Diffstat (limited to 'src/opengl.c')
| -rw-r--r-- | src/opengl.c | 76 |
1 files changed, 35 insertions, 41 deletions
diff --git a/src/opengl.c b/src/opengl.c index f4f041b..15195cd 100644 --- a/src/opengl.c +++ b/src/opengl.c @@ -54,10 +54,6 @@ static D3DTexture *CurrentlyBoundTexture = NULL; #define TA_MAXVERTICES 2048 #define TA_MAXTRIANGLES 2048 -#if GL_EXT_secondary_color -extern PFNGLSECONDARYCOLORPOINTEREXTPROC pglSecondaryColorPointerEXT; -#endif - typedef struct VertexArray { GLfloat v[4]; @@ -69,9 +65,9 @@ typedef struct VertexArray typedef struct TriangleArray { - int a; - int b; - int c; + unsigned short a; + unsigned short b; + unsigned short c; } TriangleArray; static VertexArray varr[TA_MAXVERTICES*2]; @@ -132,6 +128,14 @@ A few things: void InitOpenGL() { + pglHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); + pglHint( GL_GENERATE_MIPMAP_HINT, GL_NICEST ); + + if ( ogl_use_multisample_filter_hint ) + { + pglHint( GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST ); + } + CurrentTranslucencyMode = TRANSLUCENCY_OFF; pglBlendFunc(GL_ONE, GL_ZERO); @@ -155,12 +159,12 @@ void InitOpenGL() #if 0 #if GL_EXT_secondary_color - if (useseparate) { - pglEnableClientState(GL_SEPARATE_COLOR_ARRAY_EXT); - pglSecondaryColorPointerEXT(4, GL_UNSIGNED_BYTE, sizeof(svarr[0]), svarr[0].c); - } else { - pglDisableClientState(GL_SEPARATE_COLOR_ARRAY_EXT); - } + if (ogl_use_secondary_color) { + pglEnableClientState(GL_SEPARATE_COLOR_ARRAY_EXT); + pglSecondaryColorPointerEXT(4, GL_UNSIGNED_BYTE, sizeof(svarr[0]), svarr[0].c); + } else { + pglDisableClientState(GL_SEPARATE_COLOR_ARRAY_EXT); + } #endif #endif @@ -179,20 +183,8 @@ void InitOpenGL() static void FlushTriangleBuffers(int backup) { - int i; - if (tarrc) { -#if 1 - pglBegin(GL_TRIANGLES); - for (i = 0; i < tarrc; i++) { - pglArrayElement(tarr[i].a); - pglArrayElement(tarr[i].b); - pglArrayElement(tarr[i].c); - } - pglEnd(); -#else - pglDrawElements(GL_TRIANGLES, tarrc*3, GL_UNSIGNED_INT, tarr); -#endif + pglDrawElements(GL_TRIANGLES, tarrc*3, GL_UNSIGNED_SHORT, tarr); tarrc = 0; tarrp = tarr; @@ -217,17 +209,7 @@ static void FlushTriangleBuffers(int backup) pglDisableClientState(GL_TEXTURE_COORD_ARRAY); -#if 1 - pglBegin(GL_TRIANGLES); - for (i = 0; i < starrc; i++) { - pglArrayElement(starr[i].a); - pglArrayElement(starr[i].b); - pglArrayElement(starr[i].c); - } - pglEnd(); -#else - pglDrawElements(GL_TRIANGLES, starrc*3, GL_UNSIGNED_INT, starr); -#endif + pglDrawElements(GL_TRIANGLES, starrc*3, GL_UNSIGNED_SHORT, starr); pglEnableClientState(GL_TEXTURE_COORD_ARRAY); @@ -339,7 +321,7 @@ static void CheckTriangleBuffer(int rver, int sver, int rtri, int stri, D3DTextu FlushTriangleBuffers(0); } - if ((int)tex != -1) + if ((intptr_t)tex != -1) CheckBoundTextureIsCorrect(tex); if (mode != -1) CheckTranslucencyModeIsCorrect(mode); @@ -450,17 +432,20 @@ static void SelectPolygonBeginType(int points) GLuint CreateOGLTexture(D3DTexture *tex, unsigned char *buf) { GLuint h; + GLfloat max_anisotropy; FlushTriangleBuffers(1); pglGenTextures(1, &h); pglBindTexture(GL_TEXTURE_2D, h); + pglTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); pglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->w, tex->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf); @@ -469,8 +454,17 @@ GLuint CreateOGLTexture(D3DTexture *tex, unsigned char *buf) tex->id = h; tex->filter = FILTERING_BILINEAR_ON; - if (CurrentlyBoundTexture) - pglBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture->id); /* restore current */ + if ( ogl_use_texture_filter_anisotropic ) + { + pglGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy); + pglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); + } + + if ( CurrentlyBoundTexture != NULL ) + { + /* restore the previously-bound texture */ + pglBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture->id); + } return h; } |
