}
r_refdef.stats.lights_shadowtriangles += numtriangles;
CHECKGLERROR
- R_Mesh_VertexPointer(vertex3f);
+ R_Mesh_VertexPointer(vertex3f, 0, 0);
GL_LockArrays(0, numvertices);
if (r_shadow_rendermode == R_SHADOW_RENDERMODE_STENCIL)
{
// decrement stencil if backface is behind depthbuffer
GL_CullFace(GL_BACK); // quake is backwards, this culls front faces
qglStencilOp(GL_KEEP, GL_DECR, GL_KEEP);CHECKGLERROR
- R_Mesh_Draw(0, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(0, numvertices, numtriangles, element3i, 0, 0);
// increment stencil if frontface is behind depthbuffer
GL_CullFace(GL_FRONT); // quake is backwards, this culls back faces
qglStencilOp(GL_KEEP, GL_INCR, GL_KEEP);CHECKGLERROR
}
- R_Mesh_Draw(0, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(0, numvertices, numtriangles, element3i, 0, 0);
GL_LockArrays(0, 0);
CHECKGLERROR
}
R_Shadow_MakeTextures();
CHECKGLERROR
- R_Mesh_ColorPointer(NULL);
+ R_Mesh_ColorPointer(NULL, 0, 0);
R_Mesh_ResetTextureState();
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_DepthTest(true);
{
qglDisable(GL_STENCIL_TEST_TWO_SIDE_EXT);CHECKGLERROR
}
- R_Mesh_ColorPointer(NULL);
+ R_Mesh_ColorPointer(NULL, 0, 0);
R_Mesh_ResetTextureState();
GL_DepthTest(true);
GL_DepthMask(false);
{
// used to display how many times a surface is lit for level design purposes
GL_Color(0.1 * r_view.colorscale, 0.025 * r_view.colorscale, 0, 1);
- R_Mesh_ColorPointer(NULL);
+ R_Mesh_ColorPointer(NULL, 0, 0);
R_Mesh_ResetTextureState();
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
}
static void R_Shadow_RenderLighting_Light_GLSL(int firstvertex, int numvertices, int numtriangles, const int *element3i, const vec3_t lightcolorbase, const vec3_t lightcolorpants, const vec3_t lightcolorshirt, rtexture_t *basetexture, rtexture_t *pantstexture, rtexture_t *shirttexture, rtexture_t *normalmaptexture, rtexture_t *glosstexture, float ambientscale, float diffusescale, float specularscale, qboolean dopants, qboolean doshirt)
{
// ARB2 GLSL shader path (GFFX5200, Radeon 9500)
R_SetupSurfaceShader(lightcolorbase, false, ambientscale, diffusescale, specularscale);
- R_Mesh_TexCoordPointer(0, 2, rsurface_model->surfmesh.data_texcoordtexture2f);
- R_Mesh_TexCoordPointer(1, 3, rsurface_svector3f);
- R_Mesh_TexCoordPointer(2, 3, rsurface_tvector3f);
- R_Mesh_TexCoordPointer(3, 3, rsurface_normal3f);
+ R_Mesh_TexCoordPointer(0, 2, rsurface_model->surfmesh.data_texcoordtexture2f, 0, 0);
+ R_Mesh_TexCoordPointer(1, 3, rsurface_svector3f, 0, 0);
+ R_Mesh_TexCoordPointer(2, 3, rsurface_tvector3f, 0, 0);
+ R_Mesh_TexCoordPointer(3, 3, rsurface_normal3f, 0, 0);
if (rsurface_texture->currentmaterialflags & MATERIALFLAG_ALPHATEST)
{
qglDepthFunc(GL_EQUAL);CHECKGLERROR
}
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
if (rsurface_texture->currentmaterialflags & MATERIALFLAG_ALPHATEST)
{
qglDepthFunc(GL_LEQUAL);CHECKGLERROR
for (renders = 0;renders < 64 && (r > 0 || g > 0 || b > 0);renders++, r--, g--, b--)
{
GL_Color(bound(0, r, 1), bound(0, g, 1), bound(0, b, 1), 1);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
}
}
R_Mesh_TextureState(&m);
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
R_Mesh_TextureState(&m);
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
R_Mesh_TextureState(&m);
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
m.pointer_texcoord3f[1] = rsurface_array_texcoord3f;
R_Mesh_TextureState(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
R_Mesh_TextureState(&m);
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
R_Mesh_TextureState(&m);
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
R_Mesh_TextureState(&m);
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
m.pointer_texcoord3f[1] = rsurface_array_texcoord3f;
R_Mesh_TextureState(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second pass
memset(&m, 0, sizeof(m));
GL_ColorMask(0,0,0,1);
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second and third pass
R_Mesh_ResetTextureState();
// square alpha in framebuffer a few times to make it shiny
GL_BlendFunc(GL_ZERO, GL_DST_ALPHA);
for (glossexponent = 2;glossexponent * 2 <= r_shadow_glossexponent.value;glossexponent *= 2)
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// fourth pass
memset(&m, 0, sizeof(m));
m.texmatrix[0] = r_shadow_entitytoattenuationxyz;
R_Mesh_TextureState(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// fifth pass
memset(&m, 0, sizeof(m));
GL_ColorMask(0,0,0,1);
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second and third pass
R_Mesh_ResetTextureState();
// square alpha in framebuffer a few times to make it shiny
GL_BlendFunc(GL_ZERO, GL_DST_ALPHA);
for (glossexponent = 2;glossexponent * 2 <= r_shadow_glossexponent.value;glossexponent *= 2)
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// fourth pass
memset(&m, 0, sizeof(m));
GL_ColorMask(0,0,0,1);
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// second and third pass
R_Mesh_ResetTextureState();
// square alpha in framebuffer a few times to make it shiny
GL_BlendFunc(GL_ZERO, GL_DST_ALPHA);
for (glossexponent = 2;glossexponent * 2 <= r_shadow_glossexponent.value;glossexponent *= 2)
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// fourth pass
memset(&m, 0, sizeof(m));
m.texmatrix[1] = r_shadow_entitytoattenuationz;
R_Mesh_TextureState(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
- R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i);
+ R_Mesh_Draw(firstvertex, numvertices, numtriangles, element3i, 0, 0);
// fifth pass
memset(&m, 0, sizeof(m));
qboolean dospecular = specularscale > 0;
if (!doambient && !dodiffuse && !dospecular)
return;
- R_Mesh_ColorPointer(NULL);
+ R_Mesh_ColorPointer(NULL, 0, 0);
if (doambient)
R_Shadow_RenderLighting_Light_Dot3_AmbientPass(firstvertex, numvertices, numtriangles, element3i, lightcolorbase, basetexture, ambientscale * r_view.colorscale);
if (dodiffuse)
newe += 3;
if (newnumtriangles >= 1024)
{
- R_Mesh_Draw(newfirstvertex, newlastvertex - newfirstvertex + 1, newnumtriangles, newelements);
+ R_Mesh_Draw(newfirstvertex, newlastvertex - newfirstvertex + 1, newnumtriangles, newelements, 0, 0);
newnumtriangles = 0;
newe = newelements;
stop = false;
}
if (newnumtriangles >= 1)
{
- R_Mesh_Draw(newfirstvertex, newlastvertex - newfirstvertex + 1, newnumtriangles, newelements);
+ R_Mesh_Draw(newfirstvertex, newlastvertex - newfirstvertex + 1, newnumtriangles, newelements, 0, 0);
stop = false;
}
// if we couldn't find any lit triangles, exit early
VectorScale(lightcolorshirt, ambientscale * 2 * r_view.colorscale, ambientcolorshirt);
VectorScale(lightcolorshirt, diffusescale * 2 * r_view.colorscale, diffusecolorshirt);
GL_BlendFunc(GL_SRC_ALPHA, GL_ONE);
- R_Mesh_ColorPointer(rsurface_array_color4f);
+ R_Mesh_ColorPointer(rsurface_array_color4f, 0, 0);
memset(&m, 0, sizeof(m));
m.tex[0] = R_GetTexture(basetexture);
m.texmatrix[0] = rsurface_texture->currenttexmatrix;
lightcolorbase[2] = r_shadow_rtlight->currentcolor[2] * rsurface_entity->colormod[2] * rsurface_texture->currentalpha;
ambientscale = r_shadow_rtlight->ambientscale;
diffusescale = r_shadow_rtlight->diffusescale;
- specularscale = specularscale;
+ specularscale = r_shadow_rtlight->specularscale * rsurface_texture->specularscale;
if (!r_shadow_usenormalmap.integer)
{
ambientscale += 1.0f * diffusescale;
for (mesh = r_shadow_rtlight->static_meshchain_shadow;mesh;mesh = mesh->next)
{
r_refdef.stats.lights_shadowtriangles += mesh->numtriangles;
- R_Mesh_VertexPointer(mesh->vertex3f);
+ R_Mesh_VertexPointer(mesh->vertex3f, 0, 0);
GL_LockArrays(0, mesh->numverts);
if (r_shadow_rendermode == R_SHADOW_RENDERMODE_STENCIL)
{
// decrement stencil if backface is behind depthbuffer
GL_CullFace(GL_BACK); // quake is backwards, this culls front faces
qglStencilOp(GL_KEEP, GL_DECR, GL_KEEP);CHECKGLERROR
- R_Mesh_Draw(0, mesh->numverts, mesh->numtriangles, mesh->element3i);
+ R_Mesh_Draw(0, mesh->numverts, mesh->numtriangles, mesh->element3i, 0, 0);
// increment stencil if frontface is behind depthbuffer
GL_CullFace(GL_FRONT); // quake is backwards, this culls back faces
qglStencilOp(GL_KEEP, GL_INCR, GL_KEEP);CHECKGLERROR
}
- R_Mesh_Draw(0, mesh->numverts, mesh->numtriangles, mesh->element3i);
+ R_Mesh_Draw(0, mesh->numverts, mesh->numtriangles, mesh->element3i, 0, 0);
GL_LockArrays(0, 0);
}
CHECKGLERROR
GL_ScissorTest(true);
R_Mesh_Matrix(&identitymatrix);
R_Mesh_ResetTextureState();
- R_Mesh_VertexPointer(vertex3f);
- R_Mesh_ColorPointer(NULL);
+ R_Mesh_VertexPointer(vertex3f, 0, 0);
+ R_Mesh_ColorPointer(NULL, 0, 0);
// set up a 50% darkening blend on shadowed areas
GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
qglStencilFunc(GL_NOTEQUAL, 128, ~0);CHECKGLERROR
// apply the blend to the shadowed areas
- R_Mesh_Draw(0, 4, 2, polygonelements);
+ R_Mesh_Draw(0, 4, 2, polygonelements, 0, 0);
// restoring the perspective view is done by R_RenderScene
//R_SetupView(&r_view.matrix);