From f4a1d2062513116b46181471e491bf12d14497e4 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 10 Jun 2025 12:29:55 +0200 Subject: [PATCH] - Pasat a SDL3, a vore si funciona en altre comp --- Makefile | 4 ++-- jshader.cpp | 34 ++++++++++++++++++++++------------ jshader.h | 2 +- main.cpp | 21 +++++++++++++++------ 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 3f9c45e..1a406f7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ windows: - g++ *.cpp -lmingw32 -lSDL2main -lSDL2 -lopengl32 -mwindows -o shaders + g++ *.cpp -lmingw32 -lSDL3main -lSDL3 -lopengl32 -mwindows -o shaders linux: - g++ -g *.cpp -lSDL2 -lGL -o shaders + g++ -g *.cpp -lSDL3 -lGL -o shaders diff --git a/jshader.cpp b/jshader.cpp index 06ea620..fe832d4 100644 --- a/jshader.cpp +++ b/jshader.cpp @@ -12,8 +12,8 @@ #include #endif //!ESSENTIAL_GL_PRACTICES_SUPPORT_GL3 #else -#include -#include +#include +#include #endif namespace shader @@ -23,7 +23,7 @@ namespace shader GLuint programId = 0; SDL_Texture* backBuffer = nullptr; SDL_Point win_size = {640, 480}; - SDL_Point tex_size = {320, 240}; + SDL_FPoint tex_size = {320, 240}; bool usingOpenGL; #ifndef __APPLE__ @@ -141,18 +141,20 @@ namespace shader shader::renderer = SDL_GetRenderer(win); shader::backBuffer = backBuffer; SDL_GetWindowSize(win, &win_size.x, &win_size.y); - int access; - SDL_QueryTexture(backBuffer, NULL, &access, &tex_size.x, &tex_size.y); + SDL_GetTextureSize(backBuffer, &tex_size.x, &tex_size.y); + printf("tex size: %fx%f\n", tex_size.x, tex_size.y); + SDL_PropertiesID props = SDL_GetTextureProperties(backBuffer); + int access = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_ACCESS_NUMBER, -1); if (access != SDL_TEXTUREACCESS_TARGET) { std::cout << "ERROR FATAL: La textura per al render ha de tindre SDL_TEXTUREACCESS_TARGET definit." << std::endl; exit(1); } - SDL_RendererInfo rendererInfo; - SDL_GetRendererInfo(renderer, &rendererInfo); + const char * renderer_name = SDL_GetRendererName(renderer); + printf("rendererInfo.name: %s\n", renderer_name); - if(!strncmp(rendererInfo.name, "opengl", 6)) { + if(!strncmp(renderer_name, "opengl", 6)) { //std::cout << "Es OpenGL!" << std::endl; #ifndef __APPLE__ if (!initGLExtensions()) { @@ -184,7 +186,14 @@ namespace shader SDL_RenderClear(renderer); if (usingOpenGL) { - SDL_GL_BindTexture(backBuffer, NULL, NULL); + SDL_PropertiesID props = SDL_GetTextureProperties(backBuffer); + GLuint texture_number = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER, -1); + //printf("texture number: %i\n", texture_number); + glBindTexture(GL_TEXTURE_2D, texture_number); + //if (SDL_GL_BindTexture(backBuffer, NULL, NULL)!=0) { + // printf("Error en SDL_GL_BindTexture: %s\n", SDL_GetError()); + // exit(1); + //} if(programId != 0) { glGetIntegerv(GL_CURRENT_PROGRAM,&oldProgramId); glUseProgram(programId); @@ -194,8 +203,8 @@ namespace shader GLfloat minu, maxu, minv, maxv; // Coordenadas de la ventana donde pintar. - minx = 0.0f; - miny = 0.0f; + minx = 0.0f; //-0.5f; + miny = 0.0f; // -0.5f; maxx = tex_size.x; maxy = tex_size.y; @@ -216,13 +225,14 @@ namespace shader glTexCoord2f(maxu, maxv); glVertex2f(maxx, maxy); glEnd(); + SDL_GL_SwapWindow(win); if(programId != 0) { glUseProgram(oldProgramId); } } else { - SDL_RenderCopy(renderer, backBuffer, NULL, NULL); + SDL_RenderTexture(renderer, backBuffer, NULL, NULL); SDL_RenderPresent(renderer); } } diff --git a/jshader.h b/jshader.h index 556f796..f2dc8e3 100644 --- a/jshader.h +++ b/jshader.h @@ -1,6 +1,6 @@ #pragma once -#include +#include // TIPS: // ======================================================================= diff --git a/main.cpp b/main.cpp index 1ac89c2..590f294 100644 --- a/main.cpp +++ b/main.cpp @@ -3,18 +3,26 @@ #include #include #include "jshader.h" -#include +#include #define WIDTH 384 #define HEIGHT 240 int main(int argc, char **argv) { - SDL_Init(SDL_INIT_EVERYTHING); - SDL_Window *win = SDL_CreateWindow("Shaders i tal", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WIDTH*3, HEIGHT*3, 0); + SDL_Init(SDL_INIT_VIDEO); + SDL_Window *win = SDL_CreateWindow("Shaders i tal", WIDTH*3, HEIGHT*3, SDL_WINDOW_OPENGL); + if (!win) { printf("ERROR al crear la finestra: %s\n", SDL_GetError()); } + + const int num_drivers = SDL_GetNumRenderDrivers(); + printf("VIDEO DRIVERS AVAILABLE:\n"); + for (int i=0; i(f)), std::istreambuf_iterator()); @@ -23,6 +31,7 @@ int main(int argc, char **argv) // Carreguem una imatge pa ficar algo SDL_Texture *bmpTex = SDL_CreateTextureFromSurface(renderer, SDL_LoadBMP("pang.bmp")); + if (!win) { printf("ERROR al crear la textura sprite: %s\n", SDL_GetError()); } bool should_exit = false; @@ -30,11 +39,11 @@ int main(int argc, char **argv) { SDL_Event e; while ( SDL_PollEvent(&e) ) { - if ( e.type == SDL_QUIT || ( e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE ) ) { should_exit = true; } + if ( e.type == SDL_EVENT_QUIT || ( e.type == SDL_EVENT_KEY_DOWN && e.key.scancode == SDLK_ESCAPE ) ) { should_exit = true; } } SDL_SetRenderTarget(renderer, texTarget); - SDL_RenderCopy(renderer, bmpTex, NULL, NULL); + SDL_RenderTexture(renderer, bmpTex, NULL, NULL); shader::render(); }