X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=r_shadow.c;h=f5cbf9fa2b90655b3b7f25eacb23a50c7afbabdc;hb=e40a37e7e99114e259dffe2e36416f0c238a6b40;hp=9575f9c785c8ed8d23a7ff5146ad1661325efdb2;hpb=0e38741a94d0a28e659fb3a87eaa7c9464f5cb8d;p=xonotic%2Fdarkplaces.git diff --git a/r_shadow.c b/r_shadow.c index 9575f9c7..f5cbf9fa 100644 --- a/r_shadow.c +++ b/r_shadow.c @@ -1552,7 +1552,7 @@ static void R_Shadow_GenTexCoords_Specular_NormalCubeMap(float *out3f, int numve } } -void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements, const float *vertex3f, const float *svector3f, const float *tvector3f, const float *normal3f, const float *texcoord2f, const float *relativelightorigin, const float *relativeeyeorigin, const float *lightcolor, const matrix4x4_t *matrix_modeltolight, const matrix4x4_t *matrix_modeltoattenuationxyz, const matrix4x4_t *matrix_modeltoattenuationz, rtexture_t *basetexture, rtexture_t *bumptexture, rtexture_t *glosstexture, rtexture_t *lightcubemap, vec_t ambientscale, vec_t diffusescale, vec_t specularscale) +void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, const int *elements, const float *vertex3f, const float *svector3f, const float *tvector3f, const float *normal3f, const float *texcoord2f, const float *relativelightorigin, const float *relativeeyeorigin, const float *lightcolor, const matrix4x4_t *matrix_modeltolight, const matrix4x4_t *matrix_modeltoattenuationxyz, const matrix4x4_t *matrix_modeltoattenuationz, rtexture_t *basetexture, rtexture_t *bumptexture, rtexture_t *glosstexture, rtexture_t *lightcubemap, vec_t ambientscale, vec_t diffusescale, vec_t specularscale) { int renders; float color[3], color2[3], colorscale; @@ -1641,8 +1641,8 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements qglUniform1fARB(qglGetUniformLocationARB(prog, "OffsetMapping_Bias"), r_shadow_glsl_offsetmapping_bias.value);CHECKGLERROR } CHECKGLERROR - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; GL_LockArrays(0, 0); @@ -1680,7 +1680,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord3f[0] = varray_texcoord3f[0]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[1] = R_GetTexture(basetexture); m.pointer_texcoord[1] = texcoord2f; @@ -1690,7 +1690,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[2] = *matrix_modeltolight; #else m.pointer_texcoord3f[2] = varray_texcoord3f[2]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[2], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[2] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif GL_BlendFunc(GL_ONE, GL_ONE); } @@ -1705,7 +1705,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord3f[0] = varray_texcoord3f[0]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[1] = R_GetTexture(basetexture); m.pointer_texcoord[1] = texcoord2f; @@ -1722,7 +1722,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[0] = varray_texcoord2f[0]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[1] = R_GetTexture(r_shadow_attenuation2dtexture); #ifdef USETEXMATRIX @@ -1730,7 +1730,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[1] = varray_texcoord2f[1]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif m.tex[2] = R_GetTexture(basetexture); m.pointer_texcoord[2] = texcoord2f; @@ -1742,7 +1742,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[3] = *matrix_modeltolight; #else m.pointer_texcoord3f[3] = varray_texcoord3f[3]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[3], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[3] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_ONE, GL_ONE); @@ -1758,7 +1758,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[0] = varray_texcoord2f[0]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[1] = R_GetTexture(r_shadow_attenuation2dtexture); #ifdef USETEXMATRIX @@ -1766,7 +1766,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[1] = varray_texcoord2f[1]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif m.tex[2] = R_GetTexture(basetexture); m.pointer_texcoord[2] = texcoord2f; @@ -1783,7 +1783,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[0] = varray_texcoord2f[0]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[1] = R_GetTexture(r_shadow_attenuation2dtexture); #ifdef USETEXMATRIX @@ -1791,13 +1791,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[1] = varray_texcoord2f[1]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif R_Mesh_State(&m); GL_ColorMask(0,0,0,1); GL_BlendFunc(GL_ONE, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -1814,7 +1814,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltolight; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_DST_ALPHA, GL_ONE); @@ -1823,11 +1823,11 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements R_Mesh_State(&m); GL_ColorMask(r_refdef.colormask[0], r_refdef.colormask[1], r_refdef.colormask[2], 0); VectorScale(lightcolor, colorscale, color2); - GL_LockArrays(0, numverts); + GL_LockArrays(firstvertex, numvertices); for (renders = 0;renders < 64 && (color2[0] > 0 || color2[1] > 0 || color2[2] > 0);renders++, color2[0]--, color2[1]--, color2[2]--) { GL_Color(bound(0, color2[0], 1), bound(0, color2[1], 1), bound(0, color2[2], 1), 1); - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; } @@ -1855,20 +1855,20 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin); + R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); m.tex3d[2] = R_GetTexture(r_shadow_attenuation3dtexture); #ifdef USETEXMATRIX m.pointer_texcoord3f[2] = vertex3f; m.texmatrix[2] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord3f[2] = varray_texcoord3f[2]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[2], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[2] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif R_Mesh_State(&m); GL_ColorMask(0,0,0,1); GL_BlendFunc(GL_ONE, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -1885,7 +1885,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltolight; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_DST_ALPHA, GL_ONE); @@ -1901,13 +1901,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord3f[0] = varray_texcoord3f[0]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif R_Mesh_State(&m); GL_ColorMask(0,0,0,1); GL_BlendFunc(GL_ONE, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -1920,11 +1920,11 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin); + R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); R_Mesh_State(&m); GL_BlendFunc(GL_DST_ALPHA, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -1941,7 +1941,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltolight; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_DST_ALPHA, GL_ONE); @@ -1957,12 +1957,12 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin); + R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); R_Mesh_State(&m); GL_ColorMask(0,0,0,1); GL_BlendFunc(GL_ONE, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -1977,7 +1977,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif GL_BlendFunc(GL_DST_ALPHA, GL_ONE); } @@ -1992,14 +1992,14 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin); + R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); m.tex[2] = R_GetTexture(r_shadow_attenuation2dtexture); #ifdef USETEXMATRIX m.pointer_texcoord3f[2] = vertex3f; m.texmatrix[2] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[2] = varray_texcoord2f[2]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[2], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[2] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[3] = R_GetTexture(r_shadow_attenuation2dtexture); #ifdef USETEXMATRIX @@ -2007,13 +2007,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[3] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[3] = varray_texcoord2f[3]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[3], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[3] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif R_Mesh_State(&m); GL_ColorMask(0,0,0,1); GL_BlendFunc(GL_ONE, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2030,7 +2030,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltolight; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_DST_ALPHA, GL_ONE); @@ -2046,7 +2046,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[0] = varray_texcoord2f[0]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[1] = R_GetTexture(r_shadow_attenuation2dtexture); #ifdef USETEXMATRIX @@ -2054,13 +2054,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[1] = varray_texcoord2f[1]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif R_Mesh_State(&m); GL_ColorMask(0,0,0,1); GL_BlendFunc(GL_ONE, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2073,11 +2073,11 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin); + R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); R_Mesh_State(&m); GL_BlendFunc(GL_DST_ALPHA, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2094,7 +2094,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltolight; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_DST_ALPHA, GL_ONE); @@ -2103,11 +2103,11 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements R_Mesh_State(&m); GL_ColorMask(r_refdef.colormask[0], r_refdef.colormask[1], r_refdef.colormask[2], 0); VectorScale(lightcolor, colorscale, color2); - GL_LockArrays(0, numverts); + GL_LockArrays(firstvertex, numvertices); for (renders = 0;renders < 64 && (color2[0] > 0 || color2[1] > 0 || color2[2] > 0);renders++, color2[0]--, color2[1]--, color2[2]--) { GL_Color(bound(0, color2[0], 1), bound(0, color2[1], 1), bound(0, color2[2], 1), 1); - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; } @@ -2130,13 +2130,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin, relativeeyeorigin); + R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin, relativeeyeorigin); R_Mesh_State(&m); GL_ColorMask(0,0,0,1); // this squares the result GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2144,17 +2144,17 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements memset(&m, 0, sizeof(m)); m.pointer_vertex = vertex3f; R_Mesh_State(&m); - GL_LockArrays(0, numverts); + GL_LockArrays(firstvertex, numvertices); // 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 // 0.5 * 0.5 = 0.25 (done by the BlendFunc earlier) // 0.25 * 0.25 = 0.0625 (this is another pass) // 0.0625 * 0.0625 = 0.00390625 (this is another pass) - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; GL_LockArrays(0, 0); @@ -2167,12 +2167,12 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord3f[0] = varray_texcoord3f[0]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif R_Mesh_State(&m); GL_BlendFunc(GL_DST_ALPHA, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2189,7 +2189,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltolight; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_DST_ALPHA, GL_ONE); @@ -2204,13 +2204,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin, relativeeyeorigin); + R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin, relativeeyeorigin); R_Mesh_State(&m); GL_ColorMask(0,0,0,1); // this squares the result GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2218,17 +2218,17 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements memset(&m, 0, sizeof(m)); m.pointer_vertex = vertex3f; R_Mesh_State(&m); - GL_LockArrays(0, numverts); + GL_LockArrays(firstvertex, numvertices); // 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 // 0.5 * 0.5 = 0.25 (done by the BlendFunc earlier) // 0.25 * 0.25 = 0.0625 (this is another pass) // 0.0625 * 0.0625 = 0.00390625 (this is another pass) - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; GL_LockArrays(0, 0); @@ -2243,7 +2243,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif GL_BlendFunc(GL_DST_ALPHA, GL_ONE); } @@ -2257,13 +2257,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1], numverts, vertex3f, svector3f, tvector3f, normal3f, relativelightorigin, relativeeyeorigin); + R_Shadow_GenTexCoords_Specular_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin, relativeeyeorigin); R_Mesh_State(&m); GL_ColorMask(0,0,0,1); // this squares the result GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2271,17 +2271,17 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements memset(&m, 0, sizeof(m)); m.pointer_vertex = vertex3f; R_Mesh_State(&m); - GL_LockArrays(0, numverts); + GL_LockArrays(firstvertex, numvertices); // 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 // 0.5 * 0.5 = 0.25 (done by the BlendFunc earlier) // 0.25 * 0.25 = 0.0625 (this is another pass) // 0.0625 * 0.0625 = 0.00390625 (this is another pass) - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; GL_LockArrays(0, 0); @@ -2294,7 +2294,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[0] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[0] = varray_texcoord2f[0]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[0] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif m.tex[1] = R_GetTexture(r_shadow_attenuation2dtexture); #ifdef USETEXMATRIX @@ -2302,12 +2302,12 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[1] = varray_texcoord2f[1]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif R_Mesh_State(&m); GL_BlendFunc(GL_DST_ALPHA, GL_ZERO); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2324,7 +2324,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltolight; #else m.pointer_texcoord3f[1] = varray_texcoord3f[1]; - R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1], numverts, vertex3f, matrix_modeltolight); + R_Shadow_Transform_Vertex3f_TexCoord3f(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltolight); #endif } GL_BlendFunc(GL_DST_ALPHA, GL_ONE); @@ -2332,11 +2332,11 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements R_Mesh_State(&m); GL_ColorMask(r_refdef.colormask[0], r_refdef.colormask[1], r_refdef.colormask[2], 0); VectorScale(lightcolor, colorscale, color2); - GL_LockArrays(0, numverts); + GL_LockArrays(firstvertex, numvertices); for (renders = 0;renders < 64 && (color2[0] > 0 || color2[1] > 0 || color2[2] > 0);renders++, color2[0]--, color2[1]--, color2[2]--) { GL_Color(bound(0, color2[0], 1), bound(0, color2[1], 1), bound(0, color2[2], 1), 1); - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; } @@ -2363,7 +2363,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[1] = varray_texcoord2f[1]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif if (r_textureunits.integer >= 3) { @@ -2374,7 +2374,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[2] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[2] = varray_texcoord2f[2]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[2], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[2] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif } } @@ -2391,11 +2391,11 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements if (r_textureunits.integer >= 3) GL_Color(color[0], color[1], color[2], 1); else if (r_textureunits.integer >= 2) - R_Shadow_VertexNoShadingWithZAttenuation(numverts, vertex3f, color, matrix_modeltolight); + R_Shadow_VertexNoShadingWithZAttenuation(numvertices, vertex3f + 3 * firstvertex, color + 3 * firstvertex, matrix_modeltolight); else - R_Shadow_VertexNoShadingWithXYZAttenuation(numverts, vertex3f, color, matrix_modeltolight); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Shadow_VertexNoShadingWithXYZAttenuation(numvertices, vertex3f + 3 * firstvertex, color + 3 * firstvertex, matrix_modeltolight); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2419,7 +2419,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[1] = *matrix_modeltoattenuationxyz; #else m.pointer_texcoord[1] = varray_texcoord2f[1]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1], numverts, vertex3f, matrix_modeltoattenuationxyz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationxyz); #endif if (r_textureunits.integer >= 3) { @@ -2430,7 +2430,7 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements m.texmatrix[2] = *matrix_modeltoattenuationz; #else m.pointer_texcoord[2] = varray_texcoord2f[2]; - R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[2], numverts, vertex3f, matrix_modeltoattenuationz); + R_Shadow_Transform_Vertex3f_TexCoord2f(varray_texcoord2f[2] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, matrix_modeltoattenuationz); #endif } } @@ -2441,13 +2441,13 @@ void R_Shadow_RenderLighting(int numverts, int numtriangles, const int *elements color[1] = bound(0, color2[1], 1); color[2] = bound(0, color2[2], 1); if (r_textureunits.integer >= 3) - R_Shadow_VertexShading(numverts, vertex3f, normal3f, color, matrix_modeltolight); + R_Shadow_VertexShading(numvertices, vertex3f + 3 * firstvertex, normal3f + 3 * firstvertex, color + 3 * firstvertex, matrix_modeltolight); else if (r_textureunits.integer >= 2) - R_Shadow_VertexShadingWithZAttenuation(numverts, vertex3f, normal3f, color, matrix_modeltolight); + R_Shadow_VertexShadingWithZAttenuation(numvertices, vertex3f + 3 * firstvertex, normal3f + 3 * firstvertex, color + 3 * firstvertex, matrix_modeltolight); else - R_Shadow_VertexShadingWithXYZAttenuation(numverts, vertex3f, normal3f, color, matrix_modeltolight); - GL_LockArrays(0, numverts); - R_Mesh_Draw(0, numverts, numtriangles, elements); + R_Shadow_VertexShadingWithXYZAttenuation(numvertices, vertex3f + 3 * firstvertex, normal3f + 3 * firstvertex, color + 3 * firstvertex, matrix_modeltolight); + GL_LockArrays(firstvertex, numvertices); + R_Mesh_Draw(firstvertex, numvertices, numtriangles, elements); GL_LockArrays(0, 0); c_rt_lightmeshes++; c_rt_lighttris += numtriangles; @@ -2804,7 +2804,7 @@ void R_DrawRTLight(rtlight_t *rtlight, int visiblevolumes) { R_Mesh_Matrix(&ent->matrix); for (mesh = rtlight->static_meshchain_light;mesh;mesh = mesh->next) - R_Shadow_RenderLighting(mesh->numverts, mesh->numtriangles, mesh->element3i, mesh->vertex3f, mesh->svector3f, mesh->tvector3f, mesh->normal3f, mesh->texcoord2f, relativelightorigin, relativeeyeorigin, lightcolor2, &matrix_modeltolight, &matrix_modeltoattenuationxyz, &matrix_modeltoattenuationz, mesh->map_diffuse, mesh->map_normal, mesh->map_specular, cubemaptexture, rtlight->ambientscale, rtlight->diffusescale, rtlight->specularscale); + R_Shadow_RenderLighting(0, mesh->numverts, mesh->numtriangles, mesh->element3i, mesh->vertex3f, mesh->svector3f, mesh->tvector3f, mesh->normal3f, mesh->texcoord2f, relativelightorigin, relativeeyeorigin, lightcolor2, &matrix_modeltolight, &matrix_modeltoattenuationxyz, &matrix_modeltoattenuationz, mesh->map_diffuse, mesh->map_normal, mesh->map_specular, cubemaptexture, rtlight->ambientscale, rtlight->diffusescale, rtlight->specularscale); } else ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, rtlight->radius, lightcolor2, &matrix_modeltolight, &matrix_modeltoattenuationxyz, &matrix_modeltoattenuationz, cubemaptexture, rtlight->ambientscale, rtlight->diffusescale, rtlight->specularscale, numsurfaces, surfacelist);