Actualizar README.md

This commit is contained in:
2025-10-21 19:37:55 +02:00
parent 4a339c09d1
commit b4d7ae8045

View File

@@ -1,79 +1,162 @@
# Shadertoy SDL3 + OpenGL
# Shadertoy
Proyecto minimal para ejecutar fragment shaders tipo Shadertoy usando SDL3 + GLAD + OpenGL 3.3. Proyecto minimal para ejecutar fragment shaders tipo Shadertoy usando SDL3 + GLAD + OpenGL 3.3.
![Shadertoy - Gameplay](https://php.sustancia.synology.me/images/shadertoy/shadertoy01.png)
## Estructura ## Estructura
- src/ — código fuente C++ (incluye main.cpp). - src/ — código fuente C++ (incluye main.cpp).
- shaders/ — shaders fragment (.frag.glsl) que se cargan en runtime. - shaders/ — shaders fragment (.frag.glsl) que se cargan en runtime.
- third_party/glad/ — glad.c + headers. - third_party/glad/ — glad.c + headers.
- CMakeLists.txt — configuración de build. - CMakeLists.txt — configuración de build.
- .gitignore — recomendado. - .gitignore — recomendado.
## Requisitos ## Requisitos
- CMake >= 3.16 - CMake >= 3.16
- Compilador con soporte C++17 - Compilador con soporte C++17
- SDL3 development headers and library - SDL3 development headers and library
- GL loader (GLAD) incluido en third_party/glad o disponible en el sistema - GL loader (GLAD) incluido en third_party/glad o disponible en el sistema
Instalación típica: Instalación típica:
- Debian/Ubuntu: - Debian/Ubuntu:
sudo apt install build-essential cmake libsdl3-dev sudo apt install build-essential cmake libsdl3-dev
- macOS (Homebrew): - macOS (Homebrew):
brew install cmake sdl3 brew install cmake sdl3
## Build ## Build
mkdir build mkdir build
cd build cd build
cmake .. cmake ..
cmake --build . --config Release cmake --build . --config Release
## Uso ## Uso
Por defecto el ejecutable carga shaders/test.frag.glsl. Por defecto el ejecutable carga shaders/test.frag.glsl.
Ejecutar en ventana: Ejecutar en ventana:
./shadertoy_sdl3 ../shaders/test.frag.glsl ./shadertoy_sdl3 ../shaders/test.frag.glsl
Ejecutar en fullscreen nativo: Ejecutar en fullscreen nativo:
./shadertoy_sdl3 -F ../shaders/test.frag.glsl ./shadertoy_sdl3 -F ../shaders/test.frag.glsl
Si ejecutas desde la raíz del repo: Si ejecutas desde la raíz del repo:
./build/shadertoy_sdl3 shaders/frag_tile_iter.frag.glsl ./build/shadertoy_sdl3 shaders/frag_tile_iter.frag.glsl
Atajos en ejecución Atajos en ejecución
- Escape — salir. - Escape — salir.
- F11 — alternar fullscreen desktop. - F11 — alternar fullscreen desktop.
## Formato de shader esperado ## Formato de shader esperado
- #version 330 core - #version 330 core
- Debe declarar: - Debe declarar:
uniform vec2 iResolution; uniform vec2 iResolution;
uniform float iTime; uniform float iTime;
in vec2 vUV; in vec2 vUV;
out vec4 FragColor; out vec4 FragColor;
- Función de entrada esperada (opcional, el main llama a mainImage): - Función de entrada esperada (opcional, el main llama a mainImage):
void mainImage(out vec4 fragColor, in vec2 fragCoord); void mainImage(out vec4 fragColor, in vec2 fragCoord);
- main() debe convertir vUV a fragCoord y llamar a mainImage. - main() debe convertir vUV a fragCoord y llamar a mainImage.
## Rutas y ejecución ## Rutas y ejecución
El ejecutable intenta varias rutas relativas para localizar el shader: El ejecutable intenta varias rutas relativas para localizar el shader:
- ruta tal cual pasada en argv - ruta tal cual pasada en argv
- ./<ruta> - ./<ruta>
- ../<ruta> - ../<ruta>
- relativo al directorio del ejecutable - relativo al directorio del ejecutable
Si obtienes "Failed to load fragment shader file", ejecuta desde la carpeta build o pasa la ruta correcta a tu shader. Si obtienes "Failed to load fragment shader file", ejecuta desde la carpeta build o pasa la ruta correcta a tu shader.
## Multi-pass / Buffers (nota) ## Multi-pass / Buffers (nota)
Ejemplo actual es single-pass. Para portar Shadertoy con BufferA/B/C necesitas: Ejemplo actual es single-pass. Para portar Shadertoy con BufferA/B/C necesitas:
- crear FBOs y textures por buffer - crear FBOs y textures por buffer
- renderizar buffers en orden y pasar las texturas como iChannelN a pases posteriores - renderizar buffers en orden y pasar las texturas como iChannelN a pases posteriores
- evitar leer y escribir la misma textura (usar ping-pong si hace falta) - evitar leer y escribir la misma textura (usar ping-pong si hace falta)
## Troubleshooting ## Troubleshooting
- SDL_Init devuelve error vacío: asegúrate que SDL3.dll (Windows) está en el mismo directorio que el ejecutable o en PATH. - SDL_Init devuelve error vacío: asegúrate que SDL3.dll (Windows) está en el mismo directorio que el ejecutable o en PATH.
- Errores de compilación/constantes: verifica que usas SDL3 headers (#include <SDL3/SDL.h>) y no SDL2. - Errores de compilación/constantes: verifica que usas SDL3 headers (#include <SDL3/SDL.h>) y no SDL2.
- Shaders que fallan a compilar: revisa glGetShaderInfoLog en la salida; versiones GLSL y funciones incompatibles son la causa habitual. - Shaders que fallan a compilar: revisa glGetShaderInfoLog en la salida; versiones GLSL y funciones incompatibles son la causa habitual.
## Licencia y créditos ## Licencia y créditos
- Código de ejemplo: libre para uso personal y adaptación. - Código de ejemplo: libre para uso personal y adaptación.
- Respeta créditos de shaders copiados de Shadertoy/otros autores cuando los reutilices. - Respeta créditos de shaders copiados de Shadertoy/otros autores cuando los reutilices.