SDL  2.0
SDL_render.h File Reference
#include "SDL_stdinc.h"
#include "SDL_rect.h"
#include "SDL_video.h"
#include "begin_code.h"
#include "close_code.h"
+ Include dependency graph for SDL_render.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  SDL_RendererInfo
 Information on the capabilities of a render driver or context. More...
 

Enumerations

enum  SDL_RendererFlags {
  SDL_RENDERER_SOFTWARE = 0x00000001,
  SDL_RENDERER_ACCELERATED = 0x00000002,
  SDL_RENDERER_PRESENTVSYNC = 0x00000004,
  SDL_RENDERER_TARGETTEXTURE = 0x00000008
}
 Flags used when creating a rendering context. More...
 
enum  SDL_TextureAccess {
  SDL_TEXTUREACCESS_STATIC,
  SDL_TEXTUREACCESS_STREAMING,
  SDL_TEXTUREACCESS_TARGET
}
 The access pattern allowed for a texture. More...
 
enum  SDL_TextureModulate {
  SDL_TEXTUREMODULATE_NONE = 0x00000000,
  SDL_TEXTUREMODULATE_COLOR = 0x00000001,
  SDL_TEXTUREMODULATE_ALPHA = 0x00000002
}
 The texture channel modulation used in SDL_RenderCopy(). More...
 
enum  SDL_RendererFlip {
  SDL_FLIP_NONE = 0x00000000,
  SDL_FLIP_HORIZONTAL = 0x00000001,
  SDL_FLIP_VERTICAL = 0x00000002
}
 Flip constants for SDL_RenderCopyEx. More...
 

Functions

int SDL_GetNumRenderDrivers (void)
 Get the number of 2D rendering drivers available for the current display. More...
 
int SDL_GetRenderDriverInfo (int index, SDL_RendererInfo *info)
 Get information about a specific 2D rendering driver for the current display. More...
 
int SDL_CreateWindowAndRenderer (int width, int height, Uint32 window_flags, SDL_Window **window, SDL_Renderer **renderer)
 Create a window and default renderer. More...
 
SDL_RendererSDL_CreateRenderer (SDL_Window *window, int index, Uint32 flags)
 Create a 2D rendering context for a window. More...
 
SDL_RendererSDL_CreateSoftwareRenderer (SDL_Surface *surface)
 Create a 2D software rendering context for a surface. More...
 
SDL_RendererSDL_GetRenderer (SDL_Window *window)
 Get the renderer associated with a window. More...
 
int SDL_GetRendererInfo (SDL_Renderer *renderer, SDL_RendererInfo *info)
 Get information about a rendering context. More...
 
int SDL_GetRendererOutputSize (SDL_Renderer *renderer, int *w, int *h)
 Get the output size in pixels of a rendering context. More...
 
SDL_TextureSDL_CreateTexture (SDL_Renderer *renderer, Uint32 format, int access, int w, int h)
 Create a texture for a rendering context. More...
 
SDL_TextureSDL_CreateTextureFromSurface (SDL_Renderer *renderer, SDL_Surface *surface)
 Create a texture from an existing surface. More...
 
int SDL_QueryTexture (SDL_Texture *texture, Uint32 *format, int *access, int *w, int *h)
 Query the attributes of a texture. More...
 
int SDL_SetTextureColorMod (SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b)
 Set an additional color value used in render copy operations. More...
 
int SDL_GetTextureColorMod (SDL_Texture *texture, Uint8 *r, Uint8 *g, Uint8 *b)
 Get the additional color value used in render copy operations. More...
 
int SDL_SetTextureAlphaMod (SDL_Texture *texture, Uint8 alpha)
 Set an additional alpha value used in render copy operations. More...
 
int SDL_GetTextureAlphaMod (SDL_Texture *texture, Uint8 *alpha)
 Get the additional alpha value used in render copy operations. More...
 
int SDL_SetTextureBlendMode (SDL_Texture *texture, SDL_BlendMode blendMode)
 Set the blend mode used for texture copy operations. More...
 
int SDL_GetTextureBlendMode (SDL_Texture *texture, SDL_BlendMode *blendMode)
 Get the blend mode used for texture copy operations. More...
 
int SDL_UpdateTexture (SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
 Update the given texture rectangle with new pixel data. More...
 
int SDL_UpdateYUVTexture (SDL_Texture *texture, const SDL_Rect *rect, const Uint8 *Yplane, int Ypitch, const Uint8 *Uplane, int Upitch, const Uint8 *Vplane, int Vpitch)
 Update a rectangle within a planar YV12 or IYUV texture with new pixel data. More...
 
int SDL_LockTexture (SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch)
 Lock a portion of the texture for write-only pixel access. More...
 
void SDL_UnlockTexture (SDL_Texture *texture)
 Unlock a texture, uploading the changes to video memory, if needed. More...
 
SDL_bool SDL_RenderTargetSupported (SDL_Renderer *renderer)
 Determines whether a window supports the use of render targets. More...
 
int SDL_SetRenderTarget (SDL_Renderer *renderer, SDL_Texture *texture)
 Set a texture as the current rendering target. More...
 
SDL_TextureSDL_GetRenderTarget (SDL_Renderer *renderer)
 Get the current render target or NULL for the default render target. More...
 
int SDL_RenderSetLogicalSize (SDL_Renderer *renderer, int w, int h)
 Set device independent resolution for rendering. More...
 
void SDL_RenderGetLogicalSize (SDL_Renderer *renderer, int *w, int *h)
 Get device independent resolution for rendering. More...
 
int SDL_RenderSetViewport (SDL_Renderer *renderer, const SDL_Rect *rect)
 Set the drawing area for rendering on the current target. More...
 
void SDL_RenderGetViewport (SDL_Renderer *renderer, SDL_Rect *rect)
 Get the drawing area for the current target. More...
 
int SDL_RenderSetClipRect (SDL_Renderer *renderer, const SDL_Rect *rect)
 Set the clip rectangle for the current target. More...
 
void SDL_RenderGetClipRect (SDL_Renderer *renderer, SDL_Rect *rect)
 Get the clip rectangle for the current target. More...
 
SDL_bool SDL_RenderIsClipEnabled (SDL_Renderer *renderer)
 Get whether clipping is enabled on the given renderer. More...
 
int SDL_RenderSetScale (SDL_Renderer *renderer, float scaleX, float scaleY)
 Set the drawing scale for rendering on the current target. More...
 
void SDL_RenderGetScale (SDL_Renderer *renderer, float *scaleX, float *scaleY)
 Get the drawing scale for the current target. More...
 
int SDL_SetRenderDrawColor (SDL_Renderer *renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 Set the color used for drawing operations (Rect, Line and Clear). More...
 
int SDL_GetRenderDrawColor (SDL_Renderer *renderer, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)
 Get the color used for drawing operations (Rect, Line and Clear). More...
 
int SDL_SetRenderDrawBlendMode (SDL_Renderer *renderer, SDL_BlendMode blendMode)
 Set the blend mode used for drawing operations (Fill and Line). More...
 
int SDL_GetRenderDrawBlendMode (SDL_Renderer *renderer, SDL_BlendMode *blendMode)
 Get the blend mode used for drawing operations. More...
 
int SDL_RenderClear (SDL_Renderer *renderer)
 Clear the current rendering target with the drawing color. More...
 
int SDL_RenderDrawPoint (SDL_Renderer *renderer, int x, int y)
 Draw a point on the current rendering target. More...
 
int SDL_RenderDrawPoints (SDL_Renderer *renderer, const SDL_Point *points, int count)
 Draw multiple points on the current rendering target. More...
 
int SDL_RenderDrawLine (SDL_Renderer *renderer, int x1, int y1, int x2, int y2)
 Draw a line on the current rendering target. More...
 
int SDL_RenderDrawLines (SDL_Renderer *renderer, const SDL_Point *points, int count)
 Draw a series of connected lines on the current rendering target. More...
 
int SDL_RenderDrawRect (SDL_Renderer *renderer, const SDL_Rect *rect)
 Draw a rectangle on the current rendering target. More...
 
int SDL_RenderDrawRects (SDL_Renderer *renderer, const SDL_Rect *rects, int count)
 Draw some number of rectangles on the current rendering target. More...
 
int SDL_RenderFillRect (SDL_Renderer *renderer, const SDL_Rect *rect)
 Fill a rectangle on the current rendering target with the drawing color. More...
 
int SDL_RenderFillRects (SDL_Renderer *renderer, const SDL_Rect *rects, int count)
 Fill some number of rectangles on the current rendering target with the drawing color. More...
 
int SDL_RenderCopy (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_Rect *dstrect)
 Copy a portion of the texture to the current rendering target. More...
 
int SDL_RenderCopyEx (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_Rect *dstrect, const double angle, const SDL_Point *center, const SDL_RendererFlip flip)
 Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center. More...
 
int SDL_RenderReadPixels (SDL_Renderer *renderer, const SDL_Rect *rect, Uint32 format, void *pixels, int pitch)
 Read pixels from the current rendering target. More...
 
void SDL_RenderPresent (SDL_Renderer *renderer)
 Update the screen with rendering performed. More...
 
void SDL_DestroyTexture (SDL_Texture *texture)
 Destroy the specified texture. More...
 
void SDL_DestroyRenderer (SDL_Renderer *renderer)
 Destroy the rendering context for a window and free associated textures. More...
 
int SDL_GL_BindTexture (SDL_Texture *texture, float *texw, float *texh)
 Bind the texture to the current OpenGL/ES/ES2 context for use with OpenGL instructions. More...
 
int SDL_GL_UnbindTexture (SDL_Texture *texture)
 Unbind a texture from the current OpenGL/ES/ES2 context. More...
 

Detailed Description

Header file for SDL 2D rendering functions.

This API supports the following features:

  • single pixel points
  • single pixel lines
  • filled rectangles
  • texture images

The primitives may be drawn in opaque, blended, or additive modes.

The texture images may be drawn in opaque, blended, or additive modes. They can have an additional color tint or alpha modulation applied to them, and may also be stretched with linear interpolation.

This API is designed to accelerate simple 2D operations. You may want more functionality such as polygons and particle effects and in that case you should use SDL's OpenGL/Direct3D support or one of the many good 3D engines.

These functions must be called from the main thread. See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995

Definition in file SDL_render.h.

Enumeration Type Documentation

Flags used when creating a rendering context.

Enumerator
SDL_RENDERER_SOFTWARE 

The renderer is a software fallback

SDL_RENDERER_ACCELERATED 

The renderer uses hardware acceleration

SDL_RENDERER_PRESENTVSYNC 

Present is synchronized with the refresh rate

SDL_RENDERER_TARGETTEXTURE 

The renderer supports rendering to texture

Definition at line 64 of file SDL_render.h.

65 {
66  SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */
67  SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware
68  acceleration */
69  SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized
70  with the refresh rate */
71  SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports
72  rendering to texture */
SDL_RendererFlags
Flags used when creating a rendering context.
Definition: SDL_render.h:64

Flip constants for SDL_RenderCopyEx.

Enumerator
SDL_FLIP_NONE 

Do not flip

SDL_FLIP_HORIZONTAL 

flip horizontally

SDL_FLIP_VERTICAL 

flip vertically

Definition at line 111 of file SDL_render.h.

112 {
113  SDL_FLIP_NONE = 0x00000000, /**< Do not flip */
114  SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */
115  SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */
SDL_RendererFlip
Flip constants for SDL_RenderCopyEx.
Definition: SDL_render.h:111

The access pattern allowed for a texture.

Enumerator
SDL_TEXTUREACCESS_STATIC 

Changes rarely, not lockable

SDL_TEXTUREACCESS_STREAMING 

Changes frequently, lockable

SDL_TEXTUREACCESS_TARGET 

Texture can be used as a render target

Definition at line 91 of file SDL_render.h.

92 {
93  SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */
94  SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */
95  SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */
SDL_TextureAccess
The access pattern allowed for a texture.
Definition: SDL_render.h:91

The texture channel modulation used in SDL_RenderCopy().

Enumerator
SDL_TEXTUREMODULATE_NONE 

No modulation

SDL_TEXTUREMODULATE_COLOR 

srcC = srcC * color

SDL_TEXTUREMODULATE_ALPHA 

srcA = srcA * alpha

Definition at line 101 of file SDL_render.h.

102 {
103  SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */
104  SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */
105  SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */
SDL_TextureModulate
The texture channel modulation used in SDL_RenderCopy().
Definition: SDL_render.h:101

Function Documentation

SDL_Renderer* SDL_CreateRenderer ( SDL_Window window,
int  index,
Uint32  flags 
)

Create a 2D rendering context for a window.

Parameters
windowThe window where rendering is displayed.
indexThe index of the rendering driver to initialize, or -1 to initialize the first one supporting the requested flags.
flagsSDL_RendererFlags.
Returns
A valid rendering context or NULL if there was an error.
See also
SDL_CreateSoftwareRenderer()
SDL_GetRendererInfo()
SDL_DestroyRenderer()

Definition at line 220 of file SDL_render.c.

References SDL_RenderDriver::CreateRenderer, SDL_RendererInfo::flags, SDL_Renderer::hidden, SDL_Renderer::info, SDL_RenderDriver::info, SDL_Renderer::magic, SDL_RendererInfo::name, NULL, renderer, renderer_magic, SDL_Renderer::scale, SDL_AddEventWatch, SDL_FALSE, SDL_GetHint, SDL_GetNumRenderDrivers(), SDL_GetRenderer(), SDL_GetWindowFlags, SDL_HINT_RENDER_DRIVER, SDL_HINT_RENDER_VSYNC, SDL_LOG_CATEGORY_RENDER, SDL_LogInfo, SDL_RENDERER_PRESENTVSYNC, SDL_RendererEventWatch(), SDL_RenderSetViewport(), SDL_SetError, SDL_SetWindowData, SDL_strcasecmp, SDL_TRUE, SDL_WINDOW_HIDDEN, SDL_WINDOW_MINIMIZED, SDL_WINDOWRENDERDATA, window, SDL_Renderer::window, SDL_FPoint::x, and SDL_FPoint::y.

Referenced by SDL_CreateWindowAndRenderer().

221 {
222 #if !SDL_RENDER_DISABLED
224  int n = SDL_GetNumRenderDrivers();
225  const char *hint;
226 
227  if (!window) {
228  SDL_SetError("Invalid window");
229  return NULL;
230  }
231 
232  if (SDL_GetRenderer(window)) {
233  SDL_SetError("Renderer already associated with window");
234  return NULL;
235  }
236 
238  if (hint) {
239  if (*hint == '0') {
241  } else {
243  }
244  }
245 
246  if (index < 0) {
248  if (hint) {
249  for (index = 0; index < n; ++index) {
250  const SDL_RenderDriver *driver = render_drivers[index];
251 
252  if (SDL_strcasecmp(hint, driver->info.name) == 0) {
253  /* Create a new renderer instance */
254  renderer = driver->CreateRenderer(window, flags);
255  break;
256  }
257  }
258  }
259 
260  if (!renderer) {
261  for (index = 0; index < n; ++index) {
262  const SDL_RenderDriver *driver = render_drivers[index];
263 
264  if ((driver->info.flags & flags) == flags) {
265  /* Create a new renderer instance */
266  renderer = driver->CreateRenderer(window, flags);
267  if (renderer) {
268  /* Yay, we got one! */
269  break;
270  }
271  }
272  }
273  }
274  if (index == n) {
275  SDL_SetError("Couldn't find matching render driver");
276  return NULL;
277  }
278  } else {
279  if (index >= SDL_GetNumRenderDrivers()) {
280  SDL_SetError("index must be -1 or in the range of 0 - %d",
282  return NULL;
283  }
284  /* Create a new renderer instance */
285  renderer = render_drivers[index]->CreateRenderer(window, flags);
286  }
287 
288  if (renderer) {
289  renderer->magic = &renderer_magic;
290  renderer->window = window;
291  renderer->scale.x = 1.0f;
292  renderer->scale.y = 1.0f;
293 
295  renderer->hidden = SDL_TRUE;
296  } else {
297  renderer->hidden = SDL_FALSE;
298  }
299 
300  SDL_SetWindowData(window, SDL_WINDOWRENDERDATA, renderer);
301 
302  SDL_RenderSetViewport(renderer, NULL);
303 
305 
307  "Created renderer: %s", renderer->info.name);
308  }
309  return renderer;
310 #else
311  SDL_SetError("SDL not built with rendering support");
312  return NULL;
313 #endif
314 }
GLdouble n
#define SDL_HINT_RENDER_VSYNC
A variable controlling whether updates to the SDL screen surface should be synchronized with the vert...
Definition: SDL_hints.h:142
SDL_RendererInfo info
SDL_Window * window
SDL_bool hidden
SDL_FPoint scale
#define SDL_GetHint
#define SDL_GetWindowFlags
int SDL_RenderSetViewport(SDL_Renderer *renderer, const SDL_Rect *rect)
Set the drawing area for rendering on the current target.
Definition: SDL_render.c:1219
#define SDL_strcasecmp
const char * name
Definition: SDL_render.h:80
SDL_Window * window
SDL_RendererInfo info
#define SDL_SetWindowData
SDL_Renderer * renderer
SDL_Renderer *(* CreateRenderer)(SDL_Window *window, Uint32 flags)
int SDL_GetNumRenderDrivers(void)
Get the number of 2D rendering drivers available for the current display.
Definition: SDL_render.c:81
GLuint index
#define NULL
Definition: begin_code.h:143
#define SDL_SetError
static const SDL_RenderDriver * render_drivers[]
Definition: SDL_render.c:49
#define SDL_WINDOWRENDERDATA
Definition: SDL_render.c:33
#define SDL_AddEventWatch
#define SDL_LogInfo
SDL_Renderer * SDL_GetRenderer(SDL_Window *window)
Get the renderer associated with a window.
Definition: SDL_render.c:339
#define SDL_HINT_RENDER_DRIVER
A variable specifying which render driver to use.
Definition: SDL_hints.h:84
const void * magic
Definition: SDL_sysrender.h:78
GLbitfield flags
static char renderer_magic
Definition: SDL_render.c:75
static int SDL_RendererEventWatch(void *userdata, SDL_Event *event)
Definition: SDL_render.c:106
SDL_Renderer* SDL_CreateSoftwareRenderer ( SDL_Surface surface)

Create a 2D software rendering context for a surface.

Parameters
surfaceThe surface where rendering is done.
Returns
A valid rendering context or NULL if there was an error.
See also
SDL_CreateRenderer()
SDL_DestroyRenderer()

Definition at line 317 of file SDL_render.c.

References SDL_Renderer::magic, NULL, renderer, renderer_magic, SDL_Renderer::scale, SDL_RenderSetViewport(), SDL_SetError, SW_CreateRendererForSurface(), SDL_FPoint::x, and SDL_FPoint::y.

318 {
319 #if !SDL_RENDER_DISABLED
321 
322  renderer = SW_CreateRendererForSurface(surface);
323 
324  if (renderer) {
325  renderer->magic = &renderer_magic;
326  renderer->scale.x = 1.0f;
327  renderer->scale.y = 1.0f;
328 
329  SDL_RenderSetViewport(renderer, NULL);
330  }
331  return renderer;
332 #else
333  SDL_SetError("SDL not built with rendering support");
334  return NULL;
335 #endif /* !SDL_RENDER_DISABLED */
336 }
SDL_FPoint scale
int SDL_RenderSetViewport(SDL_Renderer *renderer, const SDL_Rect *rect)
Set the drawing area for rendering on the current target.
Definition: SDL_render.c:1219
SDL_Renderer * SW_CreateRendererForSurface(SDL_Surface *surface)
SDL_Renderer * renderer
#define NULL
Definition: begin_code.h:143
#define SDL_SetError
const void * magic
Definition: SDL_sysrender.h:78
static char renderer_magic
Definition: SDL_render.c:75
SDL_Texture* SDL_CreateTexture ( SDL_Renderer renderer,
Uint32  format,
int  access,
int  w,
int  h 
)

Create a texture for a rendering context.

Parameters
rendererThe renderer.
formatThe format of the texture.
accessOne of the enumerated values in SDL_TextureAccess.
wThe width of the texture in pixels.
hThe height of the texture in pixels.
Returns
The created texture is returned, or NULL if no rendering context was active, the format was unsupported, or the width or height were out of range.
See also
SDL_QueryTexture()
SDL_UpdateTexture()
SDL_DestroyTexture()

Definition at line 411 of file SDL_render.c.

References SDL_Texture::a, SDL_Texture::access, SDL_Texture::b, CHECK_RENDERER_MAGIC, SDL_Renderer::CreateTexture, SDL_Texture::format, SDL_Texture::g, GetClosestSupportedFormat(), SDL_Texture::h, SDL_Renderer::info, IsSupportedFormat(), SDL_Texture::magic, SDL_RendererInfo::max_texture_height, SDL_RendererInfo::max_texture_width, SDL_Texture::native, SDL_Texture::next, NULL, SDL_Texture::pitch, SDL_Texture::pixels, SDL_Texture::prev, SDL_Texture::r, renderer, SDL_Texture::renderer, SDL_BYTESPERPIXEL, SDL_calloc(), SDL_DestroyTexture(), SDL_ISPIXELFORMAT_FOURCC, SDL_ISPIXELFORMAT_INDEXED, SDL_OutOfMemory, SDL_SetError, SDL_SW_CreateYUVTexture(), SDL_TEXTUREACCESS_STREAMING, SDL_RendererInfo::texture_formats, texture_magic, SDL_Renderer::textures, SDL_Texture::w, and SDL_Texture::yuv.

Referenced by SDL_CreateTextureFromSurface().

412 {
414 
415  CHECK_RENDERER_MAGIC(renderer, NULL);
416 
417  if (!format) {
418  format = renderer->info.texture_formats[0];
419  }
420  if (SDL_BYTESPERPIXEL(format) == 0) {
421  SDL_SetError("Invalid texture format");
422  return NULL;
423  }
425  SDL_SetError("Palettized textures are not supported");
426  return NULL;
427  }
428  if (w <= 0 || h <= 0) {
429  SDL_SetError("Texture dimensions can't be 0");
430  return NULL;
431  }
432  if ((renderer->info.max_texture_width && w > renderer->info.max_texture_width) ||
433  (renderer->info.max_texture_height && h > renderer->info.max_texture_height)) {
434  SDL_SetError("Texture dimensions are limited to %dx%d", renderer->info.max_texture_width, renderer->info.max_texture_height);
435  return NULL;
436  }
437  texture = (SDL_Texture *) SDL_calloc(1, sizeof(*texture));
438  if (!texture) {
439  SDL_OutOfMemory();
440  return NULL;
441  }
442  texture->magic = &texture_magic;
443  texture->format = format;
444  texture->access = access;
445  texture->w = w;
446  texture->h = h;
447  texture->r = 255;
448  texture->g = 255;
449  texture->b = 255;
450  texture->a = 255;
451  texture->renderer = renderer;
452  texture->next = renderer->textures;
453  if (renderer->textures) {
454  renderer->textures->prev = texture;
455  }
456  renderer->textures = texture;
457 
458  if (IsSupportedFormat(renderer, format)) {
459  if (renderer->CreateTexture(renderer, texture) < 0) {
460  SDL_DestroyTexture(texture);
461  return NULL;
462  }
463  } else {
464  texture->native = SDL_CreateTexture(renderer,
466  access, w, h);
467  if (!texture->native) {
468  SDL_DestroyTexture(texture);
469  return NULL;
470  }
471 
472  /* Swap textures to have texture before texture->native in the list */
473  texture->native->next = texture->next;
474  if (texture->native->next) {
475  texture->native->next->prev = texture->native;
476  }
477  texture->prev = texture->native->prev;
478  if (texture->prev) {
479  texture->prev->next = texture;
480  }
481  texture->native->prev = texture;
482  texture->next = texture->native;
483  renderer->textures = texture;
484 
485  if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
486  texture->yuv = SDL_SW_CreateYUVTexture(format, w, h);
487  if (!texture->yuv) {
488  SDL_DestroyTexture(texture);
489  return NULL;
490  }
491  } else if (access == SDL_TEXTUREACCESS_STREAMING) {
492  /* The pitch is 4 byte aligned */
493  texture->pitch = (((w * SDL_BYTESPERPIXEL(format)) + 3) & ~3);
494  texture->pixels = SDL_calloc(1, texture->pitch * h);
495  if (!texture->pixels) {
496  SDL_DestroyTexture(texture);
497  return NULL;
498  }
499  }
500  }
501  return texture;
502 }
void * pixels
Definition: SDL_sysrender.h:65
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1565
SDL_SW_YUVTexture * SDL_SW_CreateYUVTexture(Uint32 format, int w, int h)
Definition: SDL_yuv_sw.c:1021
static Uint32 GetClosestSupportedFormat(SDL_Renderer *renderer, Uint32 format)
Definition: SDL_render.c:385
SDL_RendererInfo info
#define SDL_ISPIXELFORMAT_INDEXED(format)
Definition: SDL_pixels.h:133
GLenum GLenum GLuint texture
Uint32 texture_formats[16]
Definition: SDL_render.h:83
#define SDL_BYTESPERPIXEL(X)
Definition: SDL_pixels.h:127
SDL_Texture * textures
int max_texture_height
Definition: SDL_render.h:85
static char texture_magic
Definition: SDL_render.c:76
GLuint GLint GLboolean GLint GLenum access
SDL_Renderer * renderer
SDL_Texture * next
Definition: SDL_sysrender.h:72
void * SDL_calloc(size_t nmemb, size_t size)
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
void SDL_DestroyTexture(SDL_Texture *texture)
Destroy the specified texture.
Definition: SDL_render.c:1842
SDL_Texture * prev
Definition: SDL_sysrender.h:71
SDL_SW_YUVTexture * yuv
Definition: SDL_sysrender.h:64
#define NULL
Definition: begin_code.h:143
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
#define SDL_SetError
static SDL_bool IsSupportedFormat(SDL_Renderer *renderer, Uint32 format)
Definition: SDL_render.c:372
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
Uint32 format
Definition: SDL_sysrender.h:52
GLubyte GLubyte GLubyte GLubyte w
int(* CreateTexture)(SDL_Renderer *renderer, SDL_Texture *texture)
Definition: SDL_sysrender.h:82
SDL_Texture * native
Definition: SDL_sysrender.h:63
#define SDL_ISPIXELFORMAT_FOURCC(format)
Definition: SDL_pixels.h:166
const void * magic
Definition: SDL_sysrender.h:51
SDL_Texture * SDL_CreateTexture(SDL_Renderer *renderer, Uint32 format, int access, int w, int h)
Create a texture for a rendering context.
Definition: SDL_render.c:411
GLfloat GLfloat GLfloat GLfloat h
SDL_Texture* SDL_CreateTextureFromSurface ( SDL_Renderer renderer,
SDL_Surface surface 
)

Create a texture from an existing surface.

Parameters
rendererThe renderer.
surfaceThe surface containing pixel data used to fill the texture.
Returns
The created texture is returned, or NULL on error.
Note
The surface is not modified or freed by this function.
See also
SDL_QueryTexture()
SDL_DestroyTexture()

Definition at line 505 of file SDL_render.c.

References SDL_PixelFormat::Amask, blendMode, CHECK_RENDERER_MAGIC, SDL_Surface::format, SDL_PixelFormat::format, SDL_Surface::h, i, SDL_Renderer::info, NULL, SDL_RendererInfo::num_texture_formats, SDL_Surface::pitch, SDL_Surface::pixels, SDL_AllocFormat, SDL_BLENDMODE_BLEND, SDL_ConvertSurface, SDL_CreateTexture(), SDL_DestroyTexture(), SDL_FALSE, SDL_FreeFormat, SDL_FreeSurface, SDL_GetColorKey, SDL_GetSurfaceAlphaMod, SDL_GetSurfaceBlendMode, SDL_GetSurfaceColorMod, SDL_ISPIXELFORMAT_ALPHA, SDL_ISPIXELFORMAT_FOURCC, SDL_LockSurface, SDL_MUSTLOCK, SDL_SetError, SDL_SetTextureAlphaMod(), SDL_SetTextureBlendMode(), SDL_SetTextureColorMod(), SDL_TEXTUREACCESS_STATIC, SDL_TRUE, SDL_UnlockSurface, SDL_UpdateTexture(), SDL_RendererInfo::texture_formats, and SDL_Surface::w.

506 {
507  const SDL_PixelFormat *fmt;
508  SDL_bool needAlpha;
509  Uint32 i;
510  Uint32 format;
512 
513  CHECK_RENDERER_MAGIC(renderer, NULL);
514 
515  if (!surface) {
516  SDL_SetError("SDL_CreateTextureFromSurface() passed NULL surface");
517  return NULL;
518  }
519 
520  /* See what the best texture format is */
521  fmt = surface->format;
522  if (fmt->Amask || SDL_GetColorKey(surface, NULL) == 0) {
523  needAlpha = SDL_TRUE;
524  } else {
525  needAlpha = SDL_FALSE;
526  }
527  format = renderer->info.texture_formats[0];
528  for (i = 0; i < renderer->info.num_texture_formats; ++i) {
529  if (!SDL_ISPIXELFORMAT_FOURCC(renderer->info.texture_formats[i]) &&
530  SDL_ISPIXELFORMAT_ALPHA(renderer->info.texture_formats[i]) == needAlpha) {
531  format = renderer->info.texture_formats[i];
532  break;
533  }
534  }
535 
536  texture = SDL_CreateTexture(renderer, format, SDL_TEXTUREACCESS_STATIC,
537  surface->w, surface->h);
538  if (!texture) {
539  return NULL;
540  }
541 
542  if (format == surface->format->format) {
543  if (SDL_MUSTLOCK(surface)) {
544  SDL_LockSurface(surface);
545  SDL_UpdateTexture(texture, NULL, surface->pixels, surface->pitch);
546  SDL_UnlockSurface(surface);
547  } else {
548  SDL_UpdateTexture(texture, NULL, surface->pixels, surface->pitch);
549  }
550  } else {
551  SDL_PixelFormat *dst_fmt;
552  SDL_Surface *temp = NULL;
553 
554  /* Set up a destination surface for the texture update */
555  dst_fmt = SDL_AllocFormat(format);
556  if (!dst_fmt) {
557  SDL_DestroyTexture(texture);
558  return NULL;
559  }
560  temp = SDL_ConvertSurface(surface, dst_fmt, 0);
561  SDL_FreeFormat(dst_fmt);
562  if (temp) {
563  SDL_UpdateTexture(texture, NULL, temp->pixels, temp->pitch);
564  SDL_FreeSurface(temp);
565  } else {
566  SDL_DestroyTexture(texture);
567  return NULL;
568  }
569  }
570 
571  {
572  Uint8 r, g, b, a;
574 
575  SDL_GetSurfaceColorMod(surface, &r, &g, &b);
576  SDL_SetTextureColorMod(texture, r, g, b);
577 
578  SDL_GetSurfaceAlphaMod(surface, &a);
579  SDL_SetTextureAlphaMod(texture, a);
580 
581  if (SDL_GetColorKey(surface, NULL) == 0) {
582  /* We converted to a texture with alpha format */
584  } else {
585  SDL_GetSurfaceBlendMode(surface, &blendMode);
586  SDL_SetTextureBlendMode(texture, blendMode);
587  }
588  }
589  return texture;
590 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1565
#define SDL_UnlockSurface
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2072
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
SDL_RendererInfo info
SDL_BlendMode
The blend mode used in SDL_RenderCopy() and drawing operations.
Definition: SDL_blendmode.h:40
#define SDL_ConvertSurface
GLenum GLenum GLuint texture
A collection of pixels used in software blitting.
Definition: SDL_surface.h:69
Uint32 texture_formats[16]
Definition: SDL_render.h:83
#define SDL_AllocFormat
#define SDL_ISPIXELFORMAT_ALPHA(format)
Definition: SDL_pixels.h:153
#define SDL_GetSurfaceBlendMode
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
SDL_bool
Definition: SDL_stdinc.h:126
GLboolean GLboolean g
int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode)
Set the blend mode used for texture copy operations.
Definition: SDL_render.c:691
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
void SDL_DestroyTexture(SDL_Texture *texture)
Destroy the specified texture.
Definition: SDL_render.c:1842
void * pixels
Definition: SDL_surface.h:75
#define SDL_GetColorKey
#define SDL_FreeSurface
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
#define SDL_FreeFormat
#define SDL_GetSurfaceAlphaMod
int SDL_SetTextureAlphaMod(SDL_Texture *texture, Uint8 alpha)
Set an additional alpha value used in render copy operations.
Definition: SDL_render.c:657
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
int SDL_UpdateTexture(SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
Update the given texture rectangle with new pixel data.
Definition: SDL_render.c:803
#define NULL
Definition: begin_code.h:143
SDL_PixelFormat * format
Definition: SDL_surface.h:72
#define SDL_SetError
#define SDL_LockSurface
#define SDL_GetSurfaceColorMod
#define SDL_MUSTLOCK(S)
Definition: SDL_surface.h:61
int SDL_SetTextureColorMod(SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b)
Set an additional color value used in render copy operations.
Definition: SDL_render.c:614
Uint32 num_texture_formats
Definition: SDL_render.h:82
#define SDL_ISPIXELFORMAT_FOURCC(format)
Definition: SDL_pixels.h:166
GLboolean GLboolean GLboolean GLboolean a
GLboolean GLboolean GLboolean b
SDL_Texture * SDL_CreateTexture(SDL_Renderer *renderer, Uint32 format, int access, int w, int h)
Create a texture for a rendering context.
Definition: SDL_render.c:411
int SDL_CreateWindowAndRenderer ( int  width,
int  height,
Uint32  window_flags,
SDL_Window **  window,
SDL_Renderer **  renderer 
)

Create a window and default renderer.

Parameters
widthThe width of the window
heightThe height of the window
window_flagsThe flags used to create the window
windowA pointer filled with the window, or NULL on error
rendererA pointer filled with the renderer, or NULL on error
Returns
0 on success, or -1 on error

Definition at line 200 of file SDL_render.c.

References NULL, SDL_CreateRenderer(), SDL_CreateWindow, and SDL_WINDOWPOS_UNDEFINED.

202 {
205  width, height, window_flags);
206  if (!*window) {
207  *renderer = NULL;
208  return -1;
209  }
210 
211  *renderer = SDL_CreateRenderer(*window, -1, 0);
212  if (!*renderer) {
213  return -1;
214  }
215 
216  return 0;
217 }
GLint GLint GLsizei width
Definition: SDL_opengl.h:1565
#define SDL_CreateWindow
#define SDL_WINDOWPOS_UNDEFINED
Definition: SDL_video.h:120
GLint GLint GLsizei GLsizei height
Definition: SDL_opengl.h:1565
#define NULL
Definition: begin_code.h:143
SDL_Renderer * SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags)
Create a 2D rendering context for a window.
Definition: SDL_render.c:220
void SDL_DestroyRenderer ( SDL_Renderer renderer)

Destroy the rendering context for a window and free associated textures.

See also
SDL_CreateRenderer()

Definition at line 1877 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::DestroyRenderer, SDL_Renderer::magic, NULL, SDL_DelEventWatch, SDL_DestroyTexture(), SDL_RendererEventWatch(), SDL_SetWindowData, SDL_WINDOWRENDERDATA, SDL_Renderer::textures, and SDL_Renderer::window.

1878 {
1879  CHECK_RENDERER_MAGIC(renderer, );
1880 
1882 
1883  /* Free existing textures for this renderer */
1884  while (renderer->textures) {
1885  SDL_DestroyTexture(renderer->textures);
1886  }
1887 
1888  if (renderer->window) {
1890  }
1891 
1892  /* It's no longer magical... */
1893  renderer->magic = NULL;
1894 
1895  /* Free the renderer instance */
1896  renderer->DestroyRenderer(renderer);
1897 }
#define SDL_DelEventWatch
SDL_Texture * textures
SDL_Window * window
void(* DestroyRenderer)(SDL_Renderer *renderer)
#define SDL_SetWindowData
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
void SDL_DestroyTexture(SDL_Texture *texture)
Destroy the specified texture.
Definition: SDL_render.c:1842
#define NULL
Definition: begin_code.h:143
#define SDL_WINDOWRENDERDATA
Definition: SDL_render.c:33
const void * magic
Definition: SDL_sysrender.h:78
static int SDL_RendererEventWatch(void *userdata, SDL_Event *event)
Definition: SDL_render.c:106
void SDL_DestroyTexture ( SDL_Texture texture)

Destroy the specified texture.

See also
SDL_CreateTexture()
SDL_CreateTextureFromSurface()

Definition at line 1842 of file SDL_render.c.

References CHECK_TEXTURE_MAGIC, SDL_Renderer::DestroyTexture, SDL_Texture::magic, SDL_Texture::native, SDL_Texture::next, NULL, SDL_Texture::pixels, SDL_Texture::prev, renderer, SDL_Texture::renderer, SDL_free(), SDL_SetRenderTarget(), SDL_SW_DestroyYUVTexture(), SDL_Renderer::target, SDL_Renderer::textures, and SDL_Texture::yuv.

Referenced by SDL_CreateTexture(), SDL_CreateTextureFromSurface(), and SDL_DestroyRenderer().

1843 {
1845 
1846  CHECK_TEXTURE_MAGIC(texture, );
1847 
1848  renderer = texture->renderer;
1849  if (texture == renderer->target) {
1850  SDL_SetRenderTarget(renderer, NULL);
1851  }
1852 
1853  texture->magic = NULL;
1854 
1855  if (texture->next) {
1856  texture->next->prev = texture->prev;
1857  }
1858  if (texture->prev) {
1859  texture->prev->next = texture->next;
1860  } else {
1861  renderer->textures = texture->next;
1862  }
1863 
1864  if (texture->native) {
1865  SDL_DestroyTexture(texture->native);
1866  }
1867  if (texture->yuv) {
1868  SDL_SW_DestroyYUVTexture(texture->yuv);
1869  }
1870  SDL_free(texture->pixels);
1871 
1872  renderer->DestroyTexture(renderer, texture);
1873  SDL_free(texture);
1874 }
void * pixels
Definition: SDL_sysrender.h:65
SDL_Texture * textures
SDL_Renderer * renderer
SDL_Texture * next
Definition: SDL_sysrender.h:72
void SDL_DestroyTexture(SDL_Texture *texture)
Destroy the specified texture.
Definition: SDL_render.c:1842
SDL_Texture * prev
Definition: SDL_sysrender.h:71
SDL_Texture * target
SDL_SW_YUVTexture * yuv
Definition: SDL_sysrender.h:64
void SDL_free(void *mem)
void SDL_SW_DestroyYUVTexture(SDL_SW_YUVTexture *swdata)
Definition: SDL_yuv_sw.c:1393
#define NULL
Definition: begin_code.h:143
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
void(* DestroyTexture)(SDL_Renderer *renderer, SDL_Texture *texture)
SDL_Texture * native
Definition: SDL_sysrender.h:63
int SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
Set a texture as the current rendering target.
Definition: SDL_render.c:1064
const void * magic
Definition: SDL_sysrender.h:51
int SDL_GetNumRenderDrivers ( void  )

Get the number of 2D rendering drivers available for the current display.

A render driver is a set of code that handles rendering and texture management on a particular display. Normally there is only one, but some drivers may have several available with different capabilities.

See also
SDL_GetRenderDriverInfo()
SDL_CreateRenderer()

Definition at line 81 of file SDL_render.c.

References SDL_arraysize.

Referenced by SDL_CreateRenderer(), and SDL_GetRenderDriverInfo().

82 {
83 #if !SDL_RENDER_DISABLED
85 #else
86  return 0;
87 #endif
88 }
static const SDL_RenderDriver * render_drivers[]
Definition: SDL_render.c:49
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
int SDL_GetRenderDrawBlendMode ( SDL_Renderer renderer,
SDL_BlendMode blendMode 
)

Get the blend mode used for drawing operations.

Parameters
rendererThe renderer from which blend mode should be queried.
blendModeA pointer filled in with the current blend mode.
Returns
0 on success, or -1 on error
See also
SDL_SetRenderDrawBlendMode()

Definition at line 1356 of file SDL_render.c.

References SDL_Renderer::blendMode, and CHECK_RENDERER_MAGIC.

1357 {
1358  CHECK_RENDERER_MAGIC(renderer, -1);
1359 
1360  *blendMode = renderer->blendMode;
1361  return 0;
1362 }
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
SDL_BlendMode blendMode
int SDL_GetRenderDrawColor ( SDL_Renderer renderer,
Uint8 r,
Uint8 g,
Uint8 b,
Uint8 a 
)

Get the color used for drawing operations (Rect, Line and Clear).

Parameters
rendererThe renderer from which drawing color should be queried.
rA pointer to the red value used to draw on the rendering target.
gA pointer to the green value used to draw on the rendering target.
bA pointer to the blue value used to draw on the rendering target.
aA pointer to the alpha value used to draw on the rendering target, usually SDL_ALPHA_OPAQUE (255).
Returns
0 on success, or -1 on error

Definition at line 1326 of file SDL_render.c.

References SDL_Renderer::a, SDL_Renderer::b, CHECK_RENDERER_MAGIC, SDL_Renderer::g, and SDL_Renderer::r.

1328 {
1329  CHECK_RENDERER_MAGIC(renderer, -1);
1330 
1331  if (r) {
1332  *r = renderer->r;
1333  }
1334  if (g) {
1335  *g = renderer->g;
1336  }
1337  if (b) {
1338  *b = renderer->b;
1339  }
1340  if (a) {
1341  *a = renderer->a;
1342  }
1343  return 0;
1344 }
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2072
GLboolean GLboolean g
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
GLboolean GLboolean GLboolean GLboolean a
GLboolean GLboolean GLboolean b
int SDL_GetRenderDriverInfo ( int  index,
SDL_RendererInfo info 
)

Get information about a specific 2D rendering driver for the current display.

Parameters
indexThe index of the driver to query information about.
infoA pointer to an SDL_RendererInfo struct to be filled with information on the rendering driver.
Returns
0 on success, -1 if the index was out of range.
See also
SDL_CreateRenderer()

Definition at line 91 of file SDL_render.c.

References SDL_RenderDriver::info, SDL_GetNumRenderDrivers(), and SDL_SetError.

92 {
93 #if !SDL_RENDER_DISABLED
95  return SDL_SetError("index must be in the range of 0 - %d",
97  }
98  *info = render_drivers[index]->info;
99  return 0;
100 #else
101  return SDL_SetError("SDL not built with rendering support");
102 #endif
103 }
SDL_RendererInfo info
int SDL_GetNumRenderDrivers(void)
Get the number of 2D rendering drivers available for the current display.
Definition: SDL_render.c:81
GLuint index
#define SDL_SetError
static const SDL_RenderDriver * render_drivers[]
Definition: SDL_render.c:49
SDL_Renderer* SDL_GetRenderer ( SDL_Window window)

Get the renderer associated with a window.

Definition at line 339 of file SDL_render.c.

References SDL_GetWindowData, and SDL_WINDOWRENDERDATA.

Referenced by SDL_CreateRenderer().

340 {
342 }
#define SDL_GetWindowData
#define SDL_WINDOWRENDERDATA
Definition: SDL_render.c:33
int SDL_GetRendererInfo ( SDL_Renderer renderer,
SDL_RendererInfo info 
)

Get information about a rendering context.

Definition at line 345 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, and SDL_Renderer::info.

346 {
347  CHECK_RENDERER_MAGIC(renderer, -1);
348 
349  *info = renderer->info;
350  return 0;
351 }
SDL_RendererInfo info
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int SDL_GetRendererOutputSize ( SDL_Renderer renderer,
int *  w,
int *  h 
)

Get the output size in pixels of a rendering context.

Definition at line 354 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::GetOutputSize, NULL, SDL_assert, SDL_GetWindowSize, SDL_QueryTexture(), SDL_SetError, SDL_Renderer::target, and SDL_Renderer::window.

Referenced by SDL_RenderSetViewport(), and UpdateLogicalSize().

355 {
356  CHECK_RENDERER_MAGIC(renderer, -1);
357 
358  if (renderer->target) {
359  return SDL_QueryTexture(renderer->target, NULL, NULL, w, h);
360  } else if (renderer->GetOutputSize) {
361  return renderer->GetOutputSize(renderer, w, h);
362  } else if (renderer->window) {
363  SDL_GetWindowSize(renderer->window, w, h);
364  return 0;
365  } else {
366  SDL_assert(0 && "This should never happen");
367  return SDL_SetError("Renderer doesn't support querying output size");
368  }
369 }
SDL_Window * window
int(* GetOutputSize)(SDL_Renderer *renderer, int *w, int *h)
Definition: SDL_sysrender.h:81
int SDL_QueryTexture(SDL_Texture *texture, Uint32 *format, int *access, int *w, int *h)
Query the attributes of a texture.
Definition: SDL_render.c:593
#define SDL_GetWindowSize
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
SDL_Texture * target
#define SDL_assert(condition)
Definition: SDL_assert.h:167
#define NULL
Definition: begin_code.h:143
#define SDL_SetError
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
SDL_Texture* SDL_GetRenderTarget ( SDL_Renderer renderer)

Get the current render target or NULL for the default render target.

Returns
The current render target
See also
SDL_SetRenderTarget()

Definition at line 1133 of file SDL_render.c.

References SDL_Renderer::target.

Referenced by SDL_RendererEventWatch().

1134 {
1135  return renderer->target;
1136 }
SDL_Texture * target
int SDL_GetTextureAlphaMod ( SDL_Texture texture,
Uint8 alpha 
)

Get the additional alpha value used in render copy operations.

Parameters
textureThe texture to query.
alphaA pointer filled in with the current alpha value.
Returns
0 on success, or -1 if the texture is not valid.
See also
SDL_SetTextureAlphaMod()

Definition at line 680 of file SDL_render.c.

References SDL_Texture::a, and CHECK_TEXTURE_MAGIC.

681 {
682  CHECK_TEXTURE_MAGIC(texture, -1);
683 
684  if (alpha) {
685  *alpha = texture->a;
686  }
687  return 0;
688 }
GLfloat GLfloat GLfloat alpha
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int SDL_GetTextureBlendMode ( SDL_Texture texture,
SDL_BlendMode blendMode 
)

Get the blend mode used for texture copy operations.

Parameters
textureThe texture to query.
blendModeA pointer filled in with the current blend mode.
Returns
0 on success, or -1 if the texture is not valid.
See also
SDL_SetTextureBlendMode()

Definition at line 709 of file SDL_render.c.

References SDL_Texture::blendMode, and CHECK_TEXTURE_MAGIC.

710 {
711  CHECK_TEXTURE_MAGIC(texture, -1);
712 
713  if (blendMode) {
714  *blendMode = texture->blendMode;
715  }
716  return 0;
717 }
SDL_BlendMode blendMode
Definition: SDL_sysrender.h:57
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int SDL_GetTextureColorMod ( SDL_Texture texture,
Uint8 r,
Uint8 g,
Uint8 b 
)

Get the additional color value used in render copy operations.

Parameters
textureThe texture to query.
rA pointer filled in with the current red color value.
gA pointer filled in with the current green color value.
bA pointer filled in with the current blue color value.
Returns
0 on success, or -1 if the texture is not valid.
See also
SDL_SetTextureColorMod()

Definition at line 639 of file SDL_render.c.

References SDL_Texture::b, CHECK_TEXTURE_MAGIC, SDL_Texture::g, and SDL_Texture::r.

641 {
642  CHECK_TEXTURE_MAGIC(texture, -1);
643 
644  if (r) {
645  *r = texture->r;
646  }
647  if (g) {
648  *g = texture->g;
649  }
650  if (b) {
651  *b = texture->b;
652  }
653  return 0;
654 }
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2072
GLboolean GLboolean g
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
GLboolean GLboolean GLboolean b
int SDL_GL_BindTexture ( SDL_Texture texture,
float *  texw,
float *  texh 
)

Bind the texture to the current OpenGL/ES/ES2 context for use with OpenGL instructions.

Parameters
textureThe SDL texture to bind
texwA pointer to a float that will be filled with the texture width
texhA pointer to a float that will be filled with the texture height
Returns
0 on success, or -1 if the operation is not supported

Definition at line 1899 of file SDL_render.c.

References CHECK_TEXTURE_MAGIC, SDL_Renderer::GL_BindTexture, SDL_Texture::native, renderer, SDL_Texture::renderer, and SDL_Unsupported.

1900 {
1902 
1903  CHECK_TEXTURE_MAGIC(texture, -1);
1904  renderer = texture->renderer;
1905  if (texture->native) {
1906  return SDL_GL_BindTexture(texture->native, texw, texh);
1907  } else if (renderer && renderer->GL_BindTexture) {
1908  return renderer->GL_BindTexture(renderer, texture, texw, texh);
1909  } else {
1910  return SDL_Unsupported();
1911  }
1912 }
SDL_Renderer * renderer
int(* GL_BindTexture)(SDL_Renderer *renderer, SDL_Texture *texture, float *texw, float *texh)
int SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh)
Bind the texture to the current OpenGL/ES/ES2 context for use with OpenGL instructions.
Definition: SDL_render.c:1899
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
SDL_Texture * native
Definition: SDL_sysrender.h:63
#define SDL_Unsupported()
Definition: SDL_error.h:53
int SDL_GL_UnbindTexture ( SDL_Texture texture)

Unbind a texture from the current OpenGL/ES/ES2 context.

Parameters
textureThe SDL texture to unbind
Returns
0 on success, or -1 if the operation is not supported

Definition at line 1914 of file SDL_render.c.

References CHECK_TEXTURE_MAGIC, SDL_Renderer::GL_UnbindTexture, SDL_Texture::native, renderer, SDL_Texture::renderer, and SDL_Unsupported.

1915 {
1917 
1918  CHECK_TEXTURE_MAGIC(texture, -1);
1919  renderer = texture->renderer;
1920  if (texture->native) {
1921  return SDL_GL_UnbindTexture(texture->native);
1922  } else if (renderer && renderer->GL_UnbindTexture) {
1923  return renderer->GL_UnbindTexture(renderer, texture);
1924  }
1925 
1926  return SDL_Unsupported();
1927 }
SDL_Renderer * renderer
int(* GL_UnbindTexture)(SDL_Renderer *renderer, SDL_Texture *texture)
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
SDL_Texture * native
Definition: SDL_sysrender.h:63
#define SDL_Unsupported()
Definition: SDL_error.h:53
int SDL_GL_UnbindTexture(SDL_Texture *texture)
Unbind a texture from the current OpenGL/ES/ES2 context.
Definition: SDL_render.c:1914
int SDL_LockTexture ( SDL_Texture texture,
const SDL_Rect rect,
void **  pixels,
int *  pitch 
)

Lock a portion of the texture for write-only pixel access.

Parameters
textureThe texture to lock for access, which was created with SDL_TEXTUREACCESS_STREAMING.
rectA pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked.
pixelsThis is filled in with a pointer to the locked pixels, appropriately offset by the locked area.
pitchThis is filled in with the pitch of the locked pixels.
Returns
0 on success, or -1 if the texture is not valid or was not created with SDL_TEXTUREACCESS_STREAMING.
See also
SDL_UnlockTexture()

Definition at line 962 of file SDL_render.c.

References SDL_Texture::access, CHECK_TEXTURE_MAGIC, SDL_Texture::h, SDL_Rect::h, SDL_Renderer::LockTexture, SDL_Texture::native, renderer, SDL_Texture::renderer, SDL_LockTextureNative(), SDL_LockTextureYUV(), SDL_SetError, SDL_TEXTUREACCESS_STREAMING, SDL_Texture::w, SDL_Rect::w, SDL_Rect::x, SDL_Rect::y, and SDL_Texture::yuv.

Referenced by SDL_UnlockTextureNative(), SDL_UnlockTextureYUV(), SDL_UpdateTextureNative(), SDL_UpdateTextureYUV(), and SDL_UpdateTextureYUVPlanar().

964 {
966  SDL_Rect full_rect;
967 
968  CHECK_TEXTURE_MAGIC(texture, -1);
969 
970  if (texture->access != SDL_TEXTUREACCESS_STREAMING) {
971  return SDL_SetError("SDL_LockTexture(): texture must be streaming");
972  }
973 
974  if (!rect) {
975  full_rect.x = 0;
976  full_rect.y = 0;
977  full_rect.w = texture->w;
978  full_rect.h = texture->h;
979  rect = &full_rect;
980  }
981 
982  if (texture->yuv) {
983  return SDL_LockTextureYUV(texture, rect, pixels, pitch);
984  } else if (texture->native) {
985  return SDL_LockTextureNative(texture, rect, pixels, pitch);
986  } else {
987  renderer = texture->renderer;
988  return renderer->LockTexture(renderer, texture, rect, pixels, pitch);
989  }
990 }
int(* LockTexture)(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch)
Definition: SDL_sysrender.h:97
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: SDL_opengl.h:1565
static int SDL_LockTextureYUV(SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch)
Definition: SDL_render.c:943
SDL_Renderer * renderer
SDL_SW_YUVTexture * yuv
Definition: SDL_sysrender.h:64
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
#define SDL_SetError
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int h
Definition: SDL_rect.h:67
SDL_Texture * native
Definition: SDL_sysrender.h:63
int y
Definition: SDL_rect.h:66
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
static int SDL_LockTextureNative(SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch)
Definition: SDL_render.c:950
int SDL_QueryTexture ( SDL_Texture texture,
Uint32 format,
int *  access,
int *  w,
int *  h 
)

Query the attributes of a texture.

Parameters
textureA texture to be queried.
formatA pointer filled in with the raw format of the texture. The actual format may differ, but pixel transfers will use this format.
accessA pointer filled in with the actual access to the texture.
wA pointer filled in with the width of the texture in pixels.
hA pointer filled in with the height of the texture in pixels.
Returns
0 on success, or -1 if the texture is not valid.

Definition at line 593 of file SDL_render.c.

References SDL_Texture::access, CHECK_TEXTURE_MAGIC, SDL_Texture::format, SDL_Texture::h, and SDL_Texture::w.

Referenced by SDL_GetRendererOutputSize().

595 {
596  CHECK_TEXTURE_MAGIC(texture, -1);
597 
598  if (format) {
599  *format = texture->format;
600  }
601  if (access) {
602  *access = texture->access;
603  }
604  if (w) {
605  *w = texture->w;
606  }
607  if (h) {
608  *h = texture->h;
609  }
610  return 0;
611 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1565
GLuint GLint GLboolean GLint GLenum access
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
Uint32 format
Definition: SDL_sysrender.h:52
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
int SDL_RenderClear ( SDL_Renderer renderer)

Clear the current rendering target with the drawing color.

This function clears the entire rendering target, ignoring the viewport.

Returns
0 on success, or -1 on error

Definition at line 1365 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::hidden, and SDL_Renderer::RenderClear.

1366 {
1367  CHECK_RENDERER_MAGIC(renderer, -1);
1368 
1369  /* Don't draw while we're hidden */
1370  if (renderer->hidden) {
1371  return 0;
1372  }
1373  return renderer->RenderClear(renderer);
1374 }
SDL_bool hidden
int(* RenderClear)(SDL_Renderer *renderer)
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int SDL_RenderCopy ( SDL_Renderer renderer,
SDL_Texture texture,
const SDL_Rect srcrect,
const SDL_Rect dstrect 
)

Copy a portion of the texture to the current rendering target.

Parameters
rendererThe renderer which should copy parts of a texture.
textureThe source texture.
srcrectA pointer to the source rectangle, or NULL for the entire texture.
dstrectA pointer to the destination rectangle, or NULL for the entire rendering target.
Returns
0 on success, or -1 on error

Definition at line 1675 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, CHECK_TEXTURE_MAGIC, SDL_FRect::h, SDL_Texture::h, SDL_Rect::h, SDL_Renderer::hidden, SDL_Texture::native, SDL_Renderer::RenderCopy, SDL_Texture::renderer, SDL_Renderer::scale, SDL_HasIntersection, SDL_IntersectRect, SDL_RenderGetViewport(), SDL_SetError, SDL_FRect::w, SDL_Texture::w, SDL_Rect::w, SDL_FPoint::x, SDL_FRect::x, SDL_Rect::x, SDL_FPoint::y, SDL_FRect::y, and SDL_Rect::y.

Referenced by SDL_RenderCopyEx().

1677 {
1678  SDL_Rect real_srcrect = { 0, 0, 0, 0 };
1679  SDL_Rect real_dstrect = { 0, 0, 0, 0 };
1680  SDL_FRect frect;
1681 
1682  CHECK_RENDERER_MAGIC(renderer, -1);
1683  CHECK_TEXTURE_MAGIC(texture, -1);
1684 
1685  if (renderer != texture->renderer) {
1686  return SDL_SetError("Texture was not created with this renderer");
1687  }
1688 
1689  real_srcrect.x = 0;
1690  real_srcrect.y = 0;
1691  real_srcrect.w = texture->w;
1692  real_srcrect.h = texture->h;
1693  if (srcrect) {
1694  if (!SDL_IntersectRect(srcrect, &real_srcrect, &real_srcrect)) {
1695  return 0;
1696  }
1697  }
1698 
1699  SDL_RenderGetViewport(renderer, &real_dstrect);
1700  real_dstrect.x = 0;
1701  real_dstrect.y = 0;
1702  if (dstrect) {
1703  if (!SDL_HasIntersection(dstrect, &real_dstrect)) {
1704  return 0;
1705  }
1706  real_dstrect = *dstrect;
1707  }
1708 
1709  if (texture->native) {
1710  texture = texture->native;
1711  }
1712 
1713  /* Don't draw while we're hidden */
1714  if (renderer->hidden) {
1715  return 0;
1716  }
1717 
1718  frect.x = real_dstrect.x * renderer->scale.x;
1719  frect.y = real_dstrect.y * renderer->scale.y;
1720  frect.w = real_dstrect.w * renderer->scale.x;
1721  frect.h = real_dstrect.h * renderer->scale.y;
1722 
1723  return renderer->RenderCopy(renderer, texture, &real_srcrect, &frect);
1724 }
#define SDL_HasIntersection
SDL_bool hidden
SDL_FPoint scale
#define SDL_IntersectRect
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
int(* RenderCopy)(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_FRect *dstrect)
#define SDL_SetError
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int h
Definition: SDL_rect.h:67
void SDL_RenderGetViewport(SDL_Renderer *renderer, SDL_Rect *rect)
Get the drawing area for the current target.
Definition: SDL_render.c:1239
SDL_Texture * native
Definition: SDL_sysrender.h:63
int y
Definition: SDL_rect.h:66
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
int SDL_RenderCopyEx ( SDL_Renderer renderer,
SDL_Texture texture,
const SDL_Rect srcrect,
const SDL_Rect dstrect,
const double  angle,
const SDL_Point center,
const SDL_RendererFlip  flip 
)

Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center.

Parameters
rendererThe renderer which should copy parts of a texture.
textureThe source texture.
srcrectA pointer to the source rectangle, or NULL for the entire texture.
dstrectA pointer to the destination rectangle, or NULL for the entire rendering target.
angleAn angle in degrees that indicates the rotation that will be applied to dstrect
centerA pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w/2, dstrect.h/2).
flipAn SDL_RendererFlip value stating which flipping actions should be performed on the texture
Returns
0 on success, or -1 on error

Definition at line 1728 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, CHECK_TEXTURE_MAGIC, SDL_FRect::h, SDL_Texture::h, SDL_Rect::h, SDL_Texture::native, SDL_Renderer::RenderCopyEx, SDL_Texture::renderer, SDL_Renderer::scale, SDL_FLIP_NONE, SDL_IntersectRect, SDL_RenderCopy(), SDL_RenderGetViewport(), SDL_SetError, SDL_FRect::w, SDL_Texture::w, SDL_Rect::w, SDL_FPoint::x, SDL_FRect::x, SDL_Point::x, SDL_Rect::x, SDL_FPoint::y, SDL_FRect::y, SDL_Point::y, and SDL_Rect::y.

1731 {
1732  SDL_Rect real_srcrect = { 0, 0, 0, 0 };
1733  SDL_Rect real_dstrect = { 0, 0, 0, 0 };
1734  SDL_Point real_center;
1735  SDL_FRect frect;
1736  SDL_FPoint fcenter;
1737 
1738  if (flip == SDL_FLIP_NONE && angle == 0) { /* fast path when we don't need rotation or flipping */
1739  return SDL_RenderCopy(renderer, texture, srcrect, dstrect);
1740  }
1741 
1742  CHECK_RENDERER_MAGIC(renderer, -1);
1743  CHECK_TEXTURE_MAGIC(texture, -1);
1744 
1745  if (renderer != texture->renderer) {
1746  return SDL_SetError("Texture was not created with this renderer");
1747  }
1748  if (!renderer->RenderCopyEx) {
1749  return SDL_SetError("Renderer does not support RenderCopyEx");
1750  }
1751 
1752  real_srcrect.x = 0;
1753  real_srcrect.y = 0;
1754  real_srcrect.w = texture->w;
1755  real_srcrect.h = texture->h;
1756  if (srcrect) {
1757  if (!SDL_IntersectRect(srcrect, &real_srcrect, &real_srcrect)) {
1758  return 0;
1759  }
1760  }
1761 
1762  /* We don't intersect the dstrect with the viewport as RenderCopy does because of potential rotation clipping issues... TODO: should we? */
1763  if (dstrect) {
1764  real_dstrect = *dstrect;
1765  } else {
1766  SDL_RenderGetViewport(renderer, &real_dstrect);
1767  real_dstrect.x = 0;
1768  real_dstrect.y = 0;
1769  }
1770 
1771  if (texture->native) {
1772  texture = texture->native;
1773  }
1774 
1775  if(center) real_center = *center;
1776  else {
1777  real_center.x = real_dstrect.w/2;
1778  real_center.y = real_dstrect.h/2;
1779  }
1780 
1781  frect.x = real_dstrect.x * renderer->scale.x;
1782  frect.y = real_dstrect.y * renderer->scale.y;
1783  frect.w = real_dstrect.w * renderer->scale.x;
1784  frect.h = real_dstrect.h * renderer->scale.y;
1785 
1786  fcenter.x = real_center.x * renderer->scale.x;
1787  fcenter.y = real_center.y * renderer->scale.y;
1788 
1789  return renderer->RenderCopyEx(renderer, texture, &real_srcrect, &frect, angle, &fcenter, flip);
1790 }
int SDL_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_Rect *dstrect)
Copy a portion of the texture to the current rendering target.
Definition: SDL_render.c:1675
The structure that defines a point.
Definition: SDL_rect.h:48
SDL_FPoint scale
#define SDL_IntersectRect
int x
Definition: SDL_rect.h:50
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int y
Definition: SDL_rect.h:51
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
#define SDL_SetError
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
int(* RenderCopyEx)(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcquad, const SDL_FRect *dstrect, const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip)
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int h
Definition: SDL_rect.h:67
void SDL_RenderGetViewport(SDL_Renderer *renderer, SDL_Rect *rect)
Get the drawing area for the current target.
Definition: SDL_render.c:1239
GLfloat angle
SDL_Texture * native
Definition: SDL_sysrender.h:63
int y
Definition: SDL_rect.h:66
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
int SDL_RenderDrawLine ( SDL_Renderer renderer,
int  x1,
int  y1,
int  x2,
int  y2 
)

Draw a line on the current rendering target.

Parameters
rendererThe renderer which should draw a line.
x1The x coordinate of the start point.
y1The y coordinate of the start point.
x2The x coordinate of the end point.
y2The y coordinate of the end point.
Returns
0 on success, or -1 on error

Definition at line 1454 of file SDL_render.c.

References SDL_RenderDrawLines(), SDL_Point::x, and SDL_Point::y.

1455 {
1456  SDL_Point points[2];
1457 
1458  points[0].x = x1;
1459  points[0].y = y1;
1460  points[1].x = x2;
1461  points[1].y = y2;
1462  return SDL_RenderDrawLines(renderer, points, 2);
1463 }
GLuint GLfloat GLfloat GLfloat x1
GLfixed GLfixed GLfixed y2
The structure that defines a point.
Definition: SDL_rect.h:48
GLfixed GLfixed x2
GLfixed GLfixed GLint GLint GLfixed points
GLfixed y1
int x
Definition: SDL_rect.h:50
int y
Definition: SDL_rect.h:51
int SDL_RenderDrawLines(SDL_Renderer *renderer, const SDL_Point *points, int count)
Draw a series of connected lines on the current rendering target.
Definition: SDL_render.c:1522
int SDL_RenderDrawLines ( SDL_Renderer renderer,
const SDL_Point points,
int  count 
)

Draw a series of connected lines on the current rendering target.

Parameters
rendererThe renderer which should draw multiple lines.
pointsThe points along the lines
countThe number of points, drawing count-1 lines
Returns
0 on success, or -1 on error

Definition at line 1522 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::hidden, i, SDL_Renderer::RenderDrawLines, RenderDrawLinesWithRects(), SDL_Renderer::scale, SDL_OutOfMemory, SDL_SetError, SDL_stack_alloc, SDL_stack_free, SDL_FPoint::x, SDL_Point::x, SDL_FPoint::y, and SDL_Point::y.

Referenced by SDL_RenderDrawLine(), and SDL_RenderDrawRect().

1524 {
1525  SDL_FPoint *fpoints;
1526  int i;
1527  int status;
1528 
1529  CHECK_RENDERER_MAGIC(renderer, -1);
1530 
1531  if (!points) {
1532  return SDL_SetError("SDL_RenderDrawLines(): Passed NULL points");
1533  }
1534  if (count < 2) {
1535  return 0;
1536  }
1537  /* Don't draw while we're hidden */
1538  if (renderer->hidden) {
1539  return 0;
1540  }
1541 
1542  if (renderer->scale.x != 1.0f || renderer->scale.y != 1.0f) {
1543  return RenderDrawLinesWithRects(renderer, points, count);
1544  }
1545 
1546  fpoints = SDL_stack_alloc(SDL_FPoint, count);
1547  if (!fpoints) {
1548  return SDL_OutOfMemory();
1549  }
1550  for (i = 0; i < count; ++i) {
1551  fpoints[i].x = points[i].x * renderer->scale.x;
1552  fpoints[i].y = points[i].y * renderer->scale.y;
1553  }
1554 
1555  status = renderer->RenderDrawLines(renderer, fpoints, count);
1556 
1557  SDL_stack_free(fpoints);
1558 
1559  return status;
1560 }
int(* RenderDrawLines)(SDL_Renderer *renderer, const SDL_FPoint *points, int count)
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1564
SDL_bool hidden
SDL_FPoint scale
static int RenderDrawLinesWithRects(SDL_Renderer *renderer, const SDL_Point *points, int count)
Definition: SDL_render.c:1466
int x
Definition: SDL_rect.h:50
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int y
Definition: SDL_rect.h:51
#define SDL_stack_alloc(type, count)
Definition: SDL_stdinc.h:324
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
#define SDL_SetError
#define SDL_stack_free(data)
Definition: SDL_stdinc.h:325
int SDL_RenderDrawPoint ( SDL_Renderer renderer,
int  x,
int  y 
)

Draw a point on the current rendering target.

Parameters
rendererThe renderer which should draw a point.
xThe x coordinate of the point.
yThe y coordinate of the point.
Returns
0 on success, or -1 on error

Definition at line 1377 of file SDL_render.c.

References SDL_RenderDrawPoints(), SDL_Point::x, and SDL_Point::y.

1378 {
1379  SDL_Point point;
1380 
1381  point.x = x;
1382  point.y = y;
1383  return SDL_RenderDrawPoints(renderer, &point, 1);
1384 }
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1567
The structure that defines a point.
Definition: SDL_rect.h:48
int x
Definition: SDL_rect.h:50
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1567
int y
Definition: SDL_rect.h:51
int SDL_RenderDrawPoints(SDL_Renderer *renderer, const SDL_Point *points, int count)
Draw multiple points on the current rendering target.
Definition: SDL_render.c:1413
int SDL_RenderDrawPoints ( SDL_Renderer renderer,
const SDL_Point points,
int  count 
)

Draw multiple points on the current rendering target.

Parameters
rendererThe renderer which should draw multiple points.
pointsThe points to draw
countThe number of points to draw
Returns
0 on success, or -1 on error

Definition at line 1413 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::hidden, i, SDL_Renderer::RenderDrawPoints, RenderDrawPointsWithRects(), SDL_Renderer::scale, SDL_OutOfMemory, SDL_SetError, SDL_stack_alloc, SDL_stack_free, SDL_FPoint::x, SDL_Point::x, SDL_FPoint::y, and SDL_Point::y.

Referenced by SDL_RenderDrawPoint().

1415 {
1416  SDL_FPoint *fpoints;
1417  int i;
1418  int status;
1419 
1420  CHECK_RENDERER_MAGIC(renderer, -1);
1421 
1422  if (!points) {
1423  return SDL_SetError("SDL_RenderDrawPoints(): Passed NULL points");
1424  }
1425  if (count < 1) {
1426  return 0;
1427  }
1428  /* Don't draw while we're hidden */
1429  if (renderer->hidden) {
1430  return 0;
1431  }
1432 
1433  if (renderer->scale.x != 1.0f || renderer->scale.y != 1.0f) {
1434  return RenderDrawPointsWithRects(renderer, points, count);
1435  }
1436 
1437  fpoints = SDL_stack_alloc(SDL_FPoint, count);
1438  if (!fpoints) {
1439  return SDL_OutOfMemory();
1440  }
1441  for (i = 0; i < count; ++i) {
1442  fpoints[i].x = points[i].x * renderer->scale.x;
1443  fpoints[i].y = points[i].y * renderer->scale.y;
1444  }
1445 
1446  status = renderer->RenderDrawPoints(renderer, fpoints, count);
1447 
1448  SDL_stack_free(fpoints);
1449 
1450  return status;
1451 }
int(* RenderDrawPoints)(SDL_Renderer *renderer, const SDL_FPoint *points, int count)
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1564
SDL_bool hidden
SDL_FPoint scale
static int RenderDrawPointsWithRects(SDL_Renderer *renderer, const SDL_Point *points, int count)
Definition: SDL_render.c:1387
int x
Definition: SDL_rect.h:50
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int y
Definition: SDL_rect.h:51
#define SDL_stack_alloc(type, count)
Definition: SDL_stdinc.h:324
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
#define SDL_SetError
#define SDL_stack_free(data)
Definition: SDL_stdinc.h:325
int SDL_RenderDrawRect ( SDL_Renderer renderer,
const SDL_Rect rect 
)

Draw a rectangle on the current rendering target.

Parameters
rendererThe renderer which should draw a rectangle.
rectA pointer to the destination rectangle, or NULL to outline the entire rendering target.
Returns
0 on success, or -1 on error

Definition at line 1563 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Rect::h, SDL_RenderDrawLines(), SDL_RenderGetViewport(), SDL_Rect::w, SDL_Point::x, SDL_Rect::x, SDL_Point::y, and SDL_Rect::y.

Referenced by SDL_RenderDrawRects().

1564 {
1565  SDL_Rect full_rect;
1566  SDL_Point points[5];
1567 
1568  CHECK_RENDERER_MAGIC(renderer, -1);
1569 
1570  /* If 'rect' == NULL, then outline the whole surface */
1571  if (!rect) {
1572  SDL_RenderGetViewport(renderer, &full_rect);
1573  full_rect.x = 0;
1574  full_rect.y = 0;
1575  rect = &full_rect;
1576  }
1577 
1578  points[0].x = rect->x;
1579  points[0].y = rect->y;
1580  points[1].x = rect->x+rect->w-1;
1581  points[1].y = rect->y;
1582  points[2].x = rect->x+rect->w-1;
1583  points[2].y = rect->y+rect->h-1;
1584  points[3].x = rect->x;
1585  points[3].y = rect->y+rect->h-1;
1586  points[4].x = rect->x;
1587  points[4].y = rect->y;
1588  return SDL_RenderDrawLines(renderer, points, 5);
1589 }
The structure that defines a point.
Definition: SDL_rect.h:48
GLfixed GLfixed GLint GLint GLfixed points
int x
Definition: SDL_rect.h:50
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int y
Definition: SDL_rect.h:51
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
int SDL_RenderDrawLines(SDL_Renderer *renderer, const SDL_Point *points, int count)
Draw a series of connected lines on the current rendering target.
Definition: SDL_render.c:1522
int h
Definition: SDL_rect.h:67
void SDL_RenderGetViewport(SDL_Renderer *renderer, SDL_Rect *rect)
Get the drawing area for the current target.
Definition: SDL_render.c:1239
int y
Definition: SDL_rect.h:66
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
int SDL_RenderDrawRects ( SDL_Renderer renderer,
const SDL_Rect rects,
int  count 
)

Draw some number of rectangles on the current rendering target.

Parameters
rendererThe renderer which should draw multiple rectangles.
rectsA pointer to an array of destination rectangles.
countThe number of rectangles.
Returns
0 on success, or -1 on error

Definition at line 1592 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::hidden, i, SDL_RenderDrawRect(), and SDL_SetError.

1594 {
1595  int i;
1596 
1597  CHECK_RENDERER_MAGIC(renderer, -1);
1598 
1599  if (!rects) {
1600  return SDL_SetError("SDL_RenderDrawRects(): Passed NULL rects");
1601  }
1602  if (count < 1) {
1603  return 0;
1604  }
1605 
1606  /* Don't draw while we're hidden */
1607  if (renderer->hidden) {
1608  return 0;
1609  }
1610  for (i = 0; i < count; ++i) {
1611  if (SDL_RenderDrawRect(renderer, &rects[i]) < 0) {
1612  return -1;
1613  }
1614  }
1615  return 0;
1616 }
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1564
SDL_bool hidden
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int SDL_RenderDrawRect(SDL_Renderer *renderer, const SDL_Rect *rect)
Draw a rectangle on the current rendering target.
Definition: SDL_render.c:1563
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
#define SDL_SetError
int SDL_RenderFillRect ( SDL_Renderer renderer,
const SDL_Rect rect 
)

Fill a rectangle on the current rendering target with the drawing color.

Parameters
rendererThe renderer which should fill a rectangle.
rectA pointer to the destination rectangle, or NULL for the entire rendering target.
Returns
0 on success, or -1 on error

Definition at line 1619 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_RenderFillRects(), SDL_RenderGetViewport(), SDL_Rect::x, and SDL_Rect::y.

1620 {
1621  SDL_Rect full_rect = { 0, 0, 0, 0 };
1622 
1623  CHECK_RENDERER_MAGIC(renderer, -1);
1624 
1625  /* If 'rect' == NULL, then outline the whole surface */
1626  if (!rect) {
1627  SDL_RenderGetViewport(renderer, &full_rect);
1628  full_rect.x = 0;
1629  full_rect.y = 0;
1630  rect = &full_rect;
1631  }
1632  return SDL_RenderFillRects(renderer, rect, 1);
1633 }
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int x
Definition: SDL_rect.h:66
int SDL_RenderFillRects(SDL_Renderer *renderer, const SDL_Rect *rects, int count)
Fill some number of rectangles on the current rendering target with the drawing color.
Definition: SDL_render.c:1636
void SDL_RenderGetViewport(SDL_Renderer *renderer, SDL_Rect *rect)
Get the drawing area for the current target.
Definition: SDL_render.c:1239
int y
Definition: SDL_rect.h:66
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
int SDL_RenderFillRects ( SDL_Renderer renderer,
const SDL_Rect rects,
int  count 
)

Fill some number of rectangles on the current rendering target with the drawing color.

Parameters
rendererThe renderer which should fill multiple rectangles.
rectsA pointer to an array of destination rectangles.
countThe number of rectangles.
Returns
0 on success, or -1 on error

Definition at line 1636 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_FRect::h, SDL_Rect::h, SDL_Renderer::hidden, i, SDL_Renderer::RenderFillRects, SDL_Renderer::scale, SDL_OutOfMemory, SDL_SetError, SDL_stack_alloc, SDL_stack_free, SDL_FRect::w, SDL_Rect::w, SDL_FPoint::x, SDL_FRect::x, SDL_Rect::x, SDL_FPoint::y, SDL_FRect::y, and SDL_Rect::y.

Referenced by SDL_RenderFillRect().

1638 {
1639  SDL_FRect *frects;
1640  int i;
1641  int status;
1642 
1643  CHECK_RENDERER_MAGIC(renderer, -1);
1644 
1645  if (!rects) {
1646  return SDL_SetError("SDL_RenderFillRects(): Passed NULL rects");
1647  }
1648  if (count < 1) {
1649  return 0;
1650  }
1651  /* Don't draw while we're hidden */
1652  if (renderer->hidden) {
1653  return 0;
1654  }
1655 
1656  frects = SDL_stack_alloc(SDL_FRect, count);
1657  if (!frects) {
1658  return SDL_OutOfMemory();
1659  }
1660  for (i = 0; i < count; ++i) {
1661  frects[i].x = rects[i].x * renderer->scale.x;
1662  frects[i].y = rects[i].y * renderer->scale.y;
1663  frects[i].w = rects[i].w * renderer->scale.x;
1664  frects[i].h = rects[i].h * renderer->scale.y;
1665  }
1666 
1667  status = renderer->RenderFillRects(renderer, frects, count);
1668 
1669  SDL_stack_free(frects);
1670 
1671  return status;
1672 }
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1564
SDL_bool hidden
SDL_FPoint scale
int(* RenderFillRects)(SDL_Renderer *renderer, const SDL_FRect *rects, int count)
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
#define SDL_stack_alloc(type, count)
Definition: SDL_stdinc.h:324
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
#define SDL_SetError
int h
Definition: SDL_rect.h:67
#define SDL_stack_free(data)
Definition: SDL_stdinc.h:325
int y
Definition: SDL_rect.h:66
void SDL_RenderGetClipRect ( SDL_Renderer renderer,
SDL_Rect rect 
)

Get the clip rectangle for the current target.

Parameters
rendererThe renderer from which clip rectangle should be queried.
rectA pointer filled in with the current clip rectangle, or an empty rectangle if clipping is disabled.
See also
SDL_RenderSetClipRect()

Definition at line 1270 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::clip_rect, SDL_Rect::h, SDL_Renderer::scale, SDL_Rect::w, SDL_FPoint::x, SDL_Rect::x, SDL_FPoint::y, and SDL_Rect::y.

1271 {
1272  CHECK_RENDERER_MAGIC(renderer, )
1273 
1274  if (rect) {
1275  rect->x = (int)(renderer->clip_rect.x / renderer->scale.x);
1276  rect->y = (int)(renderer->clip_rect.y / renderer->scale.y);
1277  rect->w = (int)(renderer->clip_rect.w / renderer->scale.x);
1278  rect->h = (int)(renderer->clip_rect.h / renderer->scale.y);
1279  }
1280 }
SDL_FPoint scale
SDL_Rect clip_rect
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
int h
Definition: SDL_rect.h:67
int y
Definition: SDL_rect.h:66
void SDL_RenderGetLogicalSize ( SDL_Renderer renderer,
int *  w,
int *  h 
)

Get device independent resolution for rendering.

Parameters
rendererThe renderer from which resolution should be queried.
wA pointer filled with the width of the logical resolution
hA pointer filled with the height of the logical resolution
See also
SDL_RenderSetLogicalSize()

Definition at line 1206 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::logical_h, and SDL_Renderer::logical_w.

1207 {
1208  CHECK_RENDERER_MAGIC(renderer, );
1209 
1210  if (w) {
1211  *w = renderer->logical_w;
1212  }
1213  if (h) {
1214  *h = renderer->logical_h;
1215  }
1216 }
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
void SDL_RenderGetScale ( SDL_Renderer renderer,
float *  scaleX,
float *  scaleY 
)

Get the drawing scale for the current target.

Parameters
rendererThe renderer from which drawing scale should be queried.
scaleXA pointer filled in with the horizontal scaling factor
scaleYA pointer filled in with the vertical scaling factor
See also
SDL_RenderSetScale()

Definition at line 1300 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::scale, SDL_FPoint::x, and SDL_FPoint::y.

1301 {
1302  CHECK_RENDERER_MAGIC(renderer, );
1303 
1304  if (scaleX) {
1305  *scaleX = renderer->scale.x;
1306  }
1307  if (scaleY) {
1308  *scaleY = renderer->scale.y;
1309  }
1310 }
SDL_FPoint scale
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
void SDL_RenderGetViewport ( SDL_Renderer renderer,
SDL_Rect rect 
)

Get the drawing area for the current target.

See also
SDL_RenderSetViewport()

Definition at line 1239 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Rect::h, SDL_Renderer::scale, SDL_Renderer::viewport, SDL_Rect::w, SDL_FPoint::x, SDL_Rect::x, SDL_FPoint::y, and SDL_Rect::y.

Referenced by SDL_RenderCopy(), SDL_RenderCopyEx(), SDL_RenderDrawRect(), and SDL_RenderFillRect().

1240 {
1241  CHECK_RENDERER_MAGIC(renderer, );
1242 
1243  if (rect) {
1244  rect->x = (int)(renderer->viewport.x / renderer->scale.x);
1245  rect->y = (int)(renderer->viewport.y / renderer->scale.y);
1246  rect->w = (int)(renderer->viewport.w / renderer->scale.x);
1247  rect->h = (int)(renderer->viewport.h / renderer->scale.y);
1248  }
1249 }
SDL_FPoint scale
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
SDL_Rect viewport
int h
Definition: SDL_rect.h:67
int y
Definition: SDL_rect.h:66
SDL_bool SDL_RenderIsClipEnabled ( SDL_Renderer renderer)

Get whether clipping is enabled on the given renderer.

Parameters
rendererThe renderer from which clip state should be queried.
See also
SDL_RenderGetClipRect()

Definition at line 1283 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::clipping_enabled, and SDL_FALSE.

1284 {
1285  CHECK_RENDERER_MAGIC(renderer, SDL_FALSE)
1286  return renderer->clipping_enabled;
1287 }
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
void SDL_RenderPresent ( SDL_Renderer renderer)

Update the screen with rendering performed.

Definition at line 1830 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::hidden, and SDL_Renderer::RenderPresent.

1831 {
1832  CHECK_RENDERER_MAGIC(renderer, );
1833 
1834  /* Don't draw while we're hidden */
1835  if (renderer->hidden) {
1836  return;
1837  }
1838  renderer->RenderPresent(renderer);
1839 }
SDL_bool hidden
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
void(* RenderPresent)(SDL_Renderer *renderer)
int SDL_RenderReadPixels ( SDL_Renderer renderer,
const SDL_Rect rect,
Uint32  format,
void pixels,
int  pitch 
)

Read pixels from the current rendering target.

Parameters
rendererThe renderer from which pixels should be read.
rectA pointer to the rectangle to read, or NULL for the entire render target.
formatThe desired format of the pixel data, or 0 to use the format of the rendering target
pixelsA pointer to be filled in with the pixel data
pitchThe pitch of the pixels parameter.
Returns
0 on success, or -1 if pixel reading is not supported.
Warning
This is a very slow operation, and should not be used frequently.

Definition at line 1793 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Rect::h, SDL_Renderer::RenderReadPixels, SDL_BYTESPERPIXEL, SDL_GetWindowPixelFormat, SDL_IntersectRect, SDL_Unsupported, SDL_Renderer::viewport, SDL_Rect::w, SDL_Renderer::window, SDL_Rect::x, and SDL_Rect::y.

1795 {
1796  SDL_Rect real_rect;
1797 
1798  CHECK_RENDERER_MAGIC(renderer, -1);
1799 
1800  if (!renderer->RenderReadPixels) {
1801  return SDL_Unsupported();
1802  }
1803 
1804  if (!format) {
1805  format = SDL_GetWindowPixelFormat(renderer->window);
1806  }
1807 
1808  real_rect.x = renderer->viewport.x;
1809  real_rect.y = renderer->viewport.y;
1810  real_rect.w = renderer->viewport.w;
1811  real_rect.h = renderer->viewport.h;
1812  if (rect) {
1813  if (!SDL_IntersectRect(rect, &real_rect, &real_rect)) {
1814  return 0;
1815  }
1816  if (real_rect.y > rect->y) {
1817  pixels = (Uint8 *)pixels + pitch * (real_rect.y - rect->y);
1818  }
1819  if (real_rect.x > rect->x) {
1820  int bpp = SDL_BYTESPERPIXEL(format);
1821  pixels = (Uint8 *)pixels + bpp * (real_rect.x - rect->x);
1822  }
1823  }
1824 
1825  return renderer->RenderReadPixels(renderer, &real_rect,
1826  format, pixels, pitch);
1827 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1565
int(* RenderReadPixels)(SDL_Renderer *renderer, const SDL_Rect *rect, Uint32 format, void *pixels, int pitch)
#define SDL_BYTESPERPIXEL(X)
Definition: SDL_pixels.h:127
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: SDL_opengl.h:1565
#define SDL_IntersectRect
SDL_Window * window
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
SDL_Rect viewport
int h
Definition: SDL_rect.h:67
#define SDL_GetWindowPixelFormat
int y
Definition: SDL_rect.h:66
#define SDL_Unsupported()
Definition: SDL_error.h:53
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
int SDL_RenderSetClipRect ( SDL_Renderer renderer,
const SDL_Rect rect 
)

Set the clip rectangle for the current target.

Parameters
rendererThe renderer for which clip rectangle should be set.
rectA pointer to the rectangle to set as the clip rectangle, or NULL to disable clipping.
Returns
0 on success, or -1 on error
See also
SDL_RenderGetClipRect()

Definition at line 1252 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::clip_rect, SDL_Renderer::clipping_enabled, SDL_Rect::h, SDL_Renderer::scale, SDL_ceil, SDL_FALSE, SDL_floor, SDL_TRUE, SDL_zero, SDL_Renderer::UpdateClipRect, SDL_Rect::w, SDL_FPoint::x, SDL_Rect::x, SDL_FPoint::y, and SDL_Rect::y.

1253 {
1254  CHECK_RENDERER_MAGIC(renderer, -1)
1255 
1256  if (rect) {
1257  renderer->clipping_enabled = SDL_TRUE;
1258  renderer->clip_rect.x = (int)SDL_floor(rect->x * renderer->scale.x);
1259  renderer->clip_rect.y = (int)SDL_floor(rect->y * renderer->scale.y);
1260  renderer->clip_rect.w = (int)SDL_ceil(rect->w * renderer->scale.x);
1261  renderer->clip_rect.h = (int)SDL_ceil(rect->h * renderer->scale.y);
1262  } else {
1263  renderer->clipping_enabled = SDL_FALSE;
1264  SDL_zero(renderer->clip_rect);
1265  }
1266  return renderer->UpdateClipRect(renderer);
1267 }
#define SDL_ceil
SDL_FPoint scale
SDL_Rect clip_rect
#define SDL_floor
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
int h
Definition: SDL_rect.h:67
int(* UpdateClipRect)(SDL_Renderer *renderer)
int y
Definition: SDL_rect.h:66
SDL_bool clipping_enabled
int SDL_RenderSetLogicalSize ( SDL_Renderer renderer,
int  w,
int  h 
)

Set device independent resolution for rendering.

Parameters
rendererThe renderer for which resolution should be set.
wThe width of the logical resolution
hThe height of the logical resolution

This function uses the viewport and scaling functionality to allow a fixed logical resolution for rendering, regardless of the actual output resolution. If the actual output resolution doesn't have the same aspect ratio the output rendering will be centered within the output display.

If the output display is a window, mouse events in the window will be filtered and scaled so they seem to arrive within the logical resolution.

Note
If this function results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints.
See also
SDL_RenderGetLogicalSize()
SDL_RenderSetScale()
SDL_RenderSetViewport()

Definition at line 1186 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::logical_h, SDL_Renderer::logical_w, NULL, SDL_RenderSetScale(), SDL_RenderSetViewport(), and UpdateLogicalSize().

1187 {
1188  CHECK_RENDERER_MAGIC(renderer, -1);
1189 
1190  if (!w || !h) {
1191  /* Clear any previous logical resolution */
1192  renderer->logical_w = 0;
1193  renderer->logical_h = 0;
1194  SDL_RenderSetViewport(renderer, NULL);
1195  SDL_RenderSetScale(renderer, 1.0f, 1.0f);
1196  return 0;
1197  }
1198 
1199  renderer->logical_w = w;
1200  renderer->logical_h = h;
1201 
1202  return UpdateLogicalSize(renderer);
1203 }
GLfloat f
int SDL_RenderSetViewport(SDL_Renderer *renderer, const SDL_Rect *rect)
Set the drawing area for rendering on the current target.
Definition: SDL_render.c:1219
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
static int UpdateLogicalSize(SDL_Renderer *renderer)
Definition: SDL_render.c:1139
int SDL_RenderSetScale(SDL_Renderer *renderer, float scaleX, float scaleY)
Set the drawing scale for rendering on the current target.
Definition: SDL_render.c:1290
#define NULL
Definition: begin_code.h:143
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
int SDL_RenderSetScale ( SDL_Renderer renderer,
float  scaleX,
float  scaleY 
)

Set the drawing scale for rendering on the current target.

Parameters
rendererThe renderer for which the drawing scale should be set.
scaleXThe horizontal scaling factor
scaleYThe vertical scaling factor

The drawing coordinates are scaled by the x/y scaling factors before they are used by the renderer. This allows resolution independent drawing with a single coordinate system.

Note
If this results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints. For best results use integer scaling factors.
See also
SDL_RenderGetScale()
SDL_RenderSetLogicalSize()

Definition at line 1290 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Renderer::scale, SDL_FPoint::x, and SDL_FPoint::y.

Referenced by SDL_RenderSetLogicalSize(), and UpdateLogicalSize().

1291 {
1292  CHECK_RENDERER_MAGIC(renderer, -1);
1293 
1294  renderer->scale.x = scaleX;
1295  renderer->scale.y = scaleY;
1296  return 0;
1297 }
SDL_FPoint scale
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int SDL_RenderSetViewport ( SDL_Renderer renderer,
const SDL_Rect rect 
)

Set the drawing area for rendering on the current target.

Parameters
rendererThe renderer for which the drawing area should be set.
rectThe rectangle representing the drawing area, or NULL to set the viewport to the entire target.

The x,y of the viewport rect represents the origin for rendering.

Returns
0 on success, or -1 on error
Note
If the window associated with the renderer is resized, the viewport is automatically reset.
See also
SDL_RenderGetViewport()
SDL_RenderSetLogicalSize()

Definition at line 1219 of file SDL_render.c.

References CHECK_RENDERER_MAGIC, SDL_Rect::h, SDL_Renderer::scale, SDL_ceil, SDL_floor, SDL_GetRendererOutputSize(), SDL_Renderer::UpdateViewport, SDL_Renderer::viewport, SDL_Rect::w, SDL_FPoint::x, SDL_Rect::x, SDL_FPoint::y, and SDL_Rect::y.

Referenced by SDL_CreateRenderer(), SDL_CreateSoftwareRenderer(), SDL_RenderSetLogicalSize(), and UpdateLogicalSize().

1220 {
1221  CHECK_RENDERER_MAGIC(renderer, -1);
1222 
1223  if (rect) {
1224  renderer->viewport.x = (int)SDL_floor(rect->x * renderer->scale.x);
1225  renderer->viewport.y = (int)SDL_floor(rect->y * renderer->scale.y);
1226  renderer->viewport.w = (int)SDL_ceil(rect->w * renderer->scale.x);
1227  renderer->viewport.h = (int)SDL_ceil(rect->h * renderer->scale.y);
1228  } else {
1229  renderer->viewport.x = 0;
1230  renderer->viewport.y = 0;
1231  if (SDL_GetRendererOutputSize(renderer, &renderer->viewport.w, &renderer->viewport.h) < 0) {
1232  return -1;
1233  }
1234  }
1235  return renderer->UpdateViewport(renderer);
1236 }
#define SDL_ceil
SDL_FPoint scale
#define SDL_floor
int SDL_GetRendererOutputSize(SDL_Renderer *renderer, int *w, int *h)
Get the output size in pixels of a rendering context.
Definition: SDL_render.c:354
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
int x
Definition: SDL_rect.h:66
int(* UpdateViewport)(SDL_Renderer *renderer)
int w
Definition: SDL_rect.h:67
SDL_Rect viewport
int h
Definition: SDL_rect.h:67
int y
Definition: SDL_rect.h:66
SDL_bool SDL_RenderTargetSupported ( SDL_Renderer renderer)

Determines whether a window supports the use of render targets.

Parameters
rendererThe renderer that will be checked
Returns
SDL_TRUE if supported, SDL_FALSE if not.

Definition at line 1055 of file SDL_render.c.

References SDL_RendererInfo::flags, SDL_Renderer::info, SDL_FALSE, SDL_RENDERER_TARGETTEXTURE, and SDL_Renderer::SetRenderTarget.

Referenced by SDL_SetRenderTarget().

1056 {
1057  if (!renderer || !renderer->SetRenderTarget) {
1058  return SDL_FALSE;
1059  }
1060  return (renderer->info.flags & SDL_RENDERER_TARGETTEXTURE) != 0;
1061 }
SDL_RendererInfo info
int(* SetRenderTarget)(SDL_Renderer *renderer, SDL_Texture *texture)
int SDL_SetRenderDrawBlendMode ( SDL_Renderer renderer,
SDL_BlendMode  blendMode 
)

Set the blend mode used for drawing operations (Fill and Line).

Parameters
rendererThe renderer for which blend mode should be set.
blendModeSDL_BlendMode to use for blending.
Returns
0 on success, or -1 on error
Note
If the blend mode is not supported, the closest supported mode is chosen.
See also
SDL_GetRenderDrawBlendMode()

Definition at line 1347 of file SDL_render.c.

References blendMode, SDL_Renderer::blendMode, and CHECK_RENDERER_MAGIC.

1348 {
1349  CHECK_RENDERER_MAGIC(renderer, -1);
1350 
1351  renderer->blendMode = blendMode;
1352  return 0;
1353 }
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
SDL_BlendMode blendMode
int SDL_SetRenderDrawColor ( SDL_Renderer renderer,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)

Set the color used for drawing operations (Rect, Line and Clear).

Parameters
rendererThe renderer for which drawing color should be set.
rThe red value used to draw on the rendering target.
gThe green value used to draw on the rendering target.
bThe blue value used to draw on the rendering target.
aThe alpha value used to draw on the rendering target, usually SDL_ALPHA_OPAQUE (255).
Returns
0 on success, or -1 on error

Definition at line 1313 of file SDL_render.c.

References SDL_Renderer::a, SDL_Renderer::b, CHECK_RENDERER_MAGIC, SDL_Renderer::g, and SDL_Renderer::r.

1315 {
1316  CHECK_RENDERER_MAGIC(renderer, -1);
1317 
1318  renderer->r = r;
1319  renderer->g = g;
1320  renderer->b = b;
1321  renderer->a = a;
1322  return 0;
1323 }
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2072
GLboolean GLboolean g
#define CHECK_RENDERER_MAGIC(renderer, retval)
Definition: SDL_render.c:35
GLboolean GLboolean GLboolean GLboolean a
GLboolean GLboolean GLboolean b
int SDL_SetRenderTarget ( SDL_Renderer renderer,
SDL_Texture texture 
)

Set a texture as the current rendering target.

Parameters
rendererThe renderer.
textureThe targeted texture, which must be created with the SDL_TEXTUREACCESS_TARGET flag, or NULL for the default render target
Returns
0 on success, or -1 on error
See also
SDL_GetRenderTarget()

Definition at line 1064 of file SDL_render.c.

References SDL_Texture::access, CHECK_TEXTURE_MAGIC, SDL_Renderer::clip_rect, SDL_Renderer::clip_rect_backup, SDL_Renderer::clipping_enabled, SDL_Renderer::clipping_enabled_backup, SDL_Texture::h, SDL_Rect::h, SDL_Renderer::logical_h, SDL_Renderer::logical_h_backup, SDL_Renderer::logical_w, SDL_Renderer::logical_w_backup, SDL_Texture::native, SDL_Texture::renderer, SDL_Renderer::scale, SDL_Renderer::scale_backup, SDL_RenderTargetSupported(), SDL_SetError, SDL_TEXTUREACCESS_TARGET, SDL_Unsupported, SDL_Renderer::SetRenderTarget, SDL_Renderer::target, SDL_Renderer::UpdateClipRect, SDL_Renderer::UpdateViewport, SDL_Renderer::viewport, SDL_Renderer::viewport_backup, SDL_Texture::w, SDL_Rect::w, SDL_FPoint::x, SDL_Rect::x, SDL_FPoint::y, and SDL_Rect::y.

Referenced by SDL_DestroyTexture(), and SDL_RendererEventWatch().

1065 {
1066  if (!SDL_RenderTargetSupported(renderer)) {
1067  return SDL_Unsupported();
1068  }
1069  if (texture == renderer->target) {
1070  /* Nothing to do! */
1071  return 0;
1072  }
1073 
1074  /* texture == NULL is valid and means reset the target to the window */
1075  if (texture) {
1076  CHECK_TEXTURE_MAGIC(texture, -1);
1077  if (renderer != texture->renderer) {
1078  return SDL_SetError("Texture was not created with this renderer");
1079  }
1080  if (texture->access != SDL_TEXTUREACCESS_TARGET) {
1081  return SDL_SetError("Texture not created with SDL_TEXTUREACCESS_TARGET");
1082  }
1083  if (texture->native) {
1084  /* Always render to the native texture */
1085  texture = texture->native;
1086  }
1087  }
1088 
1089  if (texture && !renderer->target) {
1090  /* Make a backup of the viewport */
1091  renderer->viewport_backup = renderer->viewport;
1092  renderer->clip_rect_backup = renderer->clip_rect;
1093  renderer->clipping_enabled_backup = renderer->clipping_enabled;
1094  renderer->scale_backup = renderer->scale;
1095  renderer->logical_w_backup = renderer->logical_w;
1096  renderer->logical_h_backup = renderer->logical_h;
1097  }
1098  renderer->target = texture;
1099 
1100  if (renderer->SetRenderTarget(renderer, texture) < 0) {
1101  return -1;
1102  }
1103 
1104  if (texture) {
1105  renderer->viewport.x = 0;
1106  renderer->viewport.y = 0;
1107  renderer->viewport.w = texture->w;
1108  renderer->viewport.h = texture->h;
1109  renderer->scale.x = 1.0f;
1110  renderer->scale.y = 1.0f;
1111  renderer->logical_w = texture->w;
1112  renderer->logical_h = texture->h;
1113  } else {
1114  renderer->viewport = renderer->viewport_backup;
1115  renderer->clip_rect = renderer->clip_rect_backup;
1116  renderer->clipping_enabled = renderer->clipping_enabled_backup;
1117  renderer->scale = renderer->scale_backup;
1118  renderer->logical_w = renderer->logical_w_backup;
1119  renderer->logical_h = renderer->logical_h_backup;
1120  }
1121  if (renderer->UpdateViewport(renderer) < 0) {
1122  return -1;
1123  }
1124  if (renderer->UpdateClipRect(renderer) < 0) {
1125  return -1;
1126  }
1127 
1128  /* All set! */
1129  return 0;
1130 }
SDL_Rect clip_rect_backup
GLenum GLenum GLuint texture
SDL_FPoint scale
SDL_Rect clip_rect
SDL_FPoint scale_backup
SDL_Texture * target
int x
Definition: SDL_rect.h:66
int(* SetRenderTarget)(SDL_Renderer *renderer, SDL_Texture *texture)
int(* UpdateViewport)(SDL_Renderer *renderer)
int w
Definition: SDL_rect.h:67
SDL_bool SDL_RenderTargetSupported(SDL_Renderer *renderer)
Determines whether a window supports the use of render targets.
Definition: SDL_render.c:1055
#define SDL_SetError
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
SDL_Rect viewport
int h
Definition: SDL_rect.h:67
SDL_Texture * native
Definition: SDL_sysrender.h:63
SDL_Rect viewport_backup
int(* UpdateClipRect)(SDL_Renderer *renderer)
SDL_bool clipping_enabled_backup
int y
Definition: SDL_rect.h:66
#define SDL_Unsupported()
Definition: SDL_error.h:53
SDL_bool clipping_enabled
int SDL_SetTextureAlphaMod ( SDL_Texture texture,
Uint8  alpha 
)

Set an additional alpha value used in render copy operations.

Parameters
textureThe texture to update.
alphaThe alpha value multiplied into copy operations.
Returns
0 on success, or -1 if the texture is not valid or alpha modulation is not supported.
See also
SDL_GetTextureAlphaMod()

Definition at line 657 of file SDL_render.c.

References SDL_Texture::a, CHECK_TEXTURE_MAGIC, SDL_Texture::modMode, SDL_Texture::native, renderer, SDL_Texture::renderer, SDL_TEXTUREMODULATE_ALPHA, and SDL_Renderer::SetTextureAlphaMod.

Referenced by SDL_CreateTextureFromSurface().

658 {
660 
661  CHECK_TEXTURE_MAGIC(texture, -1);
662 
663  renderer = texture->renderer;
664  if (alpha < 255) {
666  } else {
667  texture->modMode &= ~SDL_TEXTUREMODULATE_ALPHA;
668  }
669  texture->a = alpha;
670  if (texture->native) {
671  return SDL_SetTextureAlphaMod(texture->native, alpha);
672  } else if (renderer->SetTextureAlphaMod) {
673  return renderer->SetTextureAlphaMod(renderer, texture);
674  } else {
675  return 0;
676  }
677 }
GLfloat GLfloat GLfloat alpha
SDL_Renderer * renderer
int SDL_SetTextureAlphaMod(SDL_Texture *texture, Uint8 alpha)
Set an additional alpha value used in render copy operations.
Definition: SDL_render.c:657
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int(* SetTextureAlphaMod)(SDL_Renderer *renderer, SDL_Texture *texture)
Definition: SDL_sysrender.h:85
SDL_Texture * native
Definition: SDL_sysrender.h:63
int SDL_SetTextureBlendMode ( SDL_Texture texture,
SDL_BlendMode  blendMode 
)

Set the blend mode used for texture copy operations.

Parameters
textureThe texture to update.
blendModeSDL_BlendMode to use for texture blending.
Returns
0 on success, or -1 if the texture is not valid or the blend mode is not supported.
Note
If the blend mode is not supported, the closest supported mode is chosen.
See also
SDL_GetTextureBlendMode()

Definition at line 691 of file SDL_render.c.

References blendMode, SDL_Texture::blendMode, CHECK_TEXTURE_MAGIC, SDL_Texture::native, renderer, SDL_Texture::renderer, and SDL_Renderer::SetTextureBlendMode.

Referenced by SDL_CreateTextureFromSurface().

692 {
694 
695  CHECK_TEXTURE_MAGIC(texture, -1);
696 
697  renderer = texture->renderer;
698  texture->blendMode = blendMode;
699  if (texture->native) {
700  return SDL_SetTextureBlendMode(texture->native, blendMode);
701  } else if (renderer->SetTextureBlendMode) {
702  return renderer->SetTextureBlendMode(renderer, texture);
703  } else {
704  return 0;
705  }
706 }
SDL_BlendMode blendMode
Definition: SDL_sysrender.h:57
int(* SetTextureBlendMode)(SDL_Renderer *renderer, SDL_Texture *texture)
Definition: SDL_sysrender.h:87
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
SDL_Renderer * renderer
int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode)
Set the blend mode used for texture copy operations.
Definition: SDL_render.c:691
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
SDL_Texture * native
Definition: SDL_sysrender.h:63
int SDL_SetTextureColorMod ( SDL_Texture texture,
Uint8  r,
Uint8  g,
Uint8  b 
)

Set an additional color value used in render copy operations.

Parameters
textureThe texture to update.
rThe red color value multiplied into copy operations.
gThe green color value multiplied into copy operations.
bThe blue color value multiplied into copy operations.
Returns
0 on success, or -1 if the texture is not valid or color modulation is not supported.
See also
SDL_GetTextureColorMod()

Definition at line 614 of file SDL_render.c.

References SDL_Texture::b, CHECK_TEXTURE_MAGIC, SDL_Texture::g, SDL_Texture::modMode, SDL_Texture::native, SDL_Texture::r, renderer, SDL_Texture::renderer, SDL_TEXTUREMODULATE_COLOR, and SDL_Renderer::SetTextureColorMod.

Referenced by SDL_CreateTextureFromSurface().

615 {
617 
618  CHECK_TEXTURE_MAGIC(texture, -1);
619 
620  renderer = texture->renderer;
621  if (r < 255 || g < 255 || b < 255) {
623  } else {
624  texture->modMode &= ~SDL_TEXTUREMODULATE_COLOR;
625  }
626  texture->r = r;
627  texture->g = g;
628  texture->b = b;
629  if (texture->native) {
630  return SDL_SetTextureColorMod(texture->native, r, g, b);
631  } else if (renderer->SetTextureColorMod) {
632  return renderer->SetTextureColorMod(renderer, texture);
633  } else {
634  return 0;
635  }
636 }
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2072
GLboolean GLboolean g
SDL_Renderer * renderer
int(* SetTextureColorMod)(SDL_Renderer *renderer, SDL_Texture *texture)
Definition: SDL_sysrender.h:83
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int SDL_SetTextureColorMod(SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b)
Set an additional color value used in render copy operations.
Definition: SDL_render.c:614
SDL_Texture * native
Definition: SDL_sysrender.h:63
GLboolean GLboolean GLboolean b
void SDL_UnlockTexture ( SDL_Texture texture)

Unlock a texture, uploading the changes to video memory, if needed.

See also
SDL_LockTexture()

Definition at line 1035 of file SDL_render.c.

References SDL_Texture::access, CHECK_TEXTURE_MAGIC, SDL_Texture::native, renderer, SDL_Texture::renderer, SDL_TEXTUREACCESS_STREAMING, SDL_UnlockTextureNative(), SDL_UnlockTextureYUV(), SDL_Renderer::UnlockTexture, and SDL_Texture::yuv.

Referenced by SDL_UnlockTextureNative(), SDL_UnlockTextureYUV(), SDL_UpdateTextureNative(), SDL_UpdateTextureYUV(), and SDL_UpdateTextureYUVPlanar().

1036 {
1038 
1039  CHECK_TEXTURE_MAGIC(texture, );
1040 
1041  if (texture->access != SDL_TEXTUREACCESS_STREAMING) {
1042  return;
1043  }
1044  if (texture->yuv) {
1045  SDL_UnlockTextureYUV(texture);
1046  } else if (texture->native) {
1047  SDL_UnlockTextureNative(texture);
1048  } else {
1049  renderer = texture->renderer;
1050  renderer->UnlockTexture(renderer, texture);
1051  }
1052 }
static void SDL_UnlockTextureNative(SDL_Texture *texture)
Definition: SDL_render.c:1014
SDL_Renderer * renderer
SDL_SW_YUVTexture * yuv
Definition: SDL_sysrender.h:64
void(* UnlockTexture)(SDL_Renderer *renderer, SDL_Texture *texture)
Definition: SDL_sysrender.h:99
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
SDL_Texture * native
Definition: SDL_sysrender.h:63
static void SDL_UnlockTextureYUV(SDL_Texture *texture)
Definition: SDL_render.c:993
int SDL_UpdateTexture ( SDL_Texture texture,
const SDL_Rect rect,
const void pixels,
int  pitch 
)

Update the given texture rectangle with new pixel data.

Parameters
textureThe texture to update
rectA pointer to the rectangle of pixels to update, or NULL to update the entire texture.
pixelsThe raw pixel data.
pitchThe number of bytes in a row of pixel data, including padding between lines.
Returns
0 on success, or -1 if the texture is not valid.
Note
This is a fairly slow function.

Definition at line 803 of file SDL_render.c.

References CHECK_TEXTURE_MAGIC, SDL_Texture::h, SDL_Rect::h, SDL_Texture::native, renderer, SDL_Texture::renderer, SDL_InvalidParamError, SDL_UpdateTextureNative(), SDL_UpdateTextureYUV(), SDL_Renderer::UpdateTexture, SDL_Texture::w, SDL_Rect::w, SDL_Rect::x, SDL_Rect::y, and SDL_Texture::yuv.

Referenced by SDL_CreateTextureFromSurface(), SDL_UpdateTextureNative(), SDL_UpdateTextureYUV(), and SDL_UpdateTextureYUVPlanar().

805 {
807  SDL_Rect full_rect;
808 
809  CHECK_TEXTURE_MAGIC(texture, -1);
810 
811  if (!pixels) {
812  return SDL_InvalidParamError("pixels");
813  }
814  if (!pitch) {
815  return SDL_InvalidParamError("pitch");
816  }
817 
818  if (!rect) {
819  full_rect.x = 0;
820  full_rect.y = 0;
821  full_rect.w = texture->w;
822  full_rect.h = texture->h;
823  rect = &full_rect;
824  }
825 
826  if ((rect->w == 0) || (rect->h == 0)) {
827  return 0; /* nothing to do. */
828  } else if (texture->yuv) {
829  return SDL_UpdateTextureYUV(texture, rect, pixels, pitch);
830  } else if (texture->native) {
831  return SDL_UpdateTextureNative(texture, rect, pixels, pitch);
832  } else {
833  renderer = texture->renderer;
834  return renderer->UpdateTexture(renderer, texture, rect, pixels, pitch);
835  }
836 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: SDL_opengl.h:1565
static int SDL_UpdateTextureNative(SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
Definition: SDL_render.c:766
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
int(* UpdateTexture)(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
Definition: SDL_sysrender.h:89
SDL_Renderer * renderer
SDL_SW_YUVTexture * yuv
Definition: SDL_sysrender.h:64
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
static int SDL_UpdateTextureYUV(SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
Definition: SDL_render.c:720
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int h
Definition: SDL_rect.h:67
SDL_Texture * native
Definition: SDL_sysrender.h:63
int y
Definition: SDL_rect.h:66
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
int SDL_UpdateYUVTexture ( SDL_Texture texture,
const SDL_Rect rect,
const Uint8 Yplane,
int  Ypitch,
const Uint8 Uplane,
int  Upitch,
const Uint8 Vplane,
int  Vpitch 
)

Update a rectangle within a planar YV12 or IYUV texture with new pixel data.

Parameters
textureThe texture to update
rectA pointer to the rectangle of pixels to update, or NULL to update the entire texture.
YplaneThe raw pixel data for the Y plane.
YpitchThe number of bytes between rows of pixel data for the Y plane.
UplaneThe raw pixel data for the U plane.
UpitchThe number of bytes between rows of pixel data for the U plane.
VplaneThe raw pixel data for the V plane.
VpitchThe number of bytes between rows of pixel data for the V plane.
Returns
0 on success, or -1 if the texture is not valid.
Note
You can use SDL_UpdateTexture() as long as your pixel data is a contiguous block of Y and U/V planes in the proper order, but this function is available if your pixel data is not contiguous.

Definition at line 886 of file SDL_render.c.

References CHECK_TEXTURE_MAGIC, SDL_Texture::format, SDL_Texture::h, SDL_Rect::h, SDL_Texture::native, renderer, SDL_Texture::renderer, SDL_assert, SDL_InvalidParamError, SDL_PIXELFORMAT_IYUV, SDL_PIXELFORMAT_YV12, SDL_SetError, SDL_Unsupported, SDL_UpdateTextureYUVPlanar(), SDL_Renderer::UpdateTextureYUV, SDL_Texture::w, SDL_Rect::w, SDL_Rect::x, SDL_Rect::y, and SDL_Texture::yuv.

890 {
892  SDL_Rect full_rect;
893 
894  CHECK_TEXTURE_MAGIC(texture, -1);
895 
896  if (!Yplane) {
897  return SDL_InvalidParamError("Yplane");
898  }
899  if (!Ypitch) {
900  return SDL_InvalidParamError("Ypitch");
901  }
902  if (!Uplane) {
903  return SDL_InvalidParamError("Uplane");
904  }
905  if (!Upitch) {
906  return SDL_InvalidParamError("Upitch");
907  }
908  if (!Vplane) {
909  return SDL_InvalidParamError("Vplane");
910  }
911  if (!Vpitch) {
912  return SDL_InvalidParamError("Vpitch");
913  }
914 
915  if (texture->format != SDL_PIXELFORMAT_YV12 &&
916  texture->format != SDL_PIXELFORMAT_IYUV) {
917  return SDL_SetError("Texture format must by YV12 or IYUV");
918  }
919 
920  if (!rect) {
921  full_rect.x = 0;
922  full_rect.y = 0;
923  full_rect.w = texture->w;
924  full_rect.h = texture->h;
925  rect = &full_rect;
926  }
927 
928  if (texture->yuv) {
929  return SDL_UpdateTextureYUVPlanar(texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch);
930  } else {
931  SDL_assert(!texture->native);
932  renderer = texture->renderer;
933  SDL_assert(renderer->UpdateTextureYUV);
934  if (renderer->UpdateTextureYUV) {
935  return renderer->UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch);
936  } else {
937  return SDL_Unsupported();
938  }
939  }
940 }
static int SDL_UpdateTextureYUVPlanar(SDL_Texture *texture, const SDL_Rect *rect, const Uint8 *Yplane, int Ypitch, const Uint8 *Uplane, int Upitch, const Uint8 *Vplane, int Vpitch)
Definition: SDL_render.c:839
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
int(* UpdateTextureYUV)(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, const Uint8 *Yplane, int Ypitch, const Uint8 *Uplane, int Upitch, const Uint8 *Vplane, int Vpitch)
Definition: SDL_sysrender.h:92
SDL_Renderer * renderer
SDL_SW_YUVTexture * yuv
Definition: SDL_sysrender.h:64
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
#define SDL_assert(condition)
Definition: SDL_assert.h:167
#define SDL_SetError
SDL_Renderer * renderer
Definition: SDL_sysrender.h:60
#define CHECK_TEXTURE_MAGIC(texture, retval)
Definition: SDL_render.c:41
int h
Definition: SDL_rect.h:67
Uint32 format
Definition: SDL_sysrender.h:52
SDL_Texture * native
Definition: SDL_sysrender.h:63
int y
Definition: SDL_rect.h:66
#define SDL_Unsupported()
Definition: SDL_error.h:53
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64