skinframe_t *R_SkinFrame_FindNextByName( skinframe_t *last, const char *name );
skinframe_t *R_SkinFrame_Find(const char *name, int textureflags, int comparewidth, int compareheight, int comparecrc, qboolean add);
skinframe_t *R_SkinFrame_LoadExternal(const char *name, int textureflags, qboolean complain);
+skinframe_t *R_SkinFrame_LoadExternal_CheckAlpha(const char *name, int textureflags, qboolean complain, qboolean *has_alpha);
skinframe_t *R_SkinFrame_LoadInternalBGRA(const char *name, int textureflags, const unsigned char *skindata, int width, int height);
skinframe_t *R_SkinFrame_LoadInternalQuake(const char *name, int textureflags, int loadpantsandshirt, int loadglowtexture, const unsigned char *skindata, int width, int height);
skinframe_t *R_SkinFrame_LoadMissing(void);
extern rtexture_t *r_texture_fogattenuation;
//extern rtexture_t *r_texture_fogintensity;
+#define R_MAX_OCCLUSION_QUERIES 4096
+extern unsigned int r_queries[R_MAX_OCCLUSION_QUERIES];
+extern unsigned int r_numqueries;
+extern unsigned int r_maxqueries;
+
void R_TimeReport(char *name);
// r_stain
int modeltexcoordlightmap2f_bufferobject;
size_t modeltexcoordlightmap2f_bufferoffset;
int *modelelement3i;
+ unsigned short *modelelement3s;
int modelelement3i_bufferobject;
+ int modelelement3s_bufferobject;
int *modellightmapoffsets;
int modelnum_vertices;
int modelnum_triangles;
matrix4x4_t matrix;
matrix4x4_t inversematrix;
// animation blending state from entity
- frameblend_t frameblend[4];
+ frameblend_t frameblend[MAX_FRAMEBLENDS];
// directional model shading state from entity
vec3_t modellight_ambient;
vec3_t modellight_diffuse;
// rtlight rendering
// light currently being rendered
- rtlight_t *rtlight;
+ const rtlight_t *rtlight;
// current light's cull box (copied out of an rtlight or calculated by GetLightInfo)
vec3_t rtlight_cullmins;
vec3_t rtlight_cullmaxs;
matrix4x4_t entitytoattenuationxyz;
// this transforms only the Z to S, and T is always 0.5
matrix4x4_t entitytoattenuationz;
+
+ // pointer to an entity_render_t used only by R_GetCurrentTexture and
+ // RSurf_ActiveWorldEntity/RSurf_ActiveModelEntity as a unique id within
+ // each frame (see r_frame also)
+ entity_render_t *entity;
}
rsurfacestate_t;
void R_Mesh_ResizeArrays(int newvertices);
-struct entity_render_s;
-struct texture_s;
-struct msurface_s;
-void R_UpdateTextureInfo(const entity_render_t *ent, texture_t *t);
-void R_UpdateAllTextureInfo(entity_render_t *ent);
-void R_QueueTextureSurfaceList(int texturenumsurfaces, msurface_t **texturesurfacelist);
-void R_DrawWorldSurfaces(qboolean skysurfaces, qboolean writedepth, qboolean depthonly, qboolean addwaterplanes, qboolean debug);
-void R_DrawModelSurfaces(entity_render_t *ent, qboolean skysurfaces, qboolean writedepth, qboolean depthonly, qboolean addwaterplanes, qboolean debug);
+texture_t *R_GetCurrentTexture(texture_t *t);
+void R_DrawWorldSurfaces(qboolean skysurfaces, qboolean writedepth, qboolean depthonly, qboolean debug);
+void R_DrawModelSurfaces(entity_render_t *ent, qboolean skysurfaces, qboolean writedepth, qboolean depthonly, qboolean debug);
+void R_AddWaterPlanes(entity_render_t *ent);
void RSurf_PrepareVerticesForBatch(qboolean generatenormals, qboolean generatetangents, int texturenumsurfaces, msurface_t **texturesurfacelist);
void RSurf_DrawBatch_Simple(int texturenumsurfaces, msurface_t **texturesurfacelist);