From 1e09a194b130e2588ca0cf14c7b7ba28690169b2 Mon Sep 17 00:00:00 2001 From: Taylor Richards Date: Fri, 10 Jun 2016 22:25:08 -0400 Subject: [PATCH] just use linear fog in GL1; cleanup --- src/graphics/grgl1.cpp | 38 +++----------------- src/graphics/grgl1render.cpp | 65 +++++++++++++---------------------- src/graphics/grgl2texture.cpp | 9 +++-- 3 files changed, 33 insertions(+), 79 deletions(-) diff --git a/src/graphics/grgl1.cpp b/src/graphics/grgl1.cpp index bac3512..d713afb 100644 --- a/src/graphics/grgl1.cpp +++ b/src/graphics/grgl1.cpp @@ -21,8 +21,6 @@ #include "osregistry.h" -int OGL_fog_mode = 0; - int GL_one_inited = 0; @@ -229,21 +227,6 @@ int opengl1_init() // initial viewport setup gr_opengl1_set_viewport(gr_screen.max_w, gr_screen.max_h); - /* - 1 = use secondary color ext - 2 = use opengl linear fog - */ - OGL_fog_mode = 2; - - // only available with OpenGL 1.2+, must get ptr for Windows - vglSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)SDL_GL_GetProcAddress("glSecondaryColorPointer"); - - if (vglSecondaryColorPointer) { - OGL_fog_mode = 1; - } - - mprintf((" Fog mode : %s\n", (OGL_fog_mode == 1) ? "secondary color" : "linear")); - glShadeModel(GL_SMOOTH); glEnable(GL_DITHER); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); @@ -364,10 +347,6 @@ void gr_opengl1_fog_set(int fog_mode, int r, int g, int b, float fog_near, float if (fog_mode == GR_FOGMODE_NONE) { if (gr_screen.current_fog_mode != fog_mode) { glDisable(GL_FOG); - - if (OGL_fog_mode == 1) { - glDisable(GL_COLOR_SUM); - } } gr_screen.current_fog_mode = fog_mode; @@ -377,12 +356,7 @@ void gr_opengl1_fog_set(int fog_mode, int r, int g, int b, float fog_near, float if (gr_screen.current_fog_mode != fog_mode) { glEnable(GL_FOG); - - if (OGL_fog_mode == 1) { - glEnable(GL_COLOR_SUM); - } else if (OGL_fog_mode == 2) { - glFogi(GL_FOG_MODE, GL_LINEAR); - } + glFogi(GL_FOG_MODE, GL_LINEAR); gr_screen.current_fog_mode = fog_mode; } @@ -390,10 +364,10 @@ void gr_opengl1_fog_set(int fog_mode, int r, int g, int b, float fog_near, float if ( (gr_screen.current_fog_color.red != r) || (gr_screen.current_fog_color.green != g) || (gr_screen.current_fog_color.blue != b) ) { - GLfloat fc[4]; - gr_init_color( &gr_screen.current_fog_color, r, g, b ); + GLfloat fc[4]; + fc[0] = r / 255.0f; fc[1] = g / 255.0f; fc[2] = b / 255.0f; @@ -408,10 +382,8 @@ void gr_opengl1_fog_set(int fog_mode, int r, int g, int b, float fog_near, float gr_screen.fog_near = fog_near; gr_screen.fog_far = fog_far; - if (OGL_fog_mode == 2) { - glFogf(GL_FOG_START, fog_near); - glFogf(GL_FOG_END, fog_far); - } + glFogf(GL_FOG_START, fog_near); + glFogf(GL_FOG_END, fog_far); } } diff --git a/src/graphics/grgl1render.cpp b/src/graphics/grgl1render.cpp index acdfc91..86f5e2a 100644 --- a/src/graphics/grgl1render.cpp +++ b/src/graphics/grgl1render.cpp @@ -21,8 +21,6 @@ #include "palman.h" -extern int OGL_fog_mode; - #define NEBULA_COLORS 20 @@ -248,8 +246,6 @@ static void opengl1_tmapper_internal( int nv, vertex ** verts, uint flags, int i float ox = gr_screen.offset_x * 16.0f; float oy = gr_screen.offset_y * 16.0f; - float fr = 1.0f, fg = 1.0f, fb = 1.0f; - if (flags & TMAP_FLAG_PIXEL_FOG) { int r, g, b; int ra, ga, ba; @@ -257,9 +253,7 @@ static void opengl1_tmapper_internal( int nv, vertex ** verts, uint flags, int i ra = ga = ba = 0; - /* argh */ - for (i=nv-1;i>=0;i--) // DDOI - change polygon winding - { + for (i = nv-1; i >= 0; i--) { vertex * va = verts[i]; sx = (va->sx * 16.0f + ox) / 16.0f; @@ -276,11 +270,7 @@ static void opengl1_tmapper_internal( int nv, vertex ** verts, uint flags, int i ga /= nv; ba /= nv; - gr_fog_set(GR_FOGMODE_FOG, ra, ga, ba, -1.0f, -1.0f); - - fr = ra / 255.0f; - fg = ga / 255.0f; - fb = ba / 255.0f; + gr_opengl1_fog_set(GR_FOGMODE_FOG, ra, ga, ba, -1.0f, -1.0f); } opengl_alloc_render_buffer(nv); @@ -289,10 +279,18 @@ static void opengl1_tmapper_internal( int nv, vertex ** verts, uint flags, int i float sx, sy, sz = 0.99f, rhw = 1.0f; + bool bZval = (Gr_zbuffering || (flags & TMAP_FLAG_NEBULA)); + bool bCorrect = (flags & TMAP_FLAG_CORRECT); + bool bAlpha = (flags & TMAP_FLAG_ALPHA); + bool bNebula = (flags & TMAP_FLAG_NEBULA); + bool bRamp = ((flags & TMAP_FLAG_RAMP) && (flags & TMAP_FLAG_GOURAUD)); + bool bRGB = ((flags & TMAP_FLAG_RGB) && (flags & TMAP_FLAG_GOURAUD)); + bool bTextured = (flags & TMAP_FLAG_TEXTURED); + for (i = nv-1; i >= 0; i--) { vertex *va = verts[i]; - if ( Gr_zbuffering || (flags & TMAP_FLAG_NEBULA) ) { + if (bZval) { sz = 1.0f - 1.0f / (1.0f + va->z / (32768.0f / 256.0f)); if ( sz > 0.98f ) { @@ -300,26 +298,26 @@ static void opengl1_tmapper_internal( int nv, vertex ** verts, uint flags, int i } } - if (flags & TMAP_FLAG_CORRECT) { + if (bCorrect) { rhw = 1.0f / va->sw; } - if (flags & TMAP_FLAG_ALPHA) { - a = verts[i]->a; + if (bAlpha) { + a = va->a; } - if (flags & TMAP_FLAG_NEBULA ) { - int pal = (verts[i]->b*(NEBULA_COLORS-1))/255; + if (bRGB) { + // Make 0.75 be 256.0f + r = Gr_gamma_lookup[va->r]; + g = Gr_gamma_lookup[va->g]; + b = Gr_gamma_lookup[va->b]; + } else if (bNebula) { + int pal = (va->b*(NEBULA_COLORS-1))/255; r = gr_palette[pal*3+0]; g = gr_palette[pal*3+1]; b = gr_palette[pal*3+2]; - } else if ( (flags & TMAP_FLAG_RAMP) && (flags & TMAP_FLAG_GOURAUD) ) { - r = g = b = Gr_gamma_lookup[verts[i]->b]; - } else if ( (flags & TMAP_FLAG_RGB) && (flags & TMAP_FLAG_GOURAUD) ) { - // Make 0.75 be 256.0f - r = Gr_gamma_lookup[verts[i]->r]; - g = Gr_gamma_lookup[verts[i]->g]; - b = Gr_gamma_lookup[verts[i]->b]; + } else if (bRamp) { + r = g = b = Gr_gamma_lookup[va->b]; } render_buffer[rb_offset].r = r; @@ -327,20 +325,10 @@ static void opengl1_tmapper_internal( int nv, vertex ** verts, uint flags, int i render_buffer[rb_offset].b = b; render_buffer[rb_offset].a = a; - if ( (flags & TMAP_FLAG_PIXEL_FOG) && (OGL_fog_mode == 1) ) { - float f_val; - - opengl_stuff_fog_value(va->z, &f_val); - - render_buffer[rb_offset].sr = (ubyte)(((fr * f_val) * 255.0f) + 0.5f); - render_buffer[rb_offset].sg = (ubyte)(((fg * f_val) * 255.0f) + 0.5f); - render_buffer[rb_offset].sb = (ubyte)(((fb * f_val) * 255.0f) + 0.5f); - } - sx = (va->sx * 16.0f + ox) / 16.0f; sy = (va->sy * 16.0f + oy) / 16.0f; - if (flags & TMAP_FLAG_TEXTURED) { + if (bTextured) { render_buffer[rb_offset].u = va->u * u_scale; render_buffer[rb_offset].v = va->v * v_scale; } @@ -358,11 +346,6 @@ static void opengl1_tmapper_internal( int nv, vertex ** verts, uint flags, int i glTexCoordPointer(2, GL_FLOAT, sizeof(rb_t), &render_buffer[0].u); } - if ( (gr_screen.current_fog_mode != GR_FOGMODE_NONE) && (OGL_fog_mode == 1) ) { - glEnableClientState(GL_SECONDARY_COLOR_ARRAY); - vglSecondaryColorPointer(3, GL_UNSIGNED_BYTE, sizeof(rb_t), &render_buffer[0].sr); - } - glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(rb_t), &render_buffer[0].r); diff --git a/src/graphics/grgl2texture.cpp b/src/graphics/grgl2texture.cpp index fe30395..18ca596 100644 --- a/src/graphics/grgl2texture.cpp +++ b/src/graphics/grgl2texture.cpp @@ -223,16 +223,15 @@ static int opengl2_create_texture_sub(int bitmap_handle, int bitmap_type, bitmap switch (bitmap_type) { case TCACHE_TYPE_AABITMAP: { + SDL_assert(tex_w == bmp->w); + SDL_assert(tex_h == bmp->h); + texmem = (ubyte *) malloc(tex_w * tex_h); texmemp = texmem; for (i = 0; i < tex_h; i++) { for (j = 0; j < tex_w; j++) { - if ( (i < bmp->h) && (j < bmp->w) ) { - *texmemp++ = GL_xlat[bmp_data[i*bmp->w+j]]; - } else { - *texmemp++ = 0; - } + *texmemp++ = GL_xlat[bmp_data[i*bmp->w+j]]; } } -- 2.39.2