From 7ac7e86b81c449961393d5226f5aa04aac5d31d5 Mon Sep 17 00:00:00 2001 From: havoc Date: Sat, 13 Nov 2010 11:07:20 +0000 Subject: [PATCH] use less R_Mesh_ResetTextureState calls for more performance git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10592 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_particles.c | 4 ++-- cl_screen.c | 4 ++-- clvm_cmds.c | 2 +- gl_draw.c | 15 ++++++++------- gl_rmain.c | 16 ++++++++-------- gl_rsurf.c | 4 ++-- r_explosion.c | 2 +- 7 files changed, 24 insertions(+), 23 deletions(-) diff --git a/cl_particles.c b/cl_particles.c index d75ae27b..1557fc31 100644 --- a/cl_particles.c +++ b/cl_particles.c @@ -2312,7 +2312,7 @@ void R_DrawDecal_TransparentCallback(const entity_render_t *ent, const rtlight_t RSurf_ActiveWorldEntity(); r_refdef.stats.drawndecals += numsurfaces; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); GL_DepthMask(false); GL_DepthRange(0, 1); GL_PolygonOffset(0, 0); @@ -2472,7 +2472,7 @@ void R_DrawParticle_TransparentCallback(const entity_render_t *ent, const rtligh Vector4Set(colormultiplier, r_refdef.view.colorscale * (1.0 / 256.0f), r_refdef.view.colorscale * (1.0 / 256.0f), r_refdef.view.colorscale * (1.0 / 256.0f), cl_particles_alpha.value * (1.0 / 256.0f)); r_refdef.stats.particles += numsurfaces; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); GL_DepthMask(false); GL_DepthRange(0, 1); GL_PolygonOffset(0, 0); diff --git a/cl_screen.c b/cl_screen.c index f3f75c1c..bc46fa19 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -1943,7 +1943,7 @@ static void SCR_DrawLoadingStack(void) GL_DepthRange(0, 1); GL_PolygonOffset(0, 0); GL_DepthTest(false); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); verts[2] = verts[5] = verts[8] = verts[11] = 0; verts[0] = verts[9] = 0; verts[1] = verts[4] = vid_conheight.integer - scr_loadingscreen_barheight.value; @@ -2015,7 +2015,7 @@ static void SCR_DrawLoadingScreen (qboolean clear) GL_DepthRange(0, 1); GL_PolygonOffset(0, 0); GL_DepthTest(false); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); GL_Color(1,1,1,1); if(loadingscreentexture) { diff --git a/clvm_cmds.c b/clvm_cmds.c index cfebdfe3..62df4dee 100644 --- a/clvm_cmds.c +++ b/clvm_cmds.c @@ -3075,7 +3075,7 @@ static void VM_DrawPolygonCallback (const entity_render_t *ent, const rtlight_t vmpolygons_t* polys = vmpolygons + PRVM_GetProgNr(); if(polys->progstarttime != prog->starttime) // from other progs? won't draw these (this can cause crashes!) return; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_EntityMatrix(&identitymatrix); GL_CullFace(GL_NONE); GL_DepthTest(true); // polys in 3D space shall always have depth test diff --git a/gl_draw.c b/gl_draw.c index 55bb59d9..32d736fa 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -1080,7 +1080,7 @@ void DrawQ_Pic(float x, float y, cachepic_t *pic, float width, float height, flo if(!r_draw2d.integer && !r_draw2d_force) return; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); floats[12] = 0.0f;floats[13] = 0.0f; floats[14] = 1.0f;floats[15] = 0.0f; floats[16] = 1.0f;floats[17] = 1.0f; @@ -1137,7 +1137,7 @@ void DrawQ_RotPic(float x, float y, cachepic_t *pic, float width, float height, if(!r_draw2d.integer && !r_draw2d_force) return; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); if (pic) { if (width == 0) @@ -1188,7 +1188,7 @@ void DrawQ_Fill(float x, float y, float width, float height, float red, float gr if(!r_draw2d.integer && !r_draw2d_force) return; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1); floats[2] = floats[5] = floats[8] = floats[11] = 0; @@ -1513,7 +1513,7 @@ float DrawQ_String_Scale(float startx, float starty, const char *text, size_t ma if(!r_draw2d.integer && !r_draw2d_force) return startx + DrawQ_TextWidth_UntilWidth_TrackColors_Scale(text, &maxlen, w, h, sw, sh, NULL, ignorecolorcodes, fnt, 1000000000); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); if (!fontmap) R_Mesh_TexBind(0, fnt->tex); R_SetupShader_Generic(fnt->tex, NULL, GL_MODULATE, 1); @@ -1858,7 +1858,7 @@ void DrawQ_SuperPic(float x, float y, cachepic_t *pic, float width, float height if(!r_draw2d.integer && !r_draw2d_force) return; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); if (pic) { if (width == 0) @@ -1896,7 +1896,7 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags, qboolean hasalpha) return; DrawQ_ProcessDrawFlag(flags, hasalpha); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_Generic(mesh->texture, NULL, GL_MODULATE, 1); R_Mesh_PrepareVertices_Generic_Arrays(mesh->num_vertices, mesh->data_vertex3f, mesh->data_color4f, mesh->data_texcoord2f); @@ -1989,6 +1989,7 @@ void DrawQ_Lines (float width, int numlines, const float *vertex3f, const float hasalpha = true; _DrawQ_SetupAndProcessDrawFlag(flags, NULL, hasalpha ? 0.5f : 1.0f); + if(!r_draw2d.integer && !r_draw2d_force) return; @@ -2075,7 +2076,7 @@ void R_DrawGamma(void) break; } // all the blends ignore depth - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1); GL_DepthMask(true); GL_DepthRange(0, 1); diff --git a/gl_rmain.c b/gl_rmain.c index 7ff423e2..4242f8de 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -10012,7 +10012,7 @@ void R_DrawBBoxMesh(vec3_t mins, vec3_t maxs, float cr, float cg, float cb, floa GL_DepthMask(false); GL_DepthRange(0, 1); GL_PolygonOffset(r_refdef.polygonfactor, r_refdef.polygonoffset); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); vertex3f[ 0] = mins[0];vertex3f[ 1] = mins[1];vertex3f[ 2] = mins[2]; // vertex3f[ 3] = maxs[0];vertex3f[ 4] = mins[1];vertex3f[ 5] = mins[2]; @@ -10182,7 +10182,6 @@ void R_DrawNoModel_TransparentCallback(const entity_render_t *ent, const rtlight GL_PolygonOffset(rsurface.basepolygonfactor, rsurface.basepolygonoffset); GL_DepthTest(!(rsurface.ent_flags & RENDER_NODEPTHTEST)); GL_CullFace((rsurface.ent_flags & RENDER_DOUBLESIDED) ? GL_NONE : r_refdef.view.cullface_back); - R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1); memcpy(color4f, nomodelcolor4f, sizeof(float[6*4])); for (i = 0, c = color4f;i < 6;i++, c += 4) { @@ -10202,7 +10201,8 @@ void R_DrawNoModel_TransparentCallback(const entity_render_t *ent, const rtlight c[2] = (c[2] * f1 + r_refdef.fogcolor[2] * f2); } } - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); + R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1); R_Mesh_PrepareVertices_Generic_Arrays(6, nomodelvertex3f, color4f, NULL); R_Mesh_Draw(0, 6, 0, 8, nomodelelement3i, NULL, 0, nomodelelement3s, NULL, 0); } @@ -12832,7 +12832,7 @@ static void R_DrawTextureSurfaceList_ShowSurfaces(int texturenumsurfaces, const float c[4]; GL_AlphaTest(false); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1); if(rsurface.texture && rsurface.texture->currentskinframe) @@ -13136,7 +13136,7 @@ static void R_DrawSurface_TransparentCallback(const entity_render_t *ent, const GL_BlendFunc(GL_ONE, GL_ZERO); GL_DepthMask(true); GL_AlphaTest(false); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_DepthOrShadow(); } RSurf_SetupDepthAndCulling(); @@ -13417,7 +13417,7 @@ void R_DrawLoc_Callback(const entity_render_t *ent, const rtlight_t *rtlight, in GL_CullFace(GL_NONE); R_EntityMatrix(&identitymatrix); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); i = surfacelist[0]; GL_Color(((i & 0x0007) >> 0) * (1.0f / 7.0f) * r_refdef.view.colorscale, @@ -14042,7 +14042,7 @@ static void R_DrawModelDecals_Entity(entity_render_t *ent) // now render the decals all at once // (this assumes they all use one particle font texture!) RSurf_ActiveCustomEntity(&rsurface.matrix, &rsurface.inversematrix, rsurface.ent_flags, rsurface.ent_shadertime, 1, 1, 1, 1, numdecals*3, decalsystem->vertex3f, decalsystem->texcoord2f, NULL, NULL, NULL, decalsystem->color4f, numtris, decalsystem->element3i, decalsystem->element3s, false, false); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_Mesh_PrepareVertices_Generic_Arrays(numtris * 3, decalsystem->vertex3f, decalsystem->color4f, decalsystem->texcoord2f); GL_DepthMask(false); GL_DepthRange(0, 1); @@ -14120,7 +14120,7 @@ void R_DrawDebugModel(void) flagsmask = MATERIALFLAG_SKY | MATERIALFLAG_WALL; - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1); GL_DepthRange(0, 1); GL_DepthTest(!r_showdisabledepthtest.integer); diff --git a/gl_rsurf.c b/gl_rsurf.c index ca7ade0b..07cc66a0 100644 --- a/gl_rsurf.c +++ b/gl_rsurf.c @@ -349,7 +349,7 @@ static void R_DrawPortal_Callback(const entity_render_t *ent, const rtlight_t *r numpoints = min(portal->numpoints, POLYGONELEMENTS_MAXPOINTS); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); isvis = (portal->here->clusterindex >= 0 && portal->past->clusterindex >= 0 && portal->here->clusterindex != portal->past->clusterindex); @@ -610,7 +610,7 @@ void R_Q1BSP_DrawDepth(entity_render_t *ent) GL_BlendFunc(GL_ONE, GL_ZERO); GL_DepthMask(true); GL_AlphaTest(false); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_DepthOrShadow(); if (ent == r_refdef.scene.worldentity) R_DrawWorldSurfaces(false, false, true, false, false); diff --git a/r_explosion.c b/r_explosion.c index 3519fd94..5ed51105 100644 --- a/r_explosion.c +++ b/r_explosion.c @@ -212,7 +212,7 @@ static void R_DrawExplosion_TransparentCallback(const entity_render_t *ent, cons GL_CullFace(r_refdef.view.cullface_back); R_EntityMatrix(&identitymatrix); - R_Mesh_ResetTextureState(); +// R_Mesh_ResetTextureState(); R_SetupShader_Generic(explosiontexture, NULL, GL_MODULATE, 1); for (surfacelistindex = 0;surfacelistindex < numsurfaces;surfacelistindex++) { -- 2.39.2