Change software renderer backend API

This commit is contained in:
Clownacy 2020-04-15 21:59:23 +01:00
parent 7ca33677f8
commit 8524d1e349
3 changed files with 27 additions and 14 deletions

View file

@ -24,7 +24,7 @@ static float framebuffer_y_ratio;
static GLuint screen_texture_id; static GLuint screen_texture_id;
unsigned char* WindowBackend_Software_CreateWindow(const char *window_title, int screen_width, int screen_height, bool fullscreen, size_t *pitch) bool WindowBackend_Software_CreateWindow(const char *window_title, int screen_width, int screen_height, bool fullscreen)
{ {
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API); glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1);
@ -81,18 +81,16 @@ unsigned char* WindowBackend_Software_CreateWindow(const char *window_title, int
framebuffer = (unsigned char*)malloc(framebuffer_width * framebuffer_height * 3); framebuffer = (unsigned char*)malloc(framebuffer_width * framebuffer_height * 3);
*pitch = framebuffer_width * 3;
Backend_PostWindowCreation(); Backend_PostWindowCreation();
return framebuffer; return true;
} }
else else
{ {
Backend_ShowMessageBox("Fatal error (OpenGL rendering backend)", "Could not create window"); Backend_ShowMessageBox("Fatal error (OpenGL rendering backend)", "Could not create window");
} }
return NULL; return false;
} }
void WindowBackend_Software_DestroyWindow(void) void WindowBackend_Software_DestroyWindow(void)
@ -102,6 +100,13 @@ void WindowBackend_Software_DestroyWindow(void)
glfwDestroyWindow(window); glfwDestroyWindow(window);
} }
unsigned char* WindowBackend_Software_GetFramebuffer(size_t *pitch)
{
*pitch = framebuffer_width * 3;
return framebuffer;
}
void WindowBackend_Software_Display(void) void WindowBackend_Software_Display(void)
{ {
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);

View file

@ -33,19 +33,22 @@ static RenderBackend_Surface *glyph_destination_surface;
RenderBackend_Surface* RenderBackend_Init(const char *window_title, int screen_width, int screen_height, bool fullscreen) RenderBackend_Surface* RenderBackend_Init(const char *window_title, int screen_width, int screen_height, bool fullscreen)
{ {
size_t pitch; if (WindowBackend_Software_CreateWindow(window_title, screen_width, screen_height, fullscreen))
framebuffer.pixels = WindowBackend_Software_CreateWindow(window_title, screen_width, screen_height, fullscreen, &pitch); {
framebuffer.width = screen_width; size_t pitch;
framebuffer.height = screen_height; framebuffer.pixels = WindowBackend_Software_GetFramebuffer(&pitch);
framebuffer.pitch = pitch; framebuffer.width = screen_width;
framebuffer.height = screen_height;
framebuffer.pitch = pitch;
if (framebuffer.pixels == NULL) return &framebuffer;
}
else
{ {
Backend_PrintError("Failed to create window"); Backend_PrintError("Failed to create window");
return NULL;
} }
return &framebuffer; return NULL;
} }
void RenderBackend_Deinit(void) void RenderBackend_Deinit(void)
@ -56,6 +59,10 @@ void RenderBackend_Deinit(void)
void RenderBackend_DrawScreen(void) void RenderBackend_DrawScreen(void)
{ {
WindowBackend_Software_Display(); WindowBackend_Software_Display();
size_t pitch;
framebuffer.pixels = WindowBackend_Software_GetFramebuffer(&pitch);
framebuffer.pitch = pitch;
} }
RenderBackend_Surface* RenderBackend_CreateSurface(unsigned int width, unsigned int height) RenderBackend_Surface* RenderBackend_CreateSurface(unsigned int width, unsigned int height)

View file

@ -2,7 +2,8 @@
#include <stddef.h> #include <stddef.h>
unsigned char* WindowBackend_Software_CreateWindow(const char *window_title, int screen_width, int screen_height, bool fullscreen, size_t *pitch); bool WindowBackend_Software_CreateWindow(const char *window_title, int screen_width, int screen_height, bool fullscreen);
void WindowBackend_Software_DestroyWindow(void); void WindowBackend_Software_DestroyWindow(void);
unsigned char* WindowBackend_Software_GetFramebuffer(size_t *pitch);
void WindowBackend_Software_Display(void); void WindowBackend_Software_Display(void);
void WindowBackend_Software_HandleWindowResize(unsigned int width, unsigned int height); void WindowBackend_Software_HandleWindowResize(unsigned int width, unsigned int height);