Files
shadertoy/README.md
2025-10-21 19:37:55 +02:00

2.8 KiB

Shadertoy

Proyecto minimal para ejecutar fragment shaders tipo Shadertoy usando SDL3 + GLAD + OpenGL 3.3.

Shadertoy - Gameplay

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.