From 9751caac85fd64180c2df3787f3312b96336fd59 Mon Sep 17 00:00:00 2001 From: Daniel Gibson Date: Tue, 2 May 2017 03:07:31 +0200 Subject: [PATCH] GL3: Optimize shadow rendering now DrawAliasShadow() only uses one draw call per model, pretty much like DrawAliasFrameLerp() --- src/client/refresh/gl3/gl3_mesh.c | 68 +++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/src/client/refresh/gl3/gl3_mesh.c b/src/client/refresh/gl3/gl3_mesh.c index 117b9e81..26e1b6c5 100644 --- a/src/client/refresh/gl3/gl3_mesh.c +++ b/src/client/refresh/gl3/gl3_mesh.c @@ -335,10 +335,16 @@ DrawAliasShadow(dmdl_t *paliashdr, int posenum) // GL1 uses alpha 0.5, but in GL3 0.3 looks better GLfloat color[4] = {0, 0, 0, 0.3}; - STUB_ONCE("TODO: Draw Stencil Shadows in one drawcall, like models!"); + // draw the shadow in a single draw call, just like the model + + da_clear(vtxBuf); + da_clear(idxBuf); while (1) { + int i, j; + GLushort nextVtxIdx = da_count(vtxBuf); + /* get the vertex count and primitive type */ count = *order++; @@ -358,9 +364,9 @@ DrawAliasShadow(dmdl_t *paliashdr, int posenum) type = GL_TRIANGLE_STRIP; } - gl3_alias_vtx_t vtx[count]; + gl3_alias_vtx_t* buf = da_addn_uninit(vtxBuf, count); - for(int i=0; i