From 5fd2c001d6a6927f57020d24d34cd2fcbc6c439e Mon Sep 17 00:00:00 2001 From: cloudwalk Date: Fri, 2 Oct 2020 01:56:49 +0000 Subject: [PATCH] model_shared: Move skinframe struct to r_textures.h git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12983 d7cf8633-e32d-0410-b094-e92efae38249 --- model_shared.h | 53 ++++++-------------------------------------------- r_textures.h | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 47 deletions(-) diff --git a/model_shared.h b/model_shared.h index 463af5f1..8bbd6921 100644 --- a/model_shared.h +++ b/model_shared.h @@ -29,6 +29,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. struct rtexture_s; struct mempool_s; struct skeleton_s; +struct skinframe_s; + typedef enum synctype_e {ST_SYNC=0, ST_RAND } synctype_t; /* @@ -50,49 +52,6 @@ typedef struct animscene_s } animscene_t; -typedef struct skinframe_s -{ - struct rtexture_s *stain; // inverse modulate with background (used for decals and such) - struct rtexture_s *merged; // original texture without glow - struct rtexture_s *base; // original texture without pants/shirt/glow - struct rtexture_s *pants; // pants only (in greyscale) - struct rtexture_s *shirt; // shirt only (in greyscale) - struct rtexture_s *nmap; // normalmap (bumpmap for dot3) - struct rtexture_s *gloss; // glossmap (for dot3) - struct rtexture_s *glow; // glow only (fullbrights) - struct rtexture_s *fog; // alpha of the base texture (if not opaque) - struct rtexture_s *reflect; // colored mask for cubemap reflections - // accounting data for hash searches: - // the compare variables are used to identify internal skins from certain - // model formats - // (so that two q1bsp maps with the same texture name for different - // textures do not have any conflicts) - struct skinframe_s *next; // next on hash chain - char basename[MAX_QPATH]; // name of this - int textureflags; // texture flags to use - int comparewidth; - int compareheight; - int comparecrc; - // mark and sweep garbage collection, this value is updated to a new value - // on each level change for the used skinframes, if some are not used they - // are freed - unsigned int loadsequence; - // indicates whether this texture has transparent pixels - qbool hasalpha; - // average texture color, if applicable - float avgcolor[4]; - // for mdl skins, we actually only upload on first use (many are never used, and they are almost never used in both base+pants+shirt and merged modes) - unsigned char *qpixels; - int qwidth; - int qheight; - qbool qhascolormapping; - qbool qgeneratebase; - qbool qgeneratemerged; - qbool qgeneratenmap; - qbool qgenerateglow; -} -skinframe_t; - struct md3vertex_s; struct trivertx_s; typedef struct texvecvertex_s @@ -249,9 +208,9 @@ typedef struct texture_s float biaspolygonoffset; // textures to use when rendering this material (derived from materialshaderpass) - skinframe_t *currentskinframe; + struct skinframe_s *currentskinframe; // textures to use for terrain texture blending (derived from backgroundshaderpass) - skinframe_t *backgroundcurrentskinframe; + struct skinframe_s *backgroundcurrentskinframe; // total frames in sequence and alternate sequence int anim_total[2]; @@ -656,10 +615,10 @@ void Mod_FreeQ3Shaders(void); void Mod_LoadQ3Shaders(void); shader_t *Mod_LookupQ3Shader(const char *name); qbool Mod_LoadTextureFromQ3Shader(struct mempool_s *mempool, const char *modelname, texture_t *texture, const char *name, qbool warnmissing, qbool fallback, int defaulttexflags, int defaultmaterialflags); -texture_shaderpass_t *Mod_CreateShaderPass(struct mempool_s *mempool, skinframe_t *skinframe); +texture_shaderpass_t *Mod_CreateShaderPass(struct mempool_s *mempool, struct skinframe_s *skinframe); texture_shaderpass_t *Mod_CreateShaderPassFromQ3ShaderLayer(struct mempool_s *mempool, const char *modelname, q3shaderinfo_layer_t *layer, int layerindex, int texflags, const char *texturename); /// Sets up a material to render the provided skinframe. See also R_SkinFrame_LoadInternalBGRA. -void Mod_LoadCustomMaterial(struct mempool_s *mempool, texture_t *texture, const char *name, int supercontents, int materialflags, skinframe_t *skinframe); +void Mod_LoadCustomMaterial(struct mempool_s *mempool, texture_t *texture, const char *name, int supercontents, int materialflags, struct skinframe_s *skinframe); /// Removes all shaderpasses from material, and optionally deletes the textures in the skinframes. void Mod_UnloadCustomMaterial(texture_t *texture, qbool purgeskins); diff --git a/r_textures.h b/r_textures.h index 130780ae..1e2b1044 100644 --- a/r_textures.h +++ b/r_textures.h @@ -3,6 +3,7 @@ #define R_TEXTURES_H #include "qtypes.h" +#include "qdefs.h" // transparent #define TEXF_ALPHA 0x00000001 @@ -121,6 +122,49 @@ typedef struct rtexturepool_s } rtexturepool_t; +typedef struct skinframe_s +{ + struct rtexture_s *stain; // inverse modulate with background (used for decals and such) + struct rtexture_s *merged; // original texture without glow + struct rtexture_s *base; // original texture without pants/shirt/glow + struct rtexture_s *pants; // pants only (in greyscale) + struct rtexture_s *shirt; // shirt only (in greyscale) + struct rtexture_s *nmap; // normalmap (bumpmap for dot3) + struct rtexture_s *gloss; // glossmap (for dot3) + struct rtexture_s *glow; // glow only (fullbrights) + struct rtexture_s *fog; // alpha of the base texture (if not opaque) + struct rtexture_s *reflect; // colored mask for cubemap reflections + // accounting data for hash searches: + // the compare variables are used to identify internal skins from certain + // model formats + // (so that two q1bsp maps with the same texture name for different + // textures do not have any conflicts) + struct skinframe_s *next; // next on hash chain + char basename[MAX_QPATH]; // name of this + int textureflags; // texture flags to use + int comparewidth; + int compareheight; + int comparecrc; + // mark and sweep garbage collection, this value is updated to a new value + // on each level change for the used skinframes, if some are not used they + // are freed + unsigned int loadsequence; + // indicates whether this texture has transparent pixels + qbool hasalpha; + // average texture color, if applicable + float avgcolor[4]; + // for mdl skins, we actually only upload on first use (many are never used, and they are almost never used in both base+pants+shirt and merged modes) + unsigned char *qpixels; + int qwidth; + int qheight; + qbool qhascolormapping; + qbool qgeneratebase; + qbool qgeneratemerged; + qbool qgeneratenmap; + qbool qgenerateglow; +} +skinframe_t; + typedef void (*updatecallback_t)(rtexture_t *rt, void *data); // allocate a texture pool, to be used with R_LoadTexture -- 2.39.2