ref_soft: Simple triapi and studio rendering (flat fill only)

This commit is contained in:
mittorn 2019-03-26 05:53:00 +07:00
parent 9ba39f65b3
commit 870ae030ca
6 changed files with 3834 additions and 37 deletions

View File

@ -407,20 +407,6 @@ 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)
{
@ -437,11 +423,6 @@ void Mod_LoadMapSprite(model_t *mod, const void *buffer, size_t size, qboolean *
}
void Mod_StudioLoadTextures(model_t *mod, void *data)
{
}
void CL_DrawParticles(double frametime, particle_t *cl_active_particles, float partsize)
{
@ -512,11 +493,6 @@ void CL_DrawParticlesExternal(const ref_viewpass_t *rvp, qboolean trans_pass, fl
// no renderapi support
}
struct mstudiotex_s *R_StudioGetTexture(cl_entity_t *e)
{
return NULL;
}
void GL_BuildLightmaps()
{

View File

@ -84,7 +84,7 @@ extern byte *r_temppool;
#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 CL_IsViewEntityLocalPlayer() ( ENGINE_GET_PARM( PARM_VIEWENT_INDEX ) == ENGINE_GET_PARM( PARM_PLAYER_INDEX ) )
#define CULL_VISIBLE 0 // not culled
#define CULL_BACKSIDE 1 // backside of transparent wall
@ -547,7 +547,7 @@ 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 );
#endif
//
// gl_studio.c
//
@ -567,7 +567,7 @@ void R_StudioResetPlayerModels( void );
void CL_InitStudioAPI( void );
void Mod_StudioLoadTextures( model_t *mod, void *data );
void Mod_StudioUnloadTextures( void *data );
#if 0
//
// gl_alias.c
//
@ -682,7 +682,7 @@ 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 );
void TriBrightness( float brightness );
#define ENGINE_GET_PARM_ (*gEngfuncs.EngineGetParm)
#define ENGINE_GET_PARM( parm ) ENGINE_GET_PARM_( (parm), 0 )
@ -694,6 +694,12 @@ extern cvar_t *r_drawentities;
extern cvar_t *vid_brightness;
extern cvar_t *vid_gamma;
extern cvar_t *r_norefresh;
extern cvar_t *r_dynamic;
extern cvar_t *r_lightmap;
// todo: gl_cull.c
#define R_CullModel(...) 0
#if 0
//
// renderer cvars

View File

@ -91,6 +91,8 @@ cvar_t *r_dspeeds;
cvar_t *r_fullbright;
cvar_t *r_lerpmodels;
cvar_t *r_novis;
cvar_t *r_lightmap;
cvar_t *r_dynamic;
cvar_t *r_speeds;
cvar_t *r_lightlevel; //FIXME HACK
@ -207,7 +209,7 @@ static int R_RankForRenderMode( int rendermode )
}
return 0;
}
#if 0
/*
================
R_GetEntityRenderMode
@ -227,7 +229,7 @@ int R_GetEntityRenderMode( cl_entity_t *ent )
RI.currententity = ent;
return ent->curstate.rendermode;
}
#endif
void R_AllowFog( qboolean allowed )
{
@ -1002,15 +1004,23 @@ R_DrawEntitiesOnList
void R_DrawEntitiesOnList( void )
{
int i;
extern int d_aflatcolor;
d_aflatcolor = 0;
tr.blend = 1.0f;
// GL_CheckForErrors();
// HACK: setup world transform
void R_AliasSetUpTransform (void);
RI.currententity = gEngfuncs.GetEntityByIndex(0);
R_AliasSetUpTransform();
extern void (*d_pdrawspans)(void *);
extern void R_PolysetFillSpans8 ( void * );
d_pdrawspans = R_PolysetFillSpans8;
// first draw solid entities
for( i = 0; i < tr.draw_list->num_solid_entities && !RI.onlyClientDraw; i++ )
{
RI.currententity = tr.draw_list->solid_entities[i];
RI.currentmodel = RI.currententity->model;
d_aflatcolor += 500;
Assert( RI.currententity != NULL );
Assert( RI.currentmodel != NULL );
@ -1025,7 +1035,7 @@ void R_DrawEntitiesOnList( void )
break;
case mod_studio:
//R_DrawStudioModel( RI.currententity );
{finalvert_t fv[3];
/*{finalvert_t fv[3];
void R_AliasSetUpTransform (void);
extern void (*d_pdrawspans)(void *);
extern void R_PolysetFillSpans8 ( void * );
@ -1036,7 +1046,8 @@ void R_DrawEntitiesOnList( void )
R_SetupFinalVert( &fv[1], -10, 10, 10, 0, 0, 0);
R_SetupFinalVert( &fv[2], 10, 10, -10, 0, 0, 0);
R_RenderTriangle( &fv );
}
}*/
R_DrawStudioModel( RI.currententity );
break;
default:
@ -1868,6 +1879,9 @@ qboolean R_Init()
r_fullbright = gEngfuncs.Cvar_Get( "r_fullbright", "0", FCVAR_CHEAT, "disable lightmaps, get fullbright for entities" );
sw_mipcap = gEngfuncs.Cvar_Get( "r_fullbright", "0", FCVAR_CHEAT, "disable lightmaps, get fullbright for entities" );
r_dynamic = gEngfuncs.Cvar_Get( "r_dynamic", "1", FCVAR_ARCHIVE, "allow dynamic lighting (dlights, lightstyles)" );
r_lightmap = gEngfuncs.Cvar_Get( "r_lightmap", "0", FCVAR_CHEAT, "lightmap debugging tool" );
// sw_aliasstats = ri.Cvar_Get ("sw_polymodelstats", "0", 0);
// sw_allow_modex = ri.Cvar_Get( "sw_allow_modex", "1", CVAR_ARCHIVE );
sw_clearcolor = gEngfuncs.Cvar_Get ("sw_clearcolor", "2", 0, "screen clear color");
@ -1915,6 +1929,7 @@ qboolean R_Init()
view_clipplanes[1].rightedge = true;
view_clipplanes[1].leftedge = view_clipplanes[2].leftedge =view_clipplanes[3].leftedge = false;
view_clipplanes[0].rightedge = view_clipplanes[2].rightedge = view_clipplanes[3].rightedge = false;
R_StudioInit();
return true;
}

View File

@ -1149,7 +1149,7 @@ void R_PolysetFillSpans8 (spanpackage_t *pspanpackage)
int lcount;
// FIXME: do z buffering
color = d_aflatcolor+= 100;
color = d_aflatcolor++ * 10;
do
{

3761
r_studio.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -23,6 +23,10 @@ static struct
vec4_t triRGBA;
} ds;
finalvert_t triv[3];
int vertcount;
int mode;
/*
===============================================================
@ -76,7 +80,7 @@ TriBegin
begin triangle sequence
=============
*/
void TriBegin( int mode )
void TriBegin( int mode1 )
{
#if 0
switch( mode )
@ -110,6 +114,8 @@ void TriBegin( int mode )
pglBegin( mode );
#endif
mode = mode1;
vertcount = 0;
}
/*
@ -121,6 +127,8 @@ draw triangle sequence
*/
void TriEnd( void )
{
//if( vertcount == 3 )
R_RenderTriangle( triv );
//pglEnd( );
}
@ -212,6 +220,7 @@ TriVertex3fv
void TriVertex3fv( const float *v )
{
//pglVertex3fv( v );
TriVertex3f( v[0], v[1], v[2] );
}
/*
@ -222,7 +231,37 @@ TriVertex3f
*/
void TriVertex3f( float x, float y, float z )
{
//pglVertex3f( x, y, z );
if( mode == TRI_TRIANGLE_FAN )
{
R_SetupFinalVert( &triv[vertcount], x, y, z, 0,0,0);
vertcount++;
if( vertcount >= 3 )
{
R_RenderTriangle( triv );
triv[1] = triv[2];
vertcount = 2;
}
}
if( mode == TRI_TRIANGLE_STRIP )
{
R_SetupFinalVert( &triv[vertcount], x, y, z, 0,0,0);
vertcount++;
if( vertcount == 3 )
{
R_RenderTriangle( triv );
finalvert_t fv = triv[0];
triv[0] = triv[2];
triv[2] = fv;
R_RenderTriangle( triv );
fv = triv[0];
triv[0] = triv[2];
triv[2] = fv;
triv[0] = triv[1];
triv[1] = triv[2];
vertcount = 2;
}
}
}
/*