rtexture_t *r_shadow_normalcubetexture;
rtexture_t *r_shadow_attenuation2dtexture;
rtexture_t *r_shadow_attenuation3dtexture;
-rtexture_t *r_shadow_blankbumptexture;
-rtexture_t *r_shadow_blankglosstexture;
-rtexture_t *r_shadow_blankwhitetexture;
rtexture_t *r_shadow_blankwhitecubetexture;
-rtexture_t *r_shadow_blankblacktexture;
// lights are reloaded when this changes
char r_shadow_mapname[MAX_QPATH];
" // (we use unnormalized to ensure that it interpolates correctly and then\n"
" // normalize it per pixel)\n"
" vec3 lightminusvertex = LightPosition - gl_Vertex.xyz;\n"
-" LightVector.x = dot(lightminusvertex, gl_MultiTexCoord1.xyz);\n"
-" LightVector.y = dot(lightminusvertex, gl_MultiTexCoord2.xyz);\n"
+" LightVector.x = -dot(lightminusvertex, gl_MultiTexCoord1.xyz);\n"
+" LightVector.y = -dot(lightminusvertex, gl_MultiTexCoord2.xyz);\n"
" LightVector.z = -dot(lightminusvertex, gl_MultiTexCoord3.xyz);\n"
"\n"
"#if defined(USESPECULAR) || defined(USEFOG) || defined(USEOFFSETMAPPING)\n"
" // transform unnormalized eye direction into tangent space\n"
" vec3 eyeminusvertex = EyePosition - gl_Vertex.xyz;\n"
-" EyeVector.x = dot(eyeminusvertex, gl_MultiTexCoord1.xyz);\n"
-" EyeVector.y = dot(eyeminusvertex, gl_MultiTexCoord2.xyz);\n"
+" EyeVector.x = -dot(eyeminusvertex, gl_MultiTexCoord1.xyz);\n"
+" EyeVector.y = -dot(eyeminusvertex, gl_MultiTexCoord2.xyz);\n"
" EyeVector.z = -dot(eyeminusvertex, gl_MultiTexCoord3.xyz);\n"
"#endif\n"
"\n"
r_shadow_normalcubetexture = NULL;
r_shadow_attenuation2dtexture = NULL;
r_shadow_attenuation3dtexture = NULL;
- r_shadow_blankbumptexture = NULL;
- r_shadow_blankglosstexture = NULL;
- r_shadow_blankwhitetexture = NULL;
r_shadow_blankwhitecubetexture = NULL;
- r_shadow_blankblacktexture = NULL;
r_shadow_texturepool = NULL;
r_shadow_filters_texturepool = NULL;
R_Shadow_ValidateCvars();
r_shadow_normalcubetexture = NULL;
r_shadow_attenuation2dtexture = NULL;
r_shadow_attenuation3dtexture = NULL;
- r_shadow_blankbumptexture = NULL;
- r_shadow_blankglosstexture = NULL;
- r_shadow_blankwhitetexture = NULL;
r_shadow_blankwhitecubetexture = NULL;
- r_shadow_blankblacktexture = NULL;
R_FreeTexturePool(&r_shadow_texturepool);
R_FreeTexturePool(&r_shadow_filters_texturepool);
maxshadowelements = 0;
// increment stencil if backface is behind depthbuffer
qglCullFace(GL_BACK); // quake is backwards, this culls front faces
qglStencilOp(GL_KEEP, GL_INCR, GL_KEEP);
- R_Mesh_Draw(numvertices, numtriangles, element3i);
+ R_Mesh_Draw(0, numvertices, numtriangles, element3i);
c_rt_shadowmeshes++;
c_rt_shadowtris += numtriangles;
// decrement stencil if frontface is behind depthbuffer
qglCullFace(GL_FRONT); // quake is backwards, this culls back faces
qglStencilOp(GL_KEEP, GL_DECR, GL_KEEP);
}
- R_Mesh_Draw(numvertices, numtriangles, element3i);
+ R_Mesh_Draw(0, numvertices, numtriangles, element3i);
c_rt_shadowmeshes++;
c_rt_shadowtris += numtriangles;
GL_LockArrays(0, 0);
#define ATTEN2DSIZE 64
#define ATTEN3DSIZE 32
data = Mem_Alloc(tempmempool, max(6*NORMSIZE*NORMSIZE*4, max(ATTEN3DSIZE*ATTEN3DSIZE*ATTEN3DSIZE*4, ATTEN2DSIZE*ATTEN2DSIZE*4)));
- data[0] = 128; // normal X
- data[1] = 128; // normal Y
- data[2] = 255; // normal Z
- data[3] = 128; // height
- r_shadow_blankbumptexture = R_LoadTexture2D(r_shadow_texturepool, "blankbump", 1, 1, data, TEXTYPE_RGBA, TEXF_PRECACHE, NULL);
- data[0] = 255;
- data[1] = 255;
- data[2] = 255;
- data[3] = 255;
- r_shadow_blankglosstexture = R_LoadTexture2D(r_shadow_texturepool, "blankgloss", 1, 1, data, TEXTYPE_RGBA, TEXF_PRECACHE, NULL);
- data[0] = 255;
- data[1] = 255;
- data[2] = 255;
- data[3] = 255;
- r_shadow_blankwhitetexture = R_LoadTexture2D(r_shadow_texturepool, "blankwhite", 1, 1, data, TEXTYPE_RGBA, TEXF_PRECACHE, NULL);
- data[0] = 0;
- data[1] = 0;
- data[2] = 0;
- data[3] = 255;
- r_shadow_blankblacktexture = R_LoadTexture2D(r_shadow_texturepool, "blankblack", 1, 1, data, TEXTYPE_RGBA, TEXF_PRECACHE, NULL);
r_shadow_blankwhitecubetexture = NULL;
r_shadow_normalcubetexture = NULL;
if (gl_texturecubemap)
GL_DepthMask(false);
GL_DepthTest(true);
if (!bumptexture)
- bumptexture = r_shadow_blankbumptexture;
+ bumptexture = r_texture_blanknormalmap;
specularscale *= r_shadow_glossintensity.value;
if (!glosstexture)
{
if (r_shadow_gloss.integer >= 2)
{
- glosstexture = r_shadow_blankglosstexture;
+ glosstexture = r_texture_white;
specularscale *= r_shadow_gloss2intensity.value;
}
else
{
- glosstexture = r_shadow_blankblacktexture;
+ glosstexture = r_texture_black;
specularscale = 0;
}
}
m.tex[2] = R_GetTexture(glosstexture);
m.texcubemap[3] = R_GetTexture(lightcubemap);
// TODO: support fog (after renderer is converted to texture fog)
- m.tex[4] = R_GetTexture(r_shadow_blankwhitetexture);
+ m.tex[4] = R_GetTexture(r_texture_white);
m.texmatrix[3] = *matrix_modeltolight;
R_Mesh_State(&m);
GL_BlendFunc(GL_ONE, GL_ONE);
}
CHECKGLERROR
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_LockArrays(0, 0);
else if (gl_dot3arb && gl_texturecubemap && gl_combine.integer && gl_stencil)
{
if (!bumptexture)
- bumptexture = r_shadow_blankbumptexture;
+ bumptexture = r_texture_blanknormalmap;
if (!glosstexture)
- glosstexture = r_shadow_blankglosstexture;
+ glosstexture = r_texture_white;
if (ambientscale)
{
GL_Color(1,1,1,1);
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
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(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, 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);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_ColorMask(0,0,0,1);
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, 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);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
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(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
GL_LockArrays(0, 0);
}
- if (specularscale && glosstexture != r_shadow_blankblacktexture)
+ if (specularscale && glosstexture != r_texture_black)
{
// FIXME: detect blendsquare!
//if (gl_support_blendsquare)
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
// 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(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_LockArrays(0, 0);
R_Mesh_State(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
// 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(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_LockArrays(0, 0);
// this squares the result
GL_BlendFunc(GL_SRC_ALPHA, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
// 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(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
GL_LockArrays(0, 0);
R_Mesh_State(&m);
GL_BlendFunc(GL_DST_ALPHA, GL_ZERO);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
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(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
}
else
R_Shadow_VertexNoShadingWithXYZAttenuation(numverts, vertex3f, color, matrix_modeltolight);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
else
R_Shadow_VertexShadingWithXYZAttenuation(numverts, vertex3f, normal3f, color, matrix_modeltolight);
GL_LockArrays(0, numverts);
- R_Mesh_Draw(numverts, numtriangles, elements);
+ R_Mesh_Draw(0, numverts, numtriangles, elements);
GL_LockArrays(0, 0);
c_rt_lightmeshes++;
c_rt_lighttris += numtriangles;
// increment stencil if backface is behind depthbuffer
qglCullFace(GL_BACK); // quake is backwards, this culls front faces
qglStencilOp(GL_KEEP, GL_INCR, GL_KEEP);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
+ R_Mesh_Draw(0, mesh->numverts, mesh->numtriangles, mesh->element3i);
c_rtcached_shadowmeshes++;
c_rtcached_shadowtris += mesh->numtriangles;
// decrement stencil if frontface is behind depthbuffer
qglCullFace(GL_FRONT); // quake is backwards, this culls back faces
qglStencilOp(GL_KEEP, GL_DECR, GL_KEEP);
}
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
+ R_Mesh_Draw(0, mesh->numverts, mesh->numtriangles, mesh->element3i);
c_rtcached_shadowmeshes++;
c_rtcached_shadowtris += mesh->numtriangles;
GL_LockArrays(0, 0);