Made some initial changes for supporting shader lights
This commit is contained in:
parent
e9cbe091a3
commit
027ddfe2a3
2 changed files with 66 additions and 14 deletions
|
@ -380,6 +380,7 @@ extern cvar_t gl_fog;
|
|||
extern float fog_color[4];
|
||||
extern cvar_t r_tangentscale; //scale tangent/binormal by this
|
||||
extern cvar_t sh_delux;
|
||||
extern cvar_t sh_rtlights;
|
||||
|
||||
extern int mirrortexturenum; // quake texturenum, not gltexturenum
|
||||
extern qboolean mirror;
|
||||
|
@ -1143,6 +1144,7 @@ typedef struct shadowlight_s {
|
|||
float haloalpha; //alpha of halo
|
||||
vec3_t oldlightorigin;
|
||||
int area; //area (from areaportals) light is in
|
||||
shader_t *shader; //shader on this light
|
||||
} shadowlight_t;
|
||||
|
||||
//PENTA: new
|
||||
|
@ -1297,7 +1299,7 @@ void R_AddRectList (screenrect_t *rec);
|
|||
void R_AllocateMirror (msurface_t *surf);
|
||||
void R_AnimateLight (void);
|
||||
void R_AutomaticLightPos (void);
|
||||
void R_CalcSvBsp (entity_t *ent);
|
||||
void R_StaticLightFromEnt (entity_t *ent);
|
||||
qboolean R_CheckRectList (screenrect_t *rec);
|
||||
void R_ClearBrushInstantCaches (void);
|
||||
void R_ClearInstantCaches (void);
|
||||
|
@ -1409,7 +1411,7 @@ void GL_ModulateAlphaDrawColor (void);
|
|||
void GL_SelectTexture (GLenum target);
|
||||
void GL_Set2D (void);
|
||||
void GL_SetupCubeMapMatrix (const transform_t *tr);
|
||||
void GL_SubdivideSurface (msurface_t *fa);
|
||||
//void GL_SubdivideSurface (msurface_t *fa);
|
||||
void GL_Upload8_EXT (byte *data, int width, int height, qboolean mipmap, qboolean alpha);
|
||||
void R_DrawCaustics(void);
|
||||
int CL_PointContents (vec3_t p);
|
||||
|
|
74
textures.c
74
textures.c
|
@ -29,9 +29,9 @@ extern unsigned char d_15to8table[65536];
|
|||
|
||||
cvar_t gl_max_size = {"gl_max_size", "1024"};
|
||||
cvar_t gl_picmip = {"gl_picmip", "0"};
|
||||
cvar_t gl_gloss = {"gl_gloss", "0.3"};
|
||||
cvar_t gl_compress_textures = {"gl_compress_textures", "0"};
|
||||
cvar_t willi_gray_colormaps = {"willi_gray_colormaps", "0"};
|
||||
cvar_t gl_gloss = {"gl_gloss", "0.3"};
|
||||
cvar_t gl_compress_textures = {"gl_compress_textures", "0"};
|
||||
cvar_t willi_gray_colormaps = {"willi_gray_colormaps", "0"};
|
||||
|
||||
/*
|
||||
cvar_t cg_conclock = {"cg_conclock", "1", true};
|
||||
|
@ -717,15 +717,13 @@ static unsigned scaled[1024*1024]; // [512*256];
|
|||
if (scaled_width * scaled_height > sizeof(scaled)/4)
|
||||
Sys_Error ("GL_LoadTexture: too big");
|
||||
|
||||
if ( gl_texcomp && ((int)gl_compress_textures.value) & 1 )
|
||||
{
|
||||
texturemode = GL_COMPRESSED_RGBA_ARB;
|
||||
}
|
||||
else
|
||||
{
|
||||
texturemode = GL_RGBA;//PENTA: Always upload rgb it doesn't make any difference for nvidia cards (& others)
|
||||
//texturemode = alpha ? gl_alpha_format : gl_solid_format;
|
||||
}
|
||||
if ( gl_texcomp && ((int)gl_compress_textures.value) & 1 ) {
|
||||
texturemode = GL_COMPRESSED_RGBA_ARB;
|
||||
} else {
|
||||
texturemode = GL_RGBA;//PENTA: Always upload rgb it doesn't make any difference for nvidia cards (& others)
|
||||
//texturemode = alpha ? gl_alpha_format : gl_solid_format;
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (mipmap)
|
||||
gluBuild2DMipmaps (GL_TEXTURE_2D, texturemode, width, height, GL_RGBA, GL_UNSIGNED_BYTE, trans);
|
||||
|
@ -1312,6 +1310,11 @@ gltexture_t *GL_CacheTexture (char *filename, qboolean mipmap, int type)
|
|||
glt->mipmap = mipmap;
|
||||
glt->dynamic = NULL;
|
||||
|
||||
if (type == TEXTURE_CUBEMAP) {
|
||||
GL_LoadCubemapTexture(glt);
|
||||
return glt;
|
||||
}
|
||||
|
||||
if (!strcmp(filename,"$white")) {
|
||||
//a uniform white texture
|
||||
trans[0] = LittleLong ((255 << 24)|(255 << 16)|(255 << 8)|(255));
|
||||
|
@ -1477,6 +1480,53 @@ char *face_names[] =
|
|||
"negz",
|
||||
};
|
||||
|
||||
/**
|
||||
Load a cubemap into the texture cache (used for a.o. light filters)
|
||||
glt contains a valid texture identifier where the map needs to be bound
|
||||
glt contains a "prexix" where the cubmap files are
|
||||
*/
|
||||
int GL_LoadCubemapTexture (gltexture_t *glt)
|
||||
{
|
||||
int i, width, height;
|
||||
FILE *f;
|
||||
char filename[MAX_OSPATH];
|
||||
int texturemode;
|
||||
|
||||
if ( gl_texcomp && ((int)gl_compress_textures.value) & 1)
|
||||
{
|
||||
texturemode = GL_COMPRESSED_RGBA_ARB;
|
||||
} else {
|
||||
texturemode = GL_RGBA;
|
||||
}
|
||||
|
||||
glEnable(GL_TEXTURE_CUBE_MAP_ARB);
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, glt->texnum);
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
sprintf(filename,"%i%s.tga", glt->identifier, face_names[i]);
|
||||
LoadTextureInPlace(filename, 4, (unsigned char*)&trans[0], &width, &height);
|
||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB+i, 0, texturemode, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &trans[0]);
|
||||
}
|
||||
|
||||
//glEnable(GL_TEXTURE_2D);
|
||||
glDisable(GL_TEXTURE_CUBE_MAP_ARB);
|
||||
|
||||
glt->width = width;
|
||||
glt->height = height;
|
||||
glt->mipmap = false;
|
||||
glt->type = GL_TEXTURE_CUBE_MAP_ARB;
|
||||
|
||||
texture_extension_number++;
|
||||
|
||||
return texture_extension_number-1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
================
|
||||
GL_LoadCubeMap
|
||||
|
|
Loading…
Reference in a new issue