Convert software renderer

This commit is contained in:
Clownacy 2020-01-22 22:24:23 +00:00
parent 6dac8254e2
commit 48b7a878ba

View file

@ -8,6 +8,8 @@
#include "../../WindowsWrapper.h" #include "../../WindowsWrapper.h"
#include "../../Resource.h"
#undef MIN #undef MIN
#undef MAX #undef MAX
#define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b))
@ -34,33 +36,48 @@ static SDL_Surface *window_sdlsurface;
static SDL_Surface *framebuffer_sdlsurface; static SDL_Surface *framebuffer_sdlsurface;
static Backend_Surface framebuffer; static Backend_Surface framebuffer;
SDL_Window* Backend_CreateWindow(const char *title, int width, int height) Backend_Surface* Backend_Init(const char *title, int width, int height, BOOL fullscreen)
{ {
return SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, 0); window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, 0);
}
Backend_Surface* Backend_Init(SDL_Window *p_window) if (window != NULL)
{ {
window = p_window; #ifndef _WIN32 // On Windows, we use native icons instead (so we can give the taskbar and window separate icons, like the original EXE does)
size_t resource_size;
const unsigned char *resource_data = FindResource("ICON_MINI", "ICON", &resource_size);
SDL_RWops *rwops = SDL_RWFromConstMem(resource_data, resource_size);
SDL_Surface *icon_surface = SDL_LoadBMP_RW(rwops, 1);
SDL_SetWindowIcon(window, icon_surface);
SDL_FreeSurface(icon_surface);
#endif
window_sdlsurface = SDL_GetWindowSurface(window); if (fullscreen)
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN);
framebuffer_sdlsurface = SDL_CreateRGBSurfaceWithFormat(0, window_sdlsurface->w, window_sdlsurface->h, 0, SDL_PIXELFORMAT_RGB24); window_sdlsurface = SDL_GetWindowSurface(window);
if (framebuffer_sdlsurface == NULL) framebuffer_sdlsurface = SDL_CreateRGBSurfaceWithFormat(0, window_sdlsurface->w, window_sdlsurface->h, 0, SDL_PIXELFORMAT_RGB24);
return NULL;
framebuffer.pixels = (unsigned char*)framebuffer_sdlsurface->pixels; if (framebuffer_sdlsurface != NULL)
framebuffer.width = framebuffer_sdlsurface->w; {
framebuffer.height = framebuffer_sdlsurface->h; framebuffer.pixels = (unsigned char*)framebuffer_sdlsurface->pixels;
framebuffer.pitch = framebuffer_sdlsurface->pitch; framebuffer.width = framebuffer_sdlsurface->w;
framebuffer.height = framebuffer_sdlsurface->h;
framebuffer.pitch = framebuffer_sdlsurface->pitch;
return &framebuffer; return &framebuffer;
}
SDL_DestroyWindow(window);
}
return NULL;
} }
void Backend_Deinit(void) void Backend_Deinit(void)
{ {
SDL_FreeSurface(framebuffer_sdlsurface); SDL_FreeSurface(framebuffer_sdlsurface);
SDL_DestroyWindow(window);
} }
void Backend_DrawScreen(void) void Backend_DrawScreen(void)