feat(shaders): sistema de shaders runtime amb presets externs
- Afegir GpuShaderPreset i ShaderManager per carregar shaders des de data/shaders/ - Implementar preset ntsc-md-rainbows (2 passos: encode + decode MAME NTSC) - Render loop multi-pass per shaders externs (targets intermedis R16G16B16A16_FLOAT) - cycleShader(): cicla OFF→PostFX natius→shaders externs amb tecla X - --shader <nom> per arrancar directament amb un preset extern - CMake auto-descubreix i compila data/shaders/**/*.vert/.frag → .spv - HUD F1 mostra 'Shader: <nom>' quan hi ha shader extern actiu Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -64,6 +64,34 @@ if(NOT APPLE)
|
||||
endforeach()
|
||||
|
||||
add_custom_target(shaders ALL DEPENDS ${SPIRV_HEADERS})
|
||||
|
||||
# External runtime shaders: auto-discover and compile data/shaders/**/*.vert/*.frag
|
||||
# Output: <source>.spv alongside each source file (loaded at runtime by GpuShaderPreset)
|
||||
file(GLOB_RECURSE DATA_SHADERS
|
||||
"${CMAKE_SOURCE_DIR}/data/shaders/**/*.vert"
|
||||
"${CMAKE_SOURCE_DIR}/data/shaders/**/*.frag")
|
||||
|
||||
set(DATA_SHADER_SPVS)
|
||||
foreach(SHADER_FILE ${DATA_SHADERS})
|
||||
get_filename_component(SHADER_EXT "${SHADER_FILE}" EXT)
|
||||
if(SHADER_EXT STREQUAL ".vert")
|
||||
set(STAGE_FLAG "-fshader-stage=vertex")
|
||||
else()
|
||||
set(STAGE_FLAG "-fshader-stage=fragment")
|
||||
endif()
|
||||
set(SPV_FILE "${SHADER_FILE}.spv")
|
||||
add_custom_command(
|
||||
OUTPUT "${SPV_FILE}"
|
||||
COMMAND "${GLSLC}" ${STAGE_FLAG} -o "${SPV_FILE}" "${SHADER_FILE}"
|
||||
DEPENDS "${SHADER_FILE}"
|
||||
COMMENT "Compiling ${SHADER_FILE}"
|
||||
)
|
||||
list(APPEND DATA_SHADER_SPVS "${SPV_FILE}")
|
||||
endforeach()
|
||||
|
||||
if(DATA_SHADER_SPVS)
|
||||
add_custom_target(data_shaders ALL DEPENDS ${DATA_SHADER_SPVS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Archivos fuente (excluir main_old.cpp)
|
||||
@@ -105,6 +133,9 @@ target_link_libraries(${PROJECT_NAME} ${LINK_LIBS})
|
||||
if(NOT APPLE)
|
||||
add_dependencies(${PROJECT_NAME} shaders)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${SHADER_GEN_DIR}")
|
||||
if(TARGET data_shaders)
|
||||
add_dependencies(${PROJECT_NAME} data_shaders)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Tool: pack_resources
|
||||
|
||||
Reference in New Issue
Block a user