memset(&m, 0, sizeof(m));
m.pointer_vertex = vertex3f;
R_Mesh_State(&m);
+ GL_LockArrays(0, numvertices);
if (r_shadowstage == SHADOWSTAGE_STENCIL)
{
// decrement stencil if frontface is behind depthbuffer
R_Mesh_Draw(numvertices, numtriangles, element3i);
c_rt_shadowmeshes++;
c_rt_shadowtris += numtriangles;
+ GL_LockArrays(0, 0);
}
void R_Shadow_RenderShadowMeshVolume(shadowmesh_t *firstmesh)
{
m.pointer_vertex = mesh->vertex3f;
R_Mesh_State(&m);
+ GL_LockArrays(0, mesh->numverts);
if (r_shadowstage == SHADOWSTAGE_STENCIL)
{
// decrement stencil if frontface is behind depthbuffer
R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
c_rtcached_shadowmeshes++;
c_rtcached_shadowtris += mesh->numtriangles;
+ GL_LockArrays(0, 0);
}
}
GL_BlendFunc(GL_ONE, GL_ZERO);
R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin);
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[2], numverts, vertex3f, matrix_modeltoattenuationxyz);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight);
}
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
VectorScale(lightcolor, r_shadow_lightintensityscale.value, color2);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
else if (r_shadow_texture3d.integer && r_textureunits.integer >= 2 && lightcubemap)
{
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0], numverts, vertex3f, matrix_modeltoattenuationxyz);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
R_Mesh_State(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight);
}
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
VectorScale(lightcolor, r_shadow_lightintensityscale.value, color2);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
else if (r_shadow_texture3d.integer && r_textureunits.integer >= 2 && !lightcubemap)
{
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
m.pointer_texcoord[0] = texcoord2f;
m.pointer_texcoord[1] = varray_texcoord3f[1];
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltoattenuationxyz);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
else if (r_textureunits.integer >= 4)
{
R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin);
R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[2], numverts, vertex3f, matrix_modeltoattenuationxyz);
R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[3], numverts, vertex3f, matrix_modeltoattenuationz);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight);
}
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
VectorScale(lightcolor, r_shadow_lightintensityscale.value, color2);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
else
{
GL_BlendFunc(GL_ONE, GL_ZERO);
R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0], numverts, vertex3f, matrix_modeltoattenuationxyz);
R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationz);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
R_Mesh_State(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight);
}
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
VectorScale(lightcolor, r_shadow_lightintensityscale.value, color2);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
}
else
R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationxyz);
}
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
for (renders = 0;renders < 64 && (color2[0] > 0 || color2[1] > 0 || color2[2] > 0);renders++, color2[0]--, color2[1]--, color2[2]--)
{
color[0] = bound(0, color2[0], 1);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
}
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin, relativeeyeorigin);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
memset(&m, 0, sizeof(m));
m.pointer_vertex = vertex3f;
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
// square alpha in framebuffer a few times to make it shiny
GL_BlendFunc(GL_ZERO, GL_DST_ALPHA);
// these comments are a test run through this math for intensity 0.5
R_Mesh_Draw(numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
+ GL_LockArrays(0, 0);
memset(&m, 0, sizeof(m));
m.pointer_vertex = vertex3f;
R_Mesh_State(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0], numverts, vertex3f, matrix_modeltoattenuationxyz);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
m.pointer_texcoord[0] = texcoord2f;
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
VectorScale(lightcolor, colorscale, color2);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
else if (r_shadow_texture3d.integer && r_textureunits.integer >= 2 && !lightcubemap /*&& gl_support_blendsquare*/) // FIXME: detect blendsquare!
{
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin, relativeeyeorigin);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
memset(&m, 0, sizeof(m));
m.pointer_vertex = vertex3f;
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
// square alpha in framebuffer a few times to make it shiny
GL_BlendFunc(GL_ZERO, GL_DST_ALPHA);
// these comments are a test run through this math for intensity 0.5
R_Mesh_Draw(numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
+ GL_LockArrays(0, 0);
memset(&m, 0, sizeof(m));
m.pointer_vertex = vertex3f;
m.pointer_texcoord[0] = texcoord2f;
m.pointer_texcoord[1] = varray_texcoord3f[1];
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltoattenuationxyz);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
else if (r_textureunits.integer >= 2 /*&& gl_support_blendsquare*/) // FIXME: detect blendsquare!
{
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin, relativeeyeorigin);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
memset(&m, 0, sizeof(m));
m.pointer_vertex = vertex3f;
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
// square alpha in framebuffer a few times to make it shiny
GL_BlendFunc(GL_ZERO, GL_DST_ALPHA);
// these comments are a test run through this math for intensity 0.5
R_Mesh_Draw(numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
+ GL_LockArrays(0, 0);
memset(&m, 0, sizeof(m));
m.pointer_vertex = vertex3f;
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0], numverts, vertex3f, matrix_modeltoattenuationxyz);
R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationz);
+ GL_LockArrays(0, numverts);
R_Mesh_Draw(numverts, numtriangles, elements);
+ GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
m.pointer_texcoord[0] = texcoord2f;
R_Mesh_State(&m);
+ GL_LockArrays(0, numverts);
GL_ColorMask(1,1,1,0);
GL_BlendFunc(GL_DST_ALPHA, GL_ONE);
VectorScale(lightcolor, colorscale, color2);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
+ GL_LockArrays(0, 0);
}
}
}