Files
shadertoy/README.md
Sergio Valor 4a339c09d1 afegits altres shaders
pantalla completa
tecla esc
readme.md
2025-10-21 18:38:43 +02:00

2.6 KiB

Shadertoy SDL3 + OpenGL

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.