mittorn
6 years ago
commit
1ca28badad
8 changed files with 3860 additions and 0 deletions
@ -0,0 +1,814 @@ |
|||||||
|
/*
|
||||||
|
vid_sdl.c - SDL vid component |
||||||
|
Copyright (C) 2018 a1batross |
||||||
|
|
||||||
|
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 3 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. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "r_local.h" |
||||||
|
|
||||||
|
ref_api_t gEngfuncs; |
||||||
|
ref_globals_t *gpGlobals; |
||||||
|
ref_instance_t RI; |
||||||
|
gl_globals_t tr; |
||||||
|
ref_speeds_t r_stats; |
||||||
|
byte *r_temppool; |
||||||
|
cvar_t *gl_emboss_scale; |
||||||
|
viddef_t vid; |
||||||
|
static void R_ClearScreen( void ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
static qboolean IsNormalPass( void ) |
||||||
|
{ |
||||||
|
return RP_NORMALPASS(); |
||||||
|
} |
||||||
|
|
||||||
|
static void R_IncrementSpeedsCounter( int type ) |
||||||
|
{ |
||||||
|
switch( type ) |
||||||
|
{ |
||||||
|
case RS_ACTIVE_TENTS: |
||||||
|
r_stats.c_active_tents_count++; |
||||||
|
break; |
||||||
|
default: |
||||||
|
gEngfuncs.Host_Error( "R_IncrementSpeedsCounter: unsupported type %d\n", type ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static const byte *R_GetTextureOriginalBuffer( unsigned int idx ) |
||||||
|
{ |
||||||
|
/*gl_texture_t *glt = R_GetTexture( idx );
|
||||||
|
|
||||||
|
if( !glt || !glt->original || !glt->original->buffer ) |
||||||
|
return NULL;*/ |
||||||
|
|
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
static int R_GetBuiltinTexture( enum ref_shared_texture_e type ) |
||||||
|
{ |
||||||
|
switch( type ) |
||||||
|
{ |
||||||
|
case REF_DEFAULT_TEXTURE: return tr.defaultTexture; |
||||||
|
case REF_GRAY_TEXTURE: return tr.grayTexture; |
||||||
|
case REF_WHITE_TEXTURE: return tr.whiteTexture; |
||||||
|
case REF_SOLIDSKY_TEXTURE: return tr.solidskyTexture; |
||||||
|
case REF_ALPHASKY_TEXTURE: return tr.alphaskyTexture; |
||||||
|
default: gEngfuncs.Host_Error( "R_GetBuiltinTexture: unsupported type %d\n", type ); |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
static void R_FreeSharedTexture( enum ref_shared_texture_e type ) |
||||||
|
{ |
||||||
|
int num = 0; |
||||||
|
|
||||||
|
switch( type ) |
||||||
|
{ |
||||||
|
case REF_SOLIDSKY_TEXTURE: |
||||||
|
num = tr.solidskyTexture; |
||||||
|
tr.solidskyTexture = 0; |
||||||
|
break; |
||||||
|
case REF_ALPHASKY_TEXTURE: |
||||||
|
num = tr.alphaskyTexture; |
||||||
|
tr.alphaskyTexture = 0; |
||||||
|
break; |
||||||
|
case REF_DEFAULT_TEXTURE: |
||||||
|
case REF_GRAY_TEXTURE: |
||||||
|
case REF_WHITE_TEXTURE: |
||||||
|
gEngfuncs.Host_Error( "R_FreeSharedTexture: invalid type %d\n", type ); |
||||||
|
default: gEngfuncs.Host_Error( "R_FreeSharedTexture: unsupported type %d\n", type ); |
||||||
|
} |
||||||
|
|
||||||
|
GL_FreeTexture( num ); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
CL_FillRGBA |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
static void CL_FillRGBA( float _x, float _y, float _w, float _h, int r, int g, int b, int a ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
pfnFillRGBABlend |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
static void GAME_EXPORT CL_FillRGBABlend( float _x, float _y, float _w, float _h, int r, int g, int b, int a ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
qboolean Mod_ProcessRenderData( model_t *mod, qboolean create, const byte *buf ) |
||||||
|
{ |
||||||
|
qboolean loaded = true; |
||||||
|
|
||||||
|
if( create ) |
||||||
|
{ |
||||||
|
|
||||||
|
|
||||||
|
switch( mod->type ) |
||||||
|
{ |
||||||
|
case mod_studio: |
||||||
|
// Mod_LoadStudioModel( mod, buf, loaded );
|
||||||
|
break; |
||||||
|
case mod_sprite: |
||||||
|
//Mod_LoadSpriteModel( mod, buf, &loaded, mod->numtexinfo );
|
||||||
|
break; |
||||||
|
case mod_alias: |
||||||
|
//Mod_LoadAliasModel( mod, buf, &loaded );
|
||||||
|
break; |
||||||
|
case mod_brush: |
||||||
|
// Mod_LoadBrushModel( mod, buf, loaded );
|
||||||
|
break; |
||||||
|
|
||||||
|
default: gEngfuncs.Host_Error( "Mod_LoadModel: unsupported type %d\n", mod->type ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if( loaded && gEngfuncs.drawFuncs->Mod_ProcessUserData ) |
||||||
|
gEngfuncs.drawFuncs->Mod_ProcessUserData( mod, create, buf ); |
||||||
|
|
||||||
|
//if( !create )
|
||||||
|
//Mod_UnloadTextures( mod );
|
||||||
|
|
||||||
|
return loaded; |
||||||
|
} |
||||||
|
|
||||||
|
static int GL_RenderGetParm( int parm, int arg ) |
||||||
|
{ |
||||||
|
image_t *glt; |
||||||
|
|
||||||
|
switch( parm ) |
||||||
|
{ |
||||||
|
case PARM_TEX_WIDTH: |
||||||
|
glt = R_GetTexture( arg ); |
||||||
|
return glt->width; |
||||||
|
case PARM_TEX_HEIGHT: |
||||||
|
glt = R_GetTexture( arg ); |
||||||
|
return glt->height; |
||||||
|
case PARM_TEX_SRC_WIDTH: |
||||||
|
glt = R_GetTexture( arg ); |
||||||
|
return glt->srcWidth; |
||||||
|
case PARM_TEX_SRC_HEIGHT: |
||||||
|
glt = R_GetTexture( arg ); |
||||||
|
return glt->srcHeight; |
||||||
|
case PARM_TEX_MIPCOUNT: |
||||||
|
glt = R_GetTexture( arg ); |
||||||
|
return glt->numMips; |
||||||
|
case PARM_TEX_DEPTH: |
||||||
|
glt = R_GetTexture( arg ); |
||||||
|
return glt->depth; |
||||||
|
case PARM_TEX_SKYBOX: |
||||||
|
Assert( arg >= 0 && arg < 6 ); |
||||||
|
return tr.skyboxTextures[arg]; |
||||||
|
case PARM_TEX_SKYTEXNUM: |
||||||
|
return tr.skytexturenum; |
||||||
|
case PARM_TEX_LIGHTMAP: |
||||||
|
arg = bound( 0, arg, MAX_LIGHTMAPS - 1 ); |
||||||
|
return tr.lightmapTextures[arg]; |
||||||
|
case PARM_WIDESCREEN: |
||||||
|
return gpGlobals->wideScreen; |
||||||
|
case PARM_FULLSCREEN: |
||||||
|
return gpGlobals->fullScreen; |
||||||
|
case PARM_SCREEN_WIDTH: |
||||||
|
return gpGlobals->width; |
||||||
|
case PARM_SCREEN_HEIGHT: |
||||||
|
return gpGlobals->height; |
||||||
|
case PARM_TEX_FLAGS: |
||||||
|
glt = R_GetTexture( arg ); |
||||||
|
return glt->flags; |
||||||
|
case PARM_LIGHTSTYLEVALUE: |
||||||
|
arg = bound( 0, arg, MAX_LIGHTSTYLES - 1 ); |
||||||
|
return tr.lightstylevalue[arg]; |
||||||
|
case PARM_MAX_IMAGE_UNITS: |
||||||
|
return 1; |
||||||
|
case PARM_REBUILD_GAMMA: |
||||||
|
return 0;//glConfig.softwareGammaUpdate;
|
||||||
|
case PARM_SURF_SAMPLESIZE: |
||||||
|
if( arg >= 0 && arg < WORLDMODEL->numsurfaces ) |
||||||
|
return gEngfuncs.Mod_SampleSizeForFace( &WORLDMODEL->surfaces[arg] ); |
||||||
|
return LM_SAMPLE_SIZE; |
||||||
|
case PARM_SKY_SPHERE: |
||||||
|
return gEngfuncs.CL_GetRenderParm( parm, arg ) && !tr.fCustomSkybox; |
||||||
|
default: |
||||||
|
return gEngfuncs.CL_GetRenderParm( parm, arg ); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
static void R_GetDetailScaleForTexture( int texture, float *xScale, float *yScale ) |
||||||
|
{ |
||||||
|
image_t *glt = R_GetTexture( texture ); |
||||||
|
|
||||||
|
if( xScale ) *xScale = glt->xscale; |
||||||
|
if( yScale ) *yScale = glt->yscale; |
||||||
|
} |
||||||
|
|
||||||
|
static void R_GetExtraParmsForTexture( int texture, byte *red, byte *green, byte *blue, byte *density ) |
||||||
|
{ |
||||||
|
image_t *glt = R_GetTexture( texture ); |
||||||
|
|
||||||
|
if( red ) *red = glt->fogParams[0]; |
||||||
|
if( green ) *green = glt->fogParams[1]; |
||||||
|
if( blue ) *blue = glt->fogParams[2]; |
||||||
|
if( density ) *density = glt->fogParams[3]; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
static void R_SetCurrentEntity( cl_entity_t *ent ) |
||||||
|
{ |
||||||
|
RI.currententity = ent; |
||||||
|
|
||||||
|
// set model also
|
||||||
|
if( RI.currententity != NULL ) |
||||||
|
{ |
||||||
|
RI.currentmodel = RI.currententity->model; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static void R_SetCurrentModel( model_t *mod ) |
||||||
|
{ |
||||||
|
RI.currentmodel = mod; |
||||||
|
} |
||||||
|
|
||||||
|
static float R_GetFrameTime( void ) |
||||||
|
{ |
||||||
|
return tr.frametime; |
||||||
|
} |
||||||
|
|
||||||
|
static const char *GL_TextureName( unsigned int texnum ) |
||||||
|
{ |
||||||
|
return "";//return R_GetTexture( texnum )->name;
|
||||||
|
} |
||||||
|
|
||||||
|
const byte *GL_TextureData( unsigned int texnum ) |
||||||
|
{ |
||||||
|
// rgbdata_t *pic = R_GetTexture( texnum )->original;
|
||||||
|
|
||||||
|
//if( pic != NULL )
|
||||||
|
//return pic->buffer;
|
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
void Mod_BrushUnloadTextures( model_t *mod ) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
|
||||||
|
for( i = 0; i < mod->numtextures; i++ ) |
||||||
|
{ |
||||||
|
texture_t *tx = mod->textures[i]; |
||||||
|
if( !tx || tx->gl_texturenum == tr.defaultTexture ) |
||||||
|
continue; // free slot
|
||||||
|
|
||||||
|
//GL_FreeTexture( tx->gl_texturenum ); // main texture
|
||||||
|
//GL_FreeTexture( tx->fb_texturenum ); // luma texture
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void Mod_UnloadTextures( model_t *mod ) |
||||||
|
{ |
||||||
|
int i, j; |
||||||
|
|
||||||
|
Assert( mod != NULL ); |
||||||
|
|
||||||
|
switch( mod->type ) |
||||||
|
{ |
||||||
|
case mod_studio: |
||||||
|
//Mod_StudioUnloadTextures( mod->cache.data );
|
||||||
|
break; |
||||||
|
case mod_alias: |
||||||
|
//Mod_AliasUnloadTextures( mod->cache.data );
|
||||||
|
break; |
||||||
|
case mod_brush: |
||||||
|
Mod_BrushUnloadTextures( mod ); |
||||||
|
break; |
||||||
|
case mod_sprite: |
||||||
|
//Mod_SpriteUnloadTextures( mod->cache.data );
|
||||||
|
break; |
||||||
|
default: gEngfuncs.Host_Error( "Mod_UnloadModel: unsupported type %d\n", mod->type ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void R_ProcessEntData( qboolean allocate ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// stubs
|
||||||
|
|
||||||
|
void GL_SetTexCoordArrayMode() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
void R_InitBlit(); |
||||||
|
void GL_OnContextCreated() |
||||||
|
{ |
||||||
|
R_InitBlit(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_InitExtensions() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
void GL_ClearExtensions() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
void R_BeginFrame(qboolean clearScene) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
void R_RenderScene() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void R_EndFrame() |
||||||
|
{ |
||||||
|
// blit pixels with GL until engine supports REF_SOFT context
|
||||||
|
R_BlitScreen(); |
||||||
|
} |
||||||
|
|
||||||
|
void R_PushScene() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void R_PopScene() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_BackendStartFrame() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_BackendEndFrame() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void R_AllowFog(qboolean allowed) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_SetRenderMode(int mode) |
||||||
|
{ |
||||||
|
/// TODO: table shading/blending???
|
||||||
|
/// maybe, setup block drawing function pointers here
|
||||||
|
} |
||||||
|
|
||||||
|
qboolean R_AddEntity(struct cl_entity_s *pRefEntity, int entityType) |
||||||
|
{ |
||||||
|
// no entities support until we draw world...
|
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
void CL_AddCustomBeam(cl_entity_t *pEnvBeam) |
||||||
|
{ |
||||||
|
// same for beams
|
||||||
|
} |
||||||
|
|
||||||
|
void R_ShowTextures() |
||||||
|
{ |
||||||
|
// textures undone too
|
||||||
|
} |
||||||
|
|
||||||
|
void R_ShowTree() |
||||||
|
{ |
||||||
|
// do we really need this here???
|
||||||
|
} |
||||||
|
|
||||||
|
void R_SetupSky(const char *skyboxname) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
qboolean VID_ScreenShot(const char *filename, int shot_type) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
qboolean VID_CubemapShot(const char *base, uint size, const float *vieworg, qboolean skyshot) |
||||||
|
{ |
||||||
|
// cubemaps? in my softrender???
|
||||||
|
} |
||||||
|
|
||||||
|
colorVec R_LightPoint(const vec3_t p0) |
||||||
|
{ |
||||||
|
colorVec c = {0}; |
||||||
|
return c; |
||||||
|
} |
||||||
|
|
||||||
|
void R_DecalShoot(int textureIndex, int entityIndex, int modelIndex, vec3_t pos, int flags, float scale) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void R_DecalRemoveAll(int texture) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int R_CreateDecalList(decallist_t *pList) |
||||||
|
{ |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
void R_ClearAllDecals() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
float R_StudioEstimateFrame(cl_entity_t *e, mstudioseqdesc_t *pseqdesc) |
||||||
|
{ |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
void R_StudioLerpMovement(cl_entity_t *e, double time, vec3_t origin, vec3_t angles) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void CL_InitStudioAPI() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void R_InitSkyClouds(mip_t *mt, texture_t *tx, qboolean custom_palette) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_SubdivideSurface(msurface_t *fa) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void CL_RunLightStyles() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void Mod_LoadMapSprite(model_t *mod, const void *buffer, size_t size, qboolean *loaded) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void Mod_StudioLoadTextures(model_t *mod, void *data) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void CL_DrawParticles(double frametime, particle_t *cl_active_particles, float partsize) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void CL_DrawBeams(int fTrans, BEAM *active_beams) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void CL_DrawTracers(double frametime, particle_t *cl_active_tracers) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
qboolean R_BeamCull(const vec3_t start, const vec3_t end, qboolean pvsOnly) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
void DrawSingleDecal(decal_t *pDecal, msurface_t *fa) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
float *R_DecalSetupVerts(decal_t *pDecal, msurface_t *surf, int texture, int *outCount) |
||||||
|
{ |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
void R_EntityRemoveDecals(model_t *mod) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_SelectTexture(int texture) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_LoadTexMatrixExt(const float *glmatrix) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_LoadIdentityTexMatrix() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_CleanUpTextureUnits(int last) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_TexGen(unsigned int coord, unsigned int mode) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_TextureTarget(uint target) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void CL_DrawParticlesExternal(const ref_viewpass_t *rvp, qboolean trans_pass, float frametime) |
||||||
|
{ |
||||||
|
// no renderapi support
|
||||||
|
} |
||||||
|
|
||||||
|
struct mstudiotex_s *R_StudioGetTexture(cl_entity_t *e) |
||||||
|
{ |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
colorVec R_LightVec(const vec3_t start, const vec3_t end, vec3_t lightspot, vec3_t lightvec) |
||||||
|
{ |
||||||
|
colorVec v = {0}; |
||||||
|
return v; |
||||||
|
} |
||||||
|
|
||||||
|
int R_RenderFrame(const struct ref_viewpass_s *vp) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GL_BuildLightmaps() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void Mod_SetOrthoBounds(const float *mins, const float *maxs) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
qboolean R_SpeedsMessage(char *out, size_t size) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
byte *Mod_GetCurrentVis() |
||||||
|
{ |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
void R_ClearScene() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void R_NewMap() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void R_ScreenToWorld(const vec3_t screen, vec3_t point) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
void GL_SetupAttributes( int safegl ) |
||||||
|
{ |
||||||
|
gEngfuncs.Con_Reportf( "Creating an extended GL context for debug...\n" ); |
||||||
|
gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_FLAGS, REF_GL_CONTEXT_DEBUG_FLAG ); |
||||||
|
|
||||||
|
// untill we have any blitter in ref api, setup GL
|
||||||
|
gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_PROFILE_MASK, REF_GL_CONTEXT_PROFILE_COMPATIBILITY ); |
||||||
|
gEngfuncs.GL_SetAttribute( REF_GL_DOUBLEBUFFER, 1 ); |
||||||
|
|
||||||
|
gEngfuncs.GL_SetAttribute( REF_GL_RED_SIZE, 5 ); |
||||||
|
gEngfuncs.GL_SetAttribute( REF_GL_GREEN_SIZE, 6 ); |
||||||
|
gEngfuncs.GL_SetAttribute( REF_GL_BLUE_SIZE, 5 ); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
qboolean R_Init() |
||||||
|
{ |
||||||
|
gl_emboss_scale = gEngfuncs.Cvar_Get( "gl_emboss_scale", "0", FCVAR_ARCHIVE|FCVAR_LATCH, "fake bumpmapping scale" ); |
||||||
|
// create the window and set up the context
|
||||||
|
if( !gEngfuncs.R_Init_Video( REF_GL )) // request GL context
|
||||||
|
{ |
||||||
|
gEngfuncs.R_Free_Video(); |
||||||
|
|
||||||
|
gEngfuncs.Host_Error( "Can't initialize video subsystem\nProbably driver was not installed" ); |
||||||
|
return false; |
||||||
|
} |
||||||
|
r_temppool = Mem_AllocPool( "ref_sw zone" ); |
||||||
|
vid.width = 1920; |
||||||
|
vid.height = 1080; |
||||||
|
vid.rowbytes = 1920; // rowpixels
|
||||||
|
|
||||||
|
vid.buffer = Mem_Malloc( r_temppool, 1920*1080*sizeof( pixel_t ) ); |
||||||
|
|
||||||
|
R_InitImages(); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
void R_Shutdown() |
||||||
|
{ |
||||||
|
R_ShutdownImages(); |
||||||
|
gEngfuncs.R_Free_Video(); |
||||||
|
} |
||||||
|
|
||||||
|
ref_interface_t gReffuncs = |
||||||
|
{ |
||||||
|
R_Init, |
||||||
|
R_Shutdown, |
||||||
|
|
||||||
|
GL_SetupAttributes, |
||||||
|
GL_OnContextCreated, |
||||||
|
GL_InitExtensions, |
||||||
|
GL_ClearExtensions, |
||||||
|
|
||||||
|
R_BeginFrame, |
||||||
|
R_RenderScene, |
||||||
|
R_EndFrame, |
||||||
|
R_PushScene, |
||||||
|
R_PopScene, |
||||||
|
GL_BackendStartFrame, |
||||||
|
GL_BackendEndFrame, |
||||||
|
|
||||||
|
R_ClearScreen, |
||||||
|
R_AllowFog, |
||||||
|
GL_SetRenderMode, |
||||||
|
|
||||||
|
R_AddEntity, |
||||||
|
CL_AddCustomBeam, |
||||||
|
R_ProcessEntData, |
||||||
|
|
||||||
|
IsNormalPass, |
||||||
|
|
||||||
|
R_ShowTextures, |
||||||
|
R_ShowTree, |
||||||
|
R_IncrementSpeedsCounter, |
||||||
|
|
||||||
|
R_GetTextureOriginalBuffer, |
||||||
|
GL_LoadTextureFromBuffer, |
||||||
|
R_GetBuiltinTexture, |
||||||
|
R_FreeSharedTexture, |
||||||
|
GL_ProcessTexture, |
||||||
|
R_SetupSky, |
||||||
|
|
||||||
|
R_Set2DMode, |
||||||
|
R_DrawStretchRaw, |
||||||
|
R_DrawStretchPic, |
||||||
|
R_DrawTileClear, |
||||||
|
CL_FillRGBA, |
||||||
|
CL_FillRGBABlend, |
||||||
|
|
||||||
|
VID_ScreenShot, |
||||||
|
VID_CubemapShot, |
||||||
|
|
||||||
|
R_LightPoint, |
||||||
|
|
||||||
|
R_DecalShoot, |
||||||
|
R_DecalRemoveAll, |
||||||
|
R_CreateDecalList, |
||||||
|
R_ClearAllDecals, |
||||||
|
|
||||||
|
R_StudioEstimateFrame, |
||||||
|
R_StudioLerpMovement, |
||||||
|
CL_InitStudioAPI, |
||||||
|
|
||||||
|
R_InitSkyClouds, |
||||||
|
GL_SubdivideSurface, |
||||||
|
CL_RunLightStyles, |
||||||
|
|
||||||
|
R_GetSpriteParms, |
||||||
|
R_GetSpriteTexture, |
||||||
|
|
||||||
|
Mod_LoadMapSprite, |
||||||
|
Mod_ProcessRenderData, |
||||||
|
Mod_StudioLoadTextures, |
||||||
|
|
||||||
|
CL_DrawParticles, |
||||||
|
CL_DrawTracers, |
||||||
|
CL_DrawBeams, |
||||||
|
R_BeamCull, |
||||||
|
|
||||||
|
GL_RenderGetParm, |
||||||
|
R_GetDetailScaleForTexture, |
||||||
|
R_GetExtraParmsForTexture, |
||||||
|
R_GetFrameTime, |
||||||
|
|
||||||
|
R_SetCurrentEntity, |
||||||
|
R_SetCurrentModel, |
||||||
|
|
||||||
|
GL_FindTexture, |
||||||
|
GL_TextureName, |
||||||
|
GL_TextureData, |
||||||
|
GL_LoadTexture, |
||||||
|
GL_CreateTexture, |
||||||
|
GL_LoadTextureArray, |
||||||
|
GL_CreateTextureArray, |
||||||
|
GL_FreeTexture, |
||||||
|
|
||||||
|
DrawSingleDecal, |
||||||
|
R_DecalSetupVerts, |
||||||
|
R_EntityRemoveDecals, |
||||||
|
|
||||||
|
R_UploadStretchRaw, |
||||||
|
|
||||||
|
GL_Bind, |
||||||
|
GL_SelectTexture, |
||||||
|
GL_LoadTexMatrixExt, |
||||||
|
GL_LoadIdentityTexMatrix, |
||||||
|
GL_CleanUpTextureUnits, |
||||||
|
GL_TexGen, |
||||||
|
GL_TextureTarget, |
||||||
|
GL_SetTexCoordArrayMode, |
||||||
|
GL_UpdateTexSize, |
||||||
|
NULL, |
||||||
|
NULL, |
||||||
|
|
||||||
|
CL_DrawParticlesExternal, |
||||||
|
R_LightVec, |
||||||
|
R_StudioGetTexture, |
||||||
|
|
||||||
|
R_RenderFrame, |
||||||
|
GL_BuildLightmaps, |
||||||
|
Mod_SetOrthoBounds, |
||||||
|
R_SpeedsMessage, |
||||||
|
Mod_GetCurrentVis, |
||||||
|
R_NewMap, |
||||||
|
R_ClearScene, |
||||||
|
|
||||||
|
TriRenderMode, |
||||||
|
TriBegin, |
||||||
|
TriEnd, |
||||||
|
_TriColor4f, |
||||||
|
TriColor4ub, |
||||||
|
TriTexCoord2f, |
||||||
|
TriVertex3fv, |
||||||
|
TriVertex3f, |
||||||
|
TriWorldToScreen, |
||||||
|
TriFog, |
||||||
|
R_ScreenToWorld, |
||||||
|
TriGetMatrix, |
||||||
|
TriFogParams, |
||||||
|
TriCullFace, |
||||||
|
|
||||||
|
VGUI_DrawInit, |
||||||
|
VGUI_DrawShutdown, |
||||||
|
VGUI_SetupDrawingText, |
||||||
|
VGUI_SetupDrawingRect, |
||||||
|
VGUI_SetupDrawingImage, |
||||||
|
VGUI_BindTexture, |
||||||
|
VGUI_EnableTexture, |
||||||
|
VGUI_CreateTexture, |
||||||
|
VGUI_UploadTexture, |
||||||
|
VGUI_UploadTextureBlock, |
||||||
|
VGUI_DrawQuad, |
||||||
|
VGUI_GetTextureSizes, |
||||||
|
VGUI_GenerateTexture, |
||||||
|
}; |
||||||
|
|
||||||
|
int GAME_EXPORT GetRefAPI( int version, ref_interface_t *funcs, ref_api_t *engfuncs, ref_globals_t *globals ) |
||||||
|
{ |
||||||
|
if( version != REF_API_VERSION ) |
||||||
|
return 0; |
||||||
|
|
||||||
|
// fill in our callbacks
|
||||||
|
memcpy( funcs, &gReffuncs, sizeof( ref_interface_t )); |
||||||
|
memcpy( &gEngfuncs, engfuncs, sizeof( ref_api_t )); |
||||||
|
gpGlobals = globals; |
||||||
|
|
||||||
|
return REF_API_VERSION; |
||||||
|
} |
@ -0,0 +1,283 @@ |
|||||||
|
/*
|
||||||
|
gl_draw.c - orthogonal drawing stuff |
||||||
|
Copyright (C) 2010 Uncle Mike |
||||||
|
|
||||||
|
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 3 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. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "r_local.h" |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
R_GetImageParms |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void R_GetTextureParms( int *w, int *h, int texnum ) |
||||||
|
{ |
||||||
|
image_t *glt; |
||||||
|
|
||||||
|
glt = R_GetTexture( texnum ); |
||||||
|
if( w ) *w = glt->srcWidth; |
||||||
|
if( h ) *h = glt->srcHeight; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
R_GetSpriteParms |
||||||
|
|
||||||
|
same as GetImageParms but used |
||||||
|
for sprite models |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void R_GetSpriteParms( int *frameWidth, int *frameHeight, int *numFrames, int currentFrame, const model_t *pSprite ) |
||||||
|
{ |
||||||
|
mspriteframe_t *pFrame; |
||||||
|
|
||||||
|
if( !pSprite || pSprite->type != mod_sprite ) return; // bad model ?
|
||||||
|
//pFrame = R_GetSpriteFrame( pSprite, currentFrame, 0.0f );
|
||||||
|
|
||||||
|
//if( frameWidth ) *frameWidth = pFrame->width;
|
||||||
|
// if( frameHeight ) *frameHeight = pFrame->height;
|
||||||
|
//if( numFrames ) *numFrames = pSprite->numframes;
|
||||||
|
} |
||||||
|
|
||||||
|
int R_GetSpriteTexture( const model_t *m_pSpriteModel, int frame ) |
||||||
|
{ |
||||||
|
if( !m_pSpriteModel || m_pSpriteModel->type != mod_sprite || !m_pSpriteModel->cache.data ) |
||||||
|
return 0; |
||||||
|
|
||||||
|
return 0;//R_GetSpriteFrame( m_pSpriteModel, frame, 0.0f )->gl_texturenum;
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
Draw_StretchPicImplementation |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void R_DrawStretchPicImplementation (int x, int y, int w, int h, int s1, int t1, int s2, int t2, image_t *pic) |
||||||
|
{ |
||||||
|
pixel_t *dest, *source; |
||||||
|
unsigned int v, u, sv; |
||||||
|
unsigned int height; |
||||||
|
unsigned int f, fstep; |
||||||
|
int skip; |
||||||
|
|
||||||
|
if( x < 0 ) |
||||||
|
{ |
||||||
|
s1 += (-x)*(s2-s1) / w; |
||||||
|
x = 0; |
||||||
|
} |
||||||
|
if( x + w > vid.width ) |
||||||
|
{ |
||||||
|
s2 -= (x + w - vid.width) * (s2 - s1)/ w ; |
||||||
|
w = vid.width - x; |
||||||
|
} |
||||||
|
if( y + h > vid.height ) |
||||||
|
{ |
||||||
|
t2 -= (y + h - vid.height) * (t2 - t1) / h; |
||||||
|
h = vid.height - y; |
||||||
|
} |
||||||
|
|
||||||
|
if( !pic->pixels[0] || s1 >= s2 || t1 >= t2 ) |
||||||
|
return; |
||||||
|
|
||||||
|
//gEngfuncs.Con_Printf ("pixels is %p\n", pic->pixels[0] );
|
||||||
|
|
||||||
|
height = h; |
||||||
|
if (y < 0) |
||||||
|
{ |
||||||
|
skip = -y; |
||||||
|
height += y; |
||||||
|
y = 0; |
||||||
|
} |
||||||
|
else |
||||||
|
skip = 0; |
||||||
|
|
||||||
|
dest = vid.buffer + y * vid.rowbytes + x; |
||||||
|
|
||||||
|
for (v=0 ; v<height ; v++, dest += vid.rowbytes) |
||||||
|
{ |
||||||
|
sv = (skip + v)*(t2-t1)/h + t1; |
||||||
|
source = pic->pixels[0] + sv*pic->width + s1; |
||||||
|
if (w == s2 - s1) |
||||||
|
memcpy (dest, source, w * 2); |
||||||
|
else |
||||||
|
{ |
||||||
|
f = 0; |
||||||
|
fstep = s2*0x10000/w; |
||||||
|
for (u=0 ; u<w ; u+=4) |
||||||
|
{ |
||||||
|
dest[u] = source[f>>16]; |
||||||
|
f += fstep; |
||||||
|
dest[u+1] = source[f>>16]; |
||||||
|
f += fstep; |
||||||
|
dest[u+2] = source[f>>16]; |
||||||
|
f += fstep; |
||||||
|
dest[u+3] = source[f>>16]; |
||||||
|
f += fstep; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
R_DrawStretchPic |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void R_DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, int texnum ) |
||||||
|
{ |
||||||
|
image_t *pic = R_GetTexture(texnum); |
||||||
|
// GL_Bind( XASH_TEXTURE0, texnum );
|
||||||
|
if( s2 > 1 || t2 > 2 ) |
||||||
|
return; |
||||||
|
if( w <= 0 || h <= 0 ) |
||||||
|
return; |
||||||
|
R_DrawStretchPicImplementation(x,y,w,h, pic->width * s1, pic->height * t1, pic->width * s2, pic->height * t2, pic); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
Draw_TileClear |
||||||
|
|
||||||
|
This repeats a 64*64 tile graphic to fill the screen around a sized down |
||||||
|
refresh window. |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void R_DrawTileClear( int texnum, int x, int y, int w, int h ) |
||||||
|
{ |
||||||
|
int tw, th, x2, i, j; |
||||||
|
image_t *pic; |
||||||
|
pixel_t *psrc, *pdest; |
||||||
|
|
||||||
|
//GL_SetRenderMode( kRenderNormal );
|
||||||
|
_TriColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); |
||||||
|
GL_Bind( XASH_TEXTURE0, texnum ); |
||||||
|
|
||||||
|
pic = R_GetTexture( texnum ); |
||||||
|
|
||||||
|
tw = pic->width; |
||||||
|
th = pic->height; |
||||||
|
if (x < 0) |
||||||
|
{ |
||||||
|
w += x; |
||||||
|
x = 0; |
||||||
|
} |
||||||
|
if (y < 0) |
||||||
|
{ |
||||||
|
h += y; |
||||||
|
y = 0; |
||||||
|
} |
||||||
|
if (x + w > vid.width) |
||||||
|
w = vid.width - x; |
||||||
|
if (y + h > vid.height) |
||||||
|
h = vid.height - y; |
||||||
|
if (w <= 0 || h <= 0) |
||||||
|
return; |
||||||
|
|
||||||
|
x2 = x + w; |
||||||
|
pdest = vid.buffer + y*vid.rowbytes; |
||||||
|
for (i=0 ; i<h ; i++, pdest += vid.rowbytes) |
||||||
|
{ |
||||||
|
psrc = pic->pixels[0] + tw * ((i+y)&63); |
||||||
|
for (j=x ; j<x2 ; j++) |
||||||
|
pdest[j] = psrc[j&63]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
R_DrawStretchRaw |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void R_DrawStretchRaw( float x, float y, float w, float h, int cols, int rows, const byte *data, qboolean dirty ) |
||||||
|
{ |
||||||
|
byte *raw = NULL; |
||||||
|
image_t *tex; |
||||||
|
|
||||||
|
raw = (byte *)data; |
||||||
|
|
||||||
|
//pglDisable( GL_BLEND );
|
||||||
|
//pglDisable( GL_ALPHA_TEST );
|
||||||
|
//pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
|
||||||
|
|
||||||
|
tex = R_GetTexture( tr.cinTexture ); |
||||||
|
GL_Bind( XASH_TEXTURE0, tr.cinTexture ); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
R_UploadStretchRaw |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void R_UploadStretchRaw( int texture, int cols, int rows, int width, int height, const byte *data ) |
||||||
|
{ |
||||||
|
byte *raw = NULL; |
||||||
|
image_t *tex; |
||||||
|
raw = (byte *)data; |
||||||
|
|
||||||
|
tex = R_GetTexture( texture ); |
||||||
|
GL_Bind( GL_KEEP_UNIT, texture ); |
||||||
|
tex->width = cols; |
||||||
|
tex->height = rows; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
=============== |
||||||
|
R_Set2DMode |
||||||
|
=============== |
||||||
|
*/ |
||||||
|
void R_Set2DMode( qboolean enable ) |
||||||
|
{ |
||||||
|
if( enable ) |
||||||
|
{ |
||||||
|
// if( glState.in2DMode )
|
||||||
|
// return;
|
||||||
|
#if 0 |
||||||
|
// set 2D virtual screen size
|
||||||
|
pglViewport( 0, 0, gpGlobals->width, gpGlobals->height ); |
||||||
|
pglMatrixMode( GL_PROJECTION ); |
||||||
|
pglLoadIdentity(); |
||||||
|
pglOrtho( 0, gpGlobals->width, gpGlobals->height, 0, -99999, 99999 ); |
||||||
|
pglMatrixMode( GL_MODELVIEW ); |
||||||
|
pglLoadIdentity(); |
||||||
|
|
||||||
|
GL_Cull( GL_NONE ); |
||||||
|
|
||||||
|
pglDepthMask( GL_FALSE ); |
||||||
|
pglDisable( GL_DEPTH_TEST ); |
||||||
|
pglEnable( GL_ALPHA_TEST ); |
||||||
|
pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); |
||||||
|
#endif |
||||||
|
|
||||||
|
// glState.in2DMode = true;
|
||||||
|
RI.currententity = NULL; |
||||||
|
RI.currentmodel = NULL; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
#if 0 |
||||||
|
pglDepthMask( GL_TRUE ); |
||||||
|
pglEnable( GL_DEPTH_TEST ); |
||||||
|
glState.in2DMode = false; |
||||||
|
|
||||||
|
pglMatrixMode( GL_PROJECTION ); |
||||||
|
GL_LoadMatrix( RI.projectionMatrix ); |
||||||
|
|
||||||
|
pglMatrixMode( GL_MODELVIEW ); |
||||||
|
GL_LoadMatrix( RI.worldviewMatrix ); |
||||||
|
|
||||||
|
GL_Cull( GL_FRONT ); |
||||||
|
#endif |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,110 @@ |
|||||||
|
#include "r_local.h" |
||||||
|
#include "../ref_gl/gl_export.h" |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
======================== |
||||||
|
DebugCallback |
||||||
|
|
||||||
|
For ARB_debug_output |
||||||
|
======================== |
||||||
|
*/ |
||||||
|
static void APIENTRY GL_DebugOutput( GLuint source, GLuint type, GLuint id, GLuint severity, GLint length, const GLcharARB *message, GLvoid *userParam ) |
||||||
|
{ |
||||||
|
switch( type ) |
||||||
|
{ |
||||||
|
case GL_DEBUG_TYPE_ERROR_ARB: |
||||||
|
gEngfuncs.Con_Printf( S_OPENGL_ERROR "%s\n", message ); |
||||||
|
break; |
||||||
|
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB: |
||||||
|
gEngfuncs.Con_Printf( S_OPENGL_WARN "%s\n", message ); |
||||||
|
break; |
||||||
|
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB: |
||||||
|
gEngfuncs.Con_Printf( S_OPENGL_WARN "%s\n", message ); |
||||||
|
break; |
||||||
|
case GL_DEBUG_TYPE_PORTABILITY_ARB: |
||||||
|
gEngfuncs.Con_Reportf( S_OPENGL_WARN "%s\n", message ); |
||||||
|
break; |
||||||
|
case GL_DEBUG_TYPE_PERFORMANCE_ARB: |
||||||
|
gEngfuncs.Con_Printf( S_OPENGL_NOTE "%s\n", message ); |
||||||
|
break; |
||||||
|
case GL_DEBUG_TYPE_OTHER_ARB: |
||||||
|
default: |
||||||
|
gEngfuncs.Con_Printf( S_OPENGL_NOTE "%s\n", message ); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
int tex; |
||||||
|
|
||||||
|
#define LOAD(x) p##x = gEngfuncs.GL_GetProcAddress(#x) |
||||||
|
void R_InitBlit() |
||||||
|
{ |
||||||
|
LOAD(glBegin); |
||||||
|
LOAD(glEnd); |
||||||
|
LOAD(glTexCoord2f); |
||||||
|
LOAD(glVertex2f); |
||||||
|
LOAD(glEnable); |
||||||
|
LOAD(glDisable); |
||||||
|
LOAD(glTexImage2D); |
||||||
|
LOAD(glOrtho); |
||||||
|
LOAD(glMatrixMode); |
||||||
|
LOAD(glLoadIdentity); |
||||||
|
LOAD(glViewport); |
||||||
|
LOAD(glBindTexture); |
||||||
|
LOAD(glDebugMessageCallbackARB); |
||||||
|
LOAD(glDebugMessageControlARB); |
||||||
|
LOAD(glGetError); |
||||||
|
LOAD(glGenTextures); |
||||||
|
LOAD(glTexParameteri); |
||||||
|
|
||||||
|
if( gpGlobals->developer ) |
||||||
|
{ |
||||||
|
gEngfuncs.Con_Reportf( "Installing GL_DebugOutput...\n"); |
||||||
|
pglDebugMessageCallbackARB( GL_DebugOutput, NULL ); |
||||||
|
|
||||||
|
// force everything to happen in the main thread instead of in a separate driver thread
|
||||||
|
pglEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB ); |
||||||
|
} |
||||||
|
|
||||||
|
// enable all the low priority messages
|
||||||
|
pglDebugMessageControlARB( GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_LOW_ARB, 0, NULL, true ); |
||||||
|
pglGenTextures( 1, &tex ); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void R_BlitScreen() |
||||||
|
{ |
||||||
|
//memset( vid.buffer, 10, vid.width * vid.height );
|
||||||
|
pglBindTexture(GL_TEXTURE_2D, tex); |
||||||
|
pglViewport( 0, 0, gpGlobals->width, gpGlobals->height ); |
||||||
|
pglMatrixMode( GL_PROJECTION ); |
||||||
|
pglLoadIdentity(); |
||||||
|
pglOrtho( 0, gpGlobals->width, gpGlobals->height, 0, -99999, 99999 ); |
||||||
|
pglMatrixMode( GL_MODELVIEW ); |
||||||
|
pglLoadIdentity(); |
||||||
|
|
||||||
|
pglEnable( GL_TEXTURE_2D ); |
||||||
|
pglBindTexture(GL_TEXTURE_2D, tex); |
||||||
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
||||||
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
||||||
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
||||||
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
||||||
|
//gEngfuncs.Con_Printf("%d\n",pglGetError());
|
||||||
|
pglTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, vid.width, vid.height, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, vid.buffer ); |
||||||
|
//gEngfuncs.Con_Printf("%d\n",pglGetError());
|
||||||
|
pglBegin( GL_QUADS ); |
||||||
|
pglTexCoord2f( 0, 0 ); |
||||||
|
pglVertex2f( 0, 0 ); |
||||||
|
|
||||||
|
pglTexCoord2f( 1, 0 ); |
||||||
|
pglVertex2f( vid.width, 0 ); |
||||||
|
|
||||||
|
pglTexCoord2f( 1, 1 ); |
||||||
|
pglVertex2f( vid.width, vid.height ); |
||||||
|
|
||||||
|
pglTexCoord2f( 0, 1 ); |
||||||
|
pglVertex2f( 0, vid.height ); |
||||||
|
pglEnd(); |
||||||
|
pglDisable( GL_TEXTURE_2D ); |
||||||
|
gEngfuncs.GL_SwapBuffers(); |
||||||
|
} |
@ -0,0 +1,710 @@ |
|||||||
|
/*
|
||||||
|
gl_local.h - renderer local declarations |
||||||
|
Copyright (C) 2010 Uncle Mike |
||||||
|
|
||||||
|
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 3 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. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef GL_LOCAL_H |
||||||
|
#define GL_LOCAL_H |
||||||
|
#include "port.h" |
||||||
|
#include "xash3d_types.h" |
||||||
|
#include "cvardef.h" |
||||||
|
#include "const.h" |
||||||
|
#include "com_model.h" |
||||||
|
#include "cl_entity.h" |
||||||
|
#include "render_api.h" |
||||||
|
#include "protocol.h" |
||||||
|
#include "dlight.h" |
||||||
|
#include "ref_api.h" |
||||||
|
#include "mathlib.h" |
||||||
|
#include "ref_params.h" |
||||||
|
#include "enginefeatures.h" |
||||||
|
#include "com_strings.h" |
||||||
|
#include "pm_movevars.h" |
||||||
|
//#include "cvar.h"
|
||||||
|
typedef struct mip_s mip_t; |
||||||
|
#define offsetof(s,m) (size_t)&(((s *)0)->m) |
||||||
|
|
||||||
|
#define ASSERT(x) if(!( x )) gEngfuncs.Host_Error( "assert failed at %s:%i\n", __FILE__, __LINE__ ) |
||||||
|
#define Assert(x) if(!( x )) gEngfuncs.Host_Error( "assert failed at %s:%i\n", __FILE__, __LINE__ ) |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
#define CVAR_DEFINE( cv, cvname, cvstr, cvflags, cvdesc ) cvar_t cv = { cvname, cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, cvdesc } |
||||||
|
#define CVAR_DEFINE_AUTO( cv, cvstr, cvflags, cvdesc ) cvar_t cv = { #cv, cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, cvdesc } |
||||||
|
#define CVAR_TO_BOOL( x ) ((x) && ((x)->value != 0.0f) ? true : false ) |
||||||
|
|
||||||
|
#define WORLD (gEngfuncs.GetWorld()) |
||||||
|
#define WORLDMODEL (gEngfuncs.pfnGetModelByIndex( 1 )) |
||||||
|
#define MOVEVARS (gEngfuncs.pfnGetMoveVars()) |
||||||
|
|
||||||
|
// make mod_ref.h?
|
||||||
|
#define LM_SAMPLE_SIZE 16 |
||||||
|
|
||||||
|
|
||||||
|
extern byte *r_temppool; |
||||||
|
|
||||||
|
#define BLOCK_SIZE tr.block_size // lightmap blocksize
|
||||||
|
#define BLOCK_SIZE_DEFAULT 128 // for keep backward compatibility
|
||||||
|
#define BLOCK_SIZE_MAX 1024 |
||||||
|
|
||||||
|
#define MAX_TEXTURES 4096 |
||||||
|
#define MAX_DETAIL_TEXTURES 256 |
||||||
|
#define MAX_LIGHTMAPS 256 |
||||||
|
#define SUBDIVIDE_SIZE 64 |
||||||
|
#define MAX_DECAL_SURFS 4096 |
||||||
|
#define MAX_DRAW_STACK 2 // normal view and menu view
|
||||||
|
|
||||||
|
#define SHADEDOT_QUANT 16 // precalculated dot products for quantized angles
|
||||||
|
#define SHADE_LAMBERT 1.495f |
||||||
|
#define DEFAULT_ALPHATEST 0.0f |
||||||
|
|
||||||
|
// refparams
|
||||||
|
#define RP_NONE 0 |
||||||
|
#define RP_ENVVIEW BIT( 0 ) // used for cubemapshot
|
||||||
|
#define RP_OLDVIEWLEAF BIT( 1 ) |
||||||
|
#define RP_CLIPPLANE BIT( 2 ) |
||||||
|
|
||||||
|
#define RP_NONVIEWERREF (RP_ENVVIEW) |
||||||
|
#define R_ModelOpaque( rm ) ( rm == kRenderNormal ) |
||||||
|
#define R_StaticEntity( ent ) ( VectorIsNull( ent->origin ) && VectorIsNull( ent->angles )) |
||||||
|
#define RP_LOCALCLIENT( e ) ((e) != NULL && (e)->index == gEngfuncs.GetPlayerIndex() && e->player ) |
||||||
|
#define RP_NORMALPASS() ( FBitSet( RI.params, RP_NONVIEWERREF ) == 0 ) |
||||||
|
|
||||||
|
#define CL_IsViewEntityLocalPlayer() ( gEngfuncs.GetViewEntIndex() == gEngfuncs.GetPlayerIndex() ) |
||||||
|
|
||||||
|
#define CULL_VISIBLE 0 // not culled
|
||||||
|
#define CULL_BACKSIDE 1 // backside of transparent wall
|
||||||
|
#define CULL_FRUSTUM 2 // culled by frustum
|
||||||
|
#define CULL_VISFRAME 3 // culled by PVS
|
||||||
|
#define CULL_OTHER 4 // culled by other reason
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
skins will be outline flood filled and mip mapped |
||||||
|
pics and sprites with alpha will be outline flood filled |
||||||
|
pic won't be mip mapped |
||||||
|
model skin |
||||||
|
sprite frame |
||||||
|
wall texture |
||||||
|
pic |
||||||
|
*/ |
||||||
|
|
||||||
|
typedef enum |
||||||
|
{ |
||||||
|
it_skin, |
||||||
|
it_sprite, |
||||||
|
it_wall, |
||||||
|
it_pic, |
||||||
|
it_sky |
||||||
|
} imagetype_t; |
||||||
|
|
||||||
|
|
||||||
|
//===================================================================
|
||||||
|
|
||||||
|
typedef unsigned short pixel_t; |
||||||
|
|
||||||
|
typedef struct vrect_s |
||||||
|
{ |
||||||
|
int x,y,width,height; |
||||||
|
struct vrect_s *pnext; |
||||||
|
} vrect_t; |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
pixel_t *buffer; // invisible buffer
|
||||||
|
pixel_t *colormap; // 256 * VID_GRADES size
|
||||||
|
pixel_t *alphamap; // 256 * 256 translucency map
|
||||||
|
int rowbytes; // may be > width if displayed in a window
|
||||||
|
// can be negative for stupid dibs
|
||||||
|
int width; |
||||||
|
int height; |
||||||
|
} viddef_t; |
||||||
|
|
||||||
|
extern viddef_t vid; |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
int params; // rendering parameters
|
||||||
|
|
||||||
|
qboolean drawWorld; // ignore world for drawing PlayerModel
|
||||||
|
qboolean isSkyVisible; // sky is visible
|
||||||
|
qboolean onlyClientDraw; // disabled by client request
|
||||||
|
qboolean drawOrtho; // draw world as orthogonal projection
|
||||||
|
|
||||||
|
float fov_x, fov_y; // current view fov
|
||||||
|
|
||||||
|
cl_entity_t *currententity; |
||||||
|
model_t *currentmodel; |
||||||
|
cl_entity_t *currentbeam; // same as above but for beams
|
||||||
|
|
||||||
|
int viewport[4]; |
||||||
|
//gl_frustum_t frustum;
|
||||||
|
|
||||||
|
mleaf_t *viewleaf; |
||||||
|
mleaf_t *oldviewleaf; |
||||||
|
vec3_t pvsorigin; |
||||||
|
vec3_t vieworg; // locked vieworigin
|
||||||
|
vec3_t viewangles; |
||||||
|
vec3_t vforward; |
||||||
|
vec3_t vright; |
||||||
|
vec3_t vup; |
||||||
|
|
||||||
|
vec3_t cullorigin; |
||||||
|
vec3_t cull_vforward; |
||||||
|
vec3_t cull_vright; |
||||||
|
vec3_t cull_vup; |
||||||
|
|
||||||
|
float farClip; |
||||||
|
|
||||||
|
qboolean fogCustom; |
||||||
|
qboolean fogEnabled; |
||||||
|
qboolean fogSkybox; |
||||||
|
vec4_t fogColor; |
||||||
|
float fogDensity; |
||||||
|
float fogStart; |
||||||
|
float fogEnd; |
||||||
|
int cached_contents; // in water
|
||||||
|
int cached_waterlevel; // was in water
|
||||||
|
|
||||||
|
float skyMins[2][6]; |
||||||
|
float skyMaxs[2][6]; |
||||||
|
|
||||||
|
matrix4x4 objectMatrix; // currententity matrix
|
||||||
|
matrix4x4 worldviewMatrix; // modelview for world
|
||||||
|
matrix4x4 modelviewMatrix; // worldviewMatrix * objectMatrix
|
||||||
|
|
||||||
|
matrix4x4 projectionMatrix; |
||||||
|
matrix4x4 worldviewProjectionMatrix; // worldviewMatrix * projectionMatrix
|
||||||
|
byte visbytes[(MAX_MAP_LEAFS+7)/8];// actual PVS for current frame
|
||||||
|
|
||||||
|
float viewplanedist; |
||||||
|
mplane_t clipPlane; |
||||||
|
} ref_instance_t; |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
cl_entity_t *solid_entities[MAX_VISIBLE_PACKET]; // opaque moving or alpha brushes
|
||||||
|
cl_entity_t *trans_entities[MAX_VISIBLE_PACKET]; // translucent brushes
|
||||||
|
cl_entity_t *beam_entities[MAX_VISIBLE_PACKET]; |
||||||
|
uint num_solid_entities; |
||||||
|
uint num_trans_entities; |
||||||
|
uint num_beam_entities; |
||||||
|
} draw_list_t; |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
int defaultTexture; // use for bad textures
|
||||||
|
int particleTexture; |
||||||
|
int whiteTexture; |
||||||
|
int grayTexture; |
||||||
|
int blackTexture; |
||||||
|
int solidskyTexture; // quake1 solid-sky layer
|
||||||
|
int alphaskyTexture; // quake1 alpha-sky layer
|
||||||
|
int lightmapTextures[MAX_LIGHTMAPS]; |
||||||
|
int dlightTexture; // custom dlight texture
|
||||||
|
int skyboxTextures[6]; // skybox sides
|
||||||
|
int cinTexture; // cinematic texture
|
||||||
|
|
||||||
|
int skytexturenum; // this not a gl_texturenum!
|
||||||
|
int skyboxbasenum; // start with 5800
|
||||||
|
|
||||||
|
// entity lists
|
||||||
|
draw_list_t draw_stack[MAX_DRAW_STACK]; |
||||||
|
int draw_stack_pos; |
||||||
|
draw_list_t *draw_list; |
||||||
|
|
||||||
|
msurface_t *draw_decals[MAX_DECAL_SURFS]; |
||||||
|
int num_draw_decals; |
||||||
|
|
||||||
|
// OpenGL matrix states
|
||||||
|
qboolean modelviewIdentity; |
||||||
|
|
||||||
|
int visframecount; // PVS frame
|
||||||
|
int dlightframecount; // dynamic light frame
|
||||||
|
int realframecount; // not including viewpasses
|
||||||
|
int framecount; |
||||||
|
|
||||||
|
qboolean ignore_lightgamma; |
||||||
|
qboolean fCustomRendering; |
||||||
|
qboolean fResetVis; |
||||||
|
qboolean fFlipViewModel; |
||||||
|
|
||||||
|
// tree visualization stuff
|
||||||
|
int recursion_level; |
||||||
|
int max_recursion; |
||||||
|
|
||||||
|
byte visbytes[(MAX_MAP_LEAFS+7)/8]; // member custom PVS
|
||||||
|
int lightstylevalue[MAX_LIGHTSTYLES]; // value 0 - 65536
|
||||||
|
int block_size; // lightmap blocksize
|
||||||
|
|
||||||
|
double frametime; // special frametime for multipass rendering (will set to 0 on a nextview)
|
||||||
|
float blend; // global blend value
|
||||||
|
|
||||||
|
// cull info
|
||||||
|
vec3_t modelorg; // relative to viewpoint
|
||||||
|
|
||||||
|
qboolean fCustomSkybox; |
||||||
|
} gl_globals_t; |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
uint c_world_polys; |
||||||
|
uint c_studio_polys; |
||||||
|
uint c_sprite_polys; |
||||||
|
uint c_alias_polys; |
||||||
|
uint c_world_leafs; |
||||||
|
|
||||||
|
uint c_view_beams_count; |
||||||
|
uint c_active_tents_count; |
||||||
|
uint c_alias_models_drawn; |
||||||
|
uint c_studio_models_drawn; |
||||||
|
uint c_sprite_models_drawn; |
||||||
|
uint c_particle_count; |
||||||
|
|
||||||
|
uint c_client_ents; // entities that moved to client
|
||||||
|
double t_world_node; |
||||||
|
double t_world_draw; |
||||||
|
} ref_speeds_t; |
||||||
|
|
||||||
|
extern ref_speeds_t r_stats; |
||||||
|
extern ref_instance_t RI; |
||||||
|
extern gl_globals_t tr; |
||||||
|
|
||||||
|
extern float gldepthmin, gldepthmax; |
||||||
|
#define r_numEntities (tr.draw_list->num_solid_entities + tr.draw_list->num_trans_entities) |
||||||
|
#define r_numStatics (r_stats.c_client_ents) |
||||||
|
|
||||||
|
typedef struct image_s |
||||||
|
{ |
||||||
|
char name[256]; // game path, including extension (can be store image programs)
|
||||||
|
word srcWidth; // keep unscaled sizes
|
||||||
|
word srcHeight; |
||||||
|
word width; // upload width\height
|
||||||
|
word height; |
||||||
|
word depth; // texture depth or count of layers for 2D_ARRAY
|
||||||
|
byte numMips; // mipmap count
|
||||||
|
|
||||||
|
|
||||||
|
texFlags_t flags; |
||||||
|
|
||||||
|
rgba_t fogParams; // some water textures
|
||||||
|
// contain info about underwater fog
|
||||||
|
rgbdata_t *original; // keep original image
|
||||||
|
|
||||||
|
// debug info
|
||||||
|
size_t size; // upload size for debug targets
|
||||||
|
|
||||||
|
// detail textures stuff
|
||||||
|
float xscale; |
||||||
|
float yscale; |
||||||
|
|
||||||
|
imagetype_t type; |
||||||
|
qboolean transparent; |
||||||
|
pixel_t *pixels[4]; // mip levels
|
||||||
|
|
||||||
|
int servercount; |
||||||
|
uint hashValue; |
||||||
|
struct gltexture_s *nextHash; |
||||||
|
} image_t; |
||||||
|
|
||||||
|
#if 0 |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_backend.c
|
||||||
|
//
|
||||||
|
void GL_BackendStartFrame( void ); |
||||||
|
void GL_BackendEndFrame( void ); |
||||||
|
void GL_CleanUpTextureUnits( int last ); |
||||||
|
void GL_Bind( int tmu, unsigned int texnum ); |
||||||
|
void GL_LoadTexMatrix( const matrix4x4 m ); |
||||||
|
void GL_LoadTexMatrixExt( const float *glmatrix ); |
||||||
|
void GL_LoadMatrix( const matrix4x4 source ); |
||||||
|
void GL_TexGen( unsigned int coord, unsigned int mode ); |
||||||
|
void GL_SelectTexture( int texture ); |
||||||
|
void GL_CleanupAllTextureUnits( void ); |
||||||
|
void GL_LoadIdentityTexMatrix( void ); |
||||||
|
void GL_DisableAllTexGens( void ); |
||||||
|
void GL_SetRenderMode( int mode ); |
||||||
|
void GL_TextureTarget( uint target ); |
||||||
|
void GL_Cull( unsigned int cull ); |
||||||
|
void R_ShowTextures( void ); |
||||||
|
void R_ShowTree( void ); |
||||||
|
void SCR_TimeRefresh_f( void ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_beams.c
|
||||||
|
//
|
||||||
|
void CL_DrawBeams( int fTrans, BEAM *active_beams ); |
||||||
|
qboolean R_BeamCull( const vec3_t start, const vec3_t end, qboolean pvsOnly ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_cull.c
|
||||||
|
//
|
||||||
|
int R_CullModel( cl_entity_t *e, const vec3_t absmin, const vec3_t absmax ); |
||||||
|
qboolean R_CullBox( const vec3_t mins, const vec3_t maxs ); |
||||||
|
qboolean R_CullSphere( const vec3_t centre, const float radius ); |
||||||
|
//int R_CullSurface( msurface_t *surf, gl_frustum_t *frustum, uint clipflags );
|
||||||
|
|
||||||
|
//
|
||||||
|
// gl_decals.c
|
||||||
|
//
|
||||||
|
void DrawSurfaceDecals( msurface_t *fa, qboolean single, qboolean reverse ); |
||||||
|
float *R_DecalSetupVerts( decal_t *pDecal, msurface_t *surf, int texture, int *outCount ); |
||||||
|
void DrawSingleDecal( decal_t *pDecal, msurface_t *fa ); |
||||||
|
void R_EntityRemoveDecals( model_t *mod ); |
||||||
|
void DrawDecalsBatch( void ); |
||||||
|
void R_ClearDecals( void ); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// gl_drawhulls.c
|
||||||
|
//
|
||||||
|
void R_DrawWorldHull( void ); |
||||||
|
void R_DrawModelHull( void ); |
||||||
|
#endif |
||||||
|
|
||||||
|
void GL_Bind( int tmu, unsigned int texnum ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_draw.c
|
||||||
|
//
|
||||||
|
void R_Set2DMode( qboolean enable ); |
||||||
|
void R_DrawTileClear( int texnum, int x, int y, int w, int h ); |
||||||
|
void R_UploadStretchRaw( int texture, int cols, int rows, int width, int height, const byte *data );//
|
||||||
|
|
||||||
|
// gl_image.c
|
||||||
|
//
|
||||||
|
void R_SetTextureParameters( void ); |
||||||
|
image_t *R_GetTexture( unsigned int texnum ); |
||||||
|
#define GL_LoadTextureInternal( name, pic, flags ) GL_LoadTextureFromBuffer( name, pic, flags, false ) |
||||||
|
#define GL_UpdateTextureInternal( name, pic, flags ) GL_LoadTextureFromBuffer( name, pic, flags, true ) |
||||||
|
int GL_LoadTexture( const char *name, const byte *buf, size_t size, int flags ); |
||||||
|
int GL_LoadTextureArray( const char **names, int flags ); |
||||||
|
int GL_LoadTextureFromBuffer( const char *name, rgbdata_t *pic, texFlags_t flags, qboolean update ); |
||||||
|
byte *GL_ResampleTexture( const byte *source, int in_w, int in_h, int out_w, int out_h, qboolean isNormalMap ); |
||||||
|
int GL_CreateTexture( const char *name, int width, int height, const void *buffer, texFlags_t flags ); |
||||||
|
int GL_CreateTextureArray( const char *name, int width, int height, int depth, const void *buffer, texFlags_t flags ); |
||||||
|
void GL_ProcessTexture( int texnum, float gamma, int topColor, int bottomColor ); |
||||||
|
void GL_UpdateTexSize( int texnum, int width, int height, int depth ); |
||||||
|
void GL_ApplyTextureParams( image_t *tex ); |
||||||
|
int GL_FindTexture( const char *name ); |
||||||
|
void GL_FreeTexture( unsigned int texnum ); |
||||||
|
const char *GL_Target( unsigned int target ); |
||||||
|
void R_InitDlightTexture( void ); |
||||||
|
void R_TextureList_f( void ); |
||||||
|
void R_InitImages( void ); |
||||||
|
void R_ShutdownImages( void ); |
||||||
|
#if 0 |
||||||
|
//
|
||||||
|
// gl_rlight.c
|
||||||
|
//
|
||||||
|
void CL_RunLightStyles( void ); |
||||||
|
void R_PushDlights( void ); |
||||||
|
void R_AnimateLight( void ); |
||||||
|
void R_GetLightSpot( vec3_t lightspot ); |
||||||
|
void R_MarkLights( dlight_t *light, int bit, mnode_t *node ); |
||||||
|
colorVec R_LightVec( const vec3_t start, const vec3_t end, vec3_t lightspot, vec3_t lightvec ); |
||||||
|
int R_CountSurfaceDlights( msurface_t *surf ); |
||||||
|
colorVec R_LightPoint( const vec3_t p0 ); |
||||||
|
int R_CountDlights( void ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_rmain.c
|
||||||
|
//
|
||||||
|
void R_ClearScene( void ); |
||||||
|
void R_LoadIdentity( void ); |
||||||
|
void R_RenderScene( void ); |
||||||
|
void R_DrawCubemapView( const vec3_t origin, const vec3_t angles, int size ); |
||||||
|
void R_SetupRefParams( const struct ref_viewpass_s *rvp ); |
||||||
|
void R_TranslateForEntity( cl_entity_t *e ); |
||||||
|
void R_RotateForEntity( cl_entity_t *e ); |
||||||
|
void R_SetupGL( qboolean set_gl_state ); |
||||||
|
void R_AllowFog( qboolean allowed ); |
||||||
|
void R_SetupFrustum( void ); |
||||||
|
void R_FindViewLeaf( void ); |
||||||
|
void R_PushScene( void ); |
||||||
|
void R_PopScene( void ); |
||||||
|
void R_DrawFog( void ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_rmath.c
|
||||||
|
//
|
||||||
|
void Matrix4x4_ToArrayFloatGL( const matrix4x4 in, float out[16] ); |
||||||
|
void Matrix4x4_FromArrayFloatGL( matrix4x4 out, const float in[16] ); |
||||||
|
void Matrix4x4_Concat( matrix4x4 out, const matrix4x4 in1, const matrix4x4 in2 ); |
||||||
|
void Matrix4x4_ConcatTranslate( matrix4x4 out, float x, float y, float z ); |
||||||
|
void Matrix4x4_ConcatRotate( matrix4x4 out, float angle, float x, float y, float z ); |
||||||
|
void Matrix4x4_ConcatScale( matrix4x4 out, float x ); |
||||||
|
void Matrix4x4_ConcatScale3( matrix4x4 out, float x, float y, float z ); |
||||||
|
void Matrix4x4_CreateTranslate( matrix4x4 out, float x, float y, float z ); |
||||||
|
void Matrix4x4_CreateRotate( matrix4x4 out, float angle, float x, float y, float z ); |
||||||
|
void Matrix4x4_CreateScale( matrix4x4 out, float x ); |
||||||
|
void Matrix4x4_CreateScale3( matrix4x4 out, float x, float y, float z ); |
||||||
|
void Matrix4x4_CreateProjection(matrix4x4 out, float xMax, float xMin, float yMax, float yMin, float zNear, float zFar); |
||||||
|
void Matrix4x4_CreateOrtho(matrix4x4 m, float xLeft, float xRight, float yBottom, float yTop, float zNear, float zFar); |
||||||
|
void Matrix4x4_CreateModelview( matrix4x4 out ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_rmisc.c
|
||||||
|
//
|
||||||
|
void R_ClearStaticEntities( void ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_rsurf.c
|
||||||
|
//
|
||||||
|
void R_MarkLeaves( void ); |
||||||
|
void R_DrawWorld( void ); |
||||||
|
void R_DrawWaterSurfaces( void ); |
||||||
|
void R_DrawBrushModel( cl_entity_t *e ); |
||||||
|
void GL_SubdivideSurface( msurface_t *fa ); |
||||||
|
void GL_BuildPolygonFromSurface( model_t *mod, msurface_t *fa ); |
||||||
|
void DrawGLPoly( glpoly_t *p, float xScale, float yScale ); |
||||||
|
texture_t *R_TextureAnimation( msurface_t *s ); |
||||||
|
void GL_SetupFogColorForSurfaces( void ); |
||||||
|
void R_DrawAlphaTextureChains( void ); |
||||||
|
void GL_RebuildLightmaps( void ); |
||||||
|
void GL_InitRandomTable( void ); |
||||||
|
void GL_BuildLightmaps( void ); |
||||||
|
void GL_ResetFogColor( void ); |
||||||
|
void R_GenerateVBO(); |
||||||
|
void R_ClearVBO(); |
||||||
|
void R_AddDecalVBO( decal_t *pdecal, msurface_t *surf ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_rpart.c
|
||||||
|
//
|
||||||
|
void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean trans_pass, float frametime ); |
||||||
|
void CL_DrawParticles( double frametime, particle_t *cl_active_particles, float partsize ); |
||||||
|
void CL_DrawTracers( double frametime, particle_t *cl_active_tracers ); |
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// gl_sprite.c
|
||||||
|
//
|
||||||
|
void R_SpriteInit( void ); |
||||||
|
void Mod_LoadSpriteModel( model_t *mod, const void *buffer, qboolean *loaded, uint texFlags ); |
||||||
|
mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw ); |
||||||
|
void R_DrawSpriteModel( cl_entity_t *e ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_studio.c
|
||||||
|
//
|
||||||
|
void R_StudioInit( void ); |
||||||
|
void Mod_LoadStudioModel( model_t *mod, const void *buffer, qboolean *loaded ); |
||||||
|
void R_StudioLerpMovement( cl_entity_t *e, double time, vec3_t origin, vec3_t angles ); |
||||||
|
float CL_GetSequenceDuration( cl_entity_t *ent, int sequence ); |
||||||
|
struct mstudiotex_s *R_StudioGetTexture( cl_entity_t *e ); |
||||||
|
float CL_GetStudioEstimatedFrame( cl_entity_t *ent ); |
||||||
|
int R_GetEntityRenderMode( cl_entity_t *ent ); |
||||||
|
void R_DrawStudioModel( cl_entity_t *e ); |
||||||
|
player_info_t *pfnPlayerInfo( int index ); |
||||||
|
void R_GatherPlayerLight( void ); |
||||||
|
float R_StudioEstimateFrame( cl_entity_t *e, mstudioseqdesc_t *pseqdesc ); |
||||||
|
void R_StudioLerpMovement( cl_entity_t *e, double time, vec3_t origin, vec3_t angles ); |
||||||
|
void R_StudioResetPlayerModels( void ); |
||||||
|
void CL_InitStudioAPI( void ); |
||||||
|
void Mod_StudioLoadTextures( model_t *mod, void *data ); |
||||||
|
void Mod_StudioUnloadTextures( void *data ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_alias.c
|
||||||
|
//
|
||||||
|
void Mod_LoadAliasModel( model_t *mod, const void *buffer, qboolean *loaded ); |
||||||
|
void R_DrawAliasModel( cl_entity_t *e ); |
||||||
|
void R_AliasInit( void ); |
||||||
|
|
||||||
|
//
|
||||||
|
// gl_warp.c
|
||||||
|
//
|
||||||
|
|
||||||
|
void R_InitSkyClouds( mip_t *mt, struct texture_s *tx, qboolean custom_palette ); |
||||||
|
void R_AddSkyBoxSurface( msurface_t *fa ); |
||||||
|
void R_ClearSkyBox( void ); |
||||||
|
void R_DrawSkyBox( void ); |
||||||
|
void R_DrawClouds( void ); |
||||||
|
void EmitWaterPolys( msurface_t *warp, qboolean reverse ); |
||||||
|
#endif |
||||||
|
|
||||||
|
void R_InitSkyClouds( struct mip_s *mt, struct texture_s *tx, qboolean custom_palette ); |
||||||
|
//
|
||||||
|
// gl_vgui.c
|
||||||
|
//
|
||||||
|
void VGUI_DrawInit( void ); |
||||||
|
void VGUI_DrawShutdown( void ); |
||||||
|
void VGUI_SetupDrawingText( int *pColor ); |
||||||
|
void VGUI_SetupDrawingRect( int *pColor ); |
||||||
|
void VGUI_SetupDrawingImage( int *pColor ); |
||||||
|
void VGUI_BindTexture( int id ); |
||||||
|
void VGUI_EnableTexture( qboolean enable ); |
||||||
|
void VGUI_CreateTexture( int id, int width, int height ); |
||||||
|
void VGUI_UploadTexture( int id, const char *buffer, int width, int height ); |
||||||
|
void VGUI_UploadTextureBlock( int id, int drawX, int drawY, const byte *rgba, int blockWidth, int blockHeight ); |
||||||
|
void VGUI_DrawQuad( const vpoint_t *ul, const vpoint_t *lr ); |
||||||
|
void VGUI_GetTextureSizes( int *width, int *height ); |
||||||
|
int VGUI_GenerateTexture( void ); |
||||||
|
|
||||||
|
//#include "vid_common.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// renderer exports
|
||||||
|
//
|
||||||
|
qboolean R_Init( void ); |
||||||
|
void R_Shutdown( void ); |
||||||
|
void GL_SetupAttributes( int safegl ); |
||||||
|
void GL_OnContextCreated( void ); |
||||||
|
void GL_InitExtensions( void ); |
||||||
|
void GL_ClearExtensions( void ); |
||||||
|
void VID_CheckChanges( void ); |
||||||
|
int GL_LoadTexture( const char *name, const byte *buf, size_t size, int flags ); |
||||||
|
void GL_FreeImage( const char *name ); |
||||||
|
qboolean VID_ScreenShot( const char *filename, int shot_type ); |
||||||
|
qboolean VID_CubemapShot( const char *base, uint size, const float *vieworg, qboolean skyshot ); |
||||||
|
void R_BeginFrame( qboolean clearScene ); |
||||||
|
int R_RenderFrame( const struct ref_viewpass_s *vp ); |
||||||
|
void R_EndFrame( void ); |
||||||
|
void R_ClearScene( void ); |
||||||
|
void R_GetTextureParms( int *w, int *h, int texnum ); |
||||||
|
void R_GetSpriteParms( int *frameWidth, int *frameHeight, int *numFrames, int curFrame, const struct model_s *pSprite ); |
||||||
|
void R_DrawStretchRaw( float x, float y, float w, float h, int cols, int rows, const byte *data, qboolean dirty ); |
||||||
|
void R_DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, int texnum ); |
||||||
|
qboolean R_SpeedsMessage( char *out, size_t size ); |
||||||
|
void R_SetupSky( const char *skyboxname ); |
||||||
|
qboolean R_CullBox( const vec3_t mins, const vec3_t maxs ); |
||||||
|
int R_WorldToScreen( const vec3_t point, vec3_t screen ); |
||||||
|
void R_ScreenToWorld( const vec3_t screen, vec3_t point ); |
||||||
|
qboolean R_AddEntity( struct cl_entity_s *pRefEntity, int entityType ); |
||||||
|
void Mod_LoadMapSprite( struct model_s *mod, const void *buffer, size_t size, qboolean *loaded ); |
||||||
|
void Mod_SpriteUnloadTextures( void *data ); |
||||||
|
void Mod_UnloadAliasModel( struct model_s *mod ); |
||||||
|
void Mod_AliasUnloadTextures( void *data ); |
||||||
|
void GL_SetRenderMode( int mode ); |
||||||
|
void R_RunViewmodelEvents( void ); |
||||||
|
void R_DrawViewModel( void ); |
||||||
|
int R_GetSpriteTexture( const struct model_s *m_pSpriteModel, int frame ); |
||||||
|
void R_DecalShoot( int textureIndex, int entityIndex, int modelIndex, vec3_t pos, int flags, float scale ); |
||||||
|
void R_RemoveEfrags( struct cl_entity_s *ent ); |
||||||
|
void R_AddEfrags( struct cl_entity_s *ent ); |
||||||
|
void R_DecalRemoveAll( int texture ); |
||||||
|
int R_CreateDecalList( decallist_t *pList ); |
||||||
|
void R_ClearAllDecals( void ); |
||||||
|
byte *Mod_GetCurrentVis( void ); |
||||||
|
void Mod_SetOrthoBounds( const float *mins, const float *maxs ); |
||||||
|
void R_NewMap( void ); |
||||||
|
void CL_AddCustomBeam( cl_entity_t *pEnvBeam ); |
||||||
|
#if 0 |
||||||
|
//
|
||||||
|
// gl_opengl.c
|
||||||
|
//
|
||||||
|
#define GL_CheckForErrors() GL_CheckForErrors_( __FILE__, __LINE__ ) |
||||||
|
void GL_CheckForErrors_( const char *filename, const int fileline ); |
||||||
|
const char *GL_ErrorString( int err ); |
||||||
|
qboolean GL_Support( int r_ext ); |
||||||
|
int GL_MaxTextureUnits( void ); |
||||||
|
void GL_CheckExtension( const char *name, const dllfunc_t *funcs, const char *cvarname, int r_ext ); |
||||||
|
void GL_SetExtension( int r_ext, int enable ); |
||||||
|
#endif |
||||||
|
//
|
||||||
|
// gl_triapi.c
|
||||||
|
//
|
||||||
|
void TriRenderMode( int mode ); |
||||||
|
void TriBegin( int mode ); |
||||||
|
void TriEnd( void ); |
||||||
|
void TriTexCoord2f( float u, float v ); |
||||||
|
void TriVertex3fv( const float *v ); |
||||||
|
void TriVertex3f( float x, float y, float z ); |
||||||
|
void _TriColor4f( float r, float g, float b, float a ); |
||||||
|
void TriColor4ub( byte r, byte g, byte b, byte a ); |
||||||
|
int TriWorldToScreen( float *world, float *screen ); |
||||||
|
int TriSpriteTexture( model_t *pSpriteModel, int frame ); |
||||||
|
void TriFog( float flFogColor[3], float flStart, float flEnd, int bOn ); |
||||||
|
void TriGetMatrix( const int pname, float *matrix ); |
||||||
|
void TriFogParams( float flDensity, int iFogSkybox ); |
||||||
|
void TriCullFace( TRICULLSTYLE mode ); |
||||||
|
|
||||||
|
|
||||||
|
extern ref_api_t gEngfuncs; |
||||||
|
extern ref_globals_t *gpGlobals; |
||||||
|
extern cvar_t *gl_emboss_scale; |
||||||
|
#if 0 |
||||||
|
//
|
||||||
|
// renderer cvars
|
||||||
|
//
|
||||||
|
extern cvar_t *gl_texture_anisotropy; |
||||||
|
extern cvar_t *gl_extensions; |
||||||
|
extern cvar_t *gl_check_errors; |
||||||
|
extern cvar_t *gl_texture_lodbias; |
||||||
|
extern cvar_t *gl_texture_nearest; |
||||||
|
extern cvar_t *gl_lightmap_nearest; |
||||||
|
extern cvar_t *gl_keeptjunctions; |
||||||
|
|
||||||
|
extern cvar_t *gl_round_down; |
||||||
|
extern cvar_t *gl_detailscale; |
||||||
|
extern cvar_t *gl_wireframe; |
||||||
|
extern cvar_t *gl_polyoffset; |
||||||
|
extern cvar_t *gl_finish; |
||||||
|
extern cvar_t *gl_nosort; |
||||||
|
extern cvar_t *gl_clear; |
||||||
|
extern cvar_t *gl_test; // cvar to testify new effects
|
||||||
|
extern cvar_t *gl_msaa; |
||||||
|
extern cvar_t *gl_stencilbits; |
||||||
|
|
||||||
|
extern cvar_t *r_speeds; |
||||||
|
extern cvar_t *r_fullbright; |
||||||
|
extern cvar_t *r_norefresh; |
||||||
|
extern cvar_t *r_showtree; // build graph of visible hull
|
||||||
|
extern cvar_t *r_lighting_extended; |
||||||
|
extern cvar_t *r_lighting_modulate; |
||||||
|
extern cvar_t *r_lighting_ambient; |
||||||
|
extern cvar_t *r_studio_lambert; |
||||||
|
extern cvar_t *r_detailtextures; |
||||||
|
extern cvar_t *r_drawentities; |
||||||
|
extern cvar_t *r_decals; |
||||||
|
extern cvar_t *r_novis; |
||||||
|
extern cvar_t *r_nocull; |
||||||
|
extern cvar_t *r_lockpvs; |
||||||
|
extern cvar_t *r_lockfrustum; |
||||||
|
extern cvar_t *r_traceglow; |
||||||
|
extern cvar_t *r_dynamic; |
||||||
|
extern cvar_t *r_lightmap; |
||||||
|
extern cvar_t *r_vbo; |
||||||
|
extern cvar_t *r_vbo_dlightmode; |
||||||
|
|
||||||
|
extern cvar_t *vid_brightness; |
||||||
|
extern cvar_t *vid_gamma; |
||||||
|
|
||||||
|
//
|
||||||
|
// engine shared convars
|
||||||
|
//
|
||||||
|
extern cvar_t *gl_showtextures; |
||||||
|
extern cvar_t *tracerred; |
||||||
|
extern cvar_t *tracergreen; |
||||||
|
extern cvar_t *tracerblue; |
||||||
|
extern cvar_t *traceralpha; |
||||||
|
extern cvar_t *cl_lightstyle_lerping; |
||||||
|
extern cvar_t *r_showhull; |
||||||
|
#endif |
||||||
|
//
|
||||||
|
// engine callbacks
|
||||||
|
//
|
||||||
|
#include "crtlib.h" |
||||||
|
|
||||||
|
#define Mem_Malloc( pool, size ) gEngfuncs._Mem_Alloc( pool, size, false, __FILE__, __LINE__ ) |
||||||
|
#define Mem_Calloc( pool, size ) gEngfuncs._Mem_Alloc( pool, size, true, __FILE__, __LINE__ ) |
||||||
|
#define Mem_Realloc( pool, ptr, size ) gEngfuncs._Mem_Realloc( pool, ptr, size, true, __FILE__, __LINE__ ) |
||||||
|
#define Mem_Free( mem ) gEngfuncs._Mem_Free( mem, __FILE__, __LINE__ ) |
||||||
|
#define Mem_AllocPool( name ) gEngfuncs._Mem_AllocPool( name, __FILE__, __LINE__ ) |
||||||
|
#define Mem_FreePool( pool ) gEngfuncs._Mem_FreePool( pool, __FILE__, __LINE__ ) |
||||||
|
#define Mem_EmptyPool( pool ) gEngfuncs._Mem_EmptyPool( pool, __FILE__, __LINE__ ) |
||||||
|
|
||||||
|
#endif // GL_LOCAL_H
|
@ -0,0 +1,355 @@ |
|||||||
|
/*
|
||||||
|
gl_triapi.c - TriAPI draw methods |
||||||
|
Copyright (C) 2011 Uncle Mike |
||||||
|
Copyright (C) 2019 a1batross |
||||||
|
|
||||||
|
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 3 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. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "r_local.h" |
||||||
|
#include "const.h" |
||||||
|
|
||||||
|
static struct |
||||||
|
{ |
||||||
|
int renderMode; // override kRenderMode from TriAPI
|
||||||
|
vec4_t triRGBA; |
||||||
|
} ds; |
||||||
|
|
||||||
|
/*
|
||||||
|
=============================================================== |
||||||
|
|
||||||
|
TRIAPI IMPLEMENTATION |
||||||
|
|
||||||
|
=============================================================== |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriRenderMode |
||||||
|
|
||||||
|
set rendermode |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriRenderMode( int mode ) |
||||||
|
{ |
||||||
|
ds.renderMode = mode; |
||||||
|
#if 0 |
||||||
|
switch( mode ) |
||||||
|
{ |
||||||
|
case kRenderNormal: |
||||||
|
pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); |
||||||
|
pglDisable( GL_BLEND ); |
||||||
|
pglDepthMask( GL_TRUE ); |
||||||
|
break; |
||||||
|
case kRenderTransAlpha: |
||||||
|
pglEnable( GL_BLEND ); |
||||||
|
pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); |
||||||
|
pglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); |
||||||
|
pglDepthMask( GL_FALSE ); |
||||||
|
break; |
||||||
|
case kRenderTransColor: |
||||||
|
case kRenderTransTexture: |
||||||
|
pglEnable( GL_BLEND ); |
||||||
|
pglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); |
||||||
|
break; |
||||||
|
case kRenderGlow: |
||||||
|
case kRenderTransAdd: |
||||||
|
pglBlendFunc( GL_SRC_ALPHA, GL_ONE ); |
||||||
|
pglEnable( GL_BLEND ); |
||||||
|
pglDepthMask( GL_FALSE ); |
||||||
|
break; |
||||||
|
} |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriBegin |
||||||
|
|
||||||
|
begin triangle sequence |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriBegin( int mode ) |
||||||
|
{ |
||||||
|
#if 0 |
||||||
|
switch( mode ) |
||||||
|
{ |
||||||
|
case TRI_POINTS: |
||||||
|
mode = GL_POINTS; |
||||||
|
break; |
||||||
|
case TRI_TRIANGLES: |
||||||
|
mode = GL_TRIANGLES; |
||||||
|
break; |
||||||
|
case TRI_TRIANGLE_FAN: |
||||||
|
mode = GL_TRIANGLE_FAN; |
||||||
|
break; |
||||||
|
case TRI_QUADS: |
||||||
|
mode = GL_QUADS; |
||||||
|
break; |
||||||
|
case TRI_LINES: |
||||||
|
mode = GL_LINES; |
||||||
|
break; |
||||||
|
case TRI_TRIANGLE_STRIP: |
||||||
|
mode = GL_TRIANGLE_STRIP; |
||||||
|
break; |
||||||
|
case TRI_QUAD_STRIP: |
||||||
|
mode = GL_QUAD_STRIP; |
||||||
|
break; |
||||||
|
case TRI_POLYGON: |
||||||
|
default: |
||||||
|
mode = GL_POLYGON; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
pglBegin( mode ); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriEnd |
||||||
|
|
||||||
|
draw triangle sequence |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriEnd( void ) |
||||||
|
{ |
||||||
|
//pglEnd( );
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
_TriColor4f |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
void _TriColor4f( float r, float g, float b, float a ) |
||||||
|
{ |
||||||
|
//pglColor4f( r, g, b, a );
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriColor4ub |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriColor4ub( byte r, byte g, byte b, byte a ) |
||||||
|
{ |
||||||
|
ds.triRGBA[0] = r * (1.0f / 255.0f); |
||||||
|
ds.triRGBA[1] = g * (1.0f / 255.0f); |
||||||
|
ds.triRGBA[2] = b * (1.0f / 255.0f); |
||||||
|
ds.triRGBA[3] = a * (1.0f / 255.0f); |
||||||
|
|
||||||
|
_TriColor4f( ds.triRGBA[0], ds.triRGBA[1], ds.triRGBA[2], 1.0f ); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================= |
||||||
|
TriColor4f |
||||||
|
================= |
||||||
|
*/ |
||||||
|
void TriColor4f( float r, float g, float b, float a ) |
||||||
|
{ |
||||||
|
if( ds.renderMode == kRenderTransAlpha ) |
||||||
|
TriColor4ub( r * 255.9f, g * 255.9f, b * 255.9f, a * 255.0f ); |
||||||
|
else _TriColor4f( r * a, g * a, b * a, 1.0 ); |
||||||
|
|
||||||
|
ds.triRGBA[0] = r; |
||||||
|
ds.triRGBA[1] = g; |
||||||
|
ds.triRGBA[2] = b; |
||||||
|
ds.triRGBA[3] = a; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriTexCoord2f |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriTexCoord2f( float u, float v ) |
||||||
|
{ |
||||||
|
//pglTexCoord2f( u, v );
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriVertex3fv |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriVertex3fv( const float *v ) |
||||||
|
{ |
||||||
|
//pglVertex3fv( v );
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriVertex3f |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriVertex3f( float x, float y, float z ) |
||||||
|
{ |
||||||
|
//pglVertex3f( x, y, z );
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriWorldToScreen |
||||||
|
|
||||||
|
convert world coordinates (x,y,z) into screen (x, y) |
||||||
|
============= |
||||||
|
*/ |
||||||
|
int TriWorldToScreen( float *world, float *screen ) |
||||||
|
{ |
||||||
|
int retval; |
||||||
|
|
||||||
|
// retval = R_WorldToScreen( world, screen );
|
||||||
|
|
||||||
|
screen[0] = 0.5f * screen[0] * (float)RI.viewport[2]; |
||||||
|
screen[1] = -0.5f * screen[1] * (float)RI.viewport[3]; |
||||||
|
screen[0] += 0.5f * (float)RI.viewport[2]; |
||||||
|
screen[1] += 0.5f * (float)RI.viewport[3]; |
||||||
|
|
||||||
|
return retval; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriSpriteTexture |
||||||
|
|
||||||
|
bind current texture |
||||||
|
============= |
||||||
|
*/ |
||||||
|
int TriSpriteTexture( model_t *pSpriteModel, int frame ) |
||||||
|
{ |
||||||
|
int gl_texturenum; |
||||||
|
|
||||||
|
if(( gl_texturenum = R_GetSpriteTexture( pSpriteModel, frame )) == 0 ) |
||||||
|
return 0; |
||||||
|
|
||||||
|
if( gl_texturenum <= 0 || gl_texturenum > MAX_TEXTURES ) |
||||||
|
gl_texturenum = tr.defaultTexture; |
||||||
|
|
||||||
|
GL_Bind( XASH_TEXTURE0, gl_texturenum ); |
||||||
|
|
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriFog |
||||||
|
|
||||||
|
enables global fog on the level |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriFog( float flFogColor[3], float flStart, float flEnd, int bOn ) |
||||||
|
{ |
||||||
|
#if 0 |
||||||
|
// overrided by internal fog
|
||||||
|
if( RI.fogEnabled ) return; |
||||||
|
RI.fogCustom = bOn; |
||||||
|
|
||||||
|
// check for invalid parms
|
||||||
|
if( flEnd <= flStart ) |
||||||
|
{ |
||||||
|
RI.fogCustom = false; |
||||||
|
pglDisable( GL_FOG ); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if( RI.fogCustom ) |
||||||
|
pglEnable( GL_FOG ); |
||||||
|
else pglDisable( GL_FOG ); |
||||||
|
|
||||||
|
// copy fog params
|
||||||
|
RI.fogColor[0] = flFogColor[0] / 255.0f; |
||||||
|
RI.fogColor[1] = flFogColor[1] / 255.0f; |
||||||
|
RI.fogColor[2] = flFogColor[2] / 255.0f; |
||||||
|
RI.fogStart = flStart; |
||||||
|
RI.fogColor[3] = 1.0f; |
||||||
|
RI.fogDensity = 0.0f; |
||||||
|
RI.fogSkybox = true; |
||||||
|
RI.fogEnd = flEnd; |
||||||
|
|
||||||
|
pglFogi( GL_FOG_MODE, GL_LINEAR ); |
||||||
|
pglFogfv( GL_FOG_COLOR, RI.fogColor ); |
||||||
|
pglFogf( GL_FOG_START, RI.fogStart ); |
||||||
|
pglFogf( GL_FOG_END, RI.fogEnd ); |
||||||
|
pglHint( GL_FOG_HINT, GL_NICEST ); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriGetMatrix |
||||||
|
|
||||||
|
very strange export |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriGetMatrix( const int pname, float *matrix ) |
||||||
|
{ |
||||||
|
//pglGetFloatv( pname, matrix );
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriForParams |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriFogParams( float flDensity, int iFogSkybox ) |
||||||
|
{ |
||||||
|
RI.fogDensity = flDensity; |
||||||
|
RI.fogSkybox = iFogSkybox; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriCullFace |
||||||
|
|
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriCullFace( TRICULLSTYLE mode ) |
||||||
|
{ |
||||||
|
#if 0 |
||||||
|
int glMode; |
||||||
|
|
||||||
|
switch( mode ) |
||||||
|
{ |
||||||
|
case TRI_FRONT: |
||||||
|
glMode = GL_FRONT; |
||||||
|
break; |
||||||
|
default: |
||||||
|
glMode = GL_NONE; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
GL_Cull( mode ); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
============= |
||||||
|
TriBrightness |
||||||
|
============= |
||||||
|
*/ |
||||||
|
void TriBrightness( float brightness ) |
||||||
|
{ |
||||||
|
float r, g, b; |
||||||
|
|
||||||
|
r = ds.triRGBA[0] * ds.triRGBA[3] * brightness; |
||||||
|
g = ds.triRGBA[1] * ds.triRGBA[3] * brightness; |
||||||
|
b = ds.triRGBA[2] * ds.triRGBA[3] * brightness; |
||||||
|
|
||||||
|
_TriColor4f( r, g, b, 1.0f ); |
||||||
|
} |
||||||
|
|
@ -0,0 +1,225 @@ |
|||||||
|
/*
|
||||||
|
gl_vgui.c - OpenGL vgui draw methods |
||||||
|
Copyright (C) 2011 Uncle Mike |
||||||
|
Copyright (C) 2019 a1batross |
||||||
|
|
||||||
|
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 3 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. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "r_local.h" |
||||||
|
|
||||||
|
#define VGUI_MAX_TEXTURES ( MAX_TEXTURES / 2 ) // a half of total textures count
|
||||||
|
|
||||||
|
static int g_textures[VGUI_MAX_TEXTURES]; |
||||||
|
static int g_textureId = 0; |
||||||
|
static int g_iBoundTexture; |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_DrawInit |
||||||
|
|
||||||
|
Startup VGUI backend |
||||||
|
================ |
||||||
|
*/ |
||||||
|
void GAME_EXPORT VGUI_DrawInit( void ) |
||||||
|
{ |
||||||
|
memset( g_textures, 0, sizeof( g_textures )); |
||||||
|
g_textureId = g_iBoundTexture = 0; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_DrawShutdown |
||||||
|
|
||||||
|
Release all textures |
||||||
|
================ |
||||||
|
*/ |
||||||
|
void GAME_EXPORT VGUI_DrawShutdown( void ) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
|
||||||
|
for( i = 1; i < g_textureId; i++ ) |
||||||
|
{ |
||||||
|
GL_FreeTexture( g_textures[i] ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_GenerateTexture |
||||||
|
|
||||||
|
generate unique texture number |
||||||
|
================ |
||||||
|
*/ |
||||||
|
int GAME_EXPORT VGUI_GenerateTexture( void ) |
||||||
|
{ |
||||||
|
if( ++g_textureId >= VGUI_MAX_TEXTURES ) |
||||||
|
gEngfuncs.Host_Error( "VGUI_GenerateTexture: VGUI_MAX_TEXTURES limit exceeded\n" ); |
||||||
|
return g_textureId; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_UploadTexture |
||||||
|
|
||||||
|
Upload texture into video memory |
||||||
|
================ |
||||||
|
*/ |
||||||
|
void GAME_EXPORT VGUI_UploadTexture( int id, const char *buffer, int width, int height ) |
||||||
|
{ |
||||||
|
rgbdata_t r_image; |
||||||
|
char texName[32]; |
||||||
|
|
||||||
|
if( id <= 0 || id >= VGUI_MAX_TEXTURES ) |
||||||
|
{ |
||||||
|
gEngfuncs.Con_DPrintf( S_ERROR "VGUI_UploadTexture: bad texture %i. Ignored\n", id ); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Q_snprintf( texName, sizeof( texName ), "*vgui%i", id ); |
||||||
|
memset( &r_image, 0, sizeof( r_image )); |
||||||
|
|
||||||
|
r_image.width = width; |
||||||
|
r_image.height = height; |
||||||
|
r_image.type = PF_RGBA_32; |
||||||
|
r_image.size = r_image.width * r_image.height * 4; |
||||||
|
r_image.flags = IMAGE_HAS_COLOR|IMAGE_HAS_ALPHA; |
||||||
|
r_image.buffer = (byte *)buffer; |
||||||
|
|
||||||
|
g_textures[id] = GL_LoadTextureInternal( texName, &r_image, TF_IMAGE ); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_CreateTexture |
||||||
|
|
||||||
|
Create empty rgba texture and upload them into video memory |
||||||
|
================ |
||||||
|
*/ |
||||||
|
void GAME_EXPORT VGUI_CreateTexture( int id, int width, int height ) |
||||||
|
{ |
||||||
|
rgbdata_t r_image; |
||||||
|
char texName[32]; |
||||||
|
|
||||||
|
if( id <= 0 || id >= VGUI_MAX_TEXTURES ) |
||||||
|
{ |
||||||
|
gEngfuncs.Con_Reportf( S_ERROR "VGUI_CreateTexture: bad texture %i. Ignored\n", id ); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Q_snprintf( texName, sizeof( texName ), "*vgui%i", id ); |
||||||
|
memset( &r_image, 0, sizeof( r_image )); |
||||||
|
|
||||||
|
r_image.width = width; |
||||||
|
r_image.height = height; |
||||||
|
r_image.type = PF_RGBA_32; |
||||||
|
r_image.size = r_image.width * r_image.height * 4; |
||||||
|
r_image.flags = IMAGE_HAS_ALPHA; |
||||||
|
r_image.buffer = NULL; |
||||||
|
|
||||||
|
g_textures[id] = GL_LoadTextureInternal( texName, &r_image, TF_IMAGE|TF_NEAREST ); |
||||||
|
g_iBoundTexture = id; |
||||||
|
} |
||||||
|
|
||||||
|
void GAME_EXPORT VGUI_UploadTextureBlock( int id, int drawX, int drawY, const byte *rgba, int blockWidth, int blockHeight ) |
||||||
|
{ |
||||||
|
if( id <= 0 || id >= VGUI_MAX_TEXTURES || g_textures[id] == 0 || g_textures[id] == tr.whiteTexture ) |
||||||
|
{ |
||||||
|
gEngfuncs.Con_Reportf( S_ERROR "VGUI_UploadTextureBlock: bad texture %i. Ignored\n", id ); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
//pglTexSubImage2D( GL_TEXTURE_2D, 0, drawX, drawY, blockWidth, blockHeight, GL_RGBA, GL_UNSIGNED_BYTE, rgba );
|
||||||
|
g_iBoundTexture = id; |
||||||
|
} |
||||||
|
|
||||||
|
void GAME_EXPORT VGUI_SetupDrawingRect( int *pColor ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GAME_EXPORT VGUI_SetupDrawingText( int *pColor ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GAME_EXPORT VGUI_SetupDrawingImage( int *pColor ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void GAME_EXPORT VGUI_BindTexture( int id ) |
||||||
|
{ |
||||||
|
if( id > 0 && id < VGUI_MAX_TEXTURES && g_textures[id] ) |
||||||
|
{ |
||||||
|
GL_Bind( XASH_TEXTURE0, g_textures[id] ); |
||||||
|
g_iBoundTexture = id; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
// NOTE: same as bogus index 2700 in GoldSrc
|
||||||
|
id = g_iBoundTexture = 1; |
||||||
|
GL_Bind( XASH_TEXTURE0, g_textures[id] ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_GetTextureSizes |
||||||
|
|
||||||
|
returns wide and tall for currently binded texture |
||||||
|
================ |
||||||
|
*/ |
||||||
|
void GAME_EXPORT VGUI_GetTextureSizes( int *width, int *height ) |
||||||
|
{ |
||||||
|
image_t *glt; |
||||||
|
int texnum; |
||||||
|
|
||||||
|
if( g_iBoundTexture ) |
||||||
|
texnum = g_textures[g_iBoundTexture]; |
||||||
|
else texnum = tr.defaultTexture; |
||||||
|
|
||||||
|
glt = R_GetTexture( texnum ); |
||||||
|
if( width ) *width = glt->srcWidth; |
||||||
|
if( height ) *height = glt->srcHeight; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_EnableTexture |
||||||
|
|
||||||
|
disable texturemode for fill rectangle |
||||||
|
================ |
||||||
|
*/ |
||||||
|
void GAME_EXPORT VGUI_EnableTexture( qboolean enable ) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
================ |
||||||
|
VGUI_DrawQuad |
||||||
|
|
||||||
|
generic method to fill rectangle |
||||||
|
================ |
||||||
|
*/ |
||||||
|
void GAME_EXPORT VGUI_DrawQuad( const vpoint_t *ul, const vpoint_t *lr ) |
||||||
|
{ |
||||||
|
int width, height; |
||||||
|
float xscale, yscale; |
||||||
|
|
||||||
|
gEngfuncs.CL_GetScreenInfo( &width, &height ); |
||||||
|
|
||||||
|
xscale = gpGlobals->width / (float)width; |
||||||
|
yscale = gpGlobals->height / (float)height; |
||||||
|
|
||||||
|
ASSERT( ul != NULL && lr != NULL ); |
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
#! /usr/bin/env python |
||||||
|
# encoding: utf-8 |
||||||
|
# mittorn, 2018 |
||||||
|
|
||||||
|
from waflib import Logs |
||||||
|
import os |
||||||
|
from fwgslib import get_subproject_name |
||||||
|
|
||||||
|
top = '.' |
||||||
|
|
||||||
|
def options(opt): |
||||||
|
# stub |
||||||
|
return |
||||||
|
|
||||||
|
def configure(conf): |
||||||
|
# check for dedicated server build |
||||||
|
if conf.options.DEDICATED: |
||||||
|
return |
||||||
|
|
||||||
|
if conf.options.SUPPORT_BSP2_FORMAT: |
||||||
|
conf.env.append_unique('DEFINES', 'SUPPORT_BSP2_FORMAT') |
||||||
|
|
||||||
|
conf.env.append_unique('DEFINES', 'REF_DLL') |
||||||
|
|
||||||
|
def build(bld): |
||||||
|
if bld.env.DEDICATED: |
||||||
|
return |
||||||
|
|
||||||
|
bld.load_envs() |
||||||
|
name = get_subproject_name(bld) |
||||||
|
bld.env = bld.all_envs[name] |
||||||
|
|
||||||
|
libs = [ 'M' ] |
||||||
|
|
||||||
|
source = bld.path.ant_glob(['*.c']) |
||||||
|
|
||||||
|
source += [ '../engine/common/mathlib.c', '../engine/common/crtlib.c', '../engine/common/matrixlib.c' ] |
||||||
|
|
||||||
|
includes = ['.', |
||||||
|
'../engine', |
||||||
|
'../engine/common', |
||||||
|
'../engine/server', |
||||||
|
'../engine/client', |
||||||
|
'../common', |
||||||
|
'../pm_shared' ] |
||||||
|
|
||||||
|
bld.shlib( |
||||||
|
source = source, |
||||||
|
target = name, |
||||||
|
features = 'c', |
||||||
|
includes = includes, |
||||||
|
use = libs, |
||||||
|
install_path = bld.env.LIBDIR, |
||||||
|
subsystem = bld.env.MSVC_SUBSYSTEM |
||||||
|
) |
Loading…
Reference in new issue