quakeforge/include/r_internal.h
Bill Currie 2790972cb0 [renderer] Separate core of R_MarkLeaves
I needed to mark leaves based on an arbitrary PVS (for lighting) that is
independent of the camera position. Also cleaned up some const
correctness.
2023-07-27 15:43:47 +09:00

115 lines
3.5 KiB
C

#ifndef __r_internal_h
#define __r_internal_h
#include "QF/vid.h"
#include "QF/plugin/vid_render.h"
#include "r_cvar.h"
#include "r_dynamic.h"
#include "r_local.h"
#include "r_shared.h"
extern viddef_t vid; // global video state
extern vid_render_data_t vid_render_data;
extern vid_render_funcs_t gl_vid_render_funcs;
extern vid_render_funcs_t glsl_vid_render_funcs;
extern vid_render_funcs_t sw_vid_render_funcs;
extern vid_render_funcs_t vulkan_vid_render_funcs;
extern vid_render_funcs_t *vid_render_funcs;
#define vr_data vid_render_data
#define vr_funcs vid_render_funcs
extern refdef_t r_refdef;
#define SW_COMP(comp, id) ((void *)((byte *)r_refdef.registry->comp_pools[comp].data + (id) * r_refdef.registry->components.a[comp].size))
extern int r_viewsize;
void R_LineGraph (int x, int y, int *h_vals, int count, int height);
void gl_R_Init (void);
void glsl_R_Init (void);
void glsl_R_Shutdown (void);
void sw_R_Init (void);
void R_RenderFrame (SCR_Func *scr_funcs);
void R_Init_Cvars (void);
void R_InitEfrags (void);
void R_ClearState (void);
void R_InitSky (struct texture_s *mt); // called at level load
void R_Textures_Init (void);
void R_RenderView (void); // must set r_refdef first
void R_ViewChanged (void); // must set r_refdef first
// called whenever r_refdef or vid change
extern struct psystem_s r_psystem;
struct psystem_s *gl_ParticleSystem (void);
struct psystem_s *glsl_ParticleSystem (void);
struct psystem_s *sw_ParticleSystem (void);
void R_RunParticles (float dT);
struct scene_s;
void R_NewScene (struct scene_s *scene);
typedef struct visstate_s {
const struct mleaf_s *viewleaf;
int *node_visframes;
int *leaf_visframes;
int *face_visframes;
int visframecount;
const struct mod_brush_s *brush;
} visstate_t;
extern visstate_t r_visstate;//FIXME
// LordHavoc: relative bmodel lighting
void R_PushDlights (const vec3_t entorigin, const visstate_t *visstate);
void R_DrawWaterSurfaces (void);
void *D_SurfaceCacheAddress (void) __attribute__((pure));
int D_SurfaceCacheForRes (int width, int height);
void D_FlushCaches (void *data);
void D_DeleteSurfaceCache (void);
void D_InitCaches (void *buffer, int size);
void R_SetVrect (const vrect_t *pvrect, vrect_t *pvrectin, int lineadj);
void R_LoadSkys (const char *);
void R_ClearEfrags (void);
void R_FindNearLights (vec4f_t pos, int count, dlight_t **lights);
dlight_t *R_AllocDlight (int key);
void R_DecayLights (double frametime);
void R_ClearDlights (void);
int R_InitGraphTextures (int base);
struct entity_s;
struct animation_s;
struct transform_s;
void R_DrawAliasModel (struct entity_s *e);
struct set_s;
void R_MarkLeavesPVS (visstate_t *state, const struct set_s *pvs);
void R_MarkLeaves (visstate_t *state, const struct mleaf_s *viewleaf);
void GL_SetPalette (void *data, const byte *palette);
void GLSL_SetPalette (void *data, const byte *palette);
int R_BillboardFrame (struct transform_s transform, int orientation,
vec4f_t cameravec,
vec4f_t *bbup, vec4f_t *bbright, vec4f_t *bbfwd);
mspriteframe_t *R_GetSpriteFrame (const msprite_t *sprite,
const struct animation_s *animation);
// These correspond to the standard box sides for OpenGL cube maps but with
// TOP and BOTTOM swapped due to lelt/right handed systems (quake/gl are right,
// cube maps are left)
#define BOX_FRONT 4
#define BOX_RIGHT 0
#define BOX_BEHIND 5
#define BOX_LEFT 1
#define BOX_TOP 3
#define BOX_BOTTOM 2
void R_RenderFisheye (framebuffer_t *cube);
#endif//__r_internal_h