Shadertoy
Proyecto minimal para ejecutar fragment shaders tipo Shadertoy usando SDL3 + GLAD + OpenGL 3.3.
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 <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.
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.
