21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_DIRECTFB
30 #include "../SDL_sysvideo.h"
31 #include "../../render/SDL_sysrender.h"
33 #ifndef DFB_VERSION_ATLEAST
35 #define DFB_VERSIONNUM(X, Y, Z) \
36 ((X)*1000 + (Y)*100 + (Z))
38 #define DFB_COMPILEDVERSION \
39 DFB_VERSIONNUM(DIRECTFB_MAJOR_VERSION, DIRECTFB_MINOR_VERSION, DIRECTFB_MICRO_VERSION)
41 #define DFB_VERSION_ATLEAST(X, Y, Z) \
42 (DFB_COMPILEDVERSION >= DFB_VERSIONNUM(X, Y, Z))
44 #define SDL_DFB_CHECK(x) x
49 #define USE_DISPLAY_PALETTE (0)
52 #define SDL_DFB_RENDERERDATA(rend) DirectFB_RenderData *renddata = ((rend) ? (DirectFB_RenderData *) (rend)->driverdata : NULL)
53 #define SDL_DFB_WINDOWSURFACE(win) IDirectFBSurface *destsurf = ((DFB_WindowData *) ((win)->driverdata))->surface;
58 DFBSurfaceFlipFlags flipflags;
61 DFBSurfaceBlittingFlags blitFlags;
62 DFBSurfaceDrawingFlags drawFlags;
64 } DirectFB_RenderData;
72 IDirectFBPalette *palette;
77 #if (DFB_VERSION_ATLEAST(1,2,0))
78 DFBSurfaceRenderOptions render_options;
80 } DirectFB_TextureData;
83 SDLtoDFBRect(
const SDL_Rect * sr, DFBRectangle * dr)
91 SDLtoDFBRect_Float(
const SDL_FRect * sr, DFBRectangle * dr)
101 TextureHasAlpha(DirectFB_TextureData *
data)
109 switch (
data->format) {
154 DirectFB_TextureData *
source)
156 IDirectFBSurface *destsurf =
data->target;
163 data->blitFlags = DSBLIT_NOFX;
164 data->drawFlags = DSDRAW_NOFX;
165 SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_ONE));
166 SDL_DFB_CHECK(destsurf->SetDstBlendFunction(destsurf, DSBF_ZERO));
169 case SDL_BLENDMODE_MASK:
170 data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
171 data->drawFlags = DSDRAW_BLEND;
172 SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_SRCALPHA));
173 SDL_DFB_CHECK(destsurf->SetDstBlendFunction(destsurf, DSBF_INVSRCALPHA));
177 data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
178 data->drawFlags = DSDRAW_BLEND;
179 SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_SRCALPHA));
180 SDL_DFB_CHECK(destsurf->SetDstBlendFunction(destsurf, DSBF_INVSRCALPHA));
183 data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
184 data->drawFlags = DSDRAW_BLEND;
189 SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_SRCALPHA));
191 SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_ONE));
192 SDL_DFB_CHECK(destsurf->SetDstBlendFunction(destsurf, DSBF_ONE));
195 data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
196 data->drawFlags = DSDRAW_BLEND;
197 SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_ZERO));
198 SDL_DFB_CHECK(destsurf->SetDstBlendFunction(destsurf, DSBF_SRCCOLOR));
202 data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
203 data->drawFlags = DSDRAW_BLEND;
204 SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_DESTCOLOR));
205 SDL_DFB_CHECK(destsurf->SetDstBlendFunction(destsurf, DSBF_INVSRCALPHA));
217 IDirectFBSurface *destsurf =
data->target;
234 r = ((
int)
r * (
int)
a) / 255;
235 g = ((
int)
g * (
int)
a) / 255;
236 b = ((
int)
b * (
int)
a) / 255;
266 if (renddata->size_changed ) {
277 DFB_DisplayData *dispdata = (DFB_DisplayData *) display->
driverdata;
279 DFBDisplayLayerConfig layconf;
282 if (devdata->use_yuv_direct && (dispdata->vidID >= 0)
283 && (!dispdata->vidIDinuse)
286 DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT |
291 layconf.surface_caps = DSCAPS_VIDEOONLY | DSCAPS_DOUBLE;
295 &dispdata->vidlayer));
297 vidlayer->SetCooperativeLevel(dispdata->vidlayer,
300 if (devdata->use_yuv_underlays) {
301 ret = dispdata->vidlayer->SetLevel(dispdata->vidlayer, -1);
306 vidlayer->SetConfiguration(dispdata->vidlayer,
309 vidlayer->GetSurface(dispdata->vidlayer,
311 dispdata->vidIDinuse = 1;
312 data->display = display;
317 if (dispdata->vidlayer) {
320 vidlayer->SetCooperativeLevel(dispdata->vidlayer,
321 DLSCL_ADMINISTRATIVE));
333 DirectFB_TextureData *
data;
334 DFBSurfaceDescription dsc;
335 DFBSurfacePixelFormat pixelformat;
337 DirectFB_ActivateRenderer(
renderer);
344 if (pixelformat == DSPF_UNKNOWN) {
350 data->pitch =
texture->w * DFB_BYTES_PER_PIXEL(pixelformat);
355 DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
361 dsc.width += (dsc.width % 2);
362 dsc.height += (dsc.height % 2);
369 dsc.caps = DSCAPS_PREMULTIPLIED;
372 dsc.caps |= DSCAPS_SYSTEMONLY;
374 dsc.caps |= DSCAPS_VIDEOONLY;
377 dsc.pixelformat = pixelformat;
391 DFBPaletteDescription pal_desc;
392 pal_desc.flags = DPDESC_SIZE;
400 #if (DFB_VERSION_ATLEAST(1,2,0))
401 data->render_options = DSRO_NONE;
426 #if (DFB_VERSION_ATLEAST(1,2,0))
428 DirectFB_TextureData *
data = (DirectFB_TextureData *)
texture->driverdata;
431 case SDL_SCALEMODE_NONE:
432 case SDL_SCALEMODE_FAST:
433 data->render_options = DSRO_NONE;
435 case SDL_SCALEMODE_SLOW:
436 data->render_options = DSRO_SMOOTH_UPSCALE | DSRO_SMOOTH_DOWNSCALE;
438 case SDL_SCALEMODE_BEST:
439 data->render_options =
440 DSRO_SMOOTH_UPSCALE | DSRO_SMOOTH_DOWNSCALE | DSRO_ANTIALIAS;
443 data->render_options = DSRO_NONE;
444 texture->scaleMode = SDL_SCALEMODE_NONE;
456 DirectFB_TextureData *
data = (DirectFB_TextureData *)
texture->driverdata;
465 DirectFB_ActivateRenderer(
renderer);
473 DSLF_WRITE | DSLF_READ,
474 ((
void **) &dpixels), &dpitch));
513 DirectFB_TextureData *texturedata =
514 (DirectFB_TextureData *)
texture->driverdata;
516 DirectFB_ActivateRenderer(
renderer);
520 SDL_AddDirtyRect(&texturedata->dirty,
rect);
524 if (texturedata->display) {
529 DSLF_WRITE | DSLF_READ,
535 (
void *) ((
Uint8 *) texturedata->pixels +
536 rect->
y * texturedata->pitch +
538 *pitch = texturedata->pitch;
539 texturedata->isDirty = 1;
550 DirectFB_TextureData *texturedata =
551 (DirectFB_TextureData *)
texture->driverdata;
553 DirectFB_ActivateRenderer(
renderer);
555 if (texturedata->display) {
556 SDL_DFB_CHECK(texturedata->surface->Unlock(texturedata->surface));
557 texturedata->pixels =
NULL;
562 DirectFB_SetTextureScaleMode()
571 DirectFB_TextureData *
data = (DirectFB_TextureData *)
texture->driverdata;
574 for (
i = 0;
i < numrects; ++
i) {
583 DirectFB_TextureData *tex_data =
NULL;
585 DirectFB_ActivateRenderer(
renderer);
587 tex_data = (DirectFB_TextureData *)
texture->driverdata;
588 data->target = tex_data->surface;
590 data->target = get_dfb_surface(
data->window);
592 data->lastBlendMode = 0;
645 SDLtoDFBRect(srcrect, verts++);
646 SDLtoDFBRect_Float(dstrect, verts);
665 IDirectFBSurface *destsurf =
data->target;
666 DFBRegion clip_region;
669 DirectFB_ActivateRenderer(
renderer);
682 clip_region.x2 = clip_region.x1 +
viewport->
w - 1;
683 clip_region.y2 = clip_region.y1 +
viewport->
h - 1;
684 destsurf->SetClip(destsurf, &clip_region);
692 clip_region.x1 =
rect->
x;
694 clip_region.y1 =
rect->
y;
696 destsurf->SetClip(destsurf, &clip_region);
706 destsurf->Clear(destsurf,
r,
g,
b,
a);
715 const int x =
points[
i].x + clip_region.x1;
716 const int y =
points[
i].y + clip_region.y1;
717 destsurf->DrawLine(destsurf,
x,
y,
x,
y);
728 #if (DFB_VERSION_ATLEAST(1,2,0))
729 destsurf->SetRenderOptions(destsurf, DSRO_ANTIALIAS);
733 const int x1 =
points[
i].x + clip_region.x1;
734 const int y1 =
points[
i].y + clip_region.y1;
735 const int x2 =
points[
i + 1].x + clip_region.x1;
736 const int y2 =
points[
i + 1].y + clip_region.y1;
737 destsurf->DrawLine(destsurf,
x1,
y1,
x2,
y2);
749 destsurf->FillRectangle(destsurf,
rects->x + clip_region.x1,
rects->y + clip_region.y1,
rects->w,
rects->h);
760 DFBRectangle *verts = (DFBRectangle *) (((
Uint8 *) vertices) + cmd->
data.
draw.first);
761 DirectFB_TextureData *texturedata = (DirectFB_TextureData *)
texture->driverdata;
762 DFBRectangle *sr = verts++;
763 DFBRectangle *dr = verts;
765 dr->x += clip_region.x1;
766 dr->y += clip_region.y1;
768 if (texturedata->display) {
771 IDirectFBWindow *dfbwin = get_dfb_window(
window);
774 DFB_DisplayData *dispdata = (DFB_DisplayData *) display->
driverdata;
776 dispdata->vidlayer->SetSourceRectangle(dispdata->vidlayer, sr->x, sr->y, sr->w, sr->h);
777 dfbwin->GetPosition(dfbwin, &px, &py);
778 px += windata->client.x;
779 py += windata->client.y;
780 dispdata->vidlayer->SetScreenRectangle(dispdata->vidlayer, px + dr->x, py + dr->y, dr->w, dr->h);
782 DFBSurfaceBlittingFlags
flags = 0;
783 if (texturedata->isDirty) {
789 flags |= DSBLIT_BLEND_COLORALPHA;
792 if ((
r &
g &
b) != 0xFF) {
793 flags |= DSBLIT_COLORIZE;
796 destsurf->SetColor(destsurf,
r,
g,
b,
a);
800 SetBlendMode(
data,
texture->blendMode, texturedata);
802 destsurf->SetBlittingFlags(destsurf,
data->blitFlags |
flags);
804 #if (DFB_VERSION_ATLEAST(1,2,0))
805 destsurf->SetRenderOptions(destsurf, texturedata->render_options);
808 if (sr->w == dr->w && sr->h == dr->h) {
809 destsurf->Blit(destsurf, texturedata->surface, sr, dr->x, dr->y);
811 destsurf->StretchBlit(destsurf, texturedata->surface, sr, dr);
839 DirectFB_ActivateRenderer(
renderer);
841 if (shape_data && shape_data->
surface) {
843 SDL_DFB_CHECK(windata->window_surface->SetSrcBlendFunction(windata->window_surface, DSBF_ONE));
844 SDL_DFB_CHECK(windata->window_surface->SetDstBlendFunction(windata->window_surface, DSBF_ONE));
845 SDL_DFB_CHECK(windata->window_surface->SetDrawingFlags(windata->window_surface, DSDRAW_BLEND));
846 SDL_DFB_CHECK(windata->window_surface->SetColor(windata->window_surface, 0, 0, 0, 0xff));
847 SDL_DFB_CHECK(windata->window_surface->FillRectangle(windata->window_surface, 0,0, windata->size.w, windata->size.h));
850 SDL_DFB_CHECK(windata->surface->SetSrcBlendFunction(windata->surface, DSBF_DESTCOLOR));
851 SDL_DFB_CHECK(windata->surface->SetDstBlendFunction(windata->surface, DSBF_ZERO));
852 SDL_DFB_CHECK(windata->surface->SetBlittingFlags(windata->surface, DSBLIT_BLEND_ALPHACHANNEL));
853 #if (DFB_VERSION_ATLEAST(1,2,0))
854 SDL_DFB_CHECK(windata->surface->SetRenderOptions(windata->surface, DSRO_NONE));
867 DirectFB_TextureData *
data = (DirectFB_TextureData *)
texture->driverdata;
869 DirectFB_ActivateRenderer(
renderer);
877 DFB_DisplayData *dispdata =
878 (DFB_DisplayData *)
data->display->driverdata;
879 dispdata->vidIDinuse = 0;
881 SDL_DFB_CHECK(dispdata->vidlayer->SetCooperativeLevel(dispdata->vidlayer,
882 DLSCL_ADMINISTRATIVE));
896 if (display->palette) {
897 SDL_DelPaletteWatch(display->palette, DisplayPaletteChanged,
data);
910 unsigned char* laypixels;
912 DFBSurfacePixelFormat dfb_format;
914 IDirectFBSurface *winsurf =
data->target;
916 DirectFB_ActivateRenderer(
renderer);
918 winsurf->GetPixelFormat(winsurf, &dfb_format);
920 winsurf->Lock(winsurf, DSLF_READ, (
void **) &laypixels, &laypitch);
924 sdl_format, laypixels, laypitch,
927 winsurf->Unlock(winsurf);
940 unsigned char* laypixels;
942 DFBSurfacePixelFormat dfb_format;
944 SDL_DFB_CHECK(windata->surface->GetPixelFormat(windata->surface, &dfb_format));
947 SDL_DFB_CHECK(windata->surface->Lock(windata->surface, DSLF_WRITE, (
void **) &laypixels, &laypitch));
952 sdl_format, laypixels, laypitch);
964 IDirectFBSurface *winsurf = get_dfb_surface(
window);
968 DFBSurfaceCapabilities scaps;
1009 data->target = winsurf;
1011 data->flipflags = DSFLIP_PIPELINE | DSFLIP_BLIT;
1014 data->flipflags |= DSFLIP_WAITFORSYNC | DSFLIP_ONSYNC;
1017 data->flipflags |= DSFLIP_ONSYNC;
1022 if (scaps & DSCAPS_DOUBLE)
1024 else if (scaps & DSCAPS_TRIPLE)
1034 if (display-> palette) {
1035 SDL_AddPaletteWatch(display->palette, DisplayPaletteChanged,
data);
1049 DirectFB_CreateRenderer,
#define SDL_DFB_DEBUG(x...)
#define SDL_DFB_CHECKERR(x...)
#define SDL_DFB_ALLOC_CLEAR(r, s)
void DirectFB_SetSupportedPixelFormats(SDL_RendererInfo *ri)
#define SDL_DFB_CHECK(x...)
#define SDL_DFB_DEVICEDATA(dev)
#define SDL_DFB_RELEASE(x)
DFBSurfacePixelFormat DirectFB_SDLToDFBPixelFormat(Uint32 format)
Uint32 DirectFB_DFBToSDLPixelFormat(DFBSurfacePixelFormat pixelformat)
#define SDL_DFB_WINDOWDATA(win)
#define SDL_ConvertPixels
#define SDL_GetWindowWMInfo
#define SDL_Unsupported()
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLint GLint GLint GLint GLint x
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
GLboolean GLboolean GLboolean b
GLfixed GLfixed GLint GLint GLfixed points
GLfixed GLfixed GLfixed y2
GLuint GLfloat GLfloat GLfloat x1
GLsizei GLsizei GLchar * source
GLboolean GLboolean GLboolean GLboolean a
GLenum GLenum GLuint texture
GLuint GLsizei GLsizei * length
#define SDL_BYTESPERPIXEL(X)
#define SDL_ISPIXELFORMAT_INDEXED(format)
@ SDL_PIXELFORMAT_INDEX4MSB
@ SDL_PIXELFORMAT_RGBA8888
@ SDL_PIXELFORMAT_ARGB1555
@ SDL_PIXELFORMAT_ABGR8888
@ SDL_PIXELFORMAT_BGRA8888
@ SDL_PIXELFORMAT_ARGB8888
@ SDL_PIXELFORMAT_ARGB4444
@ SDL_PIXELFORMAT_INDEX4LSB
@ SDL_PIXELFORMAT_ARGB2101010
#define SDL_ISPIXELFORMAT_FOURCC(format)
void * SDL_AllocateRenderVertices(SDL_Renderer *renderer, const size_t numbytes, const size_t alignment, size_t *offset)
@ SDL_RENDERER_ACCELERATED
@ SDL_RENDERER_PRESENTVSYNC
@ SDL_RENDERER_TARGETTEXTURE
SDL_RendererFlip
Flip constants for SDL_RenderCopyEx.
@ SDL_TEXTUREACCESS_STREAMING
SDL_RenderDriver DirectFB_RenderDriver
@ SDL_RENDERCMD_SETCLIPRECT
@ SDL_RENDERCMD_DRAW_LINES
@ SDL_RENDERCMD_SETVIEWPORT
@ SDL_RENDERCMD_DRAW_POINTS
@ SDL_RENDERCMD_FILL_RECTS
@ SDL_RENDERCMD_SETDRAWCOLOR
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
#define SDL_VERSION(x)
Macro to determine SDL version program was compiled against.
@ SDL_WINDOWEVENT_SIZE_CHANGED
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)
EGLSurface EGLNativeWindowType * window
EGLSurface EGLint * rects
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro pixld1_s mem_operand if asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl elseif asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl else error unsupported endif endm macro pixld2_s mem_operand if mov asr add asl add asl mov asr sub UNIT_X add asl mov asr add asl add asl mov asr add UNIT_X add asl else pixld1_s mem_operand pixld1_s mem_operand endif endm macro pixld0_s mem_operand if asr adds SRC_WIDTH_FIXED bpl add asl elseif asr adds SRC_WIDTH_FIXED bpl add asl endif endm macro pixld_s_internal mem_operand if mem_operand pixld2_s mem_operand pixdeinterleave basereg elseif mem_operand elseif mem_operand elseif mem_operand elseif mem_operand pixld0_s mem_operand else pixld0_s mem_operand pixld0_s mem_operand pixld0_s mem_operand pixld0_s mem_operand endif elseif mem_operand else pixld0_s mem_operand pixld0_s mem_operand endif elseif mem_operand else error unsupported mem_operand if bpp mem_operand endif endm macro vuzp8 reg2 vuzp d d ®2 endm macro vzip8 reg2 vzip d d ®2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld if[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro fetch_mask_pixblock pixld mask_basereg pixblock_size MASK endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1(dst_w_bpp<=(lowbit *8)) &&((lowbit *8)<(pixblock_size *dst_w_bpp)) .if lowbit< 16 tst DST_R
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp
The structure that defines a point (floating point)
A rectangle, with the origin at the upper left (floating point).
A rectangle, with the origin at the upper left (integer).
struct SDL_RenderCommand::@38::@42 color
struct SDL_RenderCommand * next
struct SDL_RenderCommand::@38::@39 viewport
struct SDL_RenderCommand::@38::@41 draw
SDL_RenderCommandType command
union SDL_RenderCommand::@38 data
struct SDL_RenderCommand::@38::@40 cliprect
int(* QueueCopy)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_FRect *dstrect)
int(* LockTexture)(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch)
int(* QueueDrawLines)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count)
void(* SetTextureScaleMode)(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode)
void(* UnlockTexture)(SDL_Renderer *renderer, SDL_Texture *texture)
int(* UpdateTexture)(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
int(* SetRenderTarget)(SDL_Renderer *renderer, SDL_Texture *texture)
void(* DestroyRenderer)(SDL_Renderer *renderer)
void(* DestroyTexture)(SDL_Renderer *renderer, SDL_Texture *texture)
void(* RenderPresent)(SDL_Renderer *renderer)
int(* RenderReadPixels)(SDL_Renderer *renderer, const SDL_Rect *rect, Uint32 format, void *pixels, int pitch)
int(* QueueDrawPoints)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count)
int(* QueueFillRects)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FRect *rects, int count)
void(* WindowEvent)(SDL_Renderer *renderer, const SDL_WindowEvent *event)
int(* RunCommandQueue)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize)
int(* QueueCopyEx)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, const SDL_Rect *srcquad, const SDL_FRect *dstrect, const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip)
int(* CreateTexture)(SDL_Renderer *renderer, SDL_Texture *texture)
int(* QueueSetViewport)(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
int(* QueueSetDrawColor)(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
IDirectFBSurface * surface
struct wl_surface * surface
union SDL_SysWMinfo::@10 info
Window state change event data (event.window.*)
The type used to identify a window.
static SDL_Renderer * renderer
static SDL_BlendMode blendMode
typedef int(__stdcall *FARPROC)()