UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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"

Go to the source code of this file.

Data Structures

struct  char_arrays_s
 Characters are batched per frame and drawn in one shot accumulate coordinates and colors as vertex arrays. More...
 
struct  batch_arrays_s
 array to store batched vertices and colors per frame More...
 
struct  bbox_arrays_s
 
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
 

Typedefs

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

Functions

void R_DrawInitLocal (void)
 Loads some textures and init the 3d globe. More...
 
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. More...
 
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. More...
 
void R_DrawFills (void)
 
int R_UploadData (const char *name, unsigned *frame, int width, int height)
 Uploads image data. More...
 
void R_DrawTexture (int texnum, int x, int y, int w, int h)
 Bind and draw a texture. More...
 
void R_DrawImage (float x, float y, const image_t *image)
 Draws an image or parts of it. More...
 
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. More...
 
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 More...
 
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. More...
 
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. More...
 
void R_PushClipRect (int x, int y, int width, int height)
 Force to draw only on a rect. More...
 
void R_PopClipRect (void)
 
void R_CleanupDepthBuffer (int x, int y, int width, int height)
 "Clean up" the depth buffer into a rect More...
 
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. More...
 
void R_DrawBoundingBoxes (void)
 
void R_DrawBoundingBoxBatched (const AABB &absbox)
 
void R_DrawBoundingBox (const AABB &absBox)
 Draws the model bounding box. More...
 
void R_DrawTexturedBox (const vec3_t a0, const vec3_t a1)
 Draws the textured box, the caller should bind the texture. More...
 

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

#define MAX_BATCH_ENTRIES   512

Definition at line 57 of file r_draw.cpp.

#define MAX_BBOX_ENTRIES   256

Definition at line 70 of file r_draw.cpp.

#define MAX_CHARS   8192

Definition at line 40 of file r_draw.cpp.

#define MAX_CLIPRECT   16

Definition at line 521 of file r_draw.cpp.

Referenced by R_PushClipRect().

#define MAX_LINEVERTS   256

Definition at line 449 of file r_draw.cpp.

Referenced by R_Draw2DArray().

Typedef Documentation

array to store batched vertices and colors per frame

typedef struct bbox_arrays_s bbox_arrays_t
typedef struct char_arrays_s char_arrays_t

Characters are batched per frame and drawn in one shot accumulate coordinates and colors as vertex arrays.

Function Documentation

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 rendererData_t::batchCount, R_BindArray(), R_BindDefaultArray(), refdef, viddef_t::rx, viddef_t::ry, and viddef.

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

static 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().

static void R_Draw2DArray ( int  points,
int verts,
GLenum  mode 
)
inlinestatic
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().

void R_DrawBoundingBoxBatched ( const AABB absbox)
void R_DrawBoundingBoxes ( void  )
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 char_arrays_s::color_index, char_arrays_s::colors, con_fontHeight, con_fontWidth, int(), lengthof, char_arrays_s::texcoord_index, char_arrays_s::texcoords, char_arrays_s::vert_index, and char_arrays_s::verts.

Referenced by Con_DrawConsole(), and Con_DrawText().

void R_DrawCircle ( float  radius,
const vec4_t  color,
float  thickness,
const vec3_t  shift 
)
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 batch_arrays_s::color_index, batch_arrays_s::colors, lengthof, LittleLong, R_DrawFills(), viddef_t::rx, viddef_t::ry, batch_arrays_s::vert_index, batch_arrays_s::verts, and viddef.

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

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_s::height, R_DrawTexture(), viddef_t::rx, viddef_t::ry, image_s::texnum, viddef, and image_s::width.

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

const image_t* R_DrawImageArray ( const vec2_t  texcoords[4],
const vec2_t  verts[4],
const image_t image 
)
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(), ERR_FATAL, it_chars, it_effect, R_FindImage(), and r_noTexture.

Referenced by R_Init().

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().

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

Definition at line 485 of file r_draw.cpp.

References R_Draw2DArray().

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().

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().

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 rendererData_t::batchCount, f, R_BindDefaultArray(), R_Color(), refdef, viddef_t::rx, viddef_t::ry, and viddef.

Referenced by GAME_GetImportData(), SEQ_Render2D(), and UI_DrawRect().

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(), viddef_t::rx, viddef_t::ry, image_s::texnum, and viddef.

Referenced by Con_DrawConsole().

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().

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().

void R_PopClipRect ( void  )
See also
R_PushClipRect

Definition at line 579 of file r_draw.cpp.

References currentClipRect.

Referenced by UI_PopClipRect().

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 currentClipRect, rect_t::height, MAX_CLIPRECT, R_RectIntersection(), viddef_t::rx, viddef_t::ry, viddef, viddef_t::virtualHeight, rect_t::width, rect_t::x, and rect_t::y.

Referenced by UI_PushClipRect().

static 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().

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, rconfig_t::gl_alpha_format, rconfig_t::gl_compressed_alpha_format, rconfig_t::gl_compressed_solid_format, rconfig_t::gl_solid_format, glTexImage2D(), glTexParameterf(), image_s::height, i, it_pic, Mem_Free, Mem_PoolAllocTypeN, R_BindTexture, R_CheckError, r_config, R_FindImage(), R_GetScaledTextureSize(), r_noTexture, R_ScaleTexture(), image_s::texnum, image_s::upload_height, image_s::upload_width, vid_imagePool, and image_s::width.

Referenced by CIN_OGM_DrawCinematic(), and CIN_ROQ_DrawCinematic().

Variable Documentation

rect_t clipRect[MAX_CLIPRECT]
static

Definition at line 523 of file r_draw.cpp.

int currentClipRect = 0
static

Definition at line 525 of file r_draw.cpp.

Referenced by R_PopClipRect(), and R_PushClipRect().

image_t* draw_chars
static

Definition at line 38 of file r_draw.cpp.

bbox_arrays_t r_bbox_array
static

Definition at line 77 of file r_draw.cpp.

char_arrays_t r_char_arrays
static

Definition at line 55 of file r_draw.cpp.

batch_arrays_t r_fill_arrays
static

Definition at line 68 of file r_draw.cpp.

image_t* shadow

draw this when actor is alive

Definition at line 35 of file r_draw.cpp.

Referenced by R_DrawEntityEffects().