Sergio Valor 44de2c7013 Add FPS counter, VSync toggle, shader metadata system, and multi-pass infrastructure
- FPS counter in window title (updates every 500ms)
- F4 key toggles VSync on/off
- Shader metadata: Name and Author from comments
- iChannel metadata parsing for multi-pass support
- Base structures: ShaderBuffer, ShaderPass
- FBO/texture management functions
- Updated all 11 shaders with Name/Author metadata

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 15:22:06 +01:00
2025-10-25 12:12:44 +02:00
2025-10-21 20:01:53 +02:00
2025-10-21 19:37:55 +02:00

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.

Description
Repositorio minimal y práctico para ejecutar fragment shaders tipo Shadertoy en un entorno local usando SDL3, GLAD y OpenGL 3.3; incluye un main C++ que carga shaders desde disco, soporte para fullscreen (-F) y atajos (Escape, F11), ejemplos de shaders adaptados, instrucciones de build con CMake y notas para ampliar a pipelines multi‑pass (BufferA/B/C) y hot‑reload; diseñado para desarrolladores que quieren probar, depurar y portar shaders de Shadertoy rápidamente en Windows, Linux y macOS.
Readme 139 MiB
2025-11-16 Latest
2025-11-16 19:19:19 +01:00
Languages
C 85.4%
Cython 8.1%
C++ 6.1%
GLSL 0.3%