Treballant en la conversió a SDL3

This commit is contained in:
2024-11-06 13:49:44 +01:00
parent b31a578731
commit 22619cf207
29 changed files with 97 additions and 88 deletions

View File

@@ -1,5 +1,5 @@
#include "jdraw.h"
#include <SDL2/SDL.h>
#include <SDL3/SDL.h>
#include "gif.c"
#include "jfile.h"
#include <vector>
@@ -15,7 +15,7 @@ namespace draw
SDL_Renderer *sdl_renderer = nullptr; // El renderer de SDL
SDL_Texture *sdl_texture = nullptr; // La textura de SDL a la que pintarem la nostra superficie "screen" i que despres volcarem a pantalla
SDL_Rect dest_rect = {0, 0, 320, 240};
SDL_FRect dest_rect = {0, 0, 320, 240};
static int fullscreen_scale = 1;
static int screen_zoom = 1;
@@ -89,23 +89,22 @@ namespace draw
// [TODO] Incloure gestió de pantalla completa
// Inicialització de les estructures de SDL
sdl_window = SDL_CreateWindow(screen_title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, screen_width * screen_zoom, screen_height * screen_zoom, screen_fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : SDL_WINDOW_SHOWN);
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0);
sdl_window = SDL_CreateWindow(screen_title.c_str(), screen_width * screen_zoom, screen_height * screen_zoom, screen_fullscreen ? SDL_WINDOW_FULLSCREEN : 0);
sdl_renderer = SDL_CreateRenderer(sdl_window, nullptr);
sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, screen_width, screen_height);
SDL_RendererInfo info;
char *driver_name;
const int num_render_drivers = SDL_GetNumRenderDrivers();
printf("Available renderers:\n");
for (int i=0; i<num_render_drivers; ++i)
{
SDL_GetRenderDriverInfo(i, &info);
printf(" - %i: %s\n", i, info.name);
SDL_GetRenderDriver(i);
printf(" - %i: %s\n", i, driver_name);
}
SDL_GetRendererInfo(sdl_renderer, &info);
printf("\nRenderer: %s\n", info.name);
printf("\nRenderer: %s\n", SDL_GetRendererName(sdl_renderer));
SDL_ShowCursor(false);
SDL_HideCursor();
if (screen_fullscreen)
{
@@ -183,11 +182,11 @@ namespace draw
SDL_DestroyWindow(sdl_window);
const int zoom = screen_fullscreen ? 1 : screen_zoom;
sdl_window = SDL_CreateWindow(screen_title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, screen_width * zoom, screen_height * zoom, screen_fullscreen?SDL_WINDOW_FULLSCREEN_DESKTOP:SDL_WINDOW_SHOWN);
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0);
sdl_window = SDL_CreateWindow(screen_title.c_str(), screen_width * zoom, screen_height * zoom, screen_fullscreen?SDL_WINDOW_FULLSCREEN:0);
sdl_renderer = SDL_CreateRenderer(sdl_window, nullptr);
sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, screen_width, screen_height);
SDL_ShowCursor(false);
SDL_HideCursor();
if (screen_fullscreen)
{
@@ -213,12 +212,10 @@ namespace draw
void setZoom(const int value)
{
if (value < 1) return;
const SDL_DisplayMode *dm = SDL_GetCurrentDisplayMode(SDL_GetDisplayForWindow(sdl_window));
SDL_DisplayMode dm;
SDL_GetCurrentDisplayMode(0, &dm);
if (screen_width*value > dm.w) return;
if (screen_height*value > dm.h) return;
if (screen_width*value > dm->w) return;
if (screen_height*value > dm->h) return;
screen_zoom = value;
reinit();
@@ -707,7 +704,7 @@ namespace draw
}
// Pintem la textura a pantalla
SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, &dest_rect);
SDL_RenderTexture(sdl_renderer, sdl_texture, NULL, &dest_rect);
if (screen_mode & SCREEN_MODE_SCANLINES)
{
@@ -718,14 +715,14 @@ namespace draw
for (int y=0; y<screen_height; ++y)
{
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 192);
SDL_RenderDrawLine(sdl_renderer, dest_rect.x, dest_rect.y + y*zoom, dest_rect.x + dest_rect.w, dest_rect.y + y*zoom);
SDL_RenderLine(sdl_renderer, dest_rect.x, dest_rect.y + y*zoom, dest_rect.x + dest_rect.w, dest_rect.y + y*zoom);
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 96);
if (zoom>3) SDL_RenderDrawLine(sdl_renderer, dest_rect.x, 1+dest_rect.y + y*zoom, dest_rect.x + dest_rect.w, 1+dest_rect.y + y*zoom);
if (zoom>3) SDL_RenderLine(sdl_renderer, dest_rect.x, 1+dest_rect.y + y*zoom, dest_rect.x + dest_rect.w, 1+dest_rect.y + y*zoom);
}
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 16);
for (int x=0; x<screen_width; ++x)
{
SDL_RenderDrawLine(sdl_renderer, dest_rect.x + x*zoom, dest_rect.y, dest_rect.x + x*zoom, dest_rect.y + dest_rect.h);
SDL_RenderLine(sdl_renderer, dest_rect.x + x*zoom, dest_rect.y, dest_rect.x + x*zoom, dest_rect.y + dest_rect.h);
}
}
}