}
dlight_t;
-typedef struct frameblend_s
+#define MAX_FRAMEGROUPBLENDS 4
+typedef struct framegroupblend_s
{
+ // animation number and blend factor
+ // (for most models this is the frame number)
int frame;
float lerp;
+ // time frame began playing (for framegroup animations)
+ double start;
+}
+framegroupblend_t;
+
+// this is derived from processing of the framegroupblend array
+// note: technically each framegroupblend can produce two of these, but that
+// never happens in practice because no one blends between more than 2
+// framegroups at once
+#define MAX_FRAMEBLENDS MAX_FRAMEGROUPBLENDS
+typedef struct frameblend_s
+{
+ int subframe;
+ float lerp;
}
frameblend_t;
// colormod tinting of models
float colormod[3];
- // interpolated animation
+ // interpolated animation - active framegroups and blend factors
+ framegroupblend_t framegroupblend[MAX_FRAMEGROUPBLENDS];
- // frame that the model is interpolating from
- int frame1;
- // frame that the model is interpolating to
- int frame2;
- // interpolation factor, usually computed from frame2time
- float framelerp;
- // time frame1 began playing (for framegroup animations)
- double frame1time;
- // time frame2 began playing (for framegroup animations)
- double frame2time;
// time of last model change (for shader animations)
double shadertime;
// calculated during R_AddModelEntities
vec3_t mins, maxs;
- // 4 frame numbers (-1 if not used) and their blending scalers (0-1), if interpolation is not desired, use frame instead
- frameblend_t frameblend[4];
+ // subframe numbers (-1 if not used) and their blending scalers (0-1), if interpolation is not desired, use subframeblend[0].subframe
+ frameblend_t frameblend[MAX_FRAMEBLENDS];
// current lighting from map (updated ONLY by client code, not renderer)
vec3_t modellight_ambient;
int width, height;
// precomputed RGB to YUV tables
- // if a capturevideo module uses these, it doesn't need to care for scr_screenshot_gammaboost.value
+ // converts the RGB values to YUV (see cap_avi.c for how to use them)
short rgbtoyuvscaletable[3][3][256];
unsigned char yuvnormalizetable[3][256];
+ // precomputed gamma ramp (only needed if the capturevideo module uses RGB output)
+ // note: to map from these values to RGB24, you have to multiply by 255.0/65535.0, then add 0.5, then cast to integer
+ unsigned short vidramp[256 * 3];
+
// stuff to be filled in by the video format module
capturevideoformat_t format;
const char *formatextension;
typedef struct decal_s
{
- // fields used by rendering: (40 bytes)
+ // fields used by rendering: (44 bytes)
unsigned short typeindex;
unsigned short texnum;
vec3_t org;
float alpha; // 0-255
unsigned char color[3];
unsigned char unused1;
+ int clusterindex; // cheap culling by pvs
// fields not used by rendering: (36 bytes in 32bit, 40 bytes in 64bit)
float time2; // used for decal fade
void CL_Parse_ErrorCleanUp(void);
void QW_CL_StartUpload(unsigned char *data, int size);
extern cvar_t qport;
+void CL_KeepaliveMessage(qboolean readmessages); // call this during loading of large content
//
// view