summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSmileTheory <SmileTheory@gmail.com>2015-12-09 02:00:40 -0800
committerTim Angus <tim@ngus.net>2016-04-07 11:13:30 +0100
commit6f6ca6d529e1739565dbc64891fa7f1b478b8460 (patch)
treebd4ecf7ef9bd049bcb4979d3cbbcef6ea425144c
parente3ac1437c4e4df764cc3279324fab7e3ee032e2a (diff)
OpenGL2: Parse radius entries from misc_cubemap entities.
-rw-r--r--src/renderergl2/tr_backend.c9
-rw-r--r--src/renderergl2/tr_bsp.c20
-rw-r--r--src/renderergl2/tr_light.c2
-rw-r--r--src/renderergl2/tr_local.h9
-rw-r--r--src/renderergl2/tr_main.c2
-rw-r--r--src/renderergl2/tr_shade.c9
6 files changed, 32 insertions, 19 deletions
diff --git a/src/renderergl2/tr_backend.c b/src/renderergl2/tr_backend.c
index 2a61e114..ad43e5b2 100644
--- a/src/renderergl2/tr_backend.c
+++ b/src/renderergl2/tr_backend.c
@@ -483,8 +483,9 @@ void RB_BeginDrawingView (void) {
// FIXME: hack for cubemap testing
if (tr.renderCubeFbo && backEnd.viewParms.targetFbo == tr.renderCubeFbo)
{
+ cubemap_t *cubemap = &tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex];
//qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, backEnd.viewParms.targetFbo->colorImage[0]->texnum, 0);
- qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex]->texnum, 0);
+ qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, cubemap->image->texnum, 0);
}
}
}
@@ -1312,9 +1313,11 @@ const void *RB_DrawSurfs( const void *data ) {
if (glRefConfig.framebufferObject && tr.renderCubeFbo && backEnd.viewParms.targetFbo == tr.renderCubeFbo)
{
+ cubemap_t *cubemap = &tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex];
+
FBO_Bind(NULL);
GL_SelectTexture(TB_CUBEMAP);
- GL_BindToTMU(tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex], TB_CUBEMAP);
+ GL_BindToTMU(cubemap->image, TB_CUBEMAP);
qglGenerateMipmapEXT(GL_TEXTURE_CUBE_MAP);
GL_SelectTexture(0);
}
@@ -1725,7 +1728,7 @@ const void *RB_PostProcess(const void *data)
{
VectorSet4(dstBox, 0, glConfig.vidHeight - 256, 256, 256);
//FBO_BlitFromTexture(tr.renderCubeImage, NULL, NULL, NULL, dstBox, &tr.testcubeShader, NULL, 0);
- FBO_BlitFromTexture(tr.cubemaps[cubemapIndex - 1], NULL, NULL, NULL, dstBox, &tr.testcubeShader, NULL, 0);
+ FBO_BlitFromTexture(tr.cubemaps[cubemapIndex - 1].image, NULL, NULL, NULL, dstBox, &tr.testcubeShader, NULL, 0);
}
}
#endif
diff --git a/src/renderergl2/tr_bsp.c b/src/renderergl2/tr_bsp.c
index d1508051..d2a5f5f2 100644
--- a/src/renderergl2/tr_bsp.c
+++ b/src/renderergl2/tr_bsp.c
@@ -2997,16 +2997,17 @@ void R_LoadCubemapEntities(char *cubemapEntityName)
return;
tr.numCubemaps = numCubemaps;
- tr.cubemapOrigins = ri.Hunk_Alloc( tr.numCubemaps * sizeof(*tr.cubemapOrigins), h_low);
- tr.cubemaps = ri.Hunk_Alloc( tr.numCubemaps * sizeof(*tr.cubemaps), h_low);
+ tr.cubemaps = ri.Hunk_Alloc(tr.numCubemaps * sizeof(*tr.cubemaps), h_low);
+ memset(tr.cubemaps, 0, tr.numCubemaps * sizeof(*tr.cubemaps));
numCubemaps = 0;
while(R_ParseSpawnVars(spawnVarChars, sizeof(spawnVarChars), &numSpawnVars, spawnVars))
{
int i;
qboolean isCubemap = qfalse;
- qboolean positionSet = qfalse;
+ qboolean originSet = qfalse;
vec3_t origin;
+ float parallaxRadius = 1000.0f;
for (i = 0; i < numSpawnVars; i++)
{
@@ -3016,14 +3017,19 @@ void R_LoadCubemapEntities(char *cubemapEntityName)
if (!Q_stricmp(spawnVars[i][0], "origin"))
{
sscanf(spawnVars[i][1], "%f %f %f", &origin[0], &origin[1], &origin[2]);
- positionSet = qtrue;
+ originSet = qtrue;
+ }
+ else if (!Q_stricmp(spawnVars[i][0], "radius"))
+ {
+ sscanf(spawnVars[i][1], "%f", &parallaxRadius);
}
}
- if (isCubemap && positionSet)
+ if (isCubemap && originSet)
{
//ri.Printf(PRINT_ALL, "cubemap at %f %f %f\n", origin[0], origin[1], origin[2]);
- VectorCopy(origin, tr.cubemapOrigins[numCubemaps]);
+ VectorCopy(origin, tr.cubemaps[numCubemaps].origin);
+ tr.cubemaps[numCubemaps].parallaxRadius = parallaxRadius;
numCubemaps++;
}
}
@@ -3069,7 +3075,7 @@ void R_RenderAllCubemaps(void)
for (i = 0; i < tr.numCubemaps; i++)
{
- tr.cubemaps[i] = R_CreateImage(va("*cubeMap%d", i), NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8);
+ tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8);
}
for (i = 0; i < tr.numCubemaps; i++)
diff --git a/src/renderergl2/tr_light.c b/src/renderergl2/tr_light.c
index 317f4585..7c661dd5 100644
--- a/src/renderergl2/tr_light.c
+++ b/src/renderergl2/tr_light.c
@@ -472,7 +472,7 @@ int R_CubemapForPoint( vec3_t point )
vec3_t diff;
vec_t length;
- VectorSubtract(point, tr.cubemapOrigins[i], diff);
+ VectorSubtract(point, tr.cubemaps[i].origin, diff);
length = DotProduct(diff, diff);
if (shortest > length)
diff --git a/src/renderergl2/tr_local.h b/src/renderergl2/tr_local.h
index f69aec19..73681f32 100644
--- a/src/renderergl2/tr_local.h
+++ b/src/renderergl2/tr_local.h
@@ -61,6 +61,12 @@ typedef unsigned int glIndex_t;
#define USE_VERT_TANGENT_SPACE
#define USE_OVERBRIGHT
+typedef struct cubemap_s {
+ vec3_t origin;
+ float parallaxRadius;
+ image_t *image;
+} cubemap_t;
+
typedef struct dlight_s {
vec3_t origin;
vec3_t color; // range from 0.0 to 1.0, should be color normalized
@@ -1561,8 +1567,7 @@ typedef struct {
int fatLightmapStep;
int numCubemaps;
- vec3_t *cubemapOrigins;
- image_t **cubemaps;
+ cubemap_t *cubemaps;
trRefEntity_t *currentEntity;
trRefEntity_t worldEntity; // point currentEntity at this when rendering world
diff --git a/src/renderergl2/tr_main.c b/src/renderergl2/tr_main.c
index 2682d471..14d18755 100644
--- a/src/renderergl2/tr_main.c
+++ b/src/renderergl2/tr_main.c
@@ -2863,7 +2863,7 @@ void R_RenderCubemapSide( int cubemapIndex, int cubemapSide, qboolean subscene )
memset( &refdef, 0, sizeof( refdef ) );
refdef.rdflags = 0;
- VectorCopy(tr.cubemapOrigins[cubemapIndex], refdef.vieworg);
+ VectorCopy(tr.cubemaps[cubemapIndex].origin, refdef.vieworg);
switch(cubemapSide)
{
diff --git a/src/renderergl2/tr_shade.c b/src/renderergl2/tr_shade.c
index f0a6d34b..04b62517 100644
--- a/src/renderergl2/tr_shade.c
+++ b/src/renderergl2/tr_shade.c
@@ -1376,15 +1376,14 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
if (!(tr.viewParms.flags & VPF_NOCUBEMAPS) && input->cubemapIndex && r_cubeMapping->integer)
{
vec4_t vec;
+ cubemap_t *cubemap = &tr.cubemaps[input->cubemapIndex - 1];
- GL_BindToTMU( tr.cubemaps[input->cubemapIndex - 1], TB_CUBEMAP);
+ GL_BindToTMU( cubemap->image, TB_CUBEMAP);
- vec[0] = tr.cubemapOrigins[input->cubemapIndex - 1][0] - backEnd.viewParms.or.origin[0];
- vec[1] = tr.cubemapOrigins[input->cubemapIndex - 1][1] - backEnd.viewParms.or.origin[1];
- vec[2] = tr.cubemapOrigins[input->cubemapIndex - 1][2] - backEnd.viewParms.or.origin[2];
+ VectorSubtract(cubemap->origin, backEnd.viewParms.or.origin, vec);
vec[3] = 1.0f;
- VectorScale4(vec, 1.0f / 1000.0f, vec);
+ VectorScale4(vec, 1.0f / cubemap->parallaxRadius, vec);
GLSL_SetUniformVec4(sp, UNIFORM_CUBEMAPINFO, vec);
}