]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
fixed bugs in q1bsp multitexture surface rendering (and singletexture detail renderin...
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 9 Mar 2005 00:35:02 +0000 (00:35 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 9 Mar 2005 00:35:02 +0000 (00:35 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5070 d7cf8633-e32d-0410-b094-e92efae38249

gl_rsurf.c

index 7375ebf62ac3ed7579e6f31e997bd9843f3b505d..8a11565c4c28802606bc9b0bf5b637f11cf01623 100644 (file)
@@ -946,8 +946,6 @@ void R_DrawSurfaceList(entity_render_t *ent, texture_t *texture, int texturenums
                // multitexture cases
                if (r_textureunits.integer >= 2 && gl_combine.integer && dobase && dolightmap)
                {
-                       dobase = false;
-                       dolightmap = false;
                        GL_BlendFunc(GL_ONE, GL_ZERO);
                        GL_DepthMask(true);
                        GL_DepthTest(true);
@@ -955,47 +953,49 @@ void R_DrawSurfaceList(entity_render_t *ent, texture_t *texture, int texturenums
                        GL_Color(r_lightmapintensity * ent->colormod[0], r_lightmapintensity * ent->colormod[1], r_lightmapintensity * ent->colormod[2], 1);
                        memset(&m, 0, sizeof(m));
                        m.tex[0] = R_GetTexture(texture->skin.base);
+                       dobase = false;
                        m.texrgbscale[1] = 2;
-                       if (r_textureunits.integer >= 3 && !doambient && dodetail)
+                       dolightmap = false;
+                       if (r_textureunits.integer >= 4 && !doambient && dodetail && doglow)
                        {
                                m.tex[2] = R_GetTexture(texture->skin.detail);
                                m.texrgbscale[2] = 2;
                                dodetail = false;
-                               if (r_textureunits.integer >= 3 && texture->skin.glow)
+                               m.tex[3] = R_GetTexture(texture->skin.glow);
+                               m.texcombinergb[3] = GL_ADD;
+                               doglow = false;
+                               for (texturesurfaceindex = 0;texturesurfaceindex < texturenumsurfaces;texturesurfaceindex++)
                                {
-                                       m.tex[3] = R_GetTexture(texture->skin.glow);
-                                       m.texcombinergb[3] = GL_ADD;
-                                       doglow = false;
-                                       for (texturesurfaceindex = 0;texturesurfaceindex < texturenumsurfaces;texturesurfaceindex++)
-                                       {
-                                               surface = texturesurfacelist[texturesurfaceindex];
-                                               m.tex[1] = R_GetTexture(surface->lightmaptexture);
-                                               m.pointer_vertex = surface->mesh.data_vertex3f;
-                                               m.pointer_texcoord[0] = surface->mesh.data_texcoordtexture2f;
-                                               m.pointer_texcoord[1] = surface->mesh.data_texcoordlightmap2f;
-                                               m.pointer_texcoord[2] = surface->mesh.data_texcoorddetail2f;
-                                               m.pointer_texcoord[3] = surface->mesh.data_texcoordtexture2f;
-                                               R_Mesh_State(&m);
-                                               GL_LockArrays(0, surface->mesh.num_vertices);
-                                               R_Mesh_Draw(surface->mesh.num_vertices, surface->mesh.num_triangles, surface->mesh.data_element3i);
-                                               GL_LockArrays(0, 0);
-                                       }
+                                       surface = texturesurfacelist[texturesurfaceindex];
+                                       m.tex[1] = R_GetTexture(surface->lightmaptexture);
+                                       m.pointer_vertex = surface->mesh.data_vertex3f;
+                                       m.pointer_texcoord[0] = surface->mesh.data_texcoordtexture2f;
+                                       m.pointer_texcoord[1] = surface->mesh.data_texcoordlightmap2f;
+                                       m.pointer_texcoord[2] = surface->mesh.data_texcoorddetail2f;
+                                       m.pointer_texcoord[3] = surface->mesh.data_texcoordtexture2f;
+                                       R_Mesh_State(&m);
+                                       GL_LockArrays(0, surface->mesh.num_vertices);
+                                       R_Mesh_Draw(surface->mesh.num_vertices, surface->mesh.num_triangles, surface->mesh.data_element3i);
+                                       GL_LockArrays(0, 0);
                                }
-                               else
+                       }
+                       else if (r_textureunits.integer >= 3 && !doambient && dodetail)
+                       {
+                               m.tex[2] = R_GetTexture(texture->skin.detail);
+                               m.texrgbscale[2] = 2;
+                               dodetail = false;
+                               for (texturesurfaceindex = 0;texturesurfaceindex < texturenumsurfaces;texturesurfaceindex++)
                                {
-                                       for (texturesurfaceindex = 0;texturesurfaceindex < texturenumsurfaces;texturesurfaceindex++)
-                                       {
-                                               surface = texturesurfacelist[texturesurfaceindex];
-                                               m.tex[1] = R_GetTexture(surface->lightmaptexture);
-                                               m.pointer_vertex = surface->mesh.data_vertex3f;
-                                               m.pointer_texcoord[0] = surface->mesh.data_texcoordtexture2f;
-                                               m.pointer_texcoord[1] = surface->mesh.data_texcoordlightmap2f;
-                                               m.pointer_texcoord[2] = surface->mesh.data_texcoorddetail2f;
-                                               R_Mesh_State(&m);
-                                               GL_LockArrays(0, surface->mesh.num_vertices);
-                                               R_Mesh_Draw(surface->mesh.num_vertices, surface->mesh.num_triangles, surface->mesh.data_element3i);
-                                               GL_LockArrays(0, 0);
-                                       }
+                                       surface = texturesurfacelist[texturesurfaceindex];
+                                       m.tex[1] = R_GetTexture(surface->lightmaptexture);
+                                       m.pointer_vertex = surface->mesh.data_vertex3f;
+                                       m.pointer_texcoord[0] = surface->mesh.data_texcoordtexture2f;
+                                       m.pointer_texcoord[1] = surface->mesh.data_texcoordlightmap2f;
+                                       m.pointer_texcoord[2] = surface->mesh.data_texcoorddetail2f;
+                                       R_Mesh_State(&m);
+                                       GL_LockArrays(0, surface->mesh.num_vertices);
+                                       R_Mesh_Draw(surface->mesh.num_vertices, surface->mesh.num_triangles, surface->mesh.data_element3i);
+                                       GL_LockArrays(0, 0);
                                }
                        }
                        else if (r_textureunits.integer >= 3 && !doambient && !dodetail && doglow)
@@ -1017,6 +1017,21 @@ void R_DrawSurfaceList(entity_render_t *ent, texture_t *texture, int texturenums
                                        GL_LockArrays(0, 0);
                                }
                        }
+                       else
+                       {
+                               for (texturesurfaceindex = 0;texturesurfaceindex < texturenumsurfaces;texturesurfaceindex++)
+                               {
+                                       surface = texturesurfacelist[texturesurfaceindex];
+                                       m.tex[1] = R_GetTexture(surface->lightmaptexture);
+                                       m.pointer_vertex = surface->mesh.data_vertex3f;
+                                       m.pointer_texcoord[0] = surface->mesh.data_texcoordtexture2f;
+                                       m.pointer_texcoord[1] = surface->mesh.data_texcoordlightmap2f;
+                                       R_Mesh_State(&m);
+                                       GL_LockArrays(0, surface->mesh.num_vertices);
+                                       R_Mesh_Draw(surface->mesh.num_vertices, surface->mesh.num_triangles, surface->mesh.data_element3i);
+                                       GL_LockArrays(0, 0);
+                               }
+                       }
                }
                // anything not handled above
                if (dobase)
@@ -1094,7 +1109,7 @@ void R_DrawSurfaceList(entity_render_t *ent, texture_t *texture, int texturenums
                        {
                                surface = texturesurfacelist[texturesurfaceindex];
                                m.pointer_vertex = surface->mesh.data_vertex3f;
-                               m.pointer_texcoord[0] = surface->mesh.data_texcoordtexture2f;
+                               m.pointer_texcoord[0] = surface->mesh.data_texcoorddetail2f;
                                R_Mesh_State(&m);
                                GL_LockArrays(0, surface->mesh.num_vertices);
                                R_Mesh_Draw(surface->mesh.num_vertices, surface->mesh.num_triangles, surface->mesh.data_element3i);