#5979: Cubemap support for opengl2.
This commit is contained in:
parent
68a616c7f1
commit
7e875c6941
23 changed files with 1268 additions and 516 deletions
|
@ -59,6 +59,8 @@ typedef unsigned int glIndex_t;
|
|||
#define MAX_CALC_PSHADOWS 64
|
||||
#define MAX_DRAWN_PSHADOWS 16 // do not increase past 32, because bit flags are used on surfaces
|
||||
#define PSHADOW_MAP_SIZE 512
|
||||
#define CUBE_MAP_MIPS 7
|
||||
#define CUBE_MAP_SIZE (1 << CUBE_MAP_MIPS)
|
||||
|
||||
#define USE_VERT_TANGENT_SPACE
|
||||
|
||||
|
@ -368,7 +370,8 @@ enum
|
|||
TB_SHADOWMAP2 = 3,
|
||||
TB_SPECULARMAP = 4,
|
||||
TB_SHADOWMAP = 5,
|
||||
NUM_TEXTURE_BUNDLES = 6
|
||||
TB_CUBEMAP = 6,
|
||||
NUM_TEXTURE_BUNDLES = 7
|
||||
};
|
||||
|
||||
typedef enum
|
||||
|
@ -698,13 +701,12 @@ enum
|
|||
LIGHTDEF_LIGHTTYPE_MASK = 0x0003,
|
||||
LIGHTDEF_ENTITY = 0x0004,
|
||||
LIGHTDEF_USE_TCGEN_AND_TCMOD = 0x0008,
|
||||
LIGHTDEF_USE_NORMALMAP = 0x0010,
|
||||
LIGHTDEF_USE_SPECULARMAP = 0x0020,
|
||||
LIGHTDEF_USE_DELUXEMAP = 0x0040,
|
||||
LIGHTDEF_USE_PARALLAXMAP = 0x0080,
|
||||
LIGHTDEF_USE_SHADOWMAP = 0x0100,
|
||||
LIGHTDEF_ALL = 0x01FF,
|
||||
LIGHTDEF_COUNT = 0x0200
|
||||
LIGHTDEF_USE_DELUXEMAP = 0x0010,
|
||||
LIGHTDEF_USE_PARALLAXMAP = 0x0020,
|
||||
LIGHTDEF_USE_SHADOWMAP = 0x0040,
|
||||
LIGHTDEF_USE_CUBEMAP = 0x0080,
|
||||
LIGHTDEF_ALL = 0x00FF,
|
||||
LIGHTDEF_COUNT = 0x0100
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -728,6 +730,7 @@ typedef enum
|
|||
|
||||
UNIFORM_TEXTUREMAP,
|
||||
UNIFORM_LEVELSMAP,
|
||||
UNIFORM_CUBEMAP,
|
||||
|
||||
UNIFORM_SCREENIMAGEMAP,
|
||||
UNIFORM_SCREENDEPTHMAP,
|
||||
|
@ -896,12 +899,14 @@ typedef struct {
|
|||
|
||||
typedef enum {
|
||||
VPF_NONE = 0x00,
|
||||
VPF_SHADOWMAP = 0x01,
|
||||
VPF_DEPTHSHADOW = 0x02,
|
||||
VPF_DEPTHCLAMP = 0x04,
|
||||
VPF_ORTHOGRAPHIC = 0x08,
|
||||
VPF_USESUNLIGHT = 0x10,
|
||||
VPF_FARPLANEFRUSTUM = 0x20
|
||||
VPF_NOVIEWMODEL = 0x01,
|
||||
VPF_SHADOWMAP = 0x02,
|
||||
VPF_DEPTHSHADOW = 0x04,
|
||||
VPF_DEPTHCLAMP = 0x08,
|
||||
VPF_ORTHOGRAPHIC = 0x10,
|
||||
VPF_USESUNLIGHT = 0x20,
|
||||
VPF_FARPLANEFRUSTUM = 0x40,
|
||||
VPF_NOCUBEMAPS = 0x80
|
||||
} viewParmFlags_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -916,6 +921,8 @@ typedef struct {
|
|||
cplane_t portalPlane; // clip anything behind this if mirroring
|
||||
int viewportX, viewportY, viewportWidth, viewportHeight;
|
||||
FBO_t *targetFbo;
|
||||
int targetFboLayer;
|
||||
int targetFboCubemapIndex;
|
||||
float fovX, fovY;
|
||||
float projectionMatrix[16];
|
||||
cplane_t frustum[5];
|
||||
|
@ -958,7 +965,8 @@ typedef enum {
|
|||
} surfaceType_t;
|
||||
|
||||
typedef struct drawSurf_s {
|
||||
unsigned sort; // bit combination for fast compares
|
||||
unsigned int sort; // bit combination for fast compares
|
||||
int cubemapIndex;
|
||||
surfaceType_t *surface; // any of surface*_t
|
||||
} drawSurf_t;
|
||||
|
||||
|
@ -1170,6 +1178,7 @@ typedef struct srfVBOMesh_s
|
|||
|
||||
struct shader_s *shader; // FIXME move this to somewhere else
|
||||
int fogIndex;
|
||||
int cubemapIndex;
|
||||
|
||||
// dynamic lighting information
|
||||
int dlightBits;
|
||||
|
@ -1271,6 +1280,7 @@ typedef struct msurface_s {
|
|||
//int viewCount; // if == tr.viewCount, already added
|
||||
struct shader_s *shader;
|
||||
int fogIndex;
|
||||
int cubemapIndex;
|
||||
cullinfo_t cullinfo;
|
||||
|
||||
surfaceType_t *data; // any of srf*_t
|
||||
|
@ -1600,9 +1610,12 @@ typedef struct {
|
|||
qboolean framebufferMultisample;
|
||||
qboolean framebufferBlit;
|
||||
|
||||
qboolean texture_srgb;
|
||||
qboolean textureSrgb;
|
||||
qboolean framebufferSrgb;
|
||||
qboolean textureSrgbDecode;
|
||||
|
||||
qboolean depthClamp;
|
||||
qboolean seamlessCubeMap;
|
||||
} glRefConfig_t;
|
||||
|
||||
|
||||
|
@ -1695,6 +1708,7 @@ typedef struct {
|
|||
image_t *fogImage;
|
||||
image_t *dlightImage; // inverse-quare highlight for projective adding
|
||||
image_t *flareImage;
|
||||
image_t *greyImage; // full of 0x80
|
||||
image_t *whiteImage; // full of 0xff
|
||||
image_t *identityLightImage; // full of tr.identityLightByte
|
||||
|
||||
|
@ -1715,6 +1729,7 @@ typedef struct {
|
|||
image_t *screenShadowImage;
|
||||
image_t *screenSsaoImage;
|
||||
image_t *hdrDepthImage;
|
||||
image_t *renderCubeImage;
|
||||
|
||||
image_t *textureDepthImage;
|
||||
|
||||
|
@ -1732,6 +1747,7 @@ typedef struct {
|
|||
FBO_t *screenShadowFbo;
|
||||
FBO_t *screenSsaoFbo;
|
||||
FBO_t *hdrDepthFbo;
|
||||
FBO_t *renderCubeFbo;
|
||||
|
||||
shader_t *defaultShader;
|
||||
shader_t *shadowShader;
|
||||
|
@ -1749,6 +1765,10 @@ typedef struct {
|
|||
int fatLightmapSize;
|
||||
int fatLightmapStep;
|
||||
|
||||
int numCubemaps;
|
||||
vec3_t *cubemapOrigins;
|
||||
image_t **cubemaps;
|
||||
|
||||
trRefEntity_t *currentEntity;
|
||||
trRefEntity_t worldEntity; // point currentEntity at this when rendering world
|
||||
int currentEntityNum;
|
||||
|
@ -1772,6 +1792,7 @@ typedef struct {
|
|||
shaderProgram_t shadowmaskShader;
|
||||
shaderProgram_t ssaoShader;
|
||||
shaderProgram_t depthBlurShader[2];
|
||||
shaderProgram_t testcubeShader;
|
||||
|
||||
|
||||
// -----------------------------------------
|
||||
|
@ -1961,7 +1982,11 @@ extern cvar_t *r_normalMapping;
|
|||
extern cvar_t *r_specularMapping;
|
||||
extern cvar_t *r_deluxeMapping;
|
||||
extern cvar_t *r_parallaxMapping;
|
||||
extern cvar_t *r_normalAmbient;
|
||||
extern cvar_t *r_cubeMapping;
|
||||
extern cvar_t *r_deluxeSpecular;
|
||||
extern cvar_t *r_specularIsMetallic;
|
||||
extern cvar_t *r_baseSpecular;
|
||||
extern cvar_t *r_baseGloss;
|
||||
extern cvar_t *r_dlightMode;
|
||||
extern cvar_t *r_pshadowDist;
|
||||
extern cvar_t *r_recalcMD3Normals;
|
||||
|
@ -2008,6 +2033,7 @@ void R_RenderView( viewParms_t *parms );
|
|||
void R_RenderDlightCubemaps(const refdef_t *fd);
|
||||
void R_RenderPshadowMaps(const refdef_t *fd);
|
||||
void R_RenderSunShadowMaps(const refdef_t *fd, int level);
|
||||
void R_RenderCubemapSide( int cubemapIndex, int cubemapSide, qboolean subscene );
|
||||
|
||||
void R_AddMD3Surfaces( trRefEntity_t *e );
|
||||
void R_AddNullModelSurfaces( trRefEntity_t *e );
|
||||
|
@ -2021,7 +2047,7 @@ void R_DecomposeSort( unsigned sort, int *entityNum, shader_t **shader,
|
|||
int *fogNum, int *dlightMap, int *pshadowMap );
|
||||
|
||||
void R_AddDrawSurf( surfaceType_t *surface, shader_t *shader,
|
||||
int fogIndex, int dlightMap, int pshadowMap );
|
||||
int fogIndex, int dlightMap, int pshadowMap, int cubemap );
|
||||
|
||||
void R_CalcTangentSpace(vec3_t tangent, vec3_t bitangent, vec3_t normal,
|
||||
const vec3_t v0, const vec3_t v1, const vec3_t v2, const vec2_t t0, const vec2_t t1, const vec2_t t2);
|
||||
|
@ -2047,7 +2073,6 @@ void R_RotateForEntity( const trRefEntity_t *ent, const viewParms_t *viewParms,
|
|||
** GL wrapper/helper functions
|
||||
*/
|
||||
void GL_Bind( image_t *image );
|
||||
void GL_BindCubemap( image_t *image );
|
||||
void GL_BindToTMU( image_t *image, int tmu );
|
||||
void GL_SetDefaultState (void);
|
||||
void GL_SelectTexture( int unit );
|
||||
|
@ -2198,6 +2223,7 @@ typedef struct shaderCommands_s
|
|||
shader_t *shader;
|
||||
float shaderTime;
|
||||
int fogNum;
|
||||
int cubemapIndex;
|
||||
|
||||
int dlightBits; // or together of all vertexDlightBits
|
||||
int pshadowBits;
|
||||
|
@ -2223,7 +2249,7 @@ typedef struct shaderCommands_s
|
|||
|
||||
extern shaderCommands_t tess;
|
||||
|
||||
void RB_BeginSurface(shader_t *shader, int fogNum );
|
||||
void RB_BeginSurface(shader_t *shader, int fogNum, int cubemapIndex );
|
||||
void RB_EndSurface(void);
|
||||
void RB_CheckOverflow( int verts, int indexes );
|
||||
#define RB_CHECKOVERFLOW(v,i) if (tess.numVertexes + (v) >= SHADER_MAX_VERTEXES || tess.numIndexes + (i) >= SHADER_MAX_INDEXES ) {RB_CheckOverflow(v,i);}
|
||||
|
@ -2283,6 +2309,7 @@ void R_SetupEntityLighting( const trRefdef_t *refdef, trRefEntity_t *ent );
|
|||
void R_TransformDlights( int count, dlight_t *dl, orientationr_t *or );
|
||||
int R_LightForPoint( vec3_t point, vec3_t ambientLight, vec3_t directedLight, vec3_t lightDir );
|
||||
int R_LightDirForPoint( vec3_t point, vec3_t lightDir, vec3_t normal, world_t *world );
|
||||
int R_CubemapForPoint( vec3_t point );
|
||||
|
||||
|
||||
/*
|
||||
|
@ -2405,7 +2432,9 @@ void RE_AddRefEntityToScene( const refEntity_t *ent );
|
|||
void RE_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts, int num );
|
||||
void RE_AddLightToScene( const vec3_t org, float intensity, float r, float g, float b );
|
||||
void RE_AddAdditiveLightToScene( const vec3_t org, float intensity, float r, float g, float b );
|
||||
void RE_BeginScene( const refdef_t *fd );
|
||||
void RE_RenderScene( const refdef_t *fd );
|
||||
void RE_EndScene( void );
|
||||
|
||||
/*
|
||||
=============================================================
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue