SDL 2.0
SDL_sysrender.h File Reference
#include "../SDL_internal.h"
#include "SDL_render.h"
#include "SDL_events.h"
#include "SDL_mutex.h"
#include "SDL_yuv_sw_c.h"
+ Include dependency graph for SDL_sysrender.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  SDL_Texture
 
struct  SDL_RenderCommand
 
struct  SDL_AllocVertGap
 
struct  SDL_Renderer
 
struct  SDL_RenderDriver
 

Enumerations

enum  SDL_ScaleMode {
  SDL_ScaleModeNearest ,
  SDL_ScaleModeLinear ,
  SDL_ScaleModeBest
}
 
enum  SDL_RenderCommandType {
  SDL_RENDERCMD_NO_OP ,
  SDL_RENDERCMD_SETVIEWPORT ,
  SDL_RENDERCMD_SETCLIPRECT ,
  SDL_RENDERCMD_SETDRAWCOLOR ,
  SDL_RENDERCMD_CLEAR ,
  SDL_RENDERCMD_DRAW_POINTS ,
  SDL_RENDERCMD_DRAW_LINES ,
  SDL_RENDERCMD_FILL_RECTS ,
  SDL_RENDERCMD_COPY ,
  SDL_RENDERCMD_COPY_EX
}
 

Functions

SDL_BlendFactor SDL_GetBlendModeSrcColorFactor (SDL_BlendMode blendMode)
 
SDL_BlendFactor SDL_GetBlendModeDstColorFactor (SDL_BlendMode blendMode)
 
SDL_BlendOperation SDL_GetBlendModeColorOperation (SDL_BlendMode blendMode)
 
SDL_BlendFactor SDL_GetBlendModeSrcAlphaFactor (SDL_BlendMode blendMode)
 
SDL_BlendFactor SDL_GetBlendModeDstAlphaFactor (SDL_BlendMode blendMode)
 
SDL_BlendOperation SDL_GetBlendModeAlphaOperation (SDL_BlendMode blendMode)
 
voidSDL_AllocateRenderVertices (SDL_Renderer *renderer, const size_t numbytes, const size_t alignment, size_t *offset)
 

Variables

SDL_RenderDriver D3D_RenderDriver
 
SDL_RenderDriver D3D11_RenderDriver
 
SDL_RenderDriver GL_RenderDriver
 
SDL_RenderDriver GLES2_RenderDriver
 
SDL_RenderDriver GLES_RenderDriver
 
SDL_RenderDriver DirectFB_RenderDriver
 
SDL_RenderDriver METAL_RenderDriver
 
SDL_RenderDriver PSP_RenderDriver
 
SDL_RenderDriver SW_RenderDriver
 

Enumeration Type Documentation

◆ SDL_RenderCommandType

Enumerator
SDL_RENDERCMD_NO_OP 
SDL_RENDERCMD_SETVIEWPORT 
SDL_RENDERCMD_SETCLIPRECT 
SDL_RENDERCMD_SETDRAWCOLOR 
SDL_RENDERCMD_CLEAR 
SDL_RENDERCMD_DRAW_POINTS 
SDL_RENDERCMD_DRAW_LINES 
SDL_RENDERCMD_FILL_RECTS 
SDL_RENDERCMD_COPY 
SDL_RENDERCMD_COPY_EX 

Definition at line 72 of file SDL_sysrender.h.

73{
SDL_RenderCommandType
Definition: SDL_sysrender.h:73
@ SDL_RENDERCMD_SETCLIPRECT
Definition: SDL_sysrender.h:76
@ SDL_RENDERCMD_DRAW_LINES
Definition: SDL_sysrender.h:80
@ SDL_RENDERCMD_SETVIEWPORT
Definition: SDL_sysrender.h:75
@ SDL_RENDERCMD_DRAW_POINTS
Definition: SDL_sysrender.h:79
@ SDL_RENDERCMD_NO_OP
Definition: SDL_sysrender.h:74
@ SDL_RENDERCMD_FILL_RECTS
Definition: SDL_sysrender.h:81
@ SDL_RENDERCMD_COPY
Definition: SDL_sysrender.h:82
@ SDL_RENDERCMD_CLEAR
Definition: SDL_sysrender.h:78
@ SDL_RENDERCMD_SETDRAWCOLOR
Definition: SDL_sysrender.h:77
@ SDL_RENDERCMD_COPY_EX
Definition: SDL_sysrender.h:83

◆ SDL_ScaleMode

Enumerator
SDL_ScaleModeNearest 
SDL_ScaleModeLinear 
SDL_ScaleModeBest 

Definition at line 35 of file SDL_sysrender.h.

36{
SDL_ScaleMode
Definition: SDL_sysrender.h:36
@ SDL_ScaleModeLinear
Definition: SDL_sysrender.h:38
@ SDL_ScaleModeBest
Definition: SDL_sysrender.h:39
@ SDL_ScaleModeNearest
Definition: SDL_sysrender.h:37

Function Documentation

◆ SDL_AllocateRenderVertices()

void * SDL_AllocateRenderVertices ( SDL_Renderer renderer,
const size_t  numbytes,
const size_t  alignment,
size_t offset 
)

Definition at line 284 of file SDL_render.c.

285{
286 const size_t needed = renderer->vertex_data_used + numbytes + alignment;
287 size_t aligner, aligned;
288 void *retval;
289
291 SDL_AllocVertGap *gap = prevgap->next;
292 while (gap) {
293 const size_t gapoffset = gap->offset;
294 aligner = (alignment && ((gap->offset % alignment) != 0)) ? (alignment - (gap->offset % alignment)) : 0;
295 aligned = gapoffset + aligner;
296
297 /* Can we use this gap? */
298 if ((aligner < gap->len) && ((gap->len - aligner) >= numbytes)) {
299 /* we either finished this gap off, trimmed the left, trimmed the right, or split it into two gaps. */
300 if (gap->len == numbytes) { /* finished it off, remove it */
301 SDL_assert(aligned == gapoffset);
302 prevgap->next = gap->next;
305 } else if (aligned == gapoffset) { /* trimmed the left */
306 gap->offset += numbytes;
307 gap->len -= numbytes;
308 } else if (((aligned - gapoffset) + numbytes) == gap->len) { /* trimmed the right */
309 gap->len -= numbytes;
310 } else { /* split into two gaps */
312 if (!newgap) {
313 return NULL;
314 }
315 newgap->offset = aligned + numbytes;
316 newgap->len = gap->len - (aligner + numbytes);
317 newgap->next = gap->next;
318 // gap->offset doesn't change.
319 gap->len = aligner;
320 gap->next = newgap;
321 }
322
323 if (offset) {
324 *offset = aligned;
325 }
326 return ((Uint8 *) renderer->vertex_data) + aligned;
327 }
328
329 /* Try the next gap */
330 prevgap = gap;
331 gap = gap->next;
332 }
333
334 /* no gaps with enough space; get a new piece of the vertex buffer */
335 while (needed > renderer->vertex_data_allocation) {
336 const size_t current_allocation = renderer->vertex_data ? renderer->vertex_data_allocation : 1024;
337 const size_t newsize = current_allocation * 2;
338 void *ptr = SDL_realloc(renderer->vertex_data, newsize);
339 if (ptr == NULL) {
341 return NULL;
342 }
343 renderer->vertex_data = ptr;
345 }
346
347 aligner = (alignment && ((renderer->vertex_data_used % alignment) != 0)) ? (alignment - (renderer->vertex_data_used % alignment)) : 0;
348 aligned = renderer->vertex_data_used + aligner;
349
350 retval = ((Uint8 *) renderer->vertex_data) + aligned;
351 if (offset) {
352 *offset = aligned;
353 }
354
355 if (aligner) { /* made a new gap... */
357 if (newgap) { /* just let it slide as lost space if malloc fails. */
359 newgap->len = aligner;
360 newgap->next = NULL;
361 prevgap->next = newgap;
362 }
363 }
364
365 renderer->vertex_data_used += aligner + numbytes;
366
367 return retval;
368}
#define SDL_assert(condition)
Definition: SDL_assert.h:169
#define SDL_realloc
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
GLintptr offset
GLenum GLsizei len
static SDL_AllocVertGap * AllocateVertexGap(SDL_Renderer *renderer)
Definition: SDL_render.c:267
uint8_t Uint8
Definition: SDL_stdinc.h:179
#define NULL
Definition: begin_code.h:167
struct SDL_AllocVertGap * next
SDL_AllocVertGap vertex_data_gaps
size_t vertex_data_allocation
void * vertex_data
SDL_AllocVertGap * vertex_data_gaps_pool
size_t vertex_data_used
static SDL_Renderer * renderer
SDL_bool retval

References AllocateVertexGap(), SDL_AllocVertGap::len, SDL_AllocVertGap::next, NULL, SDL_AllocVertGap::offset, renderer, retval, SDL_assert, SDL_OutOfMemory, SDL_realloc, SDL_Renderer::vertex_data, SDL_Renderer::vertex_data_allocation, SDL_Renderer::vertex_data_gaps, SDL_Renderer::vertex_data_gaps_pool, and SDL_Renderer::vertex_data_used.

Referenced by SW_QueueCopy(), SW_QueueCopyEx(), SW_QueueDrawPoints(), and SW_QueueFillRects().

◆ SDL_GetBlendModeAlphaOperation()

SDL_BlendOperation SDL_GetBlendModeAlphaOperation ( SDL_BlendMode  blendMode)

Definition at line 3377 of file SDL_render.c.

3378{
3380 return (SDL_BlendOperation)(((Uint32)blendMode >> 16) & 0xF);
3381}
SDL_BlendOperation
The blend operation used when combining source and destination pixel components.
Definition: SDL_blendmode.h:63
static SDL_BlendMode SDL_GetLongBlendMode(SDL_BlendMode blendMode)
Definition: SDL_render.c:3313
uint32_t Uint32
Definition: SDL_stdinc.h:203
static SDL_BlendMode blendMode
Definition: testdraw2.c:34

References blendMode, and SDL_GetLongBlendMode().

◆ SDL_GetBlendModeColorOperation()

SDL_BlendOperation SDL_GetBlendModeColorOperation ( SDL_BlendMode  blendMode)

Definition at line 3356 of file SDL_render.c.

3357{
3359 return (SDL_BlendOperation)(((Uint32)blendMode >> 0) & 0xF);
3360}

References blendMode, and SDL_GetLongBlendMode().

◆ SDL_GetBlendModeDstAlphaFactor()

SDL_BlendFactor SDL_GetBlendModeDstAlphaFactor ( SDL_BlendMode  blendMode)

Definition at line 3370 of file SDL_render.c.

3371{
3373 return (SDL_BlendFactor)(((Uint32)blendMode >> 24) & 0xF);
3374}
SDL_BlendFactor
The normalized factor used to multiply pixel components.
Definition: SDL_blendmode.h:76

References blendMode, and SDL_GetLongBlendMode().

◆ SDL_GetBlendModeDstColorFactor()

SDL_BlendFactor SDL_GetBlendModeDstColorFactor ( SDL_BlendMode  blendMode)

Definition at line 3349 of file SDL_render.c.

3350{
3352 return (SDL_BlendFactor)(((Uint32)blendMode >> 8) & 0xF);
3353}

References blendMode, and SDL_GetLongBlendMode().

◆ SDL_GetBlendModeSrcAlphaFactor()

SDL_BlendFactor SDL_GetBlendModeSrcAlphaFactor ( SDL_BlendMode  blendMode)

Definition at line 3363 of file SDL_render.c.

3364{
3366 return (SDL_BlendFactor)(((Uint32)blendMode >> 20) & 0xF);
3367}

References blendMode, and SDL_GetLongBlendMode().

◆ SDL_GetBlendModeSrcColorFactor()

SDL_BlendFactor SDL_GetBlendModeSrcColorFactor ( SDL_BlendMode  blendMode)

Definition at line 3342 of file SDL_render.c.

3343{
3345 return (SDL_BlendFactor)(((Uint32)blendMode >> 4) & 0xF);
3346}

References blendMode, and SDL_GetLongBlendMode().

Variable Documentation

◆ D3D11_RenderDriver

SDL_RenderDriver D3D11_RenderDriver
extern

◆ D3D_RenderDriver

SDL_RenderDriver D3D_RenderDriver
extern

◆ DirectFB_RenderDriver

SDL_RenderDriver DirectFB_RenderDriver
extern

◆ GL_RenderDriver

SDL_RenderDriver GL_RenderDriver
extern

◆ GLES2_RenderDriver

SDL_RenderDriver GLES2_RenderDriver
extern

◆ GLES_RenderDriver

SDL_RenderDriver GLES_RenderDriver
extern

◆ METAL_RenderDriver

SDL_RenderDriver METAL_RenderDriver
extern

◆ PSP_RenderDriver

SDL_RenderDriver PSP_RenderDriver
extern

◆ SW_RenderDriver

SDL_RenderDriver SW_RenderDriver
extern

Definition at line 866 of file SDL_render_sw.c.

Referenced by SW_CreateRendererForSurface().