2010-11-22 22:00:00 +01:00
|
|
|
|
//=======================================================================
|
|
|
|
|
// Copyright XashXT Group 2010 <20>
|
|
|
|
|
// gl_local.h - renderer local declarations
|
|
|
|
|
//=======================================================================
|
|
|
|
|
|
|
|
|
|
#ifndef GL_LOCAL_H
|
|
|
|
|
#define GL_LOCAL_H
|
|
|
|
|
|
2010-11-28 22:00:00 +01:00
|
|
|
|
#include "gl_export.h"
|
2010-11-29 22:00:00 +01:00
|
|
|
|
#include "com_model.h"
|
|
|
|
|
#include "cl_entity.h"
|
2010-12-02 22:00:00 +01:00
|
|
|
|
#include "ref_params.h"
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
|
|
|
|
extern byte *r_temppool;
|
|
|
|
|
|
2010-11-29 22:00:00 +01:00
|
|
|
|
#define MAX_TEXTURES 1024
|
|
|
|
|
#define MAX_LIGHTMAPS 128
|
|
|
|
|
|
|
|
|
|
#define RP_NONE 0
|
|
|
|
|
#define RP_MIRRORVIEW BIT( 0 ) // lock pvs at vieworg
|
|
|
|
|
#define RP_PORTALVIEW BIT( 1 )
|
|
|
|
|
#define RP_ENVVIEW BIT( 2 ) // used for cubemapshot
|
|
|
|
|
|
2010-11-28 22:00:00 +01:00
|
|
|
|
typedef enum
|
|
|
|
|
{
|
2010-11-29 22:00:00 +01:00
|
|
|
|
TEX_INVALID = 0, // free slot
|
2010-11-28 22:00:00 +01:00
|
|
|
|
TEX_SYSTEM, // generated by engine
|
|
|
|
|
TEX_NOMIP, // hud pics, menu etc
|
2010-11-29 22:00:00 +01:00
|
|
|
|
TEX_BRUSH, // a map texture
|
|
|
|
|
TEX_SPRITE, // sprite frames
|
|
|
|
|
TEX_STUDIO, // studio skins
|
2010-11-28 22:00:00 +01:00
|
|
|
|
TEX_LIGHTMAP, // lightmap textures
|
2010-11-29 22:00:00 +01:00
|
|
|
|
TEX_CUBEMAP // cubemap textures
|
2010-11-28 22:00:00 +01:00
|
|
|
|
} texType_t;
|
|
|
|
|
|
2010-12-02 22:00:00 +01:00
|
|
|
|
enum
|
2010-11-28 22:00:00 +01:00
|
|
|
|
{
|
2010-12-02 22:00:00 +01:00
|
|
|
|
GLSTATE_NONE = 0,
|
|
|
|
|
GLSTATE_SRCBLEND_ZERO = 1,
|
|
|
|
|
GLSTATE_SRCBLEND_ONE = 2,
|
|
|
|
|
GLSTATE_SRCBLEND_DST_COLOR = 1|2,
|
|
|
|
|
GLSTATE_SRCBLEND_ONE_MINUS_DST_COLOR = 4,
|
|
|
|
|
GLSTATE_SRCBLEND_SRC_ALPHA = 1|4,
|
|
|
|
|
GLSTATE_SRCBLEND_ONE_MINUS_SRC_ALPHA = 2|4,
|
|
|
|
|
GLSTATE_SRCBLEND_DST_ALPHA = 1|2|4,
|
|
|
|
|
GLSTATE_SRCBLEND_ONE_MINUS_DST_ALPHA = 8,
|
|
|
|
|
GLSTATE_DSTBLEND_ZERO = 16,
|
|
|
|
|
GLSTATE_DSTBLEND_ONE = 32,
|
|
|
|
|
GLSTATE_DSTBLEND_SRC_COLOR = 16|32,
|
|
|
|
|
GLSTATE_DSTBLEND_ONE_MINUS_SRC_COLOR = 64,
|
|
|
|
|
GLSTATE_DSTBLEND_SRC_ALPHA = 16|64,
|
|
|
|
|
GLSTATE_DSTBLEND_ONE_MINUS_SRC_ALPHA = 32|64,
|
|
|
|
|
GLSTATE_DSTBLEND_DST_ALPHA = 16|32|64,
|
|
|
|
|
GLSTATE_DSTBLEND_ONE_MINUS_DST_ALPHA = 128,
|
|
|
|
|
GLSTATE_BLEND_MTEX = 0x100,
|
|
|
|
|
GLSTATE_AFUNC_GT0 = 0x200,
|
|
|
|
|
GLSTATE_AFUNC_LT128 = 0x400,
|
|
|
|
|
GLSTATE_AFUNC_GE128 = 0x800,
|
|
|
|
|
GLSTATE_DEPTHWRITE = 0x1000,
|
|
|
|
|
GLSTATE_DEPTHFUNC_EQ = 0x2000,
|
|
|
|
|
GLSTATE_OFFSET_FILL = 0x4000,
|
|
|
|
|
GLSTATE_NO_DEPTH_TEST = 0x8000,
|
|
|
|
|
GLSTATE_MARK_END = 0x10000 // SHADERPASS_MARK_BEGIN
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define GLSTATE_MASK ( GLSTATE_MARK_END-1 )
|
|
|
|
|
|
|
|
|
|
// #define SHADERPASS_SRCBLEND_MASK (((GLSTATE_SRCBLEND_DST_ALPHA)<<1)-GLSTATE_SRCBLEND_ZERO)
|
|
|
|
|
#define GLSTATE_SRCBLEND_MASK 0xF
|
|
|
|
|
|
|
|
|
|
// #define SHADERPASS_DSTBLEND_MASK (((GLSTATE_DSTBLEND_DST_ALPHA)<<1)-GLSTATE_DSTBLEND_ZERO)
|
|
|
|
|
#define GLSTATE_DSTBLEND_MASK 0xF0
|
|
|
|
|
|
|
|
|
|
#define GLSTATE_BLENDFUNC ( GLSTATE_SRCBLEND_MASK|GLSTATE_DSTBLEND_MASK )
|
|
|
|
|
#define GLSTATE_ALPHAFUNC ( GLSTATE_AFUNC_GT0|GLSTATE_AFUNC_LT128|GLSTATE_AFUNC_GE128 )
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
|
|
|
|
typedef struct gltexture_s
|
|
|
|
|
{
|
|
|
|
|
char name[64]; // game path, including extension
|
2010-11-29 22:00:00 +01:00
|
|
|
|
word srcWidth; // keep unscaled sizes
|
|
|
|
|
word srcHeight;
|
|
|
|
|
word width; // upload width\height
|
|
|
|
|
word height;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
|
|
|
|
GLuint target; // glTarget
|
|
|
|
|
GLuint texnum; // gl texture binding
|
2010-11-29 22:00:00 +01:00
|
|
|
|
GLint format; // uploaded format
|
|
|
|
|
texFlags_t flags;
|
|
|
|
|
|
|
|
|
|
// debug info
|
|
|
|
|
texType_t texType; // used for gl_showtextures
|
|
|
|
|
size_t size; // upload size for debug targets
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
|
|
|
|
struct gltexture_s *nextHash;
|
|
|
|
|
} gltexture_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
2010-11-29 22:00:00 +01:00
|
|
|
|
int params; // rendering parameters
|
|
|
|
|
qboolean drawWorld; // ignore world for drawing PlayerModel
|
|
|
|
|
qboolean thirdPerson; // thirdperson camera is enabled
|
|
|
|
|
|
2010-12-02 22:00:00 +01:00
|
|
|
|
ref_params_t refdef; // actual refdef
|
|
|
|
|
|
2010-11-29 22:00:00 +01:00
|
|
|
|
cl_entity_t *currententity;
|
|
|
|
|
model_t *currentmodel;
|
|
|
|
|
} ref_instance_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
int cinTexture; // cinematic texture
|
|
|
|
|
int skyTexture; // default sky texture
|
|
|
|
|
int whiteTexture;
|
|
|
|
|
int blackTexture;
|
|
|
|
|
int defaultTexture; // use for bad textures
|
|
|
|
|
int particleTexture; // particle texture
|
|
|
|
|
int lightmapTextures[MAX_LIGHTMAPS];
|
2010-11-28 22:00:00 +01:00
|
|
|
|
} ref_globals_t;
|
|
|
|
|
|
2010-11-29 22:00:00 +01:00
|
|
|
|
extern ref_params_t r_lastRefdef;
|
|
|
|
|
extern ref_instance_t RI;
|
|
|
|
|
extern ref_globals_t tr;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
2010-11-22 22:00:00 +01:00
|
|
|
|
void GL_SubdivideSurface( msurface_t *fa );
|
|
|
|
|
void GL_BuildPolygonFromSurface( msurface_t *fa );
|
|
|
|
|
|
2010-11-28 22:00:00 +01:00
|
|
|
|
//
|
|
|
|
|
// gl_backend.c
|
|
|
|
|
//
|
2010-11-29 22:00:00 +01:00
|
|
|
|
void GL_Bind( GLenum tmu, GLenum texnum );
|
2010-11-28 22:00:00 +01:00
|
|
|
|
void GL_TexGen( GLenum coord, GLenum mode );
|
|
|
|
|
void GL_SelectTexture( GLenum texture );
|
2010-12-02 22:00:00 +01:00
|
|
|
|
void GL_SetRenderMode( int mode );
|
2010-11-28 22:00:00 +01:00
|
|
|
|
void GL_FrontFace( GLenum front );
|
2010-12-02 22:00:00 +01:00
|
|
|
|
void GL_SetState( int state );
|
2010-11-28 22:00:00 +01:00
|
|
|
|
void GL_TexEnv( GLenum mode );
|
|
|
|
|
void GL_Cull( GLenum cull );
|
|
|
|
|
|
2010-11-29 22:00:00 +01:00
|
|
|
|
//
|
|
|
|
|
// gl_draw.c
|
|
|
|
|
//
|
|
|
|
|
void R_Set2DMode( qboolean enable );
|
|
|
|
|
|
2010-11-28 22:00:00 +01:00
|
|
|
|
//
|
|
|
|
|
// gl_image.c
|
|
|
|
|
//
|
|
|
|
|
void R_SetTextureParameters( void );
|
2010-11-29 22:00:00 +01:00
|
|
|
|
gltexture_t *R_GetTexture( GLenum texnum );
|
|
|
|
|
int GL_LoadTexture( const char *name, const byte *buf, size_t size, int flags );
|
|
|
|
|
int GL_LoadTextureInternal( const char *name, rgbdata_t *pic, texFlags_t flags, qboolean subImage );
|
|
|
|
|
byte *GL_ResampleTexture( const byte *source, int inWidth, int inHeight, int outWidth, int outHeight, qboolean isNormalMap );
|
|
|
|
|
void GL_FreeTexture( GLenum texnum );
|
|
|
|
|
void GL_FreeImage( const char *name );
|
2010-12-02 22:00:00 +01:00
|
|
|
|
void R_TextureList_f( void );
|
2010-11-29 22:00:00 +01:00
|
|
|
|
void R_InitImages( void );
|
|
|
|
|
void R_ShutdownImages( void );
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// gl_rmain.c
|
|
|
|
|
//
|
|
|
|
|
void R_ClearScene( void );
|
2010-11-29 22:00:00 +01:00
|
|
|
|
void R_DrawCubemapView( const vec3_t origin, const vec3_t angles, int size );
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
2010-12-02 22:00:00 +01:00
|
|
|
|
//
|
|
|
|
|
// gl_sprite.c
|
|
|
|
|
//
|
|
|
|
|
void Mod_LoadSpriteModel( model_t *mod, const void *buffer );
|
|
|
|
|
mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw );
|
|
|
|
|
|
2010-11-28 22:00:00 +01:00
|
|
|
|
//
|
|
|
|
|
// gl_vidnt.c
|
|
|
|
|
//
|
|
|
|
|
#define GL_CheckForErrors() GL_CheckForErrors_( __FILE__, __LINE__ )
|
|
|
|
|
void GL_CheckForErrors_( const char *filename, const int fileline );
|
2010-11-29 22:00:00 +01:00
|
|
|
|
void GL_UpdateSwapInterval( void );
|
|
|
|
|
void GL_UpdateGammaRamp( void );
|
2010-11-28 22:00:00 +01:00
|
|
|
|
qboolean GL_Support( int r_ext );
|
|
|
|
|
qboolean R_Init( void );
|
|
|
|
|
void R_Shutdown( void );
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
=======================================================================
|
|
|
|
|
|
|
|
|
|
GL STATE MACHINE
|
|
|
|
|
|
|
|
|
|
=======================================================================
|
|
|
|
|
*/
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
GL_OPENGL_110 = 0, // base
|
|
|
|
|
GL_WGL_SWAPCONTROL,
|
|
|
|
|
GL_HARDWARE_GAMMA_CONTROL,
|
|
|
|
|
GL_ARB_VERTEX_BUFFER_OBJECT_EXT,
|
|
|
|
|
GL_ENV_COMBINE_EXT,
|
|
|
|
|
GL_ARB_MULTITEXTURE,
|
|
|
|
|
GL_TEXTURECUBEMAP_EXT,
|
|
|
|
|
GL_DOT3_ARB_EXT,
|
|
|
|
|
GL_ANISOTROPY_EXT,
|
|
|
|
|
GL_TEXTURE_LODBIAS,
|
|
|
|
|
GL_OCCLUSION_QUERIES_EXT,
|
|
|
|
|
GL_TEXTURE_COMPRESSION_EXT,
|
|
|
|
|
GL_SHADER_GLSL100_EXT,
|
|
|
|
|
GL_WGL_3DFX_GAMMA_CONTROL,
|
|
|
|
|
GL_SGIS_MIPMAPS_EXT,
|
|
|
|
|
GL_DRAW_RANGEELEMENTS_EXT,
|
|
|
|
|
GL_LOCKARRAYS_EXT,
|
|
|
|
|
GL_TEXTURE_3D_EXT,
|
|
|
|
|
GL_CLAMPTOEDGE_EXT,
|
|
|
|
|
GL_BLEND_MINMAX_EXT,
|
|
|
|
|
GL_STENCILTWOSIDE_EXT,
|
|
|
|
|
GL_BLEND_SUBTRACT_EXT,
|
|
|
|
|
GL_SHADER_OBJECTS_EXT,
|
|
|
|
|
GL_VERTEX_SHADER_EXT, // glsl vertex program
|
|
|
|
|
GL_FRAGMENT_SHADER_EXT, // glsl fragment program
|
|
|
|
|
GL_EXT_POINTPARAMETERS,
|
|
|
|
|
GL_SEPARATESTENCIL_EXT,
|
|
|
|
|
GL_ARB_TEXTURE_NPOT_EXT,
|
|
|
|
|
GL_CUSTOM_VERTEX_ARRAY_EXT,
|
|
|
|
|
GL_TEXTURE_ENV_ADD_EXT,
|
|
|
|
|
GL_CLAMP_TEXBORDER_EXT,
|
|
|
|
|
GL_DEPTH_TEXTURE,
|
|
|
|
|
GL_SHADOW_EXT,
|
|
|
|
|
GL_EXTCOUNT, // must be last
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
GL_TEXTURE0 = 0,
|
|
|
|
|
GL_TEXTURE1,
|
|
|
|
|
GL_TEXTURE2,
|
|
|
|
|
GL_TEXTURE3, // g-cont. 4 units should be enough
|
|
|
|
|
MAX_TEXTURE_UNITS // must be last
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
const char *renderer_string; // ptrs to OpenGL32.dll, use with caution
|
|
|
|
|
const char *vendor_string;
|
|
|
|
|
const char *version_string;
|
|
|
|
|
|
|
|
|
|
// list of supported extensions
|
|
|
|
|
const char *extensions_string;
|
|
|
|
|
byte extension[GL_EXTCOUNT];
|
|
|
|
|
|
|
|
|
|
int max_texture_units;
|
|
|
|
|
GLint max_2d_texture_size;
|
|
|
|
|
GLint max_2d_rectangle_size;
|
|
|
|
|
GLint max_3d_texture_size;
|
2010-11-29 22:00:00 +01:00
|
|
|
|
GLint max_cubemap_size;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
GLint texRectangle;
|
|
|
|
|
|
|
|
|
|
GLfloat max_texture_anisotropy;
|
|
|
|
|
GLfloat max_texture_lodbias;
|
|
|
|
|
|
|
|
|
|
int color_bits;
|
|
|
|
|
int depth_bits;
|
|
|
|
|
int stencil_bits;
|
|
|
|
|
|
|
|
|
|
qboolean deviceSupportsGamma;
|
|
|
|
|
int prev_mode;
|
|
|
|
|
} glconfig_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
int flags;
|
|
|
|
|
|
|
|
|
|
word gammaRamp[768]; // current gamma ramp
|
|
|
|
|
word stateRamp[768]; // original gamma ramp
|
|
|
|
|
|
|
|
|
|
int width, height;
|
|
|
|
|
qboolean fullScreen;
|
|
|
|
|
qboolean wideScreen;
|
|
|
|
|
|
|
|
|
|
qboolean initializedMedia;
|
|
|
|
|
|
|
|
|
|
int activeTMU;
|
|
|
|
|
GLuint currentTextures[MAX_TEXTURE_UNITS];
|
|
|
|
|
GLenum currentEnvModes[MAX_TEXTURE_UNITS];
|
|
|
|
|
GLboolean texIdentityMatrix[MAX_TEXTURE_UNITS];
|
|
|
|
|
GLint genSTEnabled[MAX_TEXTURE_UNITS]; // 0 - disabled, OR 1 - S, OR 2 - T, OR 4 - R
|
|
|
|
|
GLint texCoordArrayMode[MAX_TEXTURE_UNITS]; // 0 - disabled, 1 - enabled, 2 - cubemap
|
|
|
|
|
|
|
|
|
|
rgba_t draw_color;
|
|
|
|
|
int draw_rendermode; // rendermode for drawing
|
|
|
|
|
int draw_frame; // will be reset after each drawing
|
|
|
|
|
|
|
|
|
|
int faceCull;
|
|
|
|
|
int frontFace;
|
|
|
|
|
|
|
|
|
|
qboolean stencilEnabled;
|
|
|
|
|
qboolean in2DMode;
|
|
|
|
|
} glstate_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
HDC hDC; // handle to device context
|
|
|
|
|
HGLRC hGLRC; // handle to GL rendering context
|
|
|
|
|
|
|
|
|
|
int desktopBitsPixel;
|
|
|
|
|
int desktopWidth;
|
|
|
|
|
int desktopHeight;
|
|
|
|
|
|
|
|
|
|
qboolean software; // OpenGL software emulation
|
|
|
|
|
qboolean initialized; // OpenGL subsystem started
|
|
|
|
|
qboolean minidriver; // 3dfx driver
|
|
|
|
|
} glwstate_t;
|
|
|
|
|
|
|
|
|
|
extern glconfig_t glConfig;
|
|
|
|
|
extern glstate_t glState;
|
|
|
|
|
extern glwstate_t glw_state;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// renderer cvars
|
|
|
|
|
//
|
|
|
|
|
extern convar_t *gl_allow_software;
|
|
|
|
|
extern convar_t *gl_texture_anisotropy;
|
|
|
|
|
extern convar_t *gl_extensions;
|
|
|
|
|
extern convar_t *gl_colorbits;
|
|
|
|
|
extern convar_t *gl_depthbits;
|
|
|
|
|
extern convar_t *gl_stencilbits;
|
2010-11-29 22:00:00 +01:00
|
|
|
|
extern convar_t *gl_texturebits;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
extern convar_t *gl_ignorehwgamma;
|
|
|
|
|
extern convar_t *gl_swapInterval;
|
|
|
|
|
extern convar_t *gl_check_errors;
|
|
|
|
|
extern convar_t *gl_round_down;
|
|
|
|
|
extern convar_t *gl_texturemode;
|
|
|
|
|
extern convar_t *gl_texture_lodbias;
|
2010-11-29 22:00:00 +01:00
|
|
|
|
extern convar_t *gl_showtextures;
|
|
|
|
|
extern convar_t *gl_compress_textures;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
extern convar_t *gl_picmip;
|
2010-11-29 22:00:00 +01:00
|
|
|
|
extern convar_t *gl_skymip;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
extern convar_t *gl_nobind;
|
2010-11-29 22:00:00 +01:00
|
|
|
|
extern convar_t *gl_finish;
|
|
|
|
|
extern convar_t *gl_delayfinish;
|
|
|
|
|
extern convar_t *gl_frontbuffer;
|
|
|
|
|
extern convar_t *gl_clear;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
|
|
|
|
extern convar_t *r_width;
|
|
|
|
|
extern convar_t *r_height;
|
2010-12-02 22:00:00 +01:00
|
|
|
|
extern convar_t *r_speeds;
|
2010-11-28 22:00:00 +01:00
|
|
|
|
|
|
|
|
|
extern convar_t *vid_displayfrequency;
|
|
|
|
|
extern convar_t *vid_fullscreen;
|
|
|
|
|
extern convar_t *vid_gamma;
|
|
|
|
|
extern convar_t *vid_mode;
|
|
|
|
|
|
2010-11-22 22:00:00 +01:00
|
|
|
|
#endif//GL_LOCAL_H
|