# Shadertoy 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 - src/ — código fuente C++ (incluye main.cpp). - shaders/ — shaders fragment (.frag.glsl) que se cargan en runtime. - third_party/glad/ — glad.c + headers. - CMakeLists.txt — configuración de build. - .gitignore — recomendado. ## Requisitos - CMake >= 3.16 - Compilador con soporte C++17 - SDL3 development headers and library - GL loader (GLAD) incluido en third_party/glad o disponible en el sistema Instalación típica: - Debian/Ubuntu: sudo apt install build-essential cmake libsdl3-dev - macOS (Homebrew): brew install cmake sdl3 ## Build mkdir build cd build cmake .. cmake --build . --config Release ## Uso Por defecto el ejecutable carga shaders/test.frag.glsl. Ejecutar en ventana: ./shadertoy_sdl3 ../shaders/test.frag.glsl Ejecutar en fullscreen nativo: ./shadertoy_sdl3 -F ../shaders/test.frag.glsl Si ejecutas desde la raíz del repo: ./build/shadertoy_sdl3 shaders/frag_tile_iter.frag.glsl Atajos en ejecución - Escape — salir. - F11 — alternar fullscreen desktop. ## Formato de shader esperado - #version 330 core - Debe declarar: uniform vec2 iResolution; uniform float iTime; in vec2 vUV; out vec4 FragColor; - Función de entrada esperada (opcional, el main llama a mainImage): void mainImage(out vec4 fragColor, in vec2 fragCoord); - main() debe convertir vUV a fragCoord y llamar a mainImage. ## Rutas y ejecución El ejecutable intenta varias rutas relativas para localizar el shader: - ruta tal cual pasada en argv - ./ - ../ - 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. ## Multi-pass / Buffers (nota) Ejemplo actual es single-pass. Para portar Shadertoy con BufferA/B/C necesitas: - crear FBOs y textures por buffer - 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) ## Troubleshooting - 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 ) y no SDL2. - Shaders que fallan a compilar: revisa glGetShaderInfoLog en la salida; versiones GLSL y funciones incompatibles son la causa habitual. ## Licencia y créditos - Código de ejemplo: libre para uso personal y adaptación. - Respeta créditos de shaders copiados de Shadertoy/otros autores cuando los reutilices.