From 59260a5c95ee510ff787ca15739737dc613227d1 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 1 Feb 2011 12:19:46 -0800 Subject: [PATCH] Making the API simpler, the renderer present semantics are always having a backbuffer and then discarding it. This is best for hardware accelerated rendering. --- include/SDL_video.h | 23 +--- src/SDL_compat.c | 22 +--- src/video/SDL_renderer_gl.c | 13 +- src/video/SDL_renderer_gles.c | 6 +- src/video/SDL_renderer_sw.c | 158 ++++++----------------- src/video/directfb/SDL_DirectFB_render.c | 18 +-- src/video/dummy/SDL_nullrender.c | 66 +++------- src/video/nds/SDL_ndsrender.c | 2 +- src/video/windows/SDL_d3drender.c | 39 +----- test/common.c | 25 +--- test/testshape.c | 2 +- 11 files changed, 80 insertions(+), 294 deletions(-) diff --git a/include/SDL_video.h b/include/SDL_video.h index f54c720d7..c8e82d35a 100644 --- a/include/SDL_video.h +++ b/include/SDL_video.h @@ -151,33 +151,12 @@ typedef enum */ typedef enum { - SDL_RENDERER_SINGLEBUFFER = 0x00000001, /**< Render directly to the - window, if possible */ - - SDL_RENDERER_PRESENTCOPY = 0x00000002, /**< Present uses a copy from - back buffer to the front - buffer */ - - SDL_RENDERER_PRESENTFLIP2 = 0x00000004, /**< Present uses a flip, - swapping back buffer and - front buffer */ - - SDL_RENDERER_PRESENTFLIP3 = 0x00000008, /**< Present uses a flip, - rotating between two back - buffers and a front buffer - */ - - SDL_RENDERER_PRESENTDISCARD = 0x00000010, /**< Present leaves the contents - of the backbuffer undefined - */ - SDL_RENDERER_PRESENTVSYNC = 0x00000020, /**< Present is synchronized with the refresh rate */ SDL_RENDERER_ACCELERATED = 0x00000040 /**< The renderer uses hardware acceleration */ - - } SDL_RendererFlags; +} SDL_RendererFlags; /** * \brief Information on the capabilities of a render driver or context. diff --git a/src/SDL_compat.c b/src/SDL_compat.c index fedd84520..12dc216d5 100644 --- a/src/SDL_compat.c +++ b/src/SDL_compat.c @@ -667,9 +667,7 @@ SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) } /* Create a renderer for the window */ - if (SDL_CreateRenderer - (SDL_VideoWindow, -1, - SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD) < 0) { + if (SDL_CreateRenderer(SDL_VideoWindow, -1, 0) < 0) { return NULL; } SDL_GetRendererInfo(&SDL_VideoRendererInfo); @@ -861,6 +859,7 @@ void SDL_UpdateRects(SDL_Surface * screen, int numrects, SDL_Rect * rects) { int i; + SDL_Rect rect; if (screen == SDL_ShadowSurface) { for (i = 0; i < numrects; ++i) { @@ -887,18 +886,11 @@ SDL_UpdateRects(SDL_Surface * screen, int numrects, SDL_Rect * rects) SDL_UpdateTexture(SDL_VideoTexture, rect, pixels, pitch); } } - if (SDL_VideoRendererInfo.flags & SDL_RENDERER_PRESENTCOPY) { - for (i = 0; i < numrects; ++i) { - SDL_RenderCopy(SDL_VideoTexture, &rects[i], &rects[i]); - } - } else { - SDL_Rect rect; - rect.x = 0; - rect.y = 0; - rect.w = screen->w; - rect.h = screen->h; - SDL_RenderCopy(SDL_VideoTexture, &rect, &rect); - } + rect.x = 0; + rect.y = 0; + rect.w = screen->w; + rect.h = screen->h; + SDL_RenderCopy(SDL_VideoTexture, &rect, &rect); SDL_RenderPresent(); } } diff --git a/src/video/SDL_renderer_gl.c b/src/video/SDL_renderer_gl.c index bf346d1dd..e71800213 100644 --- a/src/video/SDL_renderer_gl.c +++ b/src/video/SDL_renderer_gl.c @@ -112,8 +112,7 @@ SDL_RenderDriver GL_RenderDriver = { GL_CreateRenderer, { "opengl", - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD | - SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), + (SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), 15, { SDL_PIXELFORMAT_INDEX1LSB, @@ -252,7 +251,6 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) SDL_Renderer *renderer; GL_RenderData *data; GLint value; - int doublebuffer; /* Render directly to the window, unless we're compositing */ #ifndef __MACOSX__ @@ -304,8 +302,7 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->window = window; renderer->driverdata = data; - renderer->info.flags = - (SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_ACCELERATED); + renderer->info.flags = SDL_RENDERER_ACCELERATED; if (GL_LoadFunctions(data) < 0) { GL_DestroyRenderer(renderer); @@ -337,12 +334,6 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC; } - if (SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &doublebuffer) == 0) { - if (!doublebuffer) { - renderer->info.flags |= SDL_RENDERER_SINGLEBUFFER; - } - } - data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); renderer->info.max_texture_width = value; data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); diff --git a/src/video/SDL_renderer_gles.c b/src/video/SDL_renderer_gles.c index f100483ce..47c37cce7 100644 --- a/src/video/SDL_renderer_gles.c +++ b/src/video/SDL_renderer_gles.c @@ -98,8 +98,7 @@ SDL_RenderDriver GL_ES_RenderDriver = { GLES_CreateRenderer, { "opengl_es", - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD | - SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), + (SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), { /* OpenGL ES 1.x supported formats list */ SDL_PIXELFORMAT_RGBA4444, @@ -241,8 +240,7 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->window = window; renderer->driverdata = data; - renderer->info.flags = - (SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_ACCELERATED); + renderer->info.flags = SDL_RENDERER_ACCELERATED; #if defined(__QNXNTO__) #if _NTO_VERSION<=641 diff --git a/src/video/SDL_renderer_sw.c b/src/video/SDL_renderer_sw.c index a03289ab5..172df8fec 100644 --- a/src/video/SDL_renderer_sw.c +++ b/src/video/SDL_renderer_sw.c @@ -81,9 +81,7 @@ SDL_RenderDriver SW_RenderDriver = { SW_CreateRenderer, { "software", - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY | - SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 | - SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_PRESENTVSYNC), + (SDL_RENDERER_PRESENTVSYNC), 14, { SDL_PIXELFORMAT_INDEX8, @@ -108,8 +106,7 @@ typedef struct { Uint32 format; SDL_bool updateSize; - int current_texture; - SDL_Texture *texture[3]; + SDL_Texture *texture; SDL_Surface surface; SDL_Renderer *renderer; SDL_DirtyRectList dirty; @@ -150,15 +147,11 @@ static int DisplayPaletteChanged(void *userdata, SDL_Palette * palette) { SW_RenderData *data = (SW_RenderData *) userdata; - int i; - for (i = 0; i < SDL_arraysize(data->texture); ++i) { - if (data->texture[i] && data->renderer->SetTexturePalette) { - data->renderer->SetTexturePalette(data->renderer, - data->texture[i], - palette->colors, 0, - palette->ncolors); - } + if (data->renderer->SetTexturePalette) { + data->renderer->SetTexturePalette(data->renderer, data->texture, + palette->colors, 0, + palette->ncolors); } return 0; } @@ -237,21 +230,11 @@ SW_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->driverdata = data; Setup_SoftwareRenderer(renderer); - if (flags & SDL_RENDERER_PRESENTFLIP2) { - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2; - n = 2; - } else if (flags & SDL_RENDERER_PRESENTFLIP3) { - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP3; - n = 3; - } else { - renderer->info.flags |= SDL_RENDERER_PRESENTCOPY; - n = 1; - } + n = 1; data->format = displayMode->format; /* Find a render driver that we can use to display data */ - renderer_flags = (SDL_RENDERER_SINGLEBUFFER | - SDL_RENDERER_PRESENTDISCARD); + renderer_flags = 0; if (flags & SDL_RENDERER_PRESENTVSYNC) { renderer_flags |= SDL_RENDERER_PRESENTVSYNC; } @@ -280,15 +263,12 @@ SW_CreateRenderer(SDL_Window * window, Uint32 flags) } /* Create the textures we'll use for display */ - for (i = 0; i < n; ++i) { - data->texture[i] = - CreateTexture(data->renderer, data->format, window->w, window->h); - if (!data->texture[i]) { - SW_DestroyRenderer(renderer); - return NULL; - } + data->texture = + CreateTexture(data->renderer, data->format, window->w, window->h); + if (!data->texture) { + SW_DestroyRenderer(renderer); + return NULL; } - data->current_texture = 0; /* Create a surface we'll use for rendering */ data->surface.flags = SDL_PREALLOC; @@ -321,26 +301,14 @@ SW_ActivateRenderer(SDL_Renderer * renderer) } if (data->updateSize) { /* Recreate the textures for the new window size */ - if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP2) { - n = 2; - } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP3) { - n = 3; - } else { - n = 1; + if (data->texture) { + DestroyTexture(data->renderer, data->texture); + data->texture = 0; } - for (i = 0; i < n; ++i) { - if (data->texture[i]) { - DestroyTexture(data->renderer, data->texture[i]); - data->texture[i] = 0; - } - } - for (i = 0; i < n; ++i) { - data->texture[i] = - CreateTexture(data->renderer, data->format, window->w, - window->h); - if (!data->texture[i]) { - return -1; - } + data->texture = CreateTexture(data->renderer, data->format, + window->w, window->h); + if (!data->texture) { + return -1; } data->updateSize = SDL_FALSE; } @@ -528,7 +496,7 @@ SW_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points, int count) { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; - SDL_Texture *texture = data->texture[data->current_texture]; + SDL_Texture *texture = data->texture; SDL_Rect rect; int i; int x, y; @@ -544,10 +512,6 @@ SW_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points, return 0; } - if (data->renderer->info.flags & SDL_RENDERER_PRESENTCOPY) { - SDL_AddDirtyRect(&data->dirty, &rect); - } - if (data->renderer->LockTexture(data->renderer, texture, &rect, 1, &data->surface.pixels, &data->surface.pitch) < 0) { @@ -591,7 +555,7 @@ SW_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, int count) { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; - SDL_Texture *texture = data->texture[data->current_texture]; + SDL_Texture *texture = data->texture; SDL_Rect clip, rect; int i; int x1, y1, x2, y2; @@ -608,10 +572,6 @@ SW_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, return 0; } - if (data->renderer->info.flags & SDL_RENDERER_PRESENTCOPY) { - SDL_AddDirtyRect(&data->dirty, &rect); - } - if (data->renderer->LockTexture(data->renderer, texture, &rect, 1, &data->surface.pixels, &data->surface.pitch) < 0) { @@ -659,7 +619,7 @@ SW_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count) { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; - SDL_Texture *texture = data->texture[data->current_texture]; + SDL_Texture *texture = data->texture; SDL_Rect clip, rect; Uint32 color = 0; int i; @@ -683,10 +643,6 @@ SW_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects, continue; } - if (data->renderer->info.flags & SDL_RENDERER_PRESENTCOPY) { - SDL_AddDirtyRect(&data->dirty, &rect); - } - if (data->renderer->LockTexture(data->renderer, texture, &rect, 1, &data->surface.pixels, &data->surface.pitch) < 0) { @@ -715,7 +671,7 @@ SW_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count) { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; - SDL_Texture *texture = data->texture[data->current_texture]; + SDL_Texture *texture = data->texture; SDL_Rect clip, rect; Uint32 color = 0; int i; @@ -738,10 +694,6 @@ SW_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, continue; } - if (data->renderer->info.flags & SDL_RENDERER_PRESENTCOPY) { - SDL_AddDirtyRect(&data->dirty, &rect); - } - if (data->renderer->LockTexture(data->renderer, texture, &rect, 1, &data->surface.pixels, &data->surface.pitch) < 0) { @@ -772,12 +724,7 @@ SW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, SW_RenderData *data = (SW_RenderData *) renderer->driverdata; int status; - if (data->renderer->info.flags & SDL_RENDERER_PRESENTCOPY) { - SDL_AddDirtyRect(&data->dirty, dstrect); - } - - if (data->renderer->LockTexture(data->renderer, - data->texture[data->current_texture], + if (data->renderer->LockTexture(data->renderer, data->texture, dstrect, 1, &data->surface.pixels, &data->surface.pitch) < 0) { return -1; @@ -803,8 +750,7 @@ SW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, SDL_LowerBlit(surface, &real_srcrect, &data->surface, &real_dstrect); } - data->renderer->UnlockTexture(data->renderer, - data->texture[data->current_texture]); + data->renderer->UnlockTexture(data->renderer, data->texture); return status; } @@ -814,8 +760,7 @@ SW_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; - if (data->renderer->LockTexture(data->renderer, - data->texture[data->current_texture], + if (data->renderer->LockTexture(data->renderer, data->texture, rect, 0, &data->surface.pixels, &data->surface.pitch) < 0) { return -1; @@ -825,8 +770,7 @@ SW_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, data->format, data->surface.pixels, data->surface.pitch, format, pixels, pitch); - data->renderer->UnlockTexture(data->renderer, - data->texture[data->current_texture]); + data->renderer->UnlockTexture(data->renderer, data->texture); return 0; } @@ -836,12 +780,7 @@ SW_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect, { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; - if (data->renderer->info.flags & SDL_RENDERER_PRESENTCOPY) { - SDL_AddDirtyRect(&data->dirty, rect); - } - - if (data->renderer->LockTexture(data->renderer, - data->texture[data->current_texture], + if (data->renderer->LockTexture(data->renderer, data->texture, rect, 1, &data->surface.pixels, &data->surface.pitch) < 0) { return -1; @@ -850,8 +789,7 @@ SW_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect, SDL_ConvertPixels(rect->w, rect->h, format, pixels, pitch, data->format, data->surface.pixels, data->surface.pitch); - data->renderer->UnlockTexture(data->renderer, - data->texture[data->current_texture]); + data->renderer->UnlockTexture(data->renderer, data->texture); return 0; } @@ -859,32 +797,16 @@ static void SW_RenderPresent(SDL_Renderer * renderer) { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; - SDL_Texture *texture = data->texture[data->current_texture]; + SDL_Texture *texture = data->texture; + SDL_Rect rect; /* Send the data to the display */ - if (data->renderer->info.flags & SDL_RENDERER_PRESENTCOPY) { - SDL_DirtyRect *dirty; - for (dirty = data->dirty.list; dirty; dirty = dirty->next) { - data->renderer->RenderCopy(data->renderer, texture, &dirty->rect, - &dirty->rect); - } - SDL_ClearDirtyRects(&data->dirty); - } else { - SDL_Rect rect; - rect.x = 0; - rect.y = 0; - rect.w = texture->w; - rect.h = texture->h; - data->renderer->RenderCopy(data->renderer, texture, &rect, &rect); - } + rect.x = 0; + rect.y = 0; + rect.w = texture->w; + rect.h = texture->h; + data->renderer->RenderCopy(data->renderer, texture, &rect, &rect); data->renderer->RenderPresent(data->renderer); - - /* Update the flipping chain, if any */ - if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP2) { - data->current_texture = (data->current_texture + 1) % 2; - } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP3) { - data->current_texture = (data->current_texture + 1) % 3; - } } static void @@ -908,10 +830,8 @@ SW_DestroyRenderer(SDL_Renderer * renderer) int i; if (data) { - for (i = 0; i < SDL_arraysize(data->texture); ++i) { - if (data->texture[i]) { - DestroyTexture(data->renderer, data->texture[i]); - } + if (data->texture) { + DestroyTexture(data->renderer, data->texture); } if (data->surface.format) { SDL_SetSurfacePalette(&data->surface, NULL); diff --git a/src/video/directfb/SDL_DirectFB_render.c b/src/video/directfb/SDL_DirectFB_render.c index e18c02493..e5c431193 100644 --- a/src/video/directfb/SDL_DirectFB_render.c +++ b/src/video/directfb/SDL_DirectFB_render.c @@ -87,10 +87,7 @@ SDL_RenderDriver DirectFB_RenderDriver = { DirectFB_CreateRenderer, { "directfb", - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY | - SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 | - SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_PRESENTDISCARD | - SDL_RENDERER_ACCELERATED), + (SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), 14, { SDL_PIXELFORMAT_INDEX4LSB, @@ -256,7 +253,6 @@ DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags) SDL_VideoDisplay *display = window->display; SDL_Renderer *renderer = NULL; DirectFB_RenderData *data = NULL; - DFBSurfaceCapabilities scaps; char *p; SDL_DFB_CALLOC(renderer, 1, sizeof(*renderer)); @@ -288,8 +284,7 @@ DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->window = window; /* SDL window */ renderer->driverdata = data; - renderer->info.flags = - SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTDISCARD; + renderer->info.flags = SDL_RENDERER_ACCELERATED; data->window = window; @@ -301,15 +296,6 @@ DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags) } else data->flipflags |= DSFLIP_ONSYNC; - SDL_DFB_CHECKERR(windata->surface-> - GetCapabilities(windata->surface, &scaps)); - if (scaps & DSCAPS_DOUBLE) - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2; - else if (scaps & DSCAPS_TRIPLE) - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP3; - else - renderer->info.flags |= SDL_RENDERER_SINGLEBUFFER; - data->isyuvdirect = 0; /* default is off! */ p = SDL_getenv(DFBENV_USE_YUV_DIRECT); if (p) diff --git a/src/video/dummy/SDL_nullrender.c b/src/video/dummy/SDL_nullrender.c index 8348a0ff0..ec55ffeb5 100644 --- a/src/video/dummy/SDL_nullrender.c +++ b/src/video/dummy/SDL_nullrender.c @@ -59,16 +59,13 @@ SDL_RenderDriver SDL_DUMMY_RenderDriver = { SDL_DUMMY_CreateRenderer, { "dummy", - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY | - SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 | - SDL_RENDERER_PRESENTDISCARD), + (0), } }; typedef struct { - int current_screen; - SDL_Surface *screens[3]; + SDL_Surface *screen; } SDL_DUMMY_RenderData; SDL_Renderer * @@ -78,7 +75,6 @@ SDL_DUMMY_CreateRenderer(SDL_Window * window, Uint32 flags) SDL_DisplayMode *displayMode = &display->current_mode; SDL_Renderer *renderer; SDL_DUMMY_RenderData *data; - int i, n; int bpp; Uint32 Rmask, Gmask, Bmask, Amask; @@ -117,27 +113,14 @@ SDL_DUMMY_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->driverdata = data; Setup_SoftwareRenderer(renderer); - if (flags & SDL_RENDERER_PRESENTFLIP2) { - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2; - n = 2; - } else if (flags & SDL_RENDERER_PRESENTFLIP3) { - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP3; - n = 3; - } else { - renderer->info.flags |= SDL_RENDERER_PRESENTCOPY; - n = 1; - } - for (i = 0; i < n; ++i) { - data->screens[i] = - SDL_CreateRGBSurface(0, window->w, window->h, bpp, Rmask, Gmask, - Bmask, Amask); - if (!data->screens[i]) { - SDL_DUMMY_DestroyRenderer(renderer); - return NULL; - } - SDL_SetSurfacePalette(data->screens[i], display->palette); + data->screen = + SDL_CreateRGBSurface(0, window->w, window->h, bpp, Rmask, Gmask, + Bmask, Amask); + if (!data->screen) { + SDL_DUMMY_DestroyRenderer(renderer); + return NULL; } - data->current_screen = 0; + SDL_SetSurfacePalette(data->screen, display->palette); return renderer; } @@ -148,7 +131,7 @@ SDL_DUMMY_RenderDrawPoints(SDL_Renderer * renderer, { SDL_DUMMY_RenderData *data = (SDL_DUMMY_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; + SDL_Surface *target = data->screen; if (renderer->blendMode == SDL_BLENDMODE_NONE) { Uint32 color = SDL_MapRGBA(target->format, @@ -169,7 +152,7 @@ SDL_DUMMY_RenderDrawLines(SDL_Renderer * renderer, { SDL_DUMMY_RenderData *data = (SDL_DUMMY_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; + SDL_Surface *target = data->screen; if (renderer->blendMode == SDL_BLENDMODE_NONE) { Uint32 color = SDL_MapRGBA(target->format, @@ -190,7 +173,7 @@ SDL_DUMMY_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects, { SDL_DUMMY_RenderData *data = (SDL_DUMMY_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; + SDL_Surface *target = data->screen; if (renderer->blendMode == SDL_BLENDMODE_NONE) { Uint32 color = SDL_MapRGBA(target->format, @@ -212,7 +195,7 @@ SDL_DUMMY_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, { SDL_DUMMY_RenderData *data = (SDL_DUMMY_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; + SDL_Surface *target = data->screen; if (renderer->blendMode == SDL_BLENDMODE_NONE) { Uint32 color = SDL_MapRGBA(target->format, @@ -238,7 +221,7 @@ SDL_DUMMY_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, SDL_VideoDisplay *display = window->display; if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) { - SDL_Surface *target = data->screens[data->current_screen]; + SDL_Surface *target = data->screen; void *pixels = (Uint8 *) target->pixels + dstrect->y * target->pitch + dstrect->x * target->format->BytesPerPixel; @@ -248,7 +231,7 @@ SDL_DUMMY_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, target->pitch); } else { SDL_Surface *surface = (SDL_Surface *) texture->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; + SDL_Surface *target = data->screen; SDL_Rect real_srcrect = *srcrect; SDL_Rect real_dstrect = *dstrect; @@ -264,7 +247,7 @@ SDL_DUMMY_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, (SDL_DUMMY_RenderData *) renderer->driverdata; SDL_Window *window = renderer->window; SDL_VideoDisplay *display = window->display; - SDL_Surface *screen = data->screens[data->current_screen]; + SDL_Surface *screen = data->screen; Uint32 screen_format = display->current_mode.format; Uint8 *screen_pixels = (Uint8 *) screen->pixels + rect->y * screen->pitch + @@ -284,7 +267,7 @@ SDL_DUMMY_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect, (SDL_DUMMY_RenderData *) renderer->driverdata; SDL_Window *window = renderer->window; SDL_VideoDisplay *display = window->display; - SDL_Surface *screen = data->screens[data->current_screen]; + SDL_Surface *screen = data->screen; Uint32 screen_format = display->current_mode.format; Uint8 *screen_pixels = (Uint8 *) screen->pixels + rect->y * screen->pitch + @@ -308,14 +291,7 @@ SDL_DUMMY_RenderPresent(SDL_Renderer * renderer) char file[128]; SDL_snprintf(file, sizeof(file), "SDL_window%d-%8.8d.bmp", renderer->window->id, ++frame_number); - SDL_SaveBMP(data->screens[data->current_screen], file); - } - - /* Update the flipping chain, if any */ - if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP2) { - data->current_screen = (data->current_screen + 1) % 2; - } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP3) { - data->current_screen = (data->current_screen + 1) % 3; + SDL_SaveBMP(data->screen, file); } } @@ -327,10 +303,8 @@ SDL_DUMMY_DestroyRenderer(SDL_Renderer * renderer) int i; if (data) { - for (i = 0; i < SDL_arraysize(data->screens); ++i) { - if (data->screens[i]) { - SDL_FreeSurface(data->screens[i]); - } + if (data->screen) { + SDL_FreeSurface(data->screen); } SDL_free(data); } diff --git a/src/video/nds/SDL_ndsrender.c b/src/video/nds/SDL_ndsrender.c index 3041bf325..f0e8cf9c3 100644 --- a/src/video/nds/SDL_ndsrender.c +++ b/src/video/nds/SDL_ndsrender.c @@ -71,7 +71,7 @@ static void NDS_DestroyRenderer(SDL_Renderer * renderer); SDL_RenderDriver NDS_RenderDriver = { NDS_CreateRenderer, {"nds", /* char* name */ - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_PRESENTVSYNC), /* u32 flags */ + (SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC), /* u32 flags */ 3, /* u32 num_texture_formats */ { SDL_PIXELFORMAT_INDEX8, diff --git a/src/video/windows/SDL_d3drender.c b/src/video/windows/SDL_d3drender.c index 758bbaddb..161aa7bba 100644 --- a/src/video/windows/SDL_d3drender.c +++ b/src/video/windows/SDL_d3drender.c @@ -134,10 +134,7 @@ SDL_RenderDriver D3D_RenderDriver = { D3D_CreateRenderer, { "d3d", - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY | - SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 | - SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_PRESENTVSYNC | - SDL_RENDERER_ACCELERATED), + (SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), 0, {0}, 0, @@ -472,19 +469,9 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags) } else { pparams.BackBufferFormat = D3DFMT_UNKNOWN; } - if (flags & SDL_RENDERER_PRESENTFLIP2) { - pparams.BackBufferCount = 2; - pparams.SwapEffect = D3DSWAPEFFECT_FLIP; - } else if (flags & SDL_RENDERER_PRESENTFLIP3) { - pparams.BackBufferCount = 3; - pparams.SwapEffect = D3DSWAPEFFECT_FLIP; - } else if (flags & SDL_RENDERER_PRESENTCOPY) { - pparams.BackBufferCount = 1; - pparams.SwapEffect = D3DSWAPEFFECT_COPY; - } else { - pparams.BackBufferCount = 1; - pparams.SwapEffect = D3DSWAPEFFECT_DISCARD; - } + pparams.BackBufferCount = 1; + pparams.SwapEffect = D3DSWAPEFFECT_DISCARD; + if (window->flags & SDL_WINDOW_FULLSCREEN) { pparams.Windowed = FALSE; pparams.FullScreen_RefreshRateInHz = @@ -534,24 +521,6 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags) return NULL; } IDirect3DSwapChain9_Release(chain); - switch (pparams.SwapEffect) { - case D3DSWAPEFFECT_COPY: - renderer->info.flags |= SDL_RENDERER_PRESENTCOPY; - break; - case D3DSWAPEFFECT_FLIP: - switch (pparams.BackBufferCount) { - case 2: - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2; - break; - case 3: - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP3; - break; - } - break; - case D3DSWAPEFFECT_DISCARD: - renderer->info.flags |= SDL_RENDERER_PRESENTDISCARD; - break; - } if (pparams.PresentationInterval == D3DPRESENT_INTERVAL_ONE) { renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC; } diff --git a/test/common.c b/test/common.c index 49141b40a..d1caff9e5 100644 --- a/test/common.c +++ b/test/common.c @@ -6,7 +6,7 @@ #include "common.h" #define VIDEO_USAGE \ -"[--video driver] [--renderer driver] [--info all|video|modes|render|event] [--display N] [--fullscreen | --windows N] [--title title] [--icon icon.bmp] [--center | --position X,Y] [--geometry WxH] [--depth N] [--refresh R] [--vsync] [--noframe] [--resize] [--minimize] [--maximize] [--grab] [--double] [--triple]" +"[--video driver] [--renderer driver] [--info all|video|modes|render|event] [--display N] [--fullscreen | --windows N] [--title title] [--icon icon.bmp] [--center | --position X,Y] [--geometry WxH] [--depth N] [--refresh R] [--vsync] [--noframe] [--resize] [--minimize] [--maximize] [--grab]" #define AUDIO_USAGE \ "[--rate N] [--format U8|S8|U16|U16LE|U16BE|S16|S16LE|S16BE] [--channels N] [--samples N]" @@ -211,14 +211,6 @@ CommonArg(CommonState * state, int index) state->render_flags |= SDL_RENDERER_PRESENTVSYNC; return 1; } - if (SDL_strcasecmp(argv[index], "--double") == 0) { - state->render_flags |= SDL_RENDERER_PRESENTFLIP2; - return 1; - } - if (SDL_strcasecmp(argv[index], "--triple") == 0) { - state->render_flags |= SDL_RENDERER_PRESENTFLIP3; - return 1; - } if (SDL_strcasecmp(argv[index], "--noframe") == 0) { state->window_flags |= SDL_WINDOW_BORDERLESS; return 1; @@ -329,21 +321,6 @@ static void PrintRendererFlag(Uint32 flag) { switch (flag) { - case SDL_RENDERER_SINGLEBUFFER: - fprintf(stderr, "SingleBuffer"); - break; - case SDL_RENDERER_PRESENTCOPY: - fprintf(stderr, "PresentCopy"); - break; - case SDL_RENDERER_PRESENTFLIP2: - fprintf(stderr, "PresentFlip2"); - break; - case SDL_RENDERER_PRESENTFLIP3: - fprintf(stderr, "PresentFlip3"); - break; - case SDL_RENDERER_PRESENTDISCARD: - fprintf(stderr, "PresentDiscard"); - break; case SDL_RENDERER_PRESENTVSYNC: fprintf(stderr, "PresentVSync"); break; diff --git a/test/testshape.c b/test/testshape.c index 495944aad..061819ec5 100644 --- a/test/testshape.c +++ b/test/testshape.c @@ -102,7 +102,7 @@ int main(int argc,char** argv) { printf("Could not create shaped window for SDL_Shape.\n"); exit(-4); } - if(SDL_CreateRenderer(window,-1,SDL_RENDERER_PRESENTFLIP2) == -1) { + if(SDL_CreateRenderer(window,-1,0) == -1) { SDL_DestroyWindow(window); for(i=0;i