diff --git a/src/Backends/Rendering/Software.cpp b/src/Backends/Rendering/Software.cpp index 1ee8b127..864161af 100644 --- a/src/Backends/Rendering/Software.cpp +++ b/src/Backends/Rendering/Software.cpp @@ -35,7 +35,7 @@ RenderBackend_Surface* RenderBackend_Init(const char *window_title, int screen_w if (WindowBackend_Software_CreateWindow(window_title, screen_width, screen_height, fullscreen)) { size_t pitch; - framebuffer.pixels = WindowBackend_Software_GetFramebuffer(&pitch); + framebuffer.pixels = WindowBackend_Software_LockFramebuffer(&pitch); framebuffer.width = screen_width; framebuffer.height = screen_height; framebuffer.pitch = pitch; @@ -57,10 +57,12 @@ void RenderBackend_Deinit(void) void RenderBackend_DrawScreen(void) { + WindowBackend_Software_UnlockFramebuffer(); + WindowBackend_Software_Display(); size_t pitch; - framebuffer.pixels = WindowBackend_Software_GetFramebuffer(&pitch); + framebuffer.pixels = WindowBackend_Software_LockFramebuffer(&pitch); framebuffer.pitch = pitch; } diff --git a/src/Backends/Rendering/Window/Software.h b/src/Backends/Rendering/Window/Software.h index 02c4bf85..818eab06 100644 --- a/src/Backends/Rendering/Window/Software.h +++ b/src/Backends/Rendering/Window/Software.h @@ -4,6 +4,7 @@ bool WindowBackend_Software_CreateWindow(const char *window_title, int screen_width, int screen_height, bool fullscreen); void WindowBackend_Software_DestroyWindow(void); -unsigned char* WindowBackend_Software_GetFramebuffer(size_t *pitch); +unsigned char* WindowBackend_Software_LockFramebuffer(size_t *pitch); +void WindowBackend_Software_UnlockFramebuffer(void); void WindowBackend_Software_Display(void); void WindowBackend_Software_HandleWindowResize(unsigned int width, unsigned int height); diff --git a/src/Backends/Rendering/Window/Software/GLFW3.cpp b/src/Backends/Rendering/Window/Software/GLFW3.cpp index 51014548..66f82062 100644 --- a/src/Backends/Rendering/Window/Software/GLFW3.cpp +++ b/src/Backends/Rendering/Window/Software/GLFW3.cpp @@ -95,13 +95,18 @@ void WindowBackend_Software_DestroyWindow(void) glfwDestroyWindow(window); } -unsigned char* WindowBackend_Software_GetFramebuffer(size_t *pitch) +unsigned char* WindowBackend_Software_LockFramebuffer(size_t *pitch) { *pitch = framebuffer_width * 3; return framebuffer; } +void WindowBackend_Software_UnlockFramebuffer(void) +{ + // Nothing to do here +} + void WindowBackend_Software_Display(void) { glClear(GL_COLOR_BUFFER_BIT); diff --git a/src/Backends/Rendering/Window/Software/Null.cpp b/src/Backends/Rendering/Window/Software/Null.cpp index dbda3e50..43defd8c 100644 --- a/src/Backends/Rendering/Window/Software/Null.cpp +++ b/src/Backends/Rendering/Window/Software/Null.cpp @@ -28,13 +28,18 @@ void WindowBackend_Software_DestroyWindow(void) free(framebuffer); } -unsigned char* WindowBackend_Software_GetFramebuffer(size_t *pitch) +unsigned char* WindowBackend_Software_LockFramebuffer(size_t *pitch) { *pitch = framebuffer_pitch; return framebuffer; } +void WindowBackend_Software_UnlockFramebuffer(void) +{ + // Nothing to do here +} + void WindowBackend_Software_Display(void) { diff --git a/src/Backends/Rendering/Window/Software/SDL2.cpp b/src/Backends/Rendering/Window/Software/SDL2.cpp index 416a8d80..78b463b9 100644 --- a/src/Backends/Rendering/Window/Software/SDL2.cpp +++ b/src/Backends/Rendering/Window/Software/SDL2.cpp @@ -64,13 +64,18 @@ void WindowBackend_Software_DestroyWindow(void) SDL_DestroyWindow(window); } -unsigned char* WindowBackend_Software_GetFramebuffer(size_t *pitch) +unsigned char* WindowBackend_Software_LockFramebuffer(size_t *pitch) { *pitch = framebuffer_sdlsurface->pitch; return (unsigned char*)framebuffer_sdlsurface->pixels; } +void WindowBackend_Software_UnlockFramebuffer(void) +{ + // Nothing to do here +} + void WindowBackend_Software_Display(void) { if (SDL_BlitSurface(framebuffer_sdlsurface, NULL, window_sdlsurface, NULL) < 0) diff --git a/src/Backends/Rendering/Window/Software/WiiU.cpp b/src/Backends/Rendering/Window/Software/WiiU.cpp index 8c64b527..25790e0f 100644 --- a/src/Backends/Rendering/Window/Software/WiiU.cpp +++ b/src/Backends/Rendering/Window/Software/WiiU.cpp @@ -206,13 +206,18 @@ void WindowBackend_Software_DestroyWindow(void) free(fake_framebuffer); } -unsigned char* WindowBackend_Software_GetFramebuffer(size_t *pitch) +unsigned char* WindowBackend_Software_LockFramebuffer(size_t *pitch) { *pitch = fake_framebuffer_width * 3; return fake_framebuffer; } +void WindowBackend_Software_UnlockFramebuffer(void) +{ + // Nothing to do here +} + ATTRIBUTE_HOT void WindowBackend_Software_Display(void) { // Convert frame from RGB24 to RGBA32, and upload it to the GPU texture