From 9e529c8dcfaa30a032024eff16d4c15087c98a2e Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 10 Jun 2025 12:53:21 +0200 Subject: [PATCH] - Un poquet de neteja --- jshader.cpp | 86 +++++++++++++++++++---------------------------------- 1 file changed, 31 insertions(+), 55 deletions(-) diff --git a/jshader.cpp b/jshader.cpp index fe832d4..4fc2a7e 100644 --- a/jshader.cpp +++ b/jshader.cpp @@ -25,6 +25,7 @@ namespace shader SDL_Point win_size = {640, 480}; SDL_FPoint tex_size = {320, 240}; bool usingOpenGL; + GLuint texture_number; #ifndef __APPLE__ @@ -80,7 +81,8 @@ namespace shader //Check vertex shader for errors GLint shaderCompiled = GL_FALSE; glGetShaderiv( result, GL_COMPILE_STATUS, &shaderCompiled ); - if( shaderCompiled != GL_TRUE ) { + if (shaderCompiled != GL_TRUE) + { std::cout << "Error en la compilación: " << result << "!" << std::endl; GLint logLength; glGetShaderiv(result, GL_INFO_LOG_LENGTH, &logLength); @@ -93,13 +95,12 @@ namespace shader } glDeleteShader(result); result = 0; -// } else { -// std::cout << "Shader compilado correctamente. Id = " << result << std::endl; } return result; } - GLuint compileProgram(const char* vertexShaderSource, const char* fragmentShaderSource) { + GLuint compileProgram(const char* vertexShaderSource, const char* fragmentShaderSource) + { GLuint programId = 0; GLuint vtxShaderId, fragShaderId; @@ -108,7 +109,8 @@ namespace shader vtxShaderId = compileShader(vertexShaderSource, GL_VERTEX_SHADER); fragShaderId = compileShader(fragmentShaderSource?fragmentShaderSource:vertexShaderSource, GL_FRAGMENT_SHADER); - if(vtxShaderId && fragShaderId) { + if(vtxShaderId && fragShaderId) + { // Associate shader with program glAttachShader(programId, vtxShaderId); glAttachShader(programId, fragShaderId); @@ -118,7 +120,8 @@ namespace shader // Check the status of the compile/link GLint logLen; glGetProgramiv(programId, GL_INFO_LOG_LENGTH, &logLen); - if(logLen > 0) { + if (logLen > 0) + { char* log = (char*) malloc(logLen * sizeof(char)); // Show any errors as appropriate glGetProgramInfoLog(programId, logLen, &logLen, log); @@ -126,12 +129,8 @@ namespace shader free(log); } } - if(vtxShaderId) { - glDeleteShader(vtxShaderId); - } - if(fragShaderId) { - glDeleteShader(fragShaderId); - } + if (vtxShaderId) glDeleteShader(vtxShaderId); + if (fragShaderId) glDeleteShader(fragShaderId); return programId; } @@ -144,6 +143,7 @@ namespace shader 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); + texture_number = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER, -1); int access = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_ACCESS_NUMBER, -1); if (access != SDL_TEXTUREACCESS_TARGET) { @@ -155,17 +155,15 @@ namespace shader printf("rendererInfo.name: %s\n", renderer_name); if(!strncmp(renderer_name, "opengl", 6)) { - //std::cout << "Es OpenGL!" << std::endl; - #ifndef __APPLE__ +#ifndef __APPLE__ if (!initGLExtensions()) { std::cout << "WARNING: No s'han pogut inicialitzar les extensions d'OpenGL!" << std::endl; usingOpenGL = false; return false; } - #endif +#endif // Compilar el shader y dejarlo listo para usar. programId = compileProgram(vertexShader, fragmentShader); - //std::cout << "programId = " << programId << std::endl; } else { std::cout << "WARNING: El driver del renderer no es OpenGL." << std::endl; usingOpenGL = false; @@ -177,60 +175,38 @@ namespace shader void render() { - GLint oldProgramId; - // Guarrada para obtener el textureid (en driverdata->texture) - //Detach the texture SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_SetRenderTarget(renderer, NULL); SDL_RenderClear(renderer); - if (usingOpenGL) { - 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); + if (usingOpenGL) + { 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); + + GLint oldProgramId; + if (programId != 0) + { + glGetIntegerv(GL_CURRENT_PROGRAM, &oldProgramId); glUseProgram(programId); } - GLfloat minx, miny, maxx, maxy; - GLfloat minu, maxu, minv, maxv; - - // Coordenadas de la ventana donde pintar. - minx = 0.0f; //-0.5f; - miny = 0.0f; // -0.5f; - maxx = tex_size.x; - maxy = tex_size.y; - - minu = 0.0f; - maxu = 1.0f; - minv = 0.0f; - maxv = 1.0f; - glViewport(0, 0, win_size.x, win_size.y); glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(minu, minv); - glVertex2f(minx, miny); - glTexCoord2f(maxu, minv); - glVertex2f(maxx, miny); - glTexCoord2f(minu, maxv); - glVertex2f(minx, maxy); - glTexCoord2f(maxu, maxv); - glVertex2f(maxx, maxy); + glTexCoord2f(0.0f, 0.0f); + glVertex2f(0.0f, 0.0f); + glTexCoord2f(1.0f, 0.0f); + glVertex2f(tex_size.x, 0.0f); + glTexCoord2f(0.0f, 1.0f); + glVertex2f(0.0f, tex_size.y); + glTexCoord2f(1.0f, 1.0f); + glVertex2f(tex_size.x, tex_size.y); glEnd(); SDL_GL_SwapWindow(win); - if(programId != 0) { - glUseProgram(oldProgramId); - } + if (programId != 0) glUseProgram(oldProgramId); + } else { SDL_RenderTexture(renderer, backBuffer, NULL, NULL); SDL_RenderPresent(renderer);