From 3c56cd59f8725a9cfce7aa0731bcbf3310a996f1 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Mon, 3 Nov 2025 16:29:24 +0100 Subject: [PATCH] =?UTF-8?q?-=20Llevat=20el=20tema=20dels=20shaders,=20que?= =?UTF-8?q?=20aci=20no=20fa=20falta=20-=20Fent=20proves=20de=20visualitzac?= =?UTF-8?q?i=C3=B3=20-=20Afegits=20un=20parell=20de=20bocetos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- drafts/draft01.aseprite | Bin 0 -> 3688 bytes drafts/draft02.aseprite | Bin 0 -> 8417 bytes source/japi/draw.cpp | 59 +-------- source/japi/draw.h | 6 - source/japi/game.cpp | 3 - source/japi/shader.cpp | 277 ---------------------------------------- source/japi/shader.h | 48 ------- source/main.cpp | 9 +- source/rooms.cpp | 33 +++-- 9 files changed, 36 insertions(+), 399 deletions(-) create mode 100644 drafts/draft01.aseprite create mode 100644 drafts/draft02.aseprite delete mode 100644 source/japi/shader.cpp delete mode 100644 source/japi/shader.h diff --git a/drafts/draft01.aseprite b/drafts/draft01.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..42358d4794bb49ca7b878b88a71374c54efeeb02 GIT binary patch literal 3688 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 g#U=%|tM(w^fj*L=8|r_Xo%%nT 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 hRMVc #include "gif.h" #include "file.h" -#include "shader.h" +//#include "shader.h" namespace draw { @@ -14,7 +14,7 @@ namespace draw SDL_Window *sdl_window {nullptr}; // La finestra de SDL 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_Texture *sdl_shadertex {nullptr}; // La textura de SDL per al shader + //SDL_Texture *sdl_shadertex {nullptr}; // La textura de SDL per al shader static int screen_zoom = 1; static bool screen_fullscreen = false; @@ -104,10 +104,10 @@ namespace draw exit(1); } - sdl_shadertex = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, window_width, window_height); - SDL_SetTextureScaleMode(sdl_shadertex, SDL_SCALEMODE_NEAREST); +// sdl_shadertex = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, window_width, window_height); +// SDL_SetTextureScaleMode(sdl_shadertex, SDL_SCALEMODE_NEAREST); - loadShader(); +// loadShader(); } void destroyDisplay() @@ -235,50 +235,6 @@ namespace draw file::setConfigValueBool("fullscreen", screen_fullscreen); } - void loadShader() - { - char *buffer = nullptr; - if (screen_shader) { - int size; - buffer = file::getFileBuffer(screen_shader, size, true); - } - shader::setAspectRatio(3.0f/4.0f); - shader::init(sdl_window, sdl_shadertex, buffer); - if (buffer) free(buffer); - } - - void setShader(const char* shader_file) - { - if (screen_shader) free(screen_shader); - screen_shader = (char*)malloc(strlen(shader_file)+1); - strcpy(screen_shader, shader_file); - loadShader(); - if (file::getConfigValueBool("shader_enabled", false)) enableShader(); - } - - void enableShader() - { - shader_enabled = true; - shader::enable(); - //destroyDisplay(); - //createDisplay(); - file::setConfigValueBool("shader_enabled", shader_enabled); - } - - void disableShader() - { - shader_enabled = false; - shader::disable(); - //destroyDisplay(); - //createDisplay(); - file::setConfigValueBool("shader_enabled", shader_enabled); - } - - void toggleShader() - { - shader_enabled ? disableShader() : enableShader(); - } - void hideCursor() { screen_cursor = false; @@ -719,13 +675,12 @@ namespace draw // Desbloquejem la textura SDL_UnlockTexture(sdl_texture); - SDL_SetRenderTarget(sdl_renderer, sdl_shadertex); + SDL_SetRenderTarget(sdl_renderer, nullptr); // Pintem la textura a pantalla SDL_RenderTexture(sdl_renderer, sdl_texture, NULL, NULL); // I ho presentem - shader::render(); - //SDL_RenderPresent(sdl_renderer); + SDL_RenderPresent(sdl_renderer); } } diff --git a/source/japi/draw.h b/source/japi/draw.h index 7c9d330..4496451 100644 --- a/source/japi/draw.h +++ b/source/japi/draw.h @@ -40,12 +40,6 @@ namespace draw bool getFullscreen(); void setFullscreen(const bool value); - void loadShader(); - void setShader(const char* shader_file); - void enableShader(); - void disableShader(); - void toggleShader(); - void hideCursor(); void showCursor(); diff --git a/source/japi/game.cpp b/source/japi/game.cpp index d31e585..88e0365 100644 --- a/source/japi/game.cpp +++ b/source/japi/game.cpp @@ -94,9 +94,6 @@ int main(int argc, char *argv[]) case SDL_SCANCODE_F3: draw::setFullscreen(!draw::getFullscreen()); break; - case SDL_SCANCODE_F4: - draw::toggleShader(); - break; default: input::updateKeypressed(e.key.scancode); } diff --git a/source/japi/shader.cpp b/source/japi/shader.cpp deleted file mode 100644 index c8d8e4f..0000000 --- a/source/japi/shader.cpp +++ /dev/null @@ -1,277 +0,0 @@ -#include "shader.h" - -#include - -#ifdef __APPLE__ -#include "CoreFoundation/CoreFoundation.h" -#include - -#if ESSENTIAL_GL_PRACTICES_SUPPORT_GL3 -#include -#else -#include -#endif //!ESSENTIAL_GL_PRACTICES_SUPPORT_GL3 -#else -#include -#include -#endif - -namespace shader -{ - SDL_Window *win = nullptr; - SDL_Renderer *renderer = nullptr; - GLuint programId = 0; - SDL_Texture* backBuffer = nullptr; - SDL_FRect window = {0, 0, 640, 480}; - SDL_FPoint tex_size = {320, 240}; - float aspect_ratio = 1; - bool can_use_opengl = false; - bool using_opengl = false; - GLuint texture_number; - GLuint nose; - - #ifndef __APPLE__ - - // I'm avoiding the use of GLEW or some extensions handler, but that - // doesn't mean you should... - PFNGLCREATESHADERPROC glCreateShader; - PFNGLSHADERSOURCEPROC glShaderSource; - PFNGLCOMPILESHADERPROC glCompileShader; - PFNGLGETSHADERIVPROC glGetShaderiv; - PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; - PFNGLDELETESHADERPROC glDeleteShader; - PFNGLATTACHSHADERPROC glAttachShader; - PFNGLCREATEPROGRAMPROC glCreateProgram; - PFNGLDELETEPROGRAMPROC glDeleteProgram; - PFNGLLINKPROGRAMPROC glLinkProgram; - PFNGLVALIDATEPROGRAMPROC glValidateProgram; - PFNGLGETPROGRAMIVPROC glGetProgramiv; - PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; - PFNGLUSEPROGRAMPROC glUseProgram; - PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; - PFNGLUNIFORM2FPROC glUniform2f; - - bool initGLExtensions() { - glCreateShader = (PFNGLCREATESHADERPROC)SDL_GL_GetProcAddress("glCreateShader"); - glShaderSource = (PFNGLSHADERSOURCEPROC)SDL_GL_GetProcAddress("glShaderSource"); - glCompileShader = (PFNGLCOMPILESHADERPROC)SDL_GL_GetProcAddress("glCompileShader"); - glGetShaderiv = (PFNGLGETSHADERIVPROC)SDL_GL_GetProcAddress("glGetShaderiv"); - glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)SDL_GL_GetProcAddress("glGetShaderInfoLog"); - glDeleteShader = (PFNGLDELETESHADERPROC)SDL_GL_GetProcAddress("glDeleteShader"); - glAttachShader = (PFNGLATTACHSHADERPROC)SDL_GL_GetProcAddress("glAttachShader"); - glCreateProgram = (PFNGLCREATEPROGRAMPROC)SDL_GL_GetProcAddress("glCreateProgram"); - glDeleteProgram = (PFNGLDELETEPROGRAMPROC)SDL_GL_GetProcAddress("glDeleteProgram"); - glLinkProgram = (PFNGLLINKPROGRAMPROC)SDL_GL_GetProcAddress("glLinkProgram"); - glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)SDL_GL_GetProcAddress("glValidateProgram"); - glGetProgramiv = (PFNGLGETPROGRAMIVPROC)SDL_GL_GetProcAddress("glGetProgramiv"); - glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)SDL_GL_GetProcAddress("glGetProgramInfoLog"); - glUseProgram = (PFNGLUSEPROGRAMPROC)SDL_GL_GetProcAddress("glUseProgram"); - glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)SDL_GL_GetProcAddress("glGetUniformLocation"); - glUniform2f = (PFNGLUNIFORM2FPROC)SDL_GL_GetProcAddress("glUniform2f"); - - return glCreateShader && glShaderSource && glCompileShader && glGetShaderiv && - glGetShaderInfoLog && glDeleteShader && glAttachShader && glCreateProgram && - glDeleteProgram && glLinkProgram && glValidateProgram && glGetProgramiv && - glGetProgramInfoLog && glUseProgram && glGetUniformLocation && glUniform2f; - } - - #endif - - GLuint compileShader(const char* source, GLuint shaderType) { - // Create ID for shader - GLuint result = glCreateShader(shaderType); - // Add define depending on shader type - const char *sources[2] = { shaderType==GL_VERTEX_SHADER?"#define VERTEX\n":"#define FRAGMENT\n", source }; - // Define shader text - glShaderSource(result, 2, sources, NULL); - // Compile shader - glCompileShader(result); - - //Check vertex shader for errors - GLint shaderCompiled = GL_FALSE; - glGetShaderiv( result, GL_COMPILE_STATUS, &shaderCompiled ); - if (shaderCompiled != GL_TRUE) - { - std::cout << "Error en la compilación: " << result << "!" << std::endl; - GLint logLength; - glGetShaderiv(result, GL_INFO_LOG_LENGTH, &logLength); - if (logLength > 0) - { - GLchar *log = (GLchar*)malloc(logLength); - glGetShaderInfoLog(result, logLength, &logLength, log); - std::cout << "Shader compile log:" << log << std::endl; - //std::cout << source << std::endl; - free(log); - } - glDeleteShader(result); - result = 0; - } - return result; - } - - GLuint compileProgram(const char* vertexShaderSource, const char* fragmentShaderSource) - { - GLuint programId = 0; - GLuint vtxShaderId, fragShaderId; - - if (programId != 0) glDeleteProgram(programId); - programId = glCreateProgram(); - - - vtxShaderId = compileShader(vertexShaderSource, GL_VERTEX_SHADER); - fragShaderId = compileShader(fragmentShaderSource?fragmentShaderSource:vertexShaderSource, GL_FRAGMENT_SHADER); - - if(vtxShaderId && fragShaderId) - { - // Associate shader with program - glAttachShader(programId, vtxShaderId); - glAttachShader(programId, fragShaderId); - glLinkProgram(programId); - glValidateProgram(programId); - - // Check the status of the compile/link - GLint logLen; - glGetProgramiv(programId, GL_INFO_LOG_LENGTH, &logLen); - if (logLen > 0) - { - char* log = (char*) malloc(logLen * sizeof(char)); - // Show any errors as appropriate - glGetProgramInfoLog(programId, logLen, &logLen, log); - std::cout << "Prog Info Log: " << std::endl << log << std::endl; - free(log); - } - } - if (vtxShaderId) glDeleteShader(vtxShaderId); - if (fragShaderId) glDeleteShader(fragShaderId); - return programId; - } - - const bool init(SDL_Window* win, SDL_Texture* backBuffer, const char* vertexShader, const char* fragmentShader) - { - shader::win = win; - shader::renderer = SDL_GetRenderer(win); - shader::backBuffer = backBuffer; - int w, h; - SDL_GetWindowSize(win, &w, &h); - - if (w * aspect_ratio > h) { - window.y = 0; - window.h = h; - window.w = h/aspect_ratio; - window.x = (w - window.w)/2; - } else { - window.x = 0; - window.w = w; - window.h = w*aspect_ratio; - window.y = (h - window.h)/2; - } - - 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); - printf("texture number: %i\n", texture_number); - int access = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_ACCESS_NUMBER, -1); - nose = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER, -1); - printf("texture target number: %i\n", nose); - - 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); - } - - const char * renderer_name = SDL_GetRendererName(renderer); - printf("rendererInfo.name: %s\n", renderer_name); - - if(!strncmp(renderer_name, "opengl", 6)) { -#ifndef __APPLE__ - static bool gl_extensions_initialized = false; - if (!gl_extensions_initialized) { - if (!initGLExtensions()) { - std::cout << "WARNING: No s'han pogut inicialitzar les extensions d'OpenGL!" << std::endl; - can_use_opengl = false; - return false; - } - gl_extensions_initialized = true; - } -#endif - // Compilar el shader y dejarlo listo para usar. - if (!vertexShader) { - can_use_opengl = false; - return false; - } - programId = compileProgram(vertexShader, fragmentShader); - } else { - std::cout << "WARNING: El driver del renderer no es OpenGL." << std::endl; - can_use_opengl = false; - return false; - } - - can_use_opengl = true; - return true; - } - - unsigned char pixels[512*240*4]; - - void enable() { if (can_use_opengl) using_opengl = true; } - void disable() { using_opengl = false; } - - void setAspectRatio(const float ratio) - { - aspect_ratio = ratio; - } - - void render() - { - SDL_FlushRenderer(renderer); - SDL_SetRenderTarget(renderer, NULL); - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_RenderClear(renderer); - SDL_FlushRenderer(renderer); - - if (using_opengl) - { - GLint oldProgramId; - if (programId != 0) - { - glGetIntegerv(GL_CURRENT_PROGRAM, &oldProgramId); - glUseProgram(programId); - } - - //GLint loc = glGetUniformLocation(programId, "TextureSize"); - //glUniform2f(loc, 320, 256); - - glEnable(GL_TEXTURE_2D); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, 1); - //glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, pixels); - //if (glGetError()) { printf("GLGETERROR!\n"); exit(1);} - //GLint param; - //glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, ¶m); - //printf("tex width: %i\n", param); - glViewport(window.x, window.y, window.w, window.h); - - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0.0f, 0.0f); - glVertex2f(-1.0f, -1.0f); - glTexCoord2f(tex_size.x, 0.0f); - glVertex2f(1.0f, -1.0f); - glTexCoord2f(0.0f, tex_size.y); - glVertex2f(-1.0f, 1.0f); - glTexCoord2f(tex_size.x, tex_size.y); - glVertex2f(1.0f, 1.0f); - glEnd(); - - SDL_GL_SwapWindow(win); - - if (programId != 0) glUseProgram(oldProgramId); - - } else { - SDL_RenderTexture(renderer, backBuffer, NULL, &window); - SDL_RenderPresent(renderer); - } - int glerror = glGetError(); - if (glerror) { printf("GLERROR: %i\n", glerror); exit(1); } - } -} diff --git a/source/japi/shader.h b/source/japi/shader.h deleted file mode 100644 index 7f19608..0000000 --- a/source/japi/shader.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include - -// TIPS: -// ======================================================================= -// Abans de crear el renderer, cridar a la següent funció: -// -// SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl"); -// -// Aixó li diu que volem un renderer que use especificament opengl. A més, -// al crear el renderer li tenim que dir que el volem que use acceeració -// per hardware, i que soporte render a textura. Per exemple: -// -// SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | -// SDL_RENDERER_TARGETTEXTURE); -// -// Per altra part, al crear la textura tenim que definir que puga ser target -// de renderitzat (SDL_TEXTUREACCESS_TARGET), per exemple: -// -// SDL_Texture *tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, -// SDL_TEXTUREACCESS_TARGET, 320, 240); -// -// Els shaders li'ls passem com una cadena, som nosaltres els que s'encarreguem -// de carregarlos de disc, amb fopen, ifstream, jfile o el que vullgues. -// Si els tens en un std::string, passa-li-la com "cadena.c_str()". -// -// Poden ser els dos el mateix arxiu, com fa libRetro, jo desde dins ja fique -// els defines necessaris. Si es el mateix arxiu, pots no ficar el quart paràmetre. -// -// Els shaders de libRetro no funcionen directament, hi ha que fer algunes modificacions. -// -// El pintat final de la teua escena l'has de fer com si "backBuffer" fora la pantalla. -// -// Ah! una cosa mes: al compilar, en Linux afegir "-lGL", en Windows afegir "-lopengl32". -// En Mac ni idea - -namespace shader -{ - const bool init(SDL_Window* win, SDL_Texture* backBuffer, - const char* vertexShader, const char* fragmentShader=nullptr); - - void setAspectRatio(const float ratio); - void enable(); - void disable(); - - void render(); -} diff --git a/source/main.cpp b/source/main.cpp index b999468..9ec3dec 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -8,7 +8,7 @@ bool loop(); void game::init() { - draw::init("DILEMMAKER v0.1", 640, 480, 1, false); + draw::init("DILEMMAKER v0.1", 320, 240, 2, false); game::setState(loop); enemies::load(); rooms::load(); @@ -17,12 +17,15 @@ void game::init() bool loop() { - //draw::cls(0); + draw::cls(4); + draw::setTrans(255); //rooms::drawFullMap(); + rooms::draw(); draw::color(COLOR_BRIGHT_BLACK); - for (int i=0; i<=32; ++i) draw::vline(64+i*16, 48, 256); + /*for (int i=0; i<=32; ++i) draw::vline(64+i*16, 48, 256); for (int i=0; i<=16; ++i) draw::hline(64, 48+i*16, 512); + */ draw::render(); return true; } diff --git a/source/rooms.cpp b/source/rooms.cpp index 4532a4e..88d351e 100644 --- a/source/rooms.cpp +++ b/source/rooms.cpp @@ -229,7 +229,7 @@ namespace rooms tile--; room.thumbnail->pixels[x+y*32] = pixels[tile%24][tile/24]; } else { - room.thumbnail->pixels[x+y*32] = room.bgColor; + room.thumbnail->pixels[x+y*32] = room.bgColor!=0 ? room.bgColor : 1; } } } @@ -300,12 +300,12 @@ namespace rooms std::cout << std::endl; } }*/ - room_t &room = rooms["01"]; + /*room_t &room = rooms["01"]; for (int y=0; y<16; ++y) { for (int x=0; x<32; ++x) std::cout << std::to_string(room.tiles[x][y]) << ","; std::cout << std::endl; - } + }*/ } void draw() @@ -343,30 +343,43 @@ namespace rooms draw::setDestination(nullptr); draw::setSource(map_surface); draw::cls(COLOR_BRIGHT_BLACK); - draw::color(room.border); - draw::fillrect(48, 32, 512+32, 256+32); - draw::setViewport(64, 48, 512, 256); - draw::draw(0, 0, 256, 128, 0, 0, 2); + //draw::color(room.border); + //draw::fillrect(48, 32, 512+32, 256+32); + //draw::setViewport(64, 48, 512, 256); + draw::setViewport(32, 24, 256, 128); + draw::draw(0, 0); draw::resetViewport(); //draw::setSource(room.thumbnail); //draw::draw(); } + uint8_t blinking = 0; void drawFullMap() { + blinking = (blinking+1)%16; for (auto &item : rooms) { auto room = item.second; int x = ((full_map_x-room.map_x)*38)-1; int y = ((full_map_y-room.map_y)*22)-1; draw::resetViewport(); - draw::color(COLOR_WHITE); - draw::rect(x, y, 34, 18); + + if (item.first == "01") { + draw::color(blinking); + draw::rect(x-1, y-1, 36, 20); + draw::color(COLOR_BLACK); + draw::rect(x, y, 34, 18); + } else { + draw::color(COLOR_WHITE); + draw::rect(x+1, y+1, 34, 18); + draw::color(COLOR_BLACK); + draw::rect(x, y, 34, 18); + } draw::setSource(room.thumbnail); draw::draw(x+1, y+1, 32, 16, 0, 0); + if (room.roomUp != "0") draw::fillrect(x+15, y-4, 4, 4); - //if (room.roomDown != "0") draw::fillrect(x+15, y+16, 4, 4); if (room.roomLeft != "0") draw::fillrect(x-4, y+7, 4, 4); } }