SDL  2.0
SDL_sysrender.h
Go to the documentation of this file.
1 /*
2  Simple DirectMedia Layer
3  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any damages
7  arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any purpose,
10  including commercial applications, and to alter it and redistribute it
11  freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not
14  claim that you wrote the original software. If you use this software
15  in a product, an acknowledgment in the product documentation would be
16  appreciated but is not required.
17  2. Altered source versions must be plainly marked as such, and must not be
18  misrepresented as being the original software.
19  3. This notice may not be removed or altered from any source distribution.
20 */
21 #include "../SDL_internal.h"
22 
23 #ifndef SDL_sysrender_h_
24 #define SDL_sysrender_h_
25 
26 #include "SDL_render.h"
27 #include "SDL_events.h"
28 #include "SDL_mutex.h"
29 #include "SDL_yuv_sw_c.h"
30 
31 /* The SDL 2D rendering system */
32 
33 typedef struct SDL_RenderDriver SDL_RenderDriver;
34 
35 typedef enum
36 {
41 
42 /* Define the SDL texture structure */
44 {
45  const void *magic;
46  Uint32 format; /**< The pixel format of the texture */
47  int access; /**< SDL_TextureAccess */
48  int w; /**< The width of the texture */
49  int h; /**< The height of the texture */
50  int modMode; /**< The texture modulation mode */
51  SDL_BlendMode blendMode; /**< The texture blend mode */
52  SDL_ScaleMode scaleMode; /**< The texture scale mode */
53  Uint8 r, g, b, a; /**< Texture modulation values */
54 
56 
57  /* Support for formats not supported directly by the renderer */
60  void *pixels;
61  int pitch;
63 
64  Uint32 last_command_generation; /* last command queue generation this texture was in. */
65 
66  void *driverdata; /**< Driver specific texture representation */
67 
70 };
71 
72 typedef enum
73 {
85 
86 typedef struct SDL_RenderCommand
87 {
89  union {
90  struct {
91  size_t first;
93  } viewport;
94  struct {
96  SDL_Rect rect;
97  } cliprect;
98  struct {
99  size_t first;
100  size_t count;
101  Uint8 r, g, b, a;
104  } draw;
105  struct {
106  size_t first;
107  Uint8 r, g, b, a;
108  } color;
109  } data;
112 
113 typedef struct SDL_AllocVertGap
114 {
115  size_t offset;
116  size_t len;
119 
120 
121 /* Define the SDL renderer structure */
123 {
124  const void *magic;
125 
126  void (*WindowEvent) (SDL_Renderer * renderer, const SDL_WindowEvent *event);
127  int (*GetOutputSize) (SDL_Renderer * renderer, int *w, int *h);
129  int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
130  int (*QueueSetViewport) (SDL_Renderer * renderer, SDL_RenderCommand *cmd);
131  int (*QueueSetDrawColor) (SDL_Renderer * renderer, SDL_RenderCommand *cmd);
132  int (*QueueDrawPoints) (SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FPoint * points,
133  int count);
134  int (*QueueDrawLines) (SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FPoint * points,
135  int count);
136  int (*QueueFillRects) (SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FRect * rects,
137  int count);
139  const SDL_Rect * srcrect, const SDL_FRect * dstrect);
141  const SDL_Rect * srcquad, const SDL_FRect * dstrect,
142  const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip);
143  int (*RunCommandQueue) (SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize);
145  const SDL_Rect * rect, const void *pixels,
146  int pitch);
147  int (*UpdateTextureYUV) (SDL_Renderer * renderer, SDL_Texture * texture,
148  const SDL_Rect * rect,
149  const Uint8 *Yplane, int Ypitch,
150  const Uint8 *Uplane, int Upitch,
151  const Uint8 *Vplane, int Vpitch);
152  int (*LockTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
153  const SDL_Rect * rect, void **pixels, int *pitch);
154  void (*UnlockTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
155  int (*SetRenderTarget) (SDL_Renderer * renderer, SDL_Texture * texture);
156  int (*RenderReadPixels) (SDL_Renderer * renderer, const SDL_Rect * rect,
157  Uint32 format, void * pixels, int pitch);
158  void (*RenderPresent) (SDL_Renderer * renderer);
159  void (*DestroyTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
160 
161  void (*DestroyRenderer) (SDL_Renderer * renderer);
162 
163  int (*GL_BindTexture) (SDL_Renderer * renderer, SDL_Texture *texture, float *texw, float *texh);
164  int (*GL_UnbindTexture) (SDL_Renderer * renderer, SDL_Texture *texture);
165 
166  void *(*GetMetalLayer) (SDL_Renderer * renderer);
167  void *(*GetMetalCommandEncoder) (SDL_Renderer * renderer);
168 
169  /* The current renderer info */
171 
172  /* The window associated with the renderer */
175 
176  /* The logical resolution for rendering */
181 
182  /* Whether or not to force the viewport to even integer intervals */
184 
185  /* The drawable area within the window */
188 
189  /* The clip rectangle within the window */
192 
193  /* Wether or not the clipping rectangle is used. */
196 
197  /* The render output coordinate scale */
200 
201  /* The pixel to point coordinate scale */
203 
204  /* The list of textures */
208 
209  Uint8 r, g, b, a; /**< Color for drawing operations values */
210  SDL_BlendMode blendMode; /**< The drawing blend mode */
211 
225 
226  void *vertex_data;
231 
232  void *driverdata;
233 };
234 
235 /* Define the SDL render driver structure */
237 {
238  SDL_Renderer *(*CreateRenderer) (SDL_Window * window, Uint32 flags);
239 
240  /* Info about the renderer capabilities */
242 };
243 
244 /* Not all of these are available in a given build. Use #ifdefs, etc. */
254 
255 /* Blend mode functions */
262 
263 /* drivers call this during their Queue*() methods to make space in a array that are used
264  for a vertex buffer during RunCommandQueue(). Pointers returned here are only valid until
265  the next call, because it might be in an array that gets realloc()'d. */
266 extern void *SDL_AllocateRenderVertices(SDL_Renderer *renderer, const size_t numbytes, const size_t alignment, size_t *offset);
267 
268 #endif /* SDL_sysrender_h_ */
269 
270 /* vi: set ts=4 sw=4 expandtab: */
SDL_BlendFactor
The normalized factor used to multiply pixel components.
Definition: SDL_blendmode.h:75
void * pixels
Definition: SDL_sysrender.h:60
SDL_BlendMode blendMode
Definition: SDL_sysrender.h:51
SDL_bool always_batch
SDL_BlendFactor SDL_GetBlendModeSrcColorFactor(SDL_BlendMode blendMode)
Definition: SDL_render.c:3342
SDL_AllocVertGap * vertex_data_gaps_pool
const GLint * first
SDL_RendererInfo info
size_t vertex_data_used
SDL_Rect clip_rect_backup
SDL_RenderDriver GLES_RenderDriver
SDL_BlendMode
The blend mode used in SDL_RenderCopy() and drawing operations.
Definition: SDL_blendmode.h:40
SDL_RenderDriver DirectFB_RenderDriver
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1571
SDL_Rect rect
Definition: testrelative.c:27
SDL_BlendFactor SDL_GetBlendModeSrcAlphaFactor(SDL_BlendMode blendMode)
Definition: SDL_render.c:3363
struct SDL_AllocVertGap * next
SDL_RenderDriver D3D11_RenderDriver
SDL_bool hidden
void * driverdata
SDL_RenderDriver PSP_RenderDriver
SDL_FPoint scale
SDL_RendererFlip
Flip constants for SDL_RenderCopyEx.
Definition: SDL_render.h:111
SDL_Rect locked_rect
Definition: SDL_sysrender.h:62
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
SDL_bool viewport_queued
GLintptr offset
SDL_RenderDriver GL_RenderDriver
SDL_mutex * target_mutex
SDL_Rect clip_rect
SDL_Texture * textures
SDL_BlendOperation
The blend operation used when combining source and destination pixel components.
Definition: SDL_blendmode.h:62
SDL_bool batching
SDL_Window * window
SDL_RendererInfo info
SDL_Texture * texture
SDL_Rect last_queued_viewport
GLfixed GLfixed GLint GLint GLfixed points
SDL_FPoint scale_backup
SDL_RenderCommand * render_commands_tail
SDL_RenderDriver METAL_RenderDriver
SDL_RenderDriver GLES2_RenderDriver
SDL_Texture * next
Definition: SDL_sysrender.h:69
GLenum GLenum GLuint texture
SDL_Texture * prev
Definition: SDL_sysrender.h:68
SDL_RenderDriver SW_RenderDriver
SDL_Texture * target
SDL_RenderCommand * render_commands_pool
uint8_t Uint8
Definition: SDL_stdinc.h:179
struct _cl_event * event
SDL_SW_YUVTexture * yuv
Definition: SDL_sysrender.h:59
SDL_BlendMode blendMode
SDL_Rect last_queued_cliprect
SDL_RenderCommand * render_commands
size_t vertex_data_allocation
Uint32 last_command_generation
Definition: SDL_sysrender.h:64
SDL_RenderDriver D3D_RenderDriver
Uint32 render_command_generation
SDL_bool color_queued
void * SDL_AllocateRenderVertices(SDL_Renderer *renderer, const size_t numbytes, const size_t alignment, size_t *offset)
Definition: SDL_render.c:284
Window state change event data (event.window.*)
Definition: SDL_events.h:195
SDL_bool
Definition: SDL_stdinc.h:161
SDL_BlendFactor SDL_GetBlendModeDstAlphaFactor(SDL_BlendMode blendMode)
Definition: SDL_render.c:3370
SDL_BlendOperation SDL_GetBlendModeAlphaOperation(SDL_BlendMode blendMode)
Definition: SDL_render.c:3377
Information on the capabilities of a render driver or context.
Definition: SDL_render.h:78
GLbitfield flags
SDL_Renderer * renderer
Definition: SDL_sysrender.h:55
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
SDL_AllocVertGap vertex_data_gaps
SDL_RenderCommandType command
Definition: SDL_sysrender.h:88
SDL_Rect viewport
SDL_RenderCommandType
Definition: SDL_sysrender.h:72
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 void
The type used to identify a window.
Definition: SDL_sysvideo.h:73
uint32_t Uint32
Definition: SDL_stdinc.h:203
SDL_Rect viewport
Definition: testviewport.c:28
GLuint color
Uint32 last_queued_color
SDL_BlendFactor SDL_GetBlendModeDstColorFactor(SDL_BlendMode blendMode)
Definition: SDL_render.c:3349
GLfloat angle
SDL_bool last_queued_cliprect_enabled
void * vertex_data
const void * magic
Uint32 format
Definition: SDL_sysrender.h:46
void * driverdata
Definition: SDL_sysrender.h:66
SDL_BlendMode blend
SDL_Texture * native
Definition: SDL_sysrender.h:58
EGLSurface EGLint * rects
Definition: eglext.h:282
SDL_ScaleMode scaleMode
Definition: SDL_sysrender.h:52
SDL_Rect viewport_backup
SDL_bool cliprect_queued
struct SDL_RenderCommand * next
const void * magic
Definition: SDL_sysrender.h:45
SDL_bool clipping_enabled_backup
void UpdateTexture(SDL_Texture *texture, int frame)
Definition: teststreaming.c:70
SDL_FPoint dpi_scale
SDL_BlendOperation SDL_GetBlendModeColorOperation(SDL_BlendMode blendMode)
Definition: SDL_render.c:3356
SDL_bool integer_scale
SDL_bool clipping_enabled
A rectangle, with the origin at the upper left (floating point).
Definition: SDL_rect.h:87
The structure that defines a point (floating point)
Definition: SDL_rect.h:60
A rectangle, with the origin at the upper left (integer).
Definition: SDL_rect.h:77
SDL_ScaleMode
Definition: SDL_sysrender.h:35