UFO: Alien Invasion
Loading...
Searching...
No Matches
r_draw.cpp File Reference
#include "r_local.h"
#include "r_sphere.h"
#include "r_error.h"
#include "r_draw.h"
#include "r_mesh.h"
#include "r_framebuffer.h"
#include "r_program.h"
#include "r_misc.h"
#include "../cl_console.h"
Include dependency graph for r_draw.cpp:

Go to the source code of this file.

Data Structures

struct  char_arrays_t
 Characters are batched per frame and drawn in one shot accumulate coordinates and colors as vertex arrays. More...
struct  batch_arrays_t
 array to store batched vertices and colors per frame More...
struct  bbox_arrays_t
struct  rect_t

Macros

#define MAX_CHARS   8192
#define MAX_BATCH_ENTRIES   512
#define MAX_BBOX_ENTRIES   256
#define MAX_LINEVERTS   256
#define MAX_CLIPRECT   16

Functions

void R_DrawInitLocal (void)
 Loads some textures and init the 3d globe.
void R_DrawChar (int x, int y, int num, uint32_t color)
 Draws one 8*8 graphics character with 0 being transparent. It can be clipped to the top of the screen to allow the console to be smoothly scrolled off.
void R_DrawChars (void)
void R_DrawFill (int x, int y, int w, int h, const vec4_t color)
 Fills a box of pixels with a single color.
void R_DrawFills (void)
int R_UploadData (const char *name, unsigned *frame, int width, int height)
 Uploads image data.
void R_DrawTexture (int texnum, int x, int y, int w, int h)
 Bind and draw a texture.
void R_DrawImage (float x, float y, const image_t *image)
 Draws an image or parts of it.
void R_DrawStretchImage (float x, float y, int w, int h, const image_t *image)
const image_tR_DrawImageArray (const vec2_t texcoords[4], const vec2_t verts[4], const image_t *image)
void R_DrawRect (int x, int y, int w, int h, const vec4_t color, float lineWidth, int pattern)
 Draws a rect to the screen. Also has support for stippled rendering of the rect.
void R_DrawCircle (float radius, const vec4_t color, float thickness, const vec3_t shift)
static void R_Draw2DArray (int points, int *verts, GLenum mode)
void R_DrawLineStrip (int points, int *verts)
 2 dimensional line strip
void R_DrawLineLoop (int points, int *verts)
void R_DrawLine (int *verts, float thickness)
 Draws one line with only one start and one end point.
void R_DrawPolygon (int points, int *verts)
static void R_RectIntersection (const rect_t *a, const rect_t *b, rect_t *out)
 Compute the intersection of 2 rect.
void R_PushClipRect (int x, int y, int width, int height)
 Force to draw only on a rect.
void R_PopClipRect (void)
void R_CleanupDepthBuffer (int x, int y, int width, int height)
 "Clean up" the depth buffer into a rect
static void R_ComputeBoundingBox (const vec3_t mins, const vec3_t maxs, vec3_t bbox[8])
 Compute the bounding box for an entity out of the mins, maxs.
void R_DrawBoundingBoxes (void)
void R_DrawBoundingBoxBatched (const AABB &absbox)
void R_DrawBoundingBox (const AABB &absBox)
 Draws the model bounding box.
void R_DrawTexturedBox (const vec3_t a0, const vec3_t a1)
 Draws the textured box, the caller should bind the texture.

Variables

image_tshadow
static image_tdraw_chars
static char_arrays_t r_char_arrays
static batch_arrays_t r_fill_arrays
static bbox_arrays_t r_bbox_array
static rect_t clipRect [MAX_CLIPRECT]
static int currentClipRect = 0

Macro Definition Documentation

◆ MAX_BATCH_ENTRIES

#define MAX_BATCH_ENTRIES   512

Definition at line 57 of file r_draw.cpp.

◆ MAX_BBOX_ENTRIES

#define MAX_BBOX_ENTRIES   256

Definition at line 70 of file r_draw.cpp.

◆ MAX_CHARS

#define MAX_CHARS   8192

Definition at line 40 of file r_draw.cpp.

◆ MAX_CLIPRECT

#define MAX_CLIPRECT   16

Definition at line 521 of file r_draw.cpp.

Referenced by R_PushClipRect().

◆ MAX_LINEVERTS

#define MAX_LINEVERTS   256

Definition at line 449 of file r_draw.cpp.

Referenced by R_Draw2DArray().

Function Documentation

◆ R_CleanupDepthBuffer()

void R_CleanupDepthBuffer ( int x,
int y,
int width,
int height )

"Clean up" the depth buffer into a rect

Note
we use a big value (but not too big) to set the depth buffer, then it is not really a clean up
Todo
can we fix bigZ with a value come from glGet?

Definition at line 596 of file r_draw.cpp.

References GLboolean(), GLint, R_BindArray(), R_BindDefaultArray(), refdef, and viddef.

Referenced by uiItemNode::draw(), uiRadarNode::draw(), uiSequenceNode::draw(), and UI_DrawModelNode().

◆ R_ComputeBoundingBox()

void R_ComputeBoundingBox ( const vec3_t mins,
const vec3_t maxs,
vec3_t bbox[8] )
static

Compute the bounding box for an entity out of the mins, maxs.

See also
R_DrawBoundingBox

Definition at line 630 of file r_draw.cpp.

References i.

Referenced by R_DrawBoundingBox(), and R_DrawBoundingBoxBatched().

◆ R_Draw2DArray()

void R_Draw2DArray ( int points,
int * verts,
GLenum mode )
inlinestatic

Definition at line 451 of file r_draw.cpp.

References GLenum, i, MAX_LINEVERTS, r_state, refdef, and viddef.

Referenced by R_DrawLine(), R_DrawLineLoop(), R_DrawLineStrip(), and R_DrawPolygon().

◆ R_DrawBoundingBox()

void R_DrawBoundingBox ( const AABB & absBox)

Draws the model bounding box.

See also
R_EntityComputeBoundingBox

Definition at line 690 of file r_draw.cpp.

References AABB::maxs, AABB::mins, R_BindArray(), R_BindDefaultArray(), and R_ComputeBoundingBox().

Referenced by R_DrawAliasModel(), R_DrawBox(), R_DrawModelDirect(), R_DrawModelParticle(), and R_RenderBspRRefs().

◆ R_DrawBoundingBoxBatched()

void R_DrawBoundingBoxBatched ( const AABB & absbox)

Definition at line 670 of file r_draw.cpp.

References i, lengthof, AABB::maxs, AABB::mins, r_bbox_array, R_ComputeBoundingBox(), and VectorCopy.

Referenced by CL_Trace().

◆ R_DrawBoundingBoxes()

void R_DrawBoundingBoxes ( void )

Definition at line 640 of file r_draw.cpp.

References i, r_bbox_array, R_BindArray(), R_BindDefaultArray(), and R_Color().

Referenced by R_RenderFrame().

◆ R_DrawChar()

void R_DrawChar ( int x,
int y,
int num,
uint32_t color )

Draws one 8*8 graphics character with 0 being transparent. It can be clipped to the top of the screen to allow the console to be smoothly scrolled off.

Definition at line 99 of file r_draw.cpp.

References con_fontHeight, con_fontWidth, int(), lengthof, and r_char_arrays.

Referenced by Con_DrawConsole(), and Con_DrawText().

◆ R_DrawChars()

void R_DrawChars ( void )

◆ R_DrawCircle()

void R_DrawCircle ( float radius,
const vec4_t color,
float thickness,
const vec3_t shift )

Definition at line 422 of file r_draw.cpp.

References i, lengthof, M_PI, R_BindArray(), R_BindDefaultArray(), R_Color(), refdef, shift, and VectorSet.

Referenced by R_DrawPtlCircle().

◆ R_DrawFill()

void R_DrawFill ( int x,
int y,
int w,
int h,
const vec4_t color )

Fills a box of pixels with a single color.

Todo
this shouldn't be here, but only called once at the end of the frame but this is needed here because a) we don't want them to get rendered on top of the console and b) the ui stuff relies on the order of these renderings

Definition at line 188 of file r_draw.cpp.

References lengthof, LittleLong, R_DrawFills(), r_fill_arrays, and viddef.

Referenced by uiLineChartNode::draw(), GAME_GetImportData(), SCR_DrawLoadingBar(), SEQ_Render2D(), UI_DrawFill(), and cgame_import_t::void().

◆ R_DrawFills()

◆ R_DrawImage()

void R_DrawImage ( float x,
float y,
const image_t * image )

Draws an image or parts of it.

Parameters
x,yposition to draw the image to
[in]imagePointer to the imlage to display

Definition at line 341 of file r_draw.cpp.

References image_t::height, R_DrawTexture(), image_t::texnum, viddef, and image_t::width.

Referenced by HUD_UpdateCursor(), R_DrawImageCentered(), SCR_DrawCursor(), SCR_DrawLoadingScreen(), and SEQ_Render2D().

◆ R_DrawImageArray()

const image_t * R_DrawImageArray ( const vec2_t texcoords[4],
const vec2_t verts[4],
const image_t * image )

◆ R_DrawInitLocal()

void R_DrawInitLocal ( void )

Loads some textures and init the 3d globe.

See also
R_Init

Definition at line 83 of file r_draw.cpp.

References Com_Error(), Com_Printf(), draw_chars, ERR_FATAL, it_chars, it_effect, R_FindImage(), r_noTexture, and shadow.

Referenced by R_Init().

◆ R_DrawLine()

void R_DrawLine ( int * verts,
float thickness )

Draws one line with only one start and one end point.

See also
R_DrawLineStrip

Definition at line 494 of file r_draw.cpp.

References R_Draw2DArray().

Referenced by GAME_GetImportData().

◆ R_DrawLineLoop()

void R_DrawLineLoop ( int points,
int * verts )
See also
R_DrawLineStrip

Definition at line 485 of file r_draw.cpp.

References R_Draw2DArray().

◆ R_DrawLineStrip()

void R_DrawLineStrip ( int points,
int * verts )

2 dimensional line strip

See also
R_DrawLineLoop

Definition at line 477 of file r_draw.cpp.

References R_Draw2DArray().

Referenced by uiLineChartNode::draw(), and GAME_GetImportData().

◆ R_DrawPolygon()

void R_DrawPolygon ( int points,
int * verts )
See also
R_DrawLineStrip
R_DrawLineLoop

Definition at line 509 of file r_draw.cpp.

References R_Draw2DArray().

◆ R_DrawRect()

void R_DrawRect ( int x,
int y,
int w,
int h,
const vec4_t color,
float lineWidth,
int pattern )

Draws a rect to the screen. Also has support for stippled rendering of the rect.

Parameters
[in]x,yX/Y-position of the rect
[in]wWidth of the rect
[in]hHeight of the rect
[in]colorRGBA color of the rect
[in]lineWidthLine strength in pixel of the rect
[in]patternSpecifies a 16-bit integer whose bit pattern determines which fragments of a line will be drawn when the line is rasterized. Bit zero is used first; the default pattern is all 1's
Note
The stipple factor is 2 for this function

Definition at line 390 of file r_draw.cpp.

References R_BindDefaultArray(), R_Color(), refdef, and viddef.

Referenced by GAME_GetImportData(), SEQ_Render2D(), UI_DrawRect(), and cgame_import_t::void().

◆ R_DrawStretchImage()

void R_DrawStretchImage ( float x,
float y,
int w,
int h,
const image_t * image )

Definition at line 349 of file r_draw.cpp.

References R_DrawTexture(), image_t::texnum, and viddef.

Referenced by Con_DrawConsole().

◆ R_DrawTexture()

void R_DrawTexture ( int texnum,
int x,
int y,
int w,
int h )

Bind and draw a texture.

Parameters
[in]texnumThe texture id (already uploaded of course)
[in]x,ynormalized position on the screen
[in]w,hnormalized width and height values

Definition at line 328 of file r_draw.cpp.

References default_texcoords, R_BindTexture, R_DrawImageArray(), and Vector2FromInt.

Referenced by CIN_OGM_DrawCinematic(), CIN_ROQ_DrawCinematic(), R_Draw3DGlobe(), R_DrawImage(), and R_DrawStretchImage().

◆ R_DrawTexturedBox()

void R_DrawTexturedBox ( const vec3_t a0,
const vec3_t a1 )

Draws the textured box, the caller should bind the texture.

See also
R_DrawBox

Definition at line 714 of file r_draw.cpp.

References R_BindArray(), and R_BindDefaultArray().

Referenced by R_DrawBox().

◆ R_PopClipRect()

void R_PopClipRect ( void )
See also
R_PushClipRect

Definition at line 579 of file r_draw.cpp.

References clipRect, and currentClipRect.

Referenced by UI_PopClipRect().

◆ R_PushClipRect()

void R_PushClipRect ( int x,
int y,
int width,
int height )

Force to draw only on a rect.

Note
Don't forget to call R_EndClipRect
See also
R_PopClipRect

Definition at line 550 of file r_draw.cpp.

References clipRect, currentClipRect, rect_t::height, MAX_CLIPRECT, R_RectIntersection(), viddef, rect_t::width, rect_t::x, and rect_t::y.

Referenced by UI_PushClipRect().

◆ R_RectIntersection()

void R_RectIntersection ( const rect_t * a,
const rect_t * b,
rect_t * out )
static

Compute the intersection of 2 rect.

Parameters
[in]aA rect
[in]bA rect
[out]outThe intersection rect

Definition at line 533 of file r_draw.cpp.

References rect_t::height, rect_t::width, rect_t::x, and rect_t::y.

Referenced by R_PushClipRect().

◆ R_UploadData()

int R_UploadData ( const char * name,
unsigned * frame,
int width,
int height )

Uploads image data.

Parameters
[in]nameThe name of the texture to use for this data
[in]frameThe frame data that is uploaded
[in]widthThe width of the texture
[in]heightThe height of the texture
Returns
the texture number of the uploaded images

Definition at line 270 of file r_draw.cpp.

References Com_Error(), ERR_FATAL, glTexImage2D(), glTexParameterf(), image_t::height, i, it_pic, Mem_Free, Mem_PoolAllocTypeN, name, R_BindTexture, R_CheckError, r_config, R_FindImage(), R_GetScaledTextureSize(), r_noTexture, R_ScaleTexture(), image_t::texnum, image_t::upload_height, image_t::upload_width, vid_imagePool, and image_t::width.

Referenced by CIN_OGM_DrawCinematic(), and CIN_ROQ_DrawCinematic().

Variable Documentation

◆ clipRect

rect_t clipRect[MAX_CLIPRECT]
static

Definition at line 523 of file r_draw.cpp.

Referenced by R_PopClipRect(), and R_PushClipRect().

◆ currentClipRect

int currentClipRect = 0
static

Definition at line 525 of file r_draw.cpp.

Referenced by R_PopClipRect(), and R_PushClipRect().

◆ draw_chars

image_t* draw_chars
static

Definition at line 38 of file r_draw.cpp.

Referenced by R_DrawChars(), and R_DrawInitLocal().

◆ r_bbox_array

bbox_arrays_t r_bbox_array
static

Definition at line 77 of file r_draw.cpp.

Referenced by R_DrawBoundingBoxBatched(), and R_DrawBoundingBoxes().

◆ r_char_arrays

char_arrays_t r_char_arrays
static

Definition at line 55 of file r_draw.cpp.

Referenced by R_DrawChar(), and R_DrawChars().

◆ r_fill_arrays

batch_arrays_t r_fill_arrays
static

Definition at line 68 of file r_draw.cpp.

Referenced by R_DrawFill(), and R_DrawFills().

◆ shadow

image_t* shadow

draw this when actor is alive

Definition at line 35 of file r_draw.cpp.

Referenced by R_DrawEntityEffects(), and R_DrawInitLocal().