X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=r_textures.h;h=cf2c0f3f3fb9974f5da2dd28b2ee6ae47c5ee65c;hb=6ad27355dfe4f50916169dc29bf06bcd4add0558;hp=130780ae83f7ce834ffde0789f27c63616da14ef;hpb=19dc59c888b9bd06b45d619d5f4861c984730f2d;p=xonotic%2Fdarkplaces.git diff --git a/r_textures.h b/r_textures.h index 130780ae..cf2c0f3f 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 @@ -162,7 +206,8 @@ void R_FreeTexture(rtexture_t *rt); // update a portion of the image data of a texture, used by lightmap updates // and procedural textures such as video playback, actual uploads may be // delayed by gl_nopartialtextureupdates cvar until R_Mesh_TexBind uses it -void R_UpdateTexture(rtexture_t *rt, const unsigned char *data, int x, int y, int z, int width, int height, int depth); +// combine has 3 values: 0 = immediately upload (glTexSubImage2D), 1 = combine with other updates (glTexSubImage2D on next draw), 2 = combine with other updates and never upload partial images (glTexImage2D on next draw) +void R_UpdateTexture(rtexture_t *rt, const unsigned char *data, int x, int y, int z, int width, int height, int depth, int combine); // returns the renderer dependent texture slot number (call this before each // use, as a texture might not have been precached)