1446 lines
60 KiB
C
1446 lines
60 KiB
C
/*
|
|
Copyright (C) 1996-1997 Id Software, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
// disable data conversion warnings
|
|
|
|
#pragma warning(disable : 4244) // MIPS
|
|
#pragma warning(disable : 4136) // X86
|
|
#pragma warning(disable : 4051) // ALPHA
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
#if defined (__APPLE__) || defined (MACOSX)
|
|
#include <OpenGL/gl.h>
|
|
#include <OpenGL/glu.h>
|
|
#include <OpenGL/glext.h>
|
|
#else
|
|
#include <GL/gl.h>
|
|
#include <GL/glu.h>
|
|
#endif /* __APPLE__ ||ÊMACOSX */
|
|
|
|
/* use the correct dynamic function address binder */
|
|
#if defined (SDL)
|
|
#define SAFE_GET_PROC( func, type, name) \
|
|
func = (type) SDL_GL_GetProcAddress (name)
|
|
#elif defined (__glx__)
|
|
#define SAFE_GET_PROC( func, type, name) \
|
|
func = (type) glXGetProcAddressARB (name)
|
|
#else
|
|
#define SAFE_GET_PROC( func, type, name) \
|
|
func = (type) wglGetProcAddress( name); \
|
|
if (!func) Sys_Error("Could not get addres for %s\n",name)
|
|
#endif
|
|
|
|
|
|
// - DC -
|
|
#if defined (SDL)
|
|
#include <SDL/SDL_opengl.h>
|
|
#endif
|
|
|
|
#if defined (__glx__)
|
|
#include <GL/glx.h>
|
|
#endif
|
|
|
|
void GL_checkerror(char *file, int line);
|
|
|
|
#define GL_DEBUG
|
|
|
|
#if defined(GL_DEBUG)
|
|
|
|
#define checkerror() GL_checkerror(__FILE__, __LINE__)
|
|
|
|
#else
|
|
|
|
#define checkerror() do { } while(0)
|
|
|
|
#endif
|
|
|
|
void GL_BeginRendering (int *x, int *y, int *width, int *height);
|
|
void GL_EndRendering (void);
|
|
|
|
|
|
#ifdef _WIN32
|
|
// Function prototypes for the Texture Object Extension routines
|
|
typedef GLboolean (APIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *,
|
|
const GLboolean *);
|
|
typedef void (APIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint);
|
|
typedef void (APIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *);
|
|
typedef void (APIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *);
|
|
typedef GLboolean (APIENTRY *ISTEXFUNCPTR)(GLuint);
|
|
typedef void (APIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *,
|
|
const GLclampf *);
|
|
typedef void (APIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *);
|
|
|
|
extern BINDTEXFUNCPTR bindTexFunc;
|
|
extern DELTEXFUNCPTR delTexFunc;
|
|
extern TEXSUBIMAGEPTR TexSubImage2DFunc;
|
|
#endif
|
|
|
|
extern int texture_extension_number;
|
|
extern int texture_mode;
|
|
extern int glow_texture_object; //PENTA: gl texture object of the glow texture
|
|
extern int normcube_texture_object;//PENTA: gl texture object of the normalization cubemap
|
|
extern int halo_texture_object; //PENTA: Halo light texture
|
|
extern int atten1d_texture_object;
|
|
extern int atten2d_texture_object;
|
|
extern int atten3d_texture_object;
|
|
extern float gldepthmin, gldepthmax;
|
|
|
|
void GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap, qboolean alpha);
|
|
void GL_Upload8 (byte *data,char *identifier, int width, int height, qboolean mipmap, qboolean alpha, qboolean bump);
|
|
//int GL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha, qboolean bump);
|
|
int GL_FindTexture (char *identifier);
|
|
|
|
typedef struct
|
|
{
|
|
float x, y, z;
|
|
float s, t;
|
|
float r, g, b;
|
|
} glvert_t;
|
|
|
|
extern glvert_t glv;
|
|
|
|
extern int glx, gly, glwidth, glheight;
|
|
|
|
#ifdef _WIN32
|
|
extern PROC glArrayElementEXT;
|
|
extern PROC glColorPointerEXT;
|
|
extern PROC glTexturePointerEXT;
|
|
extern PROC glVertexPointerEXT;
|
|
#endif
|
|
|
|
// r_local.h -- private refresh defs
|
|
|
|
#define ALIAS_BASE_SIZE_RATIO (1.0 / 11.0)
|
|
// normalizing factor so player model works out to about
|
|
// 1 pixel per triangle
|
|
#define MAX_LBM_HEIGHT 480
|
|
|
|
#define TILE_SIZE 128 // size of textures generated by R_GenTiledSurf
|
|
|
|
#define SKYSHIFT 7
|
|
#define SKYSIZE (1 << SKYSHIFT)
|
|
#define SKYMASK (SKYSIZE - 1)
|
|
|
|
#define BACKFACE_EPSILON 0.01
|
|
|
|
|
|
void R_TimeRefresh_f (void);
|
|
void R_ReadPointFile_f (void);
|
|
/*
|
|
typedef struct surfcache_s
|
|
{
|
|
struct surfcache_s *next;
|
|
struct surfcache_s **owner; // NULL is an empty chunk of memory
|
|
int lightadj[MAXLIGHTMAPS]; // checked for strobe flush
|
|
int dlight;
|
|
int size; // including header
|
|
unsigned width;
|
|
unsigned height; // DEBUG only needed for debug
|
|
float mipscale;
|
|
struct texture_s *texture; // checked for animating textures
|
|
byte data[4]; // width*height elements
|
|
} surfcache_t;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
pixel_t *surfdat; // destination for generated surface
|
|
int rowbytes; // destination logical width in bytes
|
|
msurface_t *surf; // description for surface to generate
|
|
fixed8_t lightadj[MAXLIGHTMAPS];
|
|
// adjust for lightmap levels for dynamic lighting
|
|
texture_t *texture; // corrected for animating textures
|
|
int surfmip; // mipmapped ratio of surface texels / world pixels
|
|
int surfwidth; // in mipmapped texels
|
|
int surfheight; // in mipmapped texels
|
|
} drawsurf_t;
|
|
*/
|
|
|
|
typedef enum {
|
|
pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2
|
|
} ptype_t;
|
|
|
|
typedef enum {
|
|
pb_add, pb_subtract
|
|
} pblend_t;
|
|
|
|
|
|
typedef enum {
|
|
emt_box
|
|
} emtype_t;
|
|
|
|
typedef enum {
|
|
align_view, align_vel, align_surf
|
|
} align_t;
|
|
|
|
typedef struct ParticleEffect_s {
|
|
char name[64];
|
|
vec3_t emmiterParams1, emmiterParams2; //mins maxs of emmiter box
|
|
emtype_t emmiterType; //currently only box is supported
|
|
vec3_t startcolormin, startcolormax, endcolormin, endcolormax;
|
|
vec3_t velocitymin, velocitymax; //min max velocity
|
|
float lifemin, lifemax; //min max life
|
|
int movetype; //how it moves (gravity/collision...)
|
|
vec3_t gravity;
|
|
float rotmin, rotmax;//rotaiton speed
|
|
float growmin, growmax;//scale speed (make second smaller to shrink)
|
|
float sizemin, sizemax;//scale speed (make second smaller to shrink)
|
|
vec3_t drag; //drag of particle (how fast it looses it's speed)
|
|
int srcblend, dstblend; // gl enums for blend modes
|
|
int numbounces; //number of bounces before particle is deleted
|
|
int texture; //gl object of the texture
|
|
align_t align;//particle is aligned with its velocity
|
|
float velscale;
|
|
struct ParticleEffect_s *spawn; //particle effect to spawn on hit
|
|
struct ParticleEffect_s *next;
|
|
} ParticleEffect_t;
|
|
|
|
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
|
|
typedef struct particle_s
|
|
{
|
|
// driver-usable fields
|
|
vec3_t org;
|
|
vec3_t color;
|
|
// drivers never touch the following fields
|
|
struct particle_s *next;
|
|
vec3_t vel;
|
|
//float ramp;
|
|
float die, lifetime;
|
|
//ptype_t type;
|
|
//PENTA: Nicer particles (tm)
|
|
int texture; //texture object of particle
|
|
int numbounces; //number of bounces left before deletion set to zero for no bounce
|
|
float rot;
|
|
float rspeed;
|
|
float size;
|
|
float growspeed;
|
|
qboolean velaligned;
|
|
//pblend_t blendfunc;
|
|
vec3_t startcolor, endcolor;
|
|
int srcblend, dstblend;
|
|
vec3_t gravity;
|
|
vec3_t drag;
|
|
float velscale;
|
|
ParticleEffect_t *spawn;
|
|
} particle_t;
|
|
|
|
typedef enum {
|
|
dt_blood
|
|
} dtype_t;
|
|
|
|
#define MAX_DECAL_VERTICES 128
|
|
#define MAX_DECAL_TRIANGLES 64
|
|
//PENTA: Decals
|
|
typedef struct decal_s
|
|
{
|
|
vec3_t origin;
|
|
vec3_t normal;
|
|
vec3_t tangent;
|
|
float radius;
|
|
|
|
float color[4], startcolor[4], endcolor[4];
|
|
struct decal_s *next;
|
|
float die;
|
|
float lifetime;
|
|
dtype_t type;
|
|
int texture; //texture object of particle
|
|
int srcblend;
|
|
int dstblend;
|
|
|
|
//geometry of decail
|
|
int vertexCount, triangleCount;
|
|
vec3_t vertexArray[MAX_DECAL_VERTICES];
|
|
float texcoordArray[MAX_DECAL_VERTICES][2];
|
|
int triangleArray[MAX_DECAL_TRIANGLES][3];
|
|
} decal_t;
|
|
|
|
void R_SpawnDecal(vec3_t center, vec3_t normal, vec3_t tangent, ParticleEffect_t *effect);
|
|
float RandomMinMax(float min, float max);
|
|
|
|
//====================================================
|
|
|
|
|
|
extern entity_t r_worldentity;
|
|
extern qboolean r_cache_thrash; // compatability
|
|
extern vec3_t modelorg, r_entorigin;
|
|
extern entity_t *currententity;
|
|
extern int r_visframecount; // ??? what difs?
|
|
extern int r_framecount;
|
|
extern int r_lightTimestamp;//PENTA: we need this in different files
|
|
extern mplane_t frustum[4];
|
|
extern int c_brush_polys, c_alias_polys;
|
|
|
|
|
|
//
|
|
// view origin
|
|
//
|
|
extern vec3_t vup;
|
|
extern vec3_t vpn;
|
|
extern vec3_t vright;
|
|
extern vec3_t r_origin;
|
|
|
|
//
|
|
// screen size info
|
|
//
|
|
extern refdef_t r_refdef;
|
|
extern mleaf_t *r_viewleaf, *r_oldviewleaf;
|
|
extern int d_lightstylevalue[256]; // 8.8 fraction of base light value
|
|
|
|
extern qboolean envmap;
|
|
extern int currenttexture;
|
|
extern int cnttextures[16];
|
|
extern int particletexture;
|
|
extern int particletexture_smoke;
|
|
extern int particletexture_glow;
|
|
extern int particletexture_glow2;
|
|
extern int particletexture_tele;
|
|
extern int particletexture_blood;
|
|
extern int particletexture_dirblood;
|
|
extern int playertextures;
|
|
extern int gl_filter_min;
|
|
extern int gl_filter_max;
|
|
|
|
extern int skyshadernum; // index in cl.loadmodel, not gl texture object
|
|
|
|
extern cvar_t r_norefresh;
|
|
extern cvar_t cg_showentities;
|
|
extern cvar_t r_drawworld;
|
|
extern cvar_t cg_showviewmodel;
|
|
extern cvar_t r_waterwarp;
|
|
extern cvar_t r_fullbright;
|
|
extern cvar_t r_lightmap;
|
|
extern cvar_t r_mirroralpha;
|
|
extern cvar_t r_wateralpha;
|
|
extern cvar_t r_novis;
|
|
|
|
extern cvar_t gl_clear;
|
|
extern cvar_t gl_poly;
|
|
//extern cvar_t gl_texsort;
|
|
extern cvar_t gl_polyblend;
|
|
|
|
extern int gl_lightmap_format;
|
|
extern int gl_solid_format;
|
|
extern int gl_alpha_format;
|
|
|
|
extern cvar_t gl_max_size;
|
|
|
|
extern cvar_t gl_calcdepth;
|
|
|
|
extern cvar_t sh_lightmapbright; //PENTA:
|
|
extern cvar_t sh_visiblevolumes;
|
|
extern cvar_t sh_entityshadows;
|
|
extern cvar_t sh_meshshadows;
|
|
extern cvar_t sh_worldshadows;
|
|
extern cvar_t sh_showlightsciss;
|
|
extern cvar_t sh_occlusiontest;
|
|
extern cvar_t sh_showlightvolume;
|
|
extern cvar_t sh_glows;
|
|
extern cvar_t cg_showfps; // set for running times - muff
|
|
extern cvar_t sh_debuginfo;
|
|
extern cvar_t sh_norevis; //PENTA: no recalculating the vis for light positions
|
|
extern cvar_t sh_nosvbsp; //PENTA: no shadow bsp
|
|
extern cvar_t sh_noeclip; //PENTA: no entity/leaf clipping for shadows
|
|
extern cvar_t sh_infinitevolumes;//PENTA:
|
|
extern cvar_t sh_noscissor;
|
|
extern cvar_t sh_nocleversave;
|
|
extern cvar_t sh_bumpmaps;//PENTA: enable disable bump mapping
|
|
extern cvar_t sh_playershadow;//PENTA: the player casts a shadow (the one YOU are playing with, others always cast shadows)
|
|
extern cvar_t sh_nocache;
|
|
extern cvar_t sh_glares;
|
|
extern cvar_t sh_noefrags;
|
|
extern cvar_t sh_showtangent;
|
|
extern cvar_t sh_noshadowpopping;
|
|
extern cvar_t fog_waterfog;
|
|
extern cvar_t gl_caustics;
|
|
extern cvar_t gl_truform;
|
|
extern cvar_t gl_truform_tesselation;
|
|
extern cvar_t gl_compress_textures;
|
|
extern cvar_t gl_mesherror;
|
|
extern cvar_t scr_fov; // 10 - 170
|
|
extern cvar_t mir_detail; //PENTA: mirror detail level
|
|
//0: no mirrors
|
|
//1: World only
|
|
//2: World & player
|
|
//3: Full
|
|
extern cvar_t mir_frameskip; //PENTA: mirror is updated every i'th frame
|
|
extern cvar_t mir_forcewater; //Forces all quake's water to be reflecting.
|
|
extern cvar_t mir_distance; //maximum drawing distance
|
|
extern cvar_t gl_wireframe;
|
|
extern cvar_t fog_r;
|
|
extern cvar_t fog_g;
|
|
extern cvar_t fog_b;
|
|
extern cvar_t fog_start;
|
|
extern cvar_t fog_end;
|
|
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;
|
|
extern qboolean glare;
|
|
extern mplane_t *mirror_plane;
|
|
extern mplane_t mirror_far_plane;
|
|
extern int mirror_clipside;
|
|
extern float vid_gamma;
|
|
|
|
extern float r_world_matrix[16];
|
|
extern double r_Dproject_matrix[16]; //PENTA <AWE> added "extern".
|
|
extern double r_Dworld_matrix[16]; //PENTA <AWE> added "extern".
|
|
extern int r_Iviewport[4]; //PENTA
|
|
|
|
extern float color_black[4];
|
|
|
|
#define NUMVERTEXNORMALS 162
|
|
|
|
extern float r_avertexnormals[NUMVERTEXNORMALS][3];
|
|
|
|
|
|
extern const char *gl_vendor;
|
|
extern const char *gl_renderer;
|
|
extern const char *gl_version;
|
|
extern const char *gl_extensions;
|
|
|
|
void GL_Bind (int texnum);
|
|
|
|
#ifndef _WIN32
|
|
#define APIENTRY /* */
|
|
#endif
|
|
|
|
#if !defined (__APPLE__) && !defined (MACOSX)
|
|
|
|
|
|
// Multitexture
|
|
//#define TEXTURE0_SGIS 0x835E
|
|
//#define TEXTURE1_SGIS 0x835F
|
|
|
|
/* Arb Imaging stuff
|
|
not an extension: see http://www.opengl.org/developers/documentation/OpenGL12.html#imaging
|
|
*/
|
|
|
|
typedef void (APIENTRY *PFNBLENDCOLORPROC)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
|
|
|
#define GL_CONSTANT_COLOR_EXT 0x8001
|
|
#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
|
|
#define GL_CONSTANT_ALPHA_EXT 0x8003
|
|
#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
|
|
extern PFNBLENDCOLORPROC qglBlendColor;
|
|
|
|
#define GL_COLOR_MATRIX 0x80B1
|
|
#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
|
|
#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
|
|
|
|
#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
|
|
#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
|
|
#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
|
|
#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
|
|
#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
|
|
#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
|
|
#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
|
|
#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
|
|
|
|
|
|
|
|
// ARB_texture_compression defines
|
|
#define GL_COMPRESSED_RGBA_ARB 0x84EE
|
|
|
|
//HP_occlusion_test defines
|
|
#define GL_OCCLUSION_TEST_HP 0x8165
|
|
#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
|
|
extern qboolean gl_occlusiontest;
|
|
extern int occlusion_cut_meshes;
|
|
extern int occlusion_cut_entities;
|
|
extern int occlusion_cut_lights;
|
|
|
|
#define GL_STENCIL_BACK_FUNC_ATI 0x8800
|
|
#define GL_STENCIL_BACK_FAIL_ATI 0x8801
|
|
#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
|
|
#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
|
|
|
|
typedef void (APIENTRY *PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
|
|
typedef void (APIENTRY *PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
|
|
|
|
extern PFNGLSTENCILOPSEPARATEATIPROC qglStencilOpSeparateATI;
|
|
extern PFNGLSTENCILFUNCSEPARATEATIPROC qglStencilFuncSeparateATI;
|
|
|
|
#endif /* !__APPLE__ && !MACOSX */
|
|
|
|
// <AWE> : MacOS X 10.2: defined in <OpenGL/glext.h>
|
|
#if !defined (__APPLE__) && !defined (MACOSX)
|
|
|
|
#define GL_COMBINE_ARB 0x8570
|
|
#define GL_COMBINE_RGB_ARB 0x8571
|
|
#define GL_COMBINE_ALPHA_ARB 0x8572
|
|
#define GL_RGB_SCALE_ARB 0x8573
|
|
#define GL_ADD_SIGNED_ARB 0x8574
|
|
#define GL_INTERPOLATE_ARB 0x8575
|
|
#define GL_SUBTRACT_ARB 0x84E7
|
|
#define GL_CONSTANT_ARB 0x8576
|
|
#define GL_PRIMARY_COLOR_ARB 0x8577
|
|
#define GL_PREVIOUS_ARB 0x8578
|
|
#define GL_SOURCE0_RGB_ARB 0x8580
|
|
#define GL_SOURCE1_RGB_ARB 0x8581
|
|
#define GL_SOURCE2_RGB_ARB 0x8582
|
|
#define GL_SOURCE3_RGB_ARB 0x8583
|
|
#define GL_SOURCE4_RGB_ARB 0x8584
|
|
#define GL_SOURCE5_RGB_ARB 0x8585
|
|
#define GL_SOURCE6_RGB_ARB 0x8586
|
|
#define GL_SOURCE7_RGB_ARB 0x8587
|
|
#define GL_SOURCE0_ALPHA_ARB 0x8588
|
|
#define GL_SOURCE1_ALPHA_ARB 0x8589
|
|
#define GL_SOURCE2_ALPHA_ARB 0x858A
|
|
#define GL_SOURCE3_ALPHA_ARB 0x858B
|
|
#define GL_SOURCE4_ALPHA_ARB 0x858C
|
|
#define GL_SOURCE5_ALPHA_ARB 0x858D
|
|
#define GL_SOURCE6_ALPHA_ARB 0x858E
|
|
#define GL_SOURCE7_ALPHA_ARB 0x858F
|
|
#define GL_OPERAND0_RGB_ARB 0x8590
|
|
#define GL_OPERAND1_RGB_ARB 0x8591
|
|
#define GL_OPERAND2_RGB_ARB 0x8592
|
|
#define GL_OPERAND3_RGB_ARB 0x8593
|
|
#define GL_OPERAND4_RGB_ARB 0x8594
|
|
#define GL_OPERAND5_RGB_ARB 0x8595
|
|
#define GL_OPERAND6_RGB_ARB 0x8596
|
|
#define GL_OPERAND7_RGB_ARB 0x8597
|
|
#define GL_OPERAND0_ALPHA_ARB 0x8598
|
|
#define GL_OPERAND1_ALPHA_ARB 0x8599
|
|
#define GL_OPERAND2_ALPHA_ARB 0x859A
|
|
#define GL_OPERAND3_ALPHA_ARB 0x859B
|
|
#define GL_OPERAND4_ALPHA_ARB 0x859C
|
|
#define GL_OPERAND5_ALPHA_ARB 0x859D
|
|
#define GL_OPERAND6_ALPHA_ARB 0x859E
|
|
#define GL_OPERAND7_ALPHA_ARB 0x859F
|
|
|
|
/*
|
|
#define GL_DOT3_RGB_EXT 0x8740
|
|
#define GL_DOT3_RGBA_EXT 0x8741
|
|
*/
|
|
#define GL_DOT3_RGB_ARB 0x86AE
|
|
#define GL_DOT3_RGBA_ARB 0x86AF
|
|
|
|
|
|
//PENTA: Cube mapping
|
|
#define GL_NORMAL_MAP_ARB 0x8511
|
|
#define GL_REFLECTION_MAP_ARB 0x8512
|
|
#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
|
|
#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
|
|
#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
|
|
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
|
|
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
|
|
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
|
|
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
|
|
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
|
|
#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
|
|
#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
|
|
|
|
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
|
|
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
|
|
|
|
|
|
#endif /* !__APPLE__ && !MACOSX */
|
|
|
|
|
|
#include "glNV.h"
|
|
|
|
// <AWE> : MacOS X 10.2: defined in <OpenGL/glext.h>
|
|
#if !defined (__APPLE__) && !defined (MACOSX) && !defined(SDL) && !defined (__glx__)
|
|
|
|
//PENTA: texture3d
|
|
#define GL_PACK_SKIP_IMAGES 0x806B
|
|
#define GL_PACK_SKIP_IMAGES_EXT 0x806B
|
|
#define GL_PACK_IMAGE_HEIGHT 0x806C
|
|
#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
|
|
#define GL_UNPACK_SKIP_IMAGES 0x806D
|
|
#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
|
|
#define GL_UNPACK_IMAGE_HEIGHT 0x806E
|
|
#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
|
|
#define GL_TEXTURE_3D 0x806F
|
|
#define GL_TEXTURE_3D_EXT 0x806F
|
|
#define GL_PROXY_TEXTURE_3D 0x8070
|
|
#define GL_PROXY_TEXTURE_3D_EXT 0x8070
|
|
#define GL_TEXTURE_DEPTH 0x8071
|
|
#define GL_TEXTURE_DEPTH_EXT 0x8071
|
|
#define GL_TEXTURE_WRAP_R 0x8072
|
|
#define GL_TEXTURE_WRAP_R_EXT 0x8072
|
|
#define GL_MAX_3D_TEXTURE_SIZE 0x8073
|
|
#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
|
|
|
|
#endif /* !__APPLE__ && !MACOSX && !SDL && !__glx__ */
|
|
|
|
typedef void (APIENTRY * PFNGLTEXIMAGE3DEXT)(GLenum target, GLint level, GLenum internalformat,
|
|
GLsizei width, GLsizei height, GLsizei depth,
|
|
GLint border, GLenum format, GLenum type,
|
|
const GLvoid* pixels);
|
|
extern PFNGLTEXIMAGE3DEXT qglTexImage3DEXT;
|
|
|
|
// <AWE> : NV_vertex_program will never be supported under any other OS than Windows, because it got
|
|
// replaced by the official ARB spec "ARB_vertex_program".
|
|
//
|
|
// Todo: - Add hybrid support for NV & ARB vertex_programs.
|
|
// - Port the current vertex program from NV to ARB.
|
|
|
|
/* ARB_vertex_program */
|
|
/*
|
|
#define GL_VERTEX_PROGRAM_ARB 0x8620
|
|
#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
|
|
#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
|
|
#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
|
|
#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
|
|
#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
|
|
#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
|
|
#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
|
|
#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
|
|
#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
|
|
#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
|
|
#define GL_PROGRAM_LENGTH_ARB 0x8627
|
|
#define GL_PROGRAM_FORMAT_ARB 0x8876
|
|
#define GL_PROGRAM_NAME_ARB 0x8677
|
|
#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
|
|
#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
|
|
#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
|
|
#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
|
|
#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
|
|
#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
|
|
#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
|
|
#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
|
|
#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
|
|
#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
|
|
#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
|
|
#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
|
|
#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
|
|
#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
|
|
#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
|
|
#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
|
|
#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
|
|
#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
|
|
#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
|
|
#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
|
|
#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
|
|
#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
|
|
#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
|
|
#define GL_PROGRAM_STRING_ARB 0x8628
|
|
#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
|
|
#define GL_CURRENT_MATRIX_ARB 0x8641
|
|
#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
|
|
#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
|
|
#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
|
|
#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
|
|
#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
|
|
#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
|
|
|
|
#define GL_MATRIX0_ARB 0x88C0
|
|
#define GL_MATRIX1_ARB 0x88C1
|
|
#define GL_MATRIX2_ARB 0x88C2
|
|
#define GL_MATRIX3_ARB 0x88C3
|
|
#define GL_MATRIX4_ARB 0x88C4
|
|
#define GL_MATRIX5_ARB 0x88C5
|
|
#define GL_MATRIX6_ARB 0x88C6
|
|
#define GL_MATRIX7_ARB 0x88C7
|
|
#define GL_MATRIX8_ARB 0x88C8
|
|
#define GL_MATRIX9_ARB 0x88C9
|
|
#define GL_MATRIX10_ARB 0x88CA
|
|
#define GL_MATRIX11_ARB 0x88CB
|
|
#define GL_MATRIX12_ARB 0x88CC
|
|
#define GL_MATRIX13_ARB 0x88CD
|
|
#define GL_MATRIX14_ARB 0x88CE
|
|
#define GL_MATRIX15_ARB 0x88CF
|
|
#define GL_MATRIX16_ARB 0x88D0
|
|
#define GL_MATRIX17_ARB 0x88D1
|
|
#define GL_MATRIX18_ARB 0x88D2
|
|
#define GL_MATRIX19_ARB 0x88D3
|
|
#define GL_MATRIX20_ARB 0x88D4
|
|
#define GL_MATRIX21_ARB 0x88D5
|
|
#define GL_MATRIX22_ARB 0x88D6
|
|
#define GL_MATRIX23_ARB 0x88D7
|
|
#define GL_MATRIX24_ARB 0x88D8
|
|
#define GL_MATRIX25_ARB 0x88D9
|
|
#define GL_MATRIX26_ARB 0x88DA
|
|
#define GL_MATRIX27_ARB 0x88DB
|
|
#define GL_MATRIX28_ARB 0x88DC
|
|
#define GL_MATRIX29_ARB 0x88DD
|
|
#define GL_MATRIX30_ARB 0x88DE
|
|
#define GL_MATRIX31_ARB 0x88DF
|
|
|
|
typedef void (APIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint id);
|
|
typedef void (APIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
|
|
typedef void (APIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
|
|
typedef void (APIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
|
|
typedef void (APIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid **pointer);
|
|
typedef GLboolean (APIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program);
|
|
typedef void (APIENTRY * PFNGPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);
|
|
typedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
|
|
|
|
extern PFNGLBINDPROGRAMARBPROC qglBindProgramARB;
|
|
extern PFNGLDELETEPROGRAMSARBPROC qglDeleteProgramsARB;
|
|
extern PFNGLGENPROGRAMSARBPROC qglGenProgramsARB;
|
|
extern PFNGLGETPROGRAMIVARBPROC qglGetProgramivARB;
|
|
extern PFNGLGETPROGRAMSTRINGARBPROC qglGetProgramStringARB;
|
|
extern PFNGLGETVERTEXATTRIBDVARBPROC qglGetVertexAttribdvARB;
|
|
extern PFNGLGETVERTEXATTRIBFVARBPROC qglGetVertexAttribfvARB;
|
|
extern PFNGLGETVERTEXATTRIBIVARBPROC qglGetVertexAttribivARB;
|
|
extern PFNGLGETVERTEXATTRIBPOINTERVARBPROC qglGetVertexAttribPointervARB;
|
|
extern PFNGLISPROGRAMARBPROC qglIsProgramARB;
|
|
extern PFNGPROGRAMSTRINGARBPROC qglProgramStringARB;
|
|
extern PFNGLVERTEXATTRIB1DARBPROC qglVertexAttrib1dARB;
|
|
extern PFNGLVERTEXATTRIB1DVARBPROC qglVertexAttrib1dvARB;
|
|
extern PFNGLVERTEXATTRIB1FARBPROC qglVertexAttrib1fARB;
|
|
extern PFNGLVERTEXATTRIB1FVARBPROC qglVertexAttrib1fvARB;
|
|
extern PFNGLVERTEXATTRIB1SARBPROC qglVertexAttrib1sARB;
|
|
extern PFNGLVERTEXATTRIB1SVARBPROC qglVertexAttrib1svARB;
|
|
extern PFNGLVERTEXATTRIB2DARBPROC qglVertexAttrib2dARB;
|
|
extern PFNGLVERTEXATTRIB2DVARBPROC qglVertexAttrib2dvARB;
|
|
extern PFNGLVERTEXATTRIB2FARBPROC qglVertexAttrib2fARB;
|
|
extern PFNGLVERTEXATTRIB2FVARBPROC qglVertexAttrib2fvARB;
|
|
extern PFNGLVERTEXATTRIB2SARBPROC qglVertexAttrib2sARB;
|
|
extern PFNGLVERTEXATTRIB2SVARBPROC qglVertexAttrib2svARB;
|
|
extern PFNGLVERTEXATTRIB3DARBPROC qglVertexAttrib3dARB;
|
|
extern PFNGLVERTEXATTRIB3DVARBPROC qglVertexAttrib3dvARB;
|
|
extern PFNGLVERTEXATTRIB3FARBPROC qglVertexAttrib3fARB;
|
|
extern PFNGLVERTEXATTRIB3FVARBPROC qglVertexAttrib3fvARB;
|
|
extern PFNGLVERTEXATTRIB3SARBPROC qglVertexAttrib3sARB;
|
|
extern PFNGLVERTEXATTRIB3SVARBPROC qglVertexAttrib3svARB;
|
|
extern PFNGLVERTEXATTRIB4DARBPROC qglVertexAttrib4dARB;
|
|
extern PFNGLVERTEXATTRIB4DVARBPROC qglVertexAttrib4dvARB;
|
|
extern PFNGLVERTEXATTRIB4FARBPROC qglVertexAttrib4fARB;
|
|
extern PFNGLVERTEXATTRIB4FVARBPROC qglVertexAttrib4fvARB;
|
|
extern PFNGLVERTEXATTRIB4SARBPROC qglVertexAttrib4sARB;
|
|
extern PFNGLVERTEXATTRIB4SVARBPROC qglVertexAttrib4svARB;
|
|
extern PFNGLVERTEXATTRIB4UBVARBPROC qglVertexAttrib4ubvARB;
|
|
*/
|
|
|
|
//PENTA: VERTEX_PROGRAM
|
|
|
|
#ifndef GL_NV_vertex_program
|
|
/* NV_vertex_program */
|
|
#define GL_VERTEX_PROGRAM_NV 0x8620
|
|
#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
|
|
#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
|
|
#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
|
|
#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
|
|
#define GL_CURRENT_ATTRIB_NV 0x8626
|
|
#define GL_PROGRAM_LENGTH_NV 0x8627
|
|
#define GL_PROGRAM_STRING_NV 0x8628
|
|
#define GL_MODELVIEW_PROJECTION_NV 0x8629
|
|
#define GL_IDENTITY_NV 0x862A
|
|
#define GL_INVERSE_NV 0x862B
|
|
#define GL_TRANSPOSE_NV 0x862C
|
|
#define GL_INVERSE_TRANSPOSE_NV 0x862D
|
|
#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
|
|
#define GL_MAX_TRACK_MATRICES_NV 0x862F
|
|
#define GL_MATRIX0_NV 0x8630
|
|
#define GL_MATRIX1_NV 0x8631
|
|
#define GL_MATRIX2_NV 0x8632
|
|
#define GL_MATRIX3_NV 0x8633
|
|
#define GL_MATRIX4_NV 0x8634
|
|
#define GL_MATRIX5_NV 0x8635
|
|
#define GL_MATRIX6_NV 0x8636
|
|
#define GL_MATRIX7_NV 0x8637
|
|
#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
|
|
#define GL_CURRENT_MATRIX_NV 0x8641
|
|
#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
|
|
#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
|
|
#define GL_PROGRAM_PARAMETER_NV 0x8644
|
|
#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
|
|
#define GL_PROGRAM_TARGET_NV 0x8646
|
|
#define GL_PROGRAM_RESIDENT_NV 0x8647
|
|
#define GL_TRACK_MATRIX_NV 0x8648
|
|
#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
|
|
#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
|
|
#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
|
|
#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
|
|
#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
|
|
#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
|
|
#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
|
|
#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
|
|
#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
|
|
#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
|
|
#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
|
|
#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
|
|
#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
|
|
#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
|
|
#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
|
|
#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
|
|
#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
|
|
#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
|
|
#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
|
|
#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
|
|
#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
|
|
#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
|
|
#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
|
|
#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
|
|
#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
|
|
#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
|
|
#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
|
|
#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
|
|
#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
|
|
#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
|
|
#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
|
|
#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
|
|
#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
|
|
#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
|
|
#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
|
|
#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
|
|
#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
|
|
#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
|
|
#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
|
|
#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
|
|
#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
|
|
#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
|
|
#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
|
|
#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
|
|
#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
|
|
#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
|
|
#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
|
|
#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
|
|
#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
|
|
#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
|
|
#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
|
|
|
|
/* NV_vertex_program */
|
|
typedef GLboolean (APIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
|
|
typedef void (APIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
|
|
typedef void (APIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
|
|
typedef void (APIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
|
|
typedef void (APIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
|
|
typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
|
|
typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
|
|
typedef void (APIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
|
|
typedef void (APIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
|
|
typedef void (APIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
|
|
typedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
|
|
typedef GLboolean (APIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id);
|
|
typedef void (APIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
|
|
typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
|
|
typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
|
typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
|
|
typedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
|
|
typedef void (APIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
|
|
#endif
|
|
|
|
extern PFNGLAREPROGRAMSRESIDENTNVPROC qglAreProgramsResidentNV ;
|
|
extern PFNGLBINDPROGRAMNVPROC qglBindProgramNV ;
|
|
extern PFNGLDELETEPROGRAMSNVPROC qglDeleteProgramsNV ;
|
|
extern PFNGLEXECUTEPROGRAMNVPROC qglExecuteProgramNV ;
|
|
extern PFNGLGENPROGRAMSNVPROC qglGenProgramsNV ;
|
|
extern PFNGLGETPROGRAMPARAMETERDVNVPROC qglGetProgramParameterdvNV ;
|
|
extern PFNGLGETPROGRAMPARAMETERFVNVPROC qglGetProgramParameterfvNV ;
|
|
extern PFNGLGETPROGRAMIVNVPROC qglGetProgramivNV ;
|
|
extern PFNGLGETPROGRAMSTRINGNVPROC qglGetProgramStringNV ;
|
|
extern PFNGLGETTRACKMATRIXIVNVPROC qglGetTrackMatrixivNV ;
|
|
extern PFNGLGETVERTEXATTRIBDVNVPROC qglGetVertexAttribdvNV ;
|
|
extern PFNGLGETVERTEXATTRIBFVNVPROC qglGetVertexAttribfvNV ;
|
|
extern PFNGLGETVERTEXATTRIBIVNVPROC qglGetVertexAttribivNV ;
|
|
extern PFNGLGETVERTEXATTRIBPOINTERVNVPROC qglGetVertexAttribPointervNV ;
|
|
extern PFNGLISPROGRAMNVPROC qglIsProgramNV ;
|
|
extern PFNGLLOADPROGRAMNVPROC qglLoadProgramNV ;
|
|
extern PFNGLPROGRAMPARAMETER4DNVPROC qglProgramParameter4dNV ;
|
|
extern PFNGLPROGRAMPARAMETER4DVNVPROC qglProgramParameter4dvNV ;
|
|
extern PFNGLPROGRAMPARAMETER4FNVPROC qglProgramParameter4fNV ;
|
|
extern PFNGLPROGRAMPARAMETER4FVNVPROC qglProgramParameter4fvNV ;
|
|
extern PFNGLPROGRAMPARAMETERS4DVNVPROC qglProgramParameters4dvNV ;
|
|
extern PFNGLPROGRAMPARAMETERS4FVNVPROC qglProgramParameters4fvNV ;
|
|
extern PFNGLREQUESTRESIDENTPROGRAMSNVPROC qglRequestResidentProgramsNV ;
|
|
extern PFNGLTRACKMATRIXNVPROC qglTrackMatrixNV ;
|
|
extern PFNGLVERTEXATTRIBPOINTERNVPROC qglVertexAttribPointerNV ;
|
|
extern PFNGLVERTEXATTRIB1DNVPROC qglVertexAttrib1dNV ;
|
|
extern PFNGLVERTEXATTRIB1DVNVPROC qglVertexAttrib1dvNV ;
|
|
extern PFNGLVERTEXATTRIB1FNVPROC qglVertexAttrib1fNV ;
|
|
extern PFNGLVERTEXATTRIB1FVNVPROC qglVertexAttrib1fvNV ;
|
|
extern PFNGLVERTEXATTRIB1SNVPROC qglVertexAttrib1sNV ;
|
|
extern PFNGLVERTEXATTRIB1SVNVPROC qglVertexAttrib1svNV ;
|
|
extern PFNGLVERTEXATTRIB2DNVPROC qglVertexAttrib2dNV ;
|
|
extern PFNGLVERTEXATTRIB2DVNVPROC qglVertexAttrib2dvNV ;
|
|
extern PFNGLVERTEXATTRIB2FNVPROC qglVertexAttrib2fNV ;
|
|
extern PFNGLVERTEXATTRIB2FVNVPROC qglVertexAttrib2fvNV ;
|
|
extern PFNGLVERTEXATTRIB2SNVPROC qglVertexAttrib2sNV ;
|
|
extern PFNGLVERTEXATTRIB2SVNVPROC qglVertexAttrib2svNV ;
|
|
extern PFNGLVERTEXATTRIB3DNVPROC qglVertexAttrib3dNV ;
|
|
extern PFNGLVERTEXATTRIB3DVNVPROC qglVertexAttrib3dvNV ;
|
|
extern PFNGLVERTEXATTRIB3FNVPROC qglVertexAttrib3fNV ;
|
|
extern PFNGLVERTEXATTRIB3FVNVPROC qglVertexAttrib3fvNV ;
|
|
extern PFNGLVERTEXATTRIB3SNVPROC qglVertexAttrib3sNV ;
|
|
extern PFNGLVERTEXATTRIB3SVNVPROC qglVertexAttrib3svNV ;
|
|
extern PFNGLVERTEXATTRIB4DNVPROC qglVertexAttrib4dNV ;
|
|
extern PFNGLVERTEXATTRIB4DVNVPROC qglVertexAttrib4dvNV ;
|
|
extern PFNGLVERTEXATTRIB4FNVPROC qglVertexAttrib4fNV ;
|
|
extern PFNGLVERTEXATTRIB4FVNVPROC qglVertexAttrib4fvNV ;
|
|
extern PFNGLVERTEXATTRIB4SNVPROC qglVertexAttrib4sNV ;
|
|
extern PFNGLVERTEXATTRIB4SVNVPROC qglVertexAttrib4svNV ;
|
|
extern PFNGLVERTEXATTRIB4UBVNVPROC qglVertexAttrib4ubvNV ;
|
|
extern PFNGLVERTEXATTRIBS1DVNVPROC qglVertexAttribs1dvNV ;
|
|
extern PFNGLVERTEXATTRIBS1FVNVPROC qglVertexAttribs1fvNV ;
|
|
extern PFNGLVERTEXATTRIBS1SVNVPROC qglVertexAttribs1svNV ;
|
|
extern PFNGLVERTEXATTRIBS2DVNVPROC qglVertexAttribs2dvNV ;
|
|
extern PFNGLVERTEXATTRIBS2FVNVPROC qglVertexAttribs2fvNV ;
|
|
extern PFNGLVERTEXATTRIBS2SVNVPROC qglVertexAttribs2svNV ;
|
|
extern PFNGLVERTEXATTRIBS3DVNVPROC qglVertexAttribs3dvNV ;
|
|
extern PFNGLVERTEXATTRIBS3FVNVPROC qglVertexAttribs3fvNV ;
|
|
extern PFNGLVERTEXATTRIBS3SVNVPROC qglVertexAttribs3svNV ;
|
|
extern PFNGLVERTEXATTRIBS4DVNVPROC qglVertexAttribs4dvNV ;
|
|
extern PFNGLVERTEXATTRIBS4FVNVPROC qglVertexAttribs4fvNV ;
|
|
extern PFNGLVERTEXATTRIBS4SVNVPROC qglVertexAttribs4svNV ;
|
|
extern PFNGLVERTEXATTRIBS4UBVNVPROC qglVertexAttribs4ubvNV ;
|
|
|
|
// <AWE> : MacOS X 10.2: defined in <OpenGL/glext.h> as APPLE extension:
|
|
#if defined (__APPLE__) || defined (MACOSX)
|
|
|
|
// GL_NV_vertex_array_range = GL_APPLE_vertex_array_range
|
|
#define GL_VERTEX_ARRAY_RANGE_NV GL_VERTEX_ARRAY_RANGE_APPLE
|
|
#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE
|
|
#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE
|
|
#define GL_VERTEX_ARRAY_RANGE_POINTER_NV GL_VERTEX_ARRAY_RANGE_POINTER_APPLE
|
|
#define GL_VERTEX_ARRAY_RANGE_VALID_NV GL_VERTEX_ARRAY_STORAGE_HINT_APPLE
|
|
|
|
#else
|
|
|
|
#define GL_CLAMP_TO_EDGE 0x812F
|
|
|
|
// GL_NV_vertex_array_range
|
|
#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
|
|
#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
|
|
#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
|
|
#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
|
|
#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
|
|
|
|
#endif /* !__APPLE__ && !MACOSX */
|
|
|
|
// <AWE> There are some diffs with the function parameters. wgl stuff not present with MacOS X. -DC- and SDL
|
|
#if defined (__APPLE__) || defined (MACOSX) || defined(SDL) || defined (__glx__)
|
|
|
|
typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, const GLvoid *pointer);
|
|
typedef void (APIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei size, const GLvoid *pointer);
|
|
|
|
extern PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC qglFlushVertexArrayRangeAPPLE;
|
|
extern PFNGLVERTEXARRAYRANGEAPPLEPROC qglVertexArrayRangeAPPLE;
|
|
|
|
#define qglVertexArrayRangeNV qglVertexArrayRangeAPPLE
|
|
|
|
#else
|
|
|
|
typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
|
|
typedef void (APIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei size, const GLvoid *pointer);
|
|
typedef void * (APIENTRY * PFNWGLALLOCATEMEMORYNVPROC) (int size, float readfreq, float writefreq, float priority);
|
|
typedef void (APIENTRY * PFNWGLFREEMEMORYNVPROC) (void *pointer);
|
|
|
|
extern PFNGLFLUSHVERTEXARRAYRANGENVPROC qglFlushVertexArrayRangeNV;
|
|
extern PFNGLVERTEXARRAYRANGENVPROC glVertexArrayRangeNV;
|
|
extern PFNWGLALLOCATEMEMORYNVPROC wglAllocateMemoryNV;
|
|
extern PFNWGLFREEMEMORYNVPROC wglFreeMemoryNV;
|
|
|
|
#endif /* __APPLE__ || MACOSX */
|
|
|
|
/*
|
|
|
|
*/
|
|
|
|
typedef void (APIENTRY *lpMTexFUNC) (GLenum, GLfloat, GLfloat);
|
|
typedef void (APIENTRY *lpSelTexFUNC) (GLenum);
|
|
//extern lpMTexFUNC qglMTexCoord2fSGIS;
|
|
//extern lpSelTexFUNC qglSelectTextureSGIS;
|
|
|
|
extern qboolean gl_mtexable;
|
|
extern qboolean gl_texturefilteranisotropic; // <AWE> true if anisotropic texture filtering available.
|
|
|
|
typedef enum
|
|
{
|
|
GENERIC = 0,
|
|
GEFORCE,
|
|
GEFORCE3,
|
|
RADEON,
|
|
PARHELIA,
|
|
ARB
|
|
} qcardtype;
|
|
extern qcardtype gl_cardtype;
|
|
|
|
//extern qboolean gl_nvcombiner; //PENTA: true if nvdida texture shaders are present
|
|
//extern qboolean gl_geforce3;
|
|
//extern qboolean gl_radeon;//PA:
|
|
extern qboolean gl_var;
|
|
extern qboolean gl_texcomp;
|
|
|
|
extern GLfloat gl_textureanisotropylevel; // <AWE> required for anisotropic textures.
|
|
|
|
void GL_DisableMultitexture(void);
|
|
void GL_EnableMultitexture(void);
|
|
|
|
//PENTA: Stencil shadows
|
|
|
|
typedef struct screenrect_s {
|
|
int coords [4];
|
|
struct screenrect_s *next;
|
|
} screenrect_t;
|
|
|
|
|
|
typedef union lightcmd_u {
|
|
int asInt;
|
|
float asFloat;
|
|
vec_t asVec;
|
|
void *asVoid;
|
|
} lightcmd_t;
|
|
|
|
typedef struct {
|
|
vec3_t mins, maxs;
|
|
} aabox_t;
|
|
|
|
typedef struct shadowlight_s {
|
|
vec3_t origin; //position of light source
|
|
vec3_t baseColor, color; //light color, animated color
|
|
float radius; //radius of light source (doesn't light anyting out of that circle)
|
|
//so we can "clip" our shadowvolumes against that circle
|
|
vec3_t radiusv; //the 3 radiusses of the elipse around the light
|
|
aabox_t box; //bounding box of the light. Thise boxes are not nececarry cubes
|
|
//and may be smaller than the corresponding radius
|
|
float brightness;
|
|
qboolean visible; //light is "visible" this frame
|
|
qboolean shadowchainfilled;
|
|
qboolean isStatic; //light is static and has a precalc volume
|
|
qboolean castShadow;//lights casts shadows
|
|
qboolean halo; //light has a halo
|
|
mleaf_t *leaf; //leaf this light is in
|
|
byte leafvis[MAX_MAP_LEAFS/8];//redone pvs for light, only poly's in nodes (leaf bits
|
|
byte entclustervis[MAX_MAP_LEAFS/8];//original pvs a light origin (cluster bits)
|
|
msurface_t **visSurf; //the surfaces that should cast shadows for this light (only when static)
|
|
int *volumeCmds; //gl commands to draw the shadow volume
|
|
float *volumeVerts;
|
|
int numVolumeVerts;
|
|
lightcmd_t *lightCmds; //gl commands to draw the cap/lighted volumes
|
|
int numlightcmds;
|
|
lightcmd_t *lightCmdsMesh; //gl commands to draw the cap/lighted volumes
|
|
int numlightcmdsmesh;
|
|
int numVisSurf;
|
|
int style;
|
|
entity_t *owner;
|
|
screenrect_t scizz;
|
|
int filtercube; //texture object of this light's cubemap filter
|
|
vec3_t angles; //angles of the cubemap filter
|
|
float rspeed; //rotation speed of cube map;
|
|
float cubescale; //scale factor of cube map;
|
|
float haloalpha; //alpha of halo
|
|
int area; //area (from areaportals) light is in
|
|
shader_t *shader; //shader on this light
|
|
} shadowlight_t;
|
|
|
|
//PENTA: new
|
|
typedef struct aliaslightinstant_s {
|
|
|
|
int lockframe; //number of the frame when it was last locked.
|
|
vec3_t lasteorg, lastlorg, lasteangles, lastvorg;
|
|
float lastlradius;
|
|
entity_t *lastent;
|
|
aliashdr_t * lasthdr;
|
|
shadowlight_t *lastlight;
|
|
vec3_t lightpos, vieworg; //Object space light position
|
|
void *lastframeinstant;
|
|
|
|
//Per light stuff
|
|
vec3_t extvertices[MAXALIASVERTS]; //extruded vertices (volumes)
|
|
vec3_t tslights[MAXALIASVERTS]; //per vertex tangent space light vector
|
|
vec3_t tshalfangles[MAXALIASVERTS]; //per vertex half angle vector
|
|
vec3_t colors[MAXALIASVERTS]; //per vertex attenuation for non gf3 cards
|
|
qboolean triangleVis[MAXALIASTRIS]; //triangle facingness for lights
|
|
|
|
int indecies[MAXALIASTRIS*3];//light visibility list
|
|
int numtris;
|
|
|
|
} aliaslightinstant_t;
|
|
|
|
typedef struct aliasframeinstant_s {
|
|
|
|
// chain of frameinstant for multiple surfaces
|
|
struct aliasframeinstant_s *_next;
|
|
|
|
int lockframe; //number of the frame when it was last locked.
|
|
int updateframe; //number of the fame when it was last recalculated
|
|
aliashdr_t *paliashdr;
|
|
int lastpose1, lastpose2;
|
|
float lastblend;
|
|
entity_t *lastent;
|
|
qboolean lastshadowonly;
|
|
aliashdr_t *lastpaliashdr;
|
|
|
|
qboolean shadowonly; //We only need the instant for shadow volume drawing
|
|
//we use this for ents out of the frustum but e.g. behind the player
|
|
//Per entity stuff
|
|
vec3_t vertices[MAXALIASVERTS]; //interpolated vertices
|
|
vec3_t normals[MAXALIASVERTS]; //interpolated vertex normals
|
|
vec3_t tangents[MAXALIASVERTS]; //interpolated vertex tangents
|
|
vec3_t binomials[MAXALIASVERTS]; //interpolated vertex binomials
|
|
plane_t triplanes[MAXALIASTRIS]; //triangle plane equatations
|
|
|
|
aliaslightinstant_t *lightinstant;
|
|
} aliasframeinstant_t;
|
|
|
|
typedef struct brushlightinstant_s {
|
|
|
|
int lockframe; //number of the frame when it was last locked.
|
|
vec3_t lasteorg, lastlorg, lasteangles, lastvorg;
|
|
float lastlradius;
|
|
entity_t *lastent;
|
|
shadowlight_t *lastlight;
|
|
vec3_t lightpos, vieworg; //Object space light position
|
|
qboolean shadowonly, lastshadowonly;
|
|
|
|
//Per light stuff
|
|
vec3_t extvertices[MAXALIASVERTS]; //extruded vertices (volumes)
|
|
vec3_t tslights[MAXALIASVERTS]; //per vertex tangent space light vector
|
|
vec3_t tshalfangles[MAXALIASVERTS]; //per vertex half angle vector
|
|
float atencoords[MAXALIASVERTS][2]; //per vertex attenuation texture coords for non gf3 cards
|
|
float colorscales[MAXALIASVERTS]; //per vertex attenuation texture coords for non gf3 cards
|
|
qboolean polygonVis[MAXALIASTRIS]; //polygon facingness for lights
|
|
qboolean neighbourVis[MAXALIASTRIS]; //polygon facingness for lights
|
|
} brushlightinstant_t;
|
|
|
|
|
|
|
|
#define MAXSHADOWLIGHTS 256 //Maximum number of (client side) lights in a map
|
|
#define MAX_VOLUME_VERTICES 10000 //should be multiple of 4 because this is used as a vertex array
|
|
//with GL_QUADS
|
|
#define MAXUSEDSHADOWLIGHS 64 //Maximum number of lights that can be used in a single frame
|
|
|
|
extern int numShadowLights; //number of lights currently on client
|
|
extern int numStaticShadowLights; //number of static lights on client
|
|
extern int numUsedShadowLights;
|
|
extern shadowlight_t shadowlights[MAXSHADOWLIGHTS];
|
|
extern shadowlight_t *usedshadowlights[MAXUSEDSHADOWLIGHS];
|
|
extern shadowlight_t *currentshadowlight;
|
|
extern msurface_t *shadowchain; //linked list of polygons that are shadowed
|
|
extern float frustumPlanes[6][4];
|
|
|
|
extern mmvertex_t *globalVertexTable;
|
|
extern mmvertex_t *tempVertices;
|
|
|
|
#define MAX_VOLUME_COMMANDS 131072 //Thats 0.5 meg storage for commands, insane
|
|
#define MAX_VOLUME_VERTS 87381 //1 Meg storage for vertices
|
|
#define MAX_LIGHT_COMMANDS 65536 //0.25 meg for light commands
|
|
extern lightcmd_t lightCmdsBuff[MAX_LIGHT_COMMANDS+128];
|
|
|
|
//XYZ
|
|
extern int numNormals[MAXALIASTRIS]; //Used during tangent space calc
|
|
extern char loadname[32]; // for hunk tags
|
|
|
|
//64 kb should be enough
|
|
#define AGP_BUFFER_SIZE 2048*4
|
|
extern void *AGP_Buffer;
|
|
|
|
//view origin in object space
|
|
extern vec3_t object_vieworg;
|
|
extern vec3_t tsLightVects[MAXALIASTRIS*3];
|
|
extern vec3_t tsHalfAngles[MAXALIASTRIS*3];
|
|
|
|
//PENTA: Shadow bsp's
|
|
|
|
typedef struct svnode_s {
|
|
plane_t *splitplane;
|
|
struct svnode_s *children[2];
|
|
} svnode_t;
|
|
|
|
extern int svBsp_NumCutPolys;
|
|
extern int svBsp_NumKeptPolys;
|
|
extern int svBsp_NumAddedPolys;
|
|
extern int svBsp_NumMissedPlanes;
|
|
extern int svBsp_NumMissedNodes;
|
|
extern int numClearsSaved;
|
|
|
|
extern int planesusedpool;
|
|
extern int nodesusedpool;
|
|
|
|
extern int aliasCacheRequests, aliasFullCacheHits, aliasPartialCacheHits; // <AWE> added "extern".
|
|
extern int brushCacheRequests, brushFullCacheHits, brushPartialCacheHits; // <AWE> added "extern".
|
|
|
|
//Don't cast shadows with this light
|
|
#define PFLAG_NOSHADOW 1
|
|
//Draw a halo around the light
|
|
#define PFLAG_HALO 2
|
|
/*
|
|
It seems in c you can only return structs when you prototype them first
|
|
well I don't now for sure since I'm actually not c a specialist.
|
|
If you know the answer mail me please.
|
|
*/
|
|
|
|
svnode_t *R_CreateEmptyTree(void);
|
|
svnode_t *R_AddShadowCaster(svnode_t *node, vec3_t *v, int vnum, msurface_t *surf,int depth);
|
|
svnode_t *ExpandVolume(vec3_t *v,int *sign, int vnum, msurface_t *surf);
|
|
plane_t *AllocPlane(plane_t *tryplane);
|
|
svnode_t *AllocNode(void);
|
|
svnode_t *NodeFromEdge(vec3_t *v,int vnum, int edgeindex);
|
|
float CalcFov (float fov_x, float width, float height);
|
|
|
|
/* other c twists (i'm pascal-core and java-used)*/
|
|
// <AWE> added misc function prototypes, fixed functions without return type.
|
|
void Mod_LoadMd3Model (model_t *mod, void *buffer);
|
|
void R_AddRectList (screenrect_t *rec);
|
|
void R_AllocateMirror (msurface_t *surf);
|
|
void R_AnimateLight (void);
|
|
void R_AutomaticLightPos (void);
|
|
void R_StaticLightFromEnt (entity_t *ent);
|
|
qboolean R_CheckRectList (screenrect_t *rec);
|
|
void R_ClearBrushInstantCaches (void);
|
|
void R_ClearInstantCaches (void);
|
|
void R_ClearParticles (void);
|
|
void R_ClearDecals(void);
|
|
void R_ClearRectList (void);
|
|
void R_ConstructShadowVolume (shadowlight_t *light);
|
|
qboolean R_ContributeFrame (shadowlight_t *light);
|
|
qboolean R_CullBox (vec3_t mins, vec3_t maxs);
|
|
void R_DrawAliasBumped (aliashdr_t *paliashdr, aliasframeinstant_t *instant);
|
|
void R_DrawAliasBumpedGF3 (aliashdr_t *paliashdr, aliasframeinstant_t *instant);
|
|
void R_DrawAliasBumpedRadeon(aliashdr_t *paliashdr, aliasframeinstant_t *instant);//PA:
|
|
void R_DrawBrushBumpedRadeon(entity_t *e);//PA:
|
|
void R_DrawAliasBumpedParhelia(aliashdr_t *paliashdr, aliasframeinstant_t *instant);//PA:
|
|
void R_DrawBrushBumpedParhelia(entity_t *e);//PA:
|
|
void R_DrawAliasBumpedARB(aliashdr_t *paliashdr, aliasframeinstant_t *instant);//PA:
|
|
void R_DrawBrushBumpedARB(entity_t *e);//PA:
|
|
void R_DrawAliasFrameWV (aliashdr_t *paliashdr, aliasframeinstant_t *instant, qboolean specular);
|
|
void R_DrawAliasObjectLight (entity_t *e, void (*AliasGeoSender) (aliashdr_t *paliashdr,
|
|
aliasframeinstant_t* instant));
|
|
void R_DrawBrushATT (entity_t *ent);
|
|
void R_DrawBrushBumped (entity_t *e);
|
|
void R_DrawBrushBumpedGF3 (entity_t *e);
|
|
void R_DrawBrushBumpedRadeon (entity_t *e);
|
|
void R_DrawBrushBumpedParhelia (entity_t *e);
|
|
void R_DrawBrushBumpedARB (entity_t *e);
|
|
void R_DrawBrushModel (entity_t *e);
|
|
void R_DrawBrushModelVolumes(entity_t *e);
|
|
void R_DrawBrushObjectLight (entity_t *e,void (*BrushGeoSender) (entity_t *e));
|
|
void R_DrawBrushWV (entity_t *e, qboolean specular);
|
|
void R_DrawGlare (void);
|
|
void R_DrawLightEntities (shadowlight_t *l);
|
|
void R_DrawParticles (void);
|
|
void R_DrawDecals (void);
|
|
void R_DrawShadowVolume (shadowlight_t *light);
|
|
void R_DrawSkyChain (msurface_t *s);
|
|
void R_DrawSpriteModelWV (entity_t *e);
|
|
void R_DrawWaterSurfaces (void);
|
|
void R_DrawWorldBumped (/* shadowlight_t *l */);
|
|
void R_DrawWorldBumpedGEN (void);
|
|
void R_DrawWorldBumpedGF (void);
|
|
void R_DrawWorldBumpedGF3 (void);
|
|
void R_DrawWorldBumpedRadeon (void);
|
|
void R_DrawWorldBumpedParhelia (void);
|
|
void R_DrawWorldBumpedARB (void);
|
|
void R_DrawWorldWV (lightcmd_t *lightCmds, qboolean specular);
|
|
qboolean R_FillLightChains (shadowlight_t *light);
|
|
mspriteframe_t *R_GetSpriteFrame (entity_t *currententity);
|
|
void R_Glare (void);
|
|
void R_InitDrawWorld (void);
|
|
void R_InitGlare (void);
|
|
void R_InitMirrorChains (void);
|
|
void R_InitParticles (void);
|
|
void R_InitDecals (void);
|
|
void R_InitShadowsForFrame (void);
|
|
int R_LightPoint (vec3_t p);
|
|
void R_LoadVertexProgram (void);
|
|
void R_NewMirrorChains (void);
|
|
void R_ParticleGunHits (vec3_t org, int type);
|
|
void R_RenderGlow (shadowlight_t *light);
|
|
void R_RenderScene (void);
|
|
void R_RotateForEntity (entity_t *e);
|
|
void R_SetTotalRect (void);
|
|
void R_SetupBrushInstantForLight(entity_t *e);
|
|
void R_SetupInstantForLight(entity_t *e);
|
|
void R_SetupInstantForFrame(entity_t *e, qboolean forcevis);
|
|
void R_SetupInstants (void);
|
|
qboolean R_ShouldDrawViewModel (void);
|
|
void R_StoreEfrags (efrag_t **ppefrag);
|
|
void R_FillEntityLeafs (entity_t *ent);
|
|
void R_WorldMultiplyTextures (void);
|
|
void R_WorldToObjectMatrix(entity_t *e, matrix_4x4 result);
|
|
|
|
/**
|
|
Returns true if both boxes intersect
|
|
*/
|
|
aabox_t emptyBox (void);
|
|
aabox_t constructBox (vec3_t mins, vec3_t maxs);
|
|
qboolean intersectsBox(aabox_t *b1, aabox_t *b2);
|
|
aabox_t intersectBoxes(aabox_t *b1, aabox_t *b2);
|
|
aabox_t addBoxes(aabox_t *b1, aabox_t *b2);
|
|
|
|
int EasyTgaLoad (char *filename);
|
|
void EmitBothSkyLayers (msurface_t *fa);
|
|
void EmitMirrorPolys (msurface_t *fa);
|
|
void EmitMirrorWaterPolys (msurface_t *fa);
|
|
void EmitSkyPolys (msurface_t *fa);
|
|
void EmitWaterPolys (msurface_t *fa);
|
|
//void InitShaderTex (void);
|
|
void LoadColorTGA (FILE *fin, byte *pixels, int *width, int *height);
|
|
void LoadGrayTGA (FILE *fin,byte *pixels,int *width, int *height);
|
|
int LoadTextureInPlace(char* filename, int size, byte* mem, int* width, int* height);
|
|
void LoadTGA (FILE *fin);
|
|
//qboolean OverrideFluidTex (char *name);
|
|
void ProjectPlane (const vec3_t src,const vec3_t v1,const vec3_t v2,vec3_t dst);
|
|
void TraceLine (vec3_t start, vec3_t end, vec3_t impact);
|
|
|
|
void GL_AddColor (void);
|
|
void GL_BuildLightmaps (void);
|
|
void GL_DisableColorShader (qboolean specular);
|
|
void GL_DrawAlpha (void);
|
|
void GL_EnableColorShader (qboolean specular);
|
|
void GL_GetOverrideName (char *identifier, char *tail, char *dest);
|
|
int GL_LoadCubeMap (int identifier);
|
|
void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr);
|
|
void R_DrawAliasModel ( float bright);
|
|
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 R_DrawCaustics(void);
|
|
int CL_PointContents (vec3_t p);
|
|
void V_CalcBlend (void);
|
|
|
|
#define VERTEX_TEXTURE 1
|
|
#define VERTEX_LIGHTMAP 2
|
|
|
|
int R_GetNextVertexIndex(void);
|
|
int R_AllocateVertexInTemp(vec3_t pos, float texture [2], float lightmap[2], byte color[4]);
|
|
void R_CopyVerticesToHunk(void);
|
|
void R_EnableVertexTable(int fields);
|
|
void R_DisableVertexTable(int fields);
|
|
|
|
typedef struct mirrorplane_s {
|
|
int texture_object; //Object we should render to and use for drawing
|
|
int lockframe, updateframe; //Index of frame when it was last updated
|
|
mplane_t plane; //Plane equatation of mirror face
|
|
msurface_t *chain; //Chain of mirror poly's
|
|
float matrix[16];
|
|
} mirrorplane_t;
|
|
|
|
#define NUM_MIRROR_PLANES 8
|
|
extern mirrorplane_t mirrorplanes[NUM_MIRROR_PLANES];
|
|
extern int mirror_contents;
|
|
extern int newenvmap;
|
|
|
|
msurface_t *causticschain;
|
|
extern int caustics_textures[8];
|
|
extern qboolean busy_caustics;
|
|
|
|
extern char skybox_name[64];
|
|
extern float skybox_cloudspeed;
|
|
extern qboolean skybox_hasclouds;
|
|
|
|
extern qboolean is_q3map;
|
|
|
|
void CS_Create(dq3face_t *in, mesh_t *mesh, mapshader_t *shader);
|
|
//void CS_DrawAmbient(mcurve_t *curve);
|
|
void CS_FillBinomials(void);
|
|
|
|
extern int lightmap_textures;
|
|
|
|
#include "gl_md3.h"
|
|
#include "bumpdriver.h"
|
|
//*******************************
|
|
// Shader related declarations
|
|
//*******************************
|
|
//
|
|
|
|
#include "surfaceflags.h"
|
|
|
|
void Draw_TextureMode_f (void);
|
|
|
|
extern cvar_t gl_max_size;
|
|
extern cvar_t gl_picmip;
|
|
extern cvar_t gl_gloss;
|
|
extern cvar_t gl_compress_textures;
|
|
extern cvar_t willi_gray_colormaps;
|
|
|
|
gltexture_t *GL_CacheTexture (char *filename, qboolean mipmap, int type);
|
|
shader_t *GL_ShaderForName(char *name);
|
|
qboolean IsShaderBlended(shader_t *s);
|
|
|
|
void Roq_Info_f(void);
|
|
void Roq_SetupTexture(gltexture_t *tex,char *filename);
|
|
void Roq_FreeTexture(gltexture_t *tex);
|