mirror of
https://git.code.sf.net/p/quake/newtree
synced 2025-01-20 23:30:43 +00:00
1a72e3ad83
Much better for clearing the screen and stuff, will get used more later on. For now it just makes the sky's edge off in the distance and makes the non-skybox sky more of a dome than a box with rounded off edges. Visual bug: drawing everything this way leaves blending off, particles end up being solid tris. All I gotta do is turn blend back on, no biggie. Visual bug: skydome being in the distance creates the same see through walls effect that skyboxes have. Not a problem since I know where to fix that. There's tons of dead code in here still, I'm probably going to move the sky stuff into gl_sky.c and clean up LordHavoc's code a bit, I can do the skybox at least cheaper than he does. We'll see about the dome.
313 lines
7.6 KiB
C
313 lines
7.6 KiB
C
/*
|
|
glquake.h
|
|
|
|
OpenGL-specific definitions and prototypes
|
|
|
|
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:
|
|
|
|
Free Software Foundation, Inc.
|
|
59 Temple Place - Suite 330
|
|
Boston, MA 02111-1307, USA
|
|
|
|
$Id$
|
|
*/
|
|
|
|
#ifndef _GLQUAKE_H
|
|
#define _GLQUAKE_H
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include "config.h"
|
|
#endif
|
|
|
|
#ifdef _WIN32
|
|
// disable data conversion warnings
|
|
// FIXME: move that somewhere else -- yan
|
|
#pragma warning(disable : 4244) // MIPS
|
|
#pragma warning(disable : 4136) // X86
|
|
#pragma warning(disable : 4051) // ALPHA
|
|
#pragma warning(disable : 4305) // thousands of double to float truncation warnings
|
|
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
#include <GL/gl.h>
|
|
#include <GL/glu.h>
|
|
|
|
#include "model.h"
|
|
#include "render.h"
|
|
#include "cvar.h"
|
|
#include "wad.h"
|
|
#include "client.h"
|
|
|
|
|
|
#ifndef GLAPIENTRY
|
|
# ifdef APIENTRY
|
|
# define GLAPIENTRY APIENTRY
|
|
# else
|
|
# define GLAPIENTRY
|
|
# endif
|
|
#endif
|
|
|
|
void GL_BeginRendering (int *x, int *y, int *width, int *height);
|
|
void GL_EndRendering (void);
|
|
|
|
// Function prototypes for the Texture Object Extension routines
|
|
typedef GLboolean (GLAPIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *,const GLboolean *);
|
|
typedef void (GLAPIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint);
|
|
typedef void (GLAPIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *);
|
|
typedef void (GLAPIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *);
|
|
typedef GLboolean (GLAPIENTRY *ISTEXFUNCPTR)(GLuint);
|
|
typedef void (GLAPIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *,
|
|
const GLclampf *);
|
|
typedef void (GLAPIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *);
|
|
|
|
extern DELTEXFUNCPTR delTexFunc;
|
|
extern TEXSUBIMAGEPTR TexSubImage2DFunc;
|
|
|
|
extern int texture_extension_number;
|
|
extern int texture_mode;
|
|
|
|
extern float gldepthmin, gldepthmax;
|
|
|
|
void GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap, qboolean alpha);
|
|
void GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboolean alpha);
|
|
void GL_Upload8_EXT (byte *data, int width, int height, qboolean mipmap, qboolean alpha);
|
|
int GL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha);
|
|
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
|
|
|
|
#ifndef MAX_LBM_HEIGHT // FIXME: Make this ifndef go away.. --KB
|
|
#define MAX_LBM_HEIGHT 480
|
|
#endif
|
|
|
|
#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);
|
|
texture_t *R_TextureAnimation (texture_t *base);
|
|
|
|
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;
|
|
|
|
|
|
//====================================================
|
|
|
|
|
|
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 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 texture_t *r_notexture_mip;
|
|
extern int d_lightstylevalue[256]; // 8.8 fraction of base light value
|
|
|
|
extern qboolean envmap;
|
|
extern int particletexture;
|
|
extern int netgraphtexture; // netgraph texture
|
|
extern int playertextures;
|
|
|
|
extern int skytexturenum; // index in cl.loadmodel, not gl texture object
|
|
|
|
extern cvar_t *r_norefresh;
|
|
extern cvar_t *r_drawentities;
|
|
extern cvar_t *r_drawworld;
|
|
extern cvar_t *r_drawviewmodel;
|
|
extern cvar_t *r_speeds;
|
|
extern cvar_t *r_waterwarp;
|
|
extern cvar_t *r_fullbright;
|
|
extern cvar_t *r_lightmap;
|
|
extern cvar_t *r_shadows;
|
|
extern cvar_t *r_mirroralpha;
|
|
extern cvar_t *r_wateralpha;
|
|
extern cvar_t *r_dynamic;
|
|
extern cvar_t *r_novis;
|
|
extern cvar_t *r_netgraph;
|
|
|
|
extern cvar_t *gl_clear;
|
|
extern cvar_t *gl_cull;
|
|
extern cvar_t *gl_poly;
|
|
extern cvar_t *gl_texsort;
|
|
extern cvar_t *gl_smoothmodels;
|
|
extern cvar_t *gl_affinemodels;
|
|
extern cvar_t *gl_polyblend;
|
|
extern cvar_t *gl_keeptjunctions;
|
|
extern cvar_t *gl_reporttjunctions;
|
|
extern cvar_t *gl_flashblend;
|
|
extern cvar_t *gl_nocolors;
|
|
extern cvar_t *gl_finish;
|
|
|
|
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_playermip;
|
|
|
|
extern cvar_t *r_skyname;
|
|
|
|
extern int mirrortexturenum; // quake texturenum, not gltexturenum
|
|
extern qboolean mirror;
|
|
extern mplane_t *mirror_plane;
|
|
|
|
extern float r_world_matrix[16];
|
|
|
|
extern const char *gl_vendor;
|
|
extern const char *gl_renderer;
|
|
extern const char *gl_version;
|
|
extern const char *gl_extensions;
|
|
|
|
void R_TranslatePlayerSkin (int playernum);
|
|
|
|
// Multitexture
|
|
#define TEXTURE0_SGIS 0x835E
|
|
#define TEXTURE1_SGIS 0x835F
|
|
#define GL_TEXTURE0_ARB 0x84C0
|
|
#define GL_TEXTURE1_ARB 0x84C1
|
|
|
|
typedef void (GLAPIENTRY *lpMTexFUNC) (GLenum, GLfloat, GLfloat);
|
|
typedef void (GLAPIENTRY *lpSelTexFUNC) (GLenum);
|
|
extern lpMTexFUNC qglMTexCoord2f;
|
|
extern lpSelTexFUNC qglSelectTexture;
|
|
|
|
extern qboolean gl_mtexable;
|
|
extern qboolean gl_arb_mtex;
|
|
extern int gl_mtex_enum;
|
|
|
|
void GL_DisableMultitexture (void);
|
|
void GL_EnableMultitexture (void);
|
|
void GL_SelectTexture (GLenum target);
|
|
|
|
//
|
|
// gl_warp.c
|
|
//
|
|
void GL_SubdivideSurface (msurface_t *fa);
|
|
void EmitBothSkyLayers (msurface_t *fa);
|
|
void EmitWaterPolys (msurface_t *fa);
|
|
void EmitSkyPolys (msurface_t *fa);
|
|
void R_DrawSkyChain (msurface_t *s);
|
|
void R_LoadSkys (char *);
|
|
//void R_ClearSkyBox (void);
|
|
//void R_DrawSkyBox (void);
|
|
void R_Sky (void);
|
|
|
|
//
|
|
// gl_draw.c
|
|
//
|
|
int GL_LoadPicTexture (qpic_t *pic);
|
|
void GL_Set2D (void);
|
|
|
|
//
|
|
// gl_rmain.c
|
|
//
|
|
void GL_CheckGamma (unsigned char *pal);
|
|
qboolean R_CullBox (vec3_t mins, vec3_t maxs);
|
|
void R_RotateForEntity (entity_t *e);
|
|
|
|
//
|
|
// gl_rlight.c
|
|
//
|
|
|
|
extern float v_blend[4];
|
|
|
|
void R_MarkLights (dlight_t *light, int bit, mnode_t *node);
|
|
void R_AnimateLight (void);
|
|
void R_RenderDlights (void);
|
|
int R_LightPoint (vec3_t p);
|
|
|
|
//
|
|
// gl_refrag.c
|
|
//
|
|
void R_StoreEfrags (efrag_t **ppefrag);
|
|
|
|
//
|
|
// gl_mesh.c
|
|
//
|
|
void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr);
|
|
|
|
//
|
|
// gl_rsurf.c
|
|
//
|
|
void R_DrawBrushModel (entity_t *e);
|
|
void R_DrawWorld (void);
|
|
void GL_BuildLightmaps (void);
|
|
|
|
//
|
|
// gl_ngraph.c
|
|
//
|
|
void R_NetGraph (void);
|
|
|
|
#endif // _GLQUAKE_H
|
|
|