fteqw/engine/gl/model_hl.h
Spoike 5172823341 code to use occlusion queries for coronas.
tweaked cl_maxfps a little. now sticks much closer to the desired rate. also tweaked cl_netfps. clamps 77fps to 13ms frames (read: 76.9 fps) in an attempt to avoid tripping up any framerate checks (we had previously been using a lower net rate with occasional 14ms frames).
viewspace particles are now a thing.
greater control over spawning particles. its now possible to spawn particles only in slime, etc.
fix soundlength builtin.
preliminary version of r_dynamic -1, which can give some significant framerate boosts on certain maps.
fix halflife bsp texture issues.
rewrote worker thread logic. workers now work as a single pool, instead of independent pools. this means that you don't have to wait for a specific thread to finish before it can load new stuff, reducing overall load times some more. worker_count cvar allows reconfiguring the number of active workers. can be changed any time.
updated mod_terrain_create command. should be more useful now and make more sense when first loaded.
fix lit support. apparently its been broken for a while.
brush editor now has csg subtraction.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4990 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-10-11 11:34:58 +00:00

254 lines
7.8 KiB
C

/*
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Half-Life Model Renderer (Experimental) Copyright (C) 2001 James 'Ender' Brown [ender@quakesrc.org] This program is
free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License along with this program; if not, write
to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. fromquake.h -
model_hl.h - halflife model structure
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
#define HLPOLYHEADER (('T' << 24) + ('S' << 16) + ('D' << 8) + 'I') /* little-endian "IDST" */
#define HLMDLHEADER "IDST"
/*
-----------------------------------------------------------------------------------------------------------------------
main model header
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
int filetypeid; //IDSP
int version; //10
char name[64];
int filesize;
vec3_t unknown3[5];
int unknown4;
int numbones;
int boneindex;
int numcontrollers;
int controllerindex;
int unknown5[2];
int numseq;
int seqindex;
int unknown6;
int seqgroups;
int numtextures;
int textures;
int unknown7[3];
int skins;
int numbodyparts;
int bodypartindex;
int unknown9[8];
} hlmdl_header_t;
/*
-----------------------------------------------------------------------------------------------------------------------
skin info
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
char name[64];
int flags;
int w; /* width */
int h; /* height */
int offset; /* index */
} hlmdl_tex_t;
/*
-----------------------------------------------------------------------------------------------------------------------
body part index
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
char name[64];
int nummodels;
int base;
int modelindex;
} hlmdl_bodypart_t;
/*
-----------------------------------------------------------------------------------------------------------------------
meshes
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
int numtris;
int index;
int skinindex;
int unknown2;
int unknown3;
} hlmdl_mesh_t;
/*
-----------------------------------------------------------------------------------------------------------------------
bones
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
char name[32];
int parent;
int unknown1;
int bonecontroller[6];
float value[6];
float scale[6];
} hlmdl_bone_t;
/*
-----------------------------------------------------------------------------------------------------------------------
bone controllers
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
int name;
int type;
float start;
float end;
int unknown1;
int index;
} hlmdl_bonecontroller_t;
/*
-----------------------------------------------------------------------------------------------------------------------
halflife model descriptor
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
char name[64];
int unknown1;
float unknown2;
int nummesh;
int meshindex;
int numverts;
int vertinfoindex;
int vertindex;
int unknown3[5];
} hlmdl_model_t;
/*
-----------------------------------------------------------------------------------------------------------------------
animation
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
unsigned short offset[6];
} hlmdl_anim_t;
/*
-----------------------------------------------------------------------------------------------------------------------
animation frames
-----------------------------------------------------------------------------------------------------------------------
*/
typedef union
{
struct {
qbyte valid;
qbyte total;
} num;
short value;
} hlmdl_animvalue_t;
/*
-----------------------------------------------------------------------------------------------------------------------
sequence descriptions
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
char name[32];
float timing;
int loop;
int unknown1[4];
int numframes;
int unknown2[2];
int motiontype;
int motionbone;
vec3_t unknown3;
int unknown4[2];
vec3_t bbox[2];
int hasblendseq;
int index;
int unknown7[2];
float unknown[4];
int unknown8;
unsigned int seqindex;
int unknown9[4];
} hlmdl_sequencelist_t;
/*
-----------------------------------------------------------------------------------------------------------------------
sequence groups
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
char name[96]; /* should be split label[32] and name[64] */
unsigned int cache;
int data;
} hlmdl_sequencedata_t;
typedef struct
{
int magic; //IDSQ
int version; //10
char name[64];
int unk1;
} hlmdl_sequencefile_t;
/*
-----------------------------------------------------------------------------------------------------------------------
halflife model internal structure
-----------------------------------------------------------------------------------------------------------------------
*/
typedef struct
{
float controller[5]; /* Position of bone controllers */
float adjust[5];
/* Static pointers */
hlmdl_header_t *header;
hlmdl_bone_t *bones;
hlmdl_bonecontroller_t *bonectls;
struct hlmodelshaders_s *shaders;
hlmdl_sequencefile_t **animcache;
zonegroup_t *memgroup;
} hlmodel_t;
#define MAX_ANIM_GROUPS 16 //submodel files containing anim data.
typedef struct //this is stored as the cache. an hlmodel_t is generated when drawing
{
hlmdl_header_t *header;
hlmdl_bone_t *bones;
hlmdl_bonecontroller_t *bonectls;
hlmdl_sequencefile_t *animcache[MAX_ANIM_GROUPS];
struct hlmodelshaders_s
{
char name[MAX_QPATH];
texnums_t defaulttex;
shader_t *shader;
int w, h;
} *shaders;
short *skins;
int numskins;
} hlmodelcache_t;
/* HL mathlib prototypes: */
void QuaternionGLAngle(const vec3_t angles, vec4_t quaternion);
void QuaternionGLMatrix(float x, float y, float z, float w, vec4_t *GLM);
//void UploadTexture(hlmdl_tex_t *ptexture, qbyte *data, qbyte *pal);
/* HL drawing */
qboolean QDECL Mod_LoadHLModel (model_t *mod, void *buffer, size_t fsize);
void R_DrawHLModel(entity_t *curent);
/* physics stuff */
void *Mod_GetHalfLifeModelData(model_t *mod);