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.

◆ SDL_ScaleMode

Enumerator
SDL_ScaleModeNearest 
SDL_ScaleModeLinear 
SDL_ScaleModeBest 

Definition at line 35 of file SDL_sysrender.h.

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.

References AllocateVertexGap(), SDL_AllocVertGap::len, SDL_AllocVertGap::next, NULL, SDL_AllocVertGap::offset, 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().

285 {
286  const size_t needed = renderer->vertex_data_used + numbytes + alignment;
287  size_t aligner, aligned;
288  void *retval;
289 
290  SDL_AllocVertGap *prevgap = &renderer->vertex_data_gaps;
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;
303  gap->next = renderer->vertex_data_gaps_pool;
304  renderer->vertex_data_gaps_pool = gap;
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 */
311  SDL_AllocVertGap *newgap = AllocateVertexGap(renderer);
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) {
340  SDL_OutOfMemory();
341  return NULL;
342  }
343  renderer->vertex_data = ptr;
344  renderer->vertex_data_allocation = newsize;
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... */
356  SDL_AllocVertGap *newgap = AllocateVertexGap(renderer);
357  if (newgap) { /* just let it slide as lost space if malloc fails. */
358  newgap->offset = renderer->vertex_data_used;
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 }
static SDL_AllocVertGap * AllocateVertexGap(SDL_Renderer *renderer)
Definition: SDL_render.c:267
SDL_AllocVertGap * vertex_data_gaps_pool
size_t vertex_data_used
struct SDL_AllocVertGap * next
GLintptr offset
#define SDL_realloc
GLenum GLsizei len
SDL_bool retval
uint8_t Uint8
Definition: SDL_stdinc.h:179
size_t vertex_data_allocation
#define SDL_assert(condition)
Definition: SDL_assert.h:169
#define NULL
Definition: begin_code.h:167
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_AllocVertGap vertex_data_gaps
void * vertex_data

◆ SDL_GetBlendModeAlphaOperation()

SDL_BlendOperation SDL_GetBlendModeAlphaOperation ( SDL_BlendMode  blendMode)

Definition at line 3377 of file SDL_render.c.

References SDL_GetLongBlendMode().

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:62
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
uint32_t Uint32
Definition: SDL_stdinc.h:203
static SDL_BlendMode SDL_GetLongBlendMode(SDL_BlendMode blendMode)
Definition: SDL_render.c:3313

◆ SDL_GetBlendModeColorOperation()

SDL_BlendOperation SDL_GetBlendModeColorOperation ( SDL_BlendMode  blendMode)

Definition at line 3356 of file SDL_render.c.

References SDL_GetLongBlendMode().

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

◆ SDL_GetBlendModeDstAlphaFactor()

SDL_BlendFactor SDL_GetBlendModeDstAlphaFactor ( SDL_BlendMode  blendMode)

Definition at line 3370 of file SDL_render.c.

References SDL_GetLongBlendMode().

3371 {
3373  return (SDL_BlendFactor)(((Uint32)blendMode >> 24) & 0xF);
3374 }
SDL_BlendFactor
The normalized factor used to multiply pixel components.
Definition: SDL_blendmode.h:75
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
uint32_t Uint32
Definition: SDL_stdinc.h:203
static SDL_BlendMode SDL_GetLongBlendMode(SDL_BlendMode blendMode)
Definition: SDL_render.c:3313

◆ SDL_GetBlendModeDstColorFactor()

SDL_BlendFactor SDL_GetBlendModeDstColorFactor ( SDL_BlendMode  blendMode)

Definition at line 3349 of file SDL_render.c.

References SDL_GetLongBlendMode().

3350 {
3352  return (SDL_BlendFactor)(((Uint32)blendMode >> 8) & 0xF);
3353 }
SDL_BlendFactor
The normalized factor used to multiply pixel components.
Definition: SDL_blendmode.h:75
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
uint32_t Uint32
Definition: SDL_stdinc.h:203
static SDL_BlendMode SDL_GetLongBlendMode(SDL_BlendMode blendMode)
Definition: SDL_render.c:3313

◆ SDL_GetBlendModeSrcAlphaFactor()

SDL_BlendFactor SDL_GetBlendModeSrcAlphaFactor ( SDL_BlendMode  blendMode)

Definition at line 3363 of file SDL_render.c.

References SDL_GetLongBlendMode().

3364 {
3366  return (SDL_BlendFactor)(((Uint32)blendMode >> 20) & 0xF);
3367 }
SDL_BlendFactor
The normalized factor used to multiply pixel components.
Definition: SDL_blendmode.h:75
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
uint32_t Uint32
Definition: SDL_stdinc.h:203
static SDL_BlendMode SDL_GetLongBlendMode(SDL_BlendMode blendMode)
Definition: SDL_render.c:3313

◆ SDL_GetBlendModeSrcColorFactor()

SDL_BlendFactor SDL_GetBlendModeSrcColorFactor ( SDL_BlendMode  blendMode)

Definition at line 3342 of file SDL_render.c.

References SDL_GetLongBlendMode().

3343 {
3345  return (SDL_BlendFactor)(((Uint32)blendMode >> 4) & 0xF);
3346 }
SDL_BlendFactor
The normalized factor used to multiply pixel components.
Definition: SDL_blendmode.h:75
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
uint32_t Uint32
Definition: SDL_stdinc.h:203
static SDL_BlendMode SDL_GetLongBlendMode(SDL_BlendMode blendMode)
Definition: SDL_render.c:3313

Variable Documentation

◆ D3D11_RenderDriver

SDL_RenderDriver D3D11_RenderDriver

◆ D3D_RenderDriver

SDL_RenderDriver D3D_RenderDriver

◆ DirectFB_RenderDriver

SDL_RenderDriver DirectFB_RenderDriver

◆ GL_RenderDriver

SDL_RenderDriver GL_RenderDriver

◆ GLES2_RenderDriver

SDL_RenderDriver GLES2_RenderDriver

◆ GLES_RenderDriver

SDL_RenderDriver GLES_RenderDriver

◆ METAL_RenderDriver

SDL_RenderDriver METAL_RenderDriver

◆ PSP_RenderDriver

SDL_RenderDriver PSP_RenderDriver

◆ SW_RenderDriver

SDL_RenderDriver SW_RenderDriver

Definition at line 866 of file SDL_render_sw.c.

Referenced by SW_CreateRendererForSurface().