changeset 2043:cbb3463fea2a

Initial dabbling for SDL2 migration of the SW rendering / dmsimple.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 30 Nov 2018 06:56:38 +0200
parents 45d9db50d996
children 1b441465ef36
files src/dmengine.h src/dmsimple.c
diffstat 2 files changed, 20 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/dmengine.h	Fri Nov 30 06:52:46 2018 +0200
+++ b/src/dmengine.h	Fri Nov 30 06:56:38 2018 +0200
@@ -249,7 +249,10 @@
     // Rendering
     SDL_Window *window;
     SDL_Renderer *renderer;
+
+    // Software rendering
     SDL_Surface *screen;
+    SDL_Texture *texture;
 
     // Events
     SDL_Event event;
--- a/src/dmsimple.c	Fri Nov 30 06:52:46 2018 +0200
+++ b/src/dmsimple.c	Fri Nov 30 06:56:38 2018 +0200
@@ -102,9 +102,6 @@
         dw = engine.screen->w - (2 * dx),
         dy = (engine.screen->h - dh) / 2;
 
-    if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0)
-        return DMERR_INIT_FAIL;
-
     // Draw the progress bar
     dmClearSurface(engine.screen, dmMapRGBA(engine.screen, 0,0,0,0));
     dmFillRect(engine.screen, dx, dy, dx+dw, dy+dh, dmMapRGB(engine.screen, 255,255,255));
@@ -120,10 +117,23 @@
     }
 
     // Flip screen
-    if (SDL_MUSTLOCK(engine.screen) != 0)
-        SDL_UnlockSurface(engine.screen);
+    SDL_Surface dst;
+    SDL_LockTexture(engine.texture, NULL, &dst.pixels, &dst.pitch);
 
-    SDL_Flip(engine.screen);
+    for (int yc = 0; yc < engine.screen->h; yc++)
+    {
+        memcpy(dst.pixels + dst.pitch * yc,
+            engine.screen->pixels + engine.screen->pitch * yc,
+            dst.pitch);
+    }
+
+    SDL_UnlockTexture(engine.texture);
+
+    SDL_SetRenderDrawColor(engine.renderer, 0, 0, 0, 255);
+    SDL_RenderClear(engine.renderer);
+    SDL_RenderCopy(engine.renderer, engine.texture, NULL, NULL);
+    SDL_RenderPresent(engine.renderer);
+
     return DMERR_OK;
 }
 
@@ -153,7 +163,7 @@
     dmPrint(1, "Initializing SDL video %d x %d x %dbpp, flags=0x%08x\n",
         width, height, depth, flags);
 
-    SDL_WM_SetCaption(dmProgDesc, dmProgName);
+    SDL_SetWindowTitle(engine.window, dmProgDesc);
 
     return TRUE;
 }