From 726b302a4cb2cf82910e03b6a713e58ca0a0205c Mon Sep 17 00:00:00 2001 From: havoc Date: Sun, 1 May 2005 12:14:05 +0000 Subject: [PATCH] moved r_shadow_ white and normal cubemaps to r_texture_ git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5212 d7cf8633-e32d-0410-b094-e92efae38249 --- gl_rmain.c | 73 ++++++++++++++++++++++++++++++++++++++++-- r_shadow.c | 93 +++++++----------------------------------------------- render.h | 2 ++ 3 files changed, 84 insertions(+), 84 deletions(-) diff --git a/gl_rmain.c b/gl_rmain.c index 1d0bc1d2..d82504eb 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -110,6 +110,8 @@ rtexture_t *r_texture_blanknormalmap; rtexture_t *r_texture_white; rtexture_t *r_texture_black; rtexture_t *r_texture_notexture; +rtexture_t *r_texture_whitecube; +rtexture_t *r_texture_normalizationcube; void R_ModulateColors(float *in, float *out, int verts, float r, float g, float b) { @@ -211,9 +213,12 @@ void FOG_registercvars(void) void gl_main_start(void) { - int x, y; + int x, y, side; + vec3_t v; + vec_t s, t, intensity; qbyte pix[16][16][4]; - qbyte data[4]; +#define NORMSIZE 64 + qbyte data[6*NORMSIZE*NORMSIZE*4]; r_main_texturepool = R_AllocTexturePool(); r_bloom_texture_screen = NULL; r_bloom_texture_bloom = NULL; @@ -253,7 +258,67 @@ void gl_main_start(void) } } } - r_texture_notexture = R_LoadTexture2D(mod_shared_texturepool, "notexture", 16, 16, &pix[0][0][0], TEXTYPE_RGBA, TEXF_MIPMAP, NULL); + r_texture_notexture = R_LoadTexture2D(r_main_texturepool, "notexture", 16, 16, &pix[0][0][0], TEXTYPE_RGBA, TEXF_MIPMAP, NULL); + if (gl_texturecubemap) + { + data[ 0] = 255;data[ 1] = 255;data[ 2] = 255;data[ 3] = 255; + data[ 4] = 255;data[ 5] = 255;data[ 6] = 255;data[ 7] = 255; + data[ 8] = 255;data[ 9] = 255;data[10] = 255;data[11] = 255; + data[12] = 255;data[13] = 255;data[14] = 255;data[15] = 255; + data[16] = 255;data[17] = 255;data[18] = 255;data[19] = 255; + data[20] = 255;data[21] = 255;data[22] = 255;data[23] = 255; + r_texture_whitecube = R_LoadTextureCubeMap(r_main_texturepool, "whitecube", 1, data, TEXTYPE_RGBA, TEXF_PRECACHE | TEXF_CLAMP, NULL); + for (side = 0;side < 6;side++) + { + for (y = 0;y < NORMSIZE;y++) + { + for (x = 0;x < NORMSIZE;x++) + { + s = (x + 0.5f) * (2.0f / NORMSIZE) - 1.0f; + t = (y + 0.5f) * (2.0f / NORMSIZE) - 1.0f; + switch(side) + { + case 0: + v[0] = 1; + v[1] = -t; + v[2] = -s; + break; + case 1: + v[0] = -1; + v[1] = -t; + v[2] = s; + break; + case 2: + v[0] = s; + v[1] = 1; + v[2] = t; + break; + case 3: + v[0] = s; + v[1] = -1; + v[2] = -t; + break; + case 4: + v[0] = s; + v[1] = -t; + v[2] = 1; + break; + case 5: + v[0] = -s; + v[1] = -t; + v[2] = -1; + break; + } + intensity = 127.0f / sqrt(DotProduct(v, v)); + data[((side*NORMSIZE+y)*NORMSIZE+x)*4+0] = 128.0f + intensity * v[0]; + data[((side*NORMSIZE+y)*NORMSIZE+x)*4+1] = 128.0f + intensity * v[1]; + data[((side*NORMSIZE+y)*NORMSIZE+x)*4+2] = 128.0f + intensity * v[2]; + data[((side*NORMSIZE+y)*NORMSIZE+x)*4+3] = 255; + } + } + } + r_texture_normalizationcube = R_LoadTextureCubeMap(r_main_texturepool, "normalcube", NORMSIZE, data, TEXTYPE_RGBA, TEXF_PRECACHE | TEXF_CLAMP, NULL); + } } void gl_main_shutdown(void) @@ -264,6 +329,8 @@ void gl_main_shutdown(void) r_texture_blanknormalmap = NULL; r_texture_white = NULL; r_texture_black = NULL; + r_texture_whitecube = NULL; + r_texture_normalizationcube = NULL; } extern void CL_ParseEntityLump(char *entitystring); diff --git a/r_shadow.c b/r_shadow.c index b8127bd0..1a27ff53 100644 --- a/r_shadow.c +++ b/r_shadow.c @@ -151,10 +151,8 @@ qbyte *r_shadow_buffer_surfacepvs; int *r_shadow_buffer_surfacelist; rtexturepool_t *r_shadow_texturepool; -rtexture_t *r_shadow_normalcubetexture; rtexture_t *r_shadow_attenuation2dtexture; rtexture_t *r_shadow_attenuation3dtexture; -rtexture_t *r_shadow_blankwhitecubetexture; // lights are reloaded when this changes char r_shadow_mapname[MAX_QPATH]; @@ -391,10 +389,8 @@ void r_shadow_start(void) int i; // allocate vertex processing arrays numcubemaps = 0; - r_shadow_normalcubetexture = NULL; r_shadow_attenuation2dtexture = NULL; r_shadow_attenuation3dtexture = NULL; - r_shadow_blankwhitecubetexture = NULL; r_shadow_texturepool = NULL; r_shadow_filters_texturepool = NULL; R_Shadow_ValidateCvars(); @@ -496,10 +492,8 @@ void r_shadow_shutdown(void) } } numcubemaps = 0; - r_shadow_normalcubetexture = NULL; r_shadow_attenuation2dtexture = NULL; r_shadow_attenuation3dtexture = NULL; - r_shadow_blankwhitecubetexture = NULL; R_FreeTexturePool(&r_shadow_texturepool); R_FreeTexturePool(&r_shadow_filters_texturepool); maxshadowelements = 0; @@ -941,79 +935,16 @@ void R_Shadow_RenderVolume(int numvertices, int numtriangles, const float *verte static void R_Shadow_MakeTextures(void) { - int x, y, z, d, side; - float v[3], s, t, intensity; + int x, y, z, d; + float v[3], intensity; qbyte *data; R_FreeTexturePool(&r_shadow_texturepool); r_shadow_texturepool = R_AllocTexturePool(); r_shadow_attenpower = r_shadow_lightattenuationpower.value; r_shadow_attenscale = r_shadow_lightattenuationscale.value; -#define NORMSIZE 64 #define ATTEN2DSIZE 64 #define ATTEN3DSIZE 32 - data = Mem_Alloc(tempmempool, max(6*NORMSIZE*NORMSIZE*4, max(ATTEN3DSIZE*ATTEN3DSIZE*ATTEN3DSIZE*4, ATTEN2DSIZE*ATTEN2DSIZE*4))); - r_shadow_blankwhitecubetexture = NULL; - r_shadow_normalcubetexture = NULL; - if (gl_texturecubemap) - { - data[ 0] = 255;data[ 1] = 255;data[ 2] = 255;data[ 3] = 255; - data[ 4] = 255;data[ 5] = 255;data[ 6] = 255;data[ 7] = 255; - data[ 8] = 255;data[ 9] = 255;data[10] = 255;data[11] = 255; - data[12] = 255;data[13] = 255;data[14] = 255;data[15] = 255; - data[16] = 255;data[17] = 255;data[18] = 255;data[19] = 255; - data[20] = 255;data[21] = 255;data[22] = 255;data[23] = 255; - r_shadow_blankwhitecubetexture = R_LoadTextureCubeMap(r_shadow_texturepool, "blankwhitecube", 1, data, TEXTYPE_RGBA, TEXF_PRECACHE | TEXF_CLAMP, NULL); - for (side = 0;side < 6;side++) - { - for (y = 0;y < NORMSIZE;y++) - { - for (x = 0;x < NORMSIZE;x++) - { - s = (x + 0.5f) * (2.0f / NORMSIZE) - 1.0f; - t = (y + 0.5f) * (2.0f / NORMSIZE) - 1.0f; - switch(side) - { - case 0: - v[0] = 1; - v[1] = -t; - v[2] = -s; - break; - case 1: - v[0] = -1; - v[1] = -t; - v[2] = s; - break; - case 2: - v[0] = s; - v[1] = 1; - v[2] = t; - break; - case 3: - v[0] = s; - v[1] = -1; - v[2] = -t; - break; - case 4: - v[0] = s; - v[1] = -t; - v[2] = 1; - break; - case 5: - v[0] = -s; - v[1] = -t; - v[2] = -1; - break; - } - intensity = 127.0f / sqrt(DotProduct(v, v)); - data[((side*NORMSIZE+y)*NORMSIZE+x)*4+0] = 128.0f + intensity * v[0]; - data[((side*NORMSIZE+y)*NORMSIZE+x)*4+1] = 128.0f + intensity * v[1]; - data[((side*NORMSIZE+y)*NORMSIZE+x)*4+2] = 128.0f + intensity * v[2]; - data[((side*NORMSIZE+y)*NORMSIZE+x)*4+3] = 255; - } - } - } - r_shadow_normalcubetexture = R_LoadTextureCubeMap(r_shadow_texturepool, "normalcube", NORMSIZE, data, TEXTYPE_RGBA, TEXF_PRECACHE | TEXF_CLAMP, NULL); - } + data = Mem_Alloc(tempmempool, max(ATTEN3DSIZE*ATTEN3DSIZE*ATTEN3DSIZE*4, ATTEN2DSIZE*ATTEN2DSIZE*4)); for (y = 0;y < ATTEN2DSIZE;y++) { for (x = 0;x < ATTEN2DSIZE;x++) @@ -1593,7 +1524,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, if (r_shadow_gloss.integer < 1) specularscale = 0; if (!lightcubemap) - lightcubemap = r_shadow_blankwhitecubetexture; + lightcubemap = r_texture_whitecube; if ((ambientscale + diffusescale) * (VectorLength2(lightcolorbase) + VectorLength2(lightcolorpants) + VectorLength2(lightcolorshirt)) + specularscale * VectorLength2(lightcolorbase) <= 0.001) return; if (visiblelighting) @@ -2009,7 +1940,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.tex[0] = R_GetTexture(bumptexture); m.texcombinergb[0] = GL_REPLACE; m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); @@ -2074,7 +2005,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.tex[0] = R_GetTexture(bumptexture); m.texcombinergb[0] = GL_REPLACE; m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); @@ -2111,7 +2042,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.tex[0] = R_GetTexture(bumptexture); m.texcombinergb[0] = GL_REPLACE; m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); @@ -2146,7 +2077,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.tex[0] = R_GetTexture(bumptexture); m.texcombinergb[0] = GL_REPLACE; m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); @@ -2227,7 +2158,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.tex[0] = R_GetTexture(bumptexture); m.texcombinergb[0] = GL_REPLACE; m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; R_Shadow_GenTexCoords_Diffuse_NormalCubeMap(varray_texcoord3f[1] + 3 * firstvertex, numvertices, vertex3f + 3 * firstvertex, svector3f + 3 * firstvertex, tvector3f + 3 * firstvertex, normal3f + 3 * firstvertex, relativelightorigin); @@ -2284,7 +2215,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.pointer_vertex = vertex3f; m.tex[0] = R_GetTexture(bumptexture); m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; 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); @@ -2358,7 +2289,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.pointer_vertex = vertex3f; m.tex[0] = R_GetTexture(bumptexture); m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; 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); @@ -2411,7 +2342,7 @@ void R_Shadow_RenderLighting(int firstvertex, int numvertices, int numtriangles, m.pointer_vertex = vertex3f; m.tex[0] = R_GetTexture(bumptexture); m.pointer_texcoord[0] = texcoord2f; - m.texcubemap[1] = R_GetTexture(r_shadow_normalcubetexture); + m.texcubemap[1] = R_GetTexture(r_texture_normalizationcube); m.texcombinergb[1] = GL_DOT3_RGBA_ARB; m.pointer_texcoord3f[1] = varray_texcoord3f[1]; 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); diff --git a/render.h b/render.h index 85b927a0..48c0360f 100644 --- a/render.h +++ b/render.h @@ -177,6 +177,8 @@ extern rtexture_t *r_texture_blanknormalmap; extern rtexture_t *r_texture_white; extern rtexture_t *r_texture_black; extern rtexture_t *r_texture_notexture; +extern rtexture_t *r_texture_whitecube; +extern rtexture_t *r_texture_normalizationcube; void R_TimeReport(char *name); void R_TimeReport_Start(void); -- 2.39.2