avoid second rendering pass when possible

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@2679 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Lee Salzman
2008-09-18 03:13:49 +00:00
parent 5cf26f7a23
commit e7f754505b
3 changed files with 17 additions and 7 deletions
+1
View File
@@ -547,6 +547,7 @@ extern void updateaudio();
extern void rendermodel(const char *mdl, int anim, int tex, float rad, const vec &o, float yaw, float pitch, float speed = 0, int basetime = 0, playerent *d = NULL, modelattach *a = NULL, float scale = 1.0f);
extern void startmodelbatches();
extern void endmodelbatches(bool flush = true);
extern void clearmodelbatches();
extern mapmodelinfo &getmminfo(int i);
extern int findanim(const char *name);
extern void loadskin(const char *dir, const char *altdir, Texture *&skin);
+6 -1
View File
@@ -268,6 +268,11 @@ static int sorttranslucentmodels(const translucentmodel *x, const translucentmod
return 0;
}
void clearmodelbatches()
{
numbatches = -1;
}
void endmodelbatches(bool flush)
{
vector<translucentmodel> translucent;
@@ -318,7 +323,7 @@ void endmodelbatches(bool flush)
}
if(lastmodel) lastmodel->endrender();
}
if(flush) numbatches = -1;
if(flush) clearmodelbatches();
}
void rendermodel(const char *mdl, int anim, int tex, float rad, const vec &o, float yaw, float pitch, float speed, int basetime, playerent *d, modelattach *a, float scale)
+10 -6
View File
@@ -374,15 +374,19 @@ void drawstencilshadows()
renderbounceents();
endmodelbatches(false);
stenciling = 2;
if(shadowcasters)
{
stenciling = 2;
glStencilFunc(GL_ALWAYS, 0, ~0U);
glStencilOp(GL_KEEP, GL_KEEP, GL_DECR);
glCullFace(GL_BACK);
glStencilFunc(GL_ALWAYS, 0, ~0U);
glStencilOp(GL_KEEP, GL_KEEP, GL_DECR);
glCullFace(GL_BACK);
endmodelbatches(true);
endmodelbatches(true);
glCullFace(GL_FRONT);
glCullFace(GL_FRONT);
}
else clearmodelbatches();
}
stenciling = 0;