diff --git a/CMakeLists.txt b/CMakeLists.txt index 0218551..e5fed2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,9 +117,39 @@ set(DEBUG_SOURCES find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3) message(STATUS "SDL3 encontrado: ${SDL3_INCLUDE_DIRS}") +# --- SHADER COMPILATION --- +find_program(GLSLC_EXE NAMES glslc) + +set(SHADER_VERT_SRC "${CMAKE_SOURCE_DIR}/data/shaders/postfx.vert") +set(SHADER_FRAG_SRC "${CMAKE_SOURCE_DIR}/data/shaders/postfx.frag") +set(SHADER_VERT_H "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu/postfx_vert_spv.h") +set(SHADER_FRAG_H "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu/postfx_frag_spv.h") + +if(GLSLC_EXE) + add_custom_command( + OUTPUT "${SHADER_VERT_H}" "${SHADER_FRAG_H}" + COMMAND "${CMAKE_SOURCE_DIR}/tools/shaders/compile_spirv.sh" + DEPENDS "${SHADER_VERT_SRC}" "${SHADER_FRAG_SRC}" + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + COMMENT "Compilando shaders SPIR-V..." + ) + add_custom_target(shaders DEPENDS "${SHADER_VERT_H}" "${SHADER_FRAG_H}") + message(STATUS "glslc encontrado: shaders se compilarán automáticamente") +else() + message(STATUS "glslc no encontrado - usando headers SPIR-V precompilados") + if(NOT EXISTS "${SHADER_VERT_H}" OR NOT EXISTS "${SHADER_FRAG_H}") + message(WARNING "glslc no disponible y headers SPIR-V no encontrados. Ejecuta tools/shaders/compile_spirv.sh manualmente.") + endif() +endif() + # --- 2. AÑADIR EJECUTABLE --- add_executable(${PROJECT_NAME} ${APP_SOURCES} ${RENDERING_SOURCES}) +# Shaders deben compilarse antes que el ejecutable (si glslc disponible) +if(GLSLC_EXE) + add_dependencies(${PROJECT_NAME} shaders) +endif() + # Añadir fuentes de debug solo en modo Debug target_sources(${PROJECT_NAME} PRIVATE $<$:${DEBUG_SOURCES}>) @@ -233,11 +263,17 @@ set_target_properties(pack_tool PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/tools/pack_resources ) -add_custom_target(pack - COMMAND ${CMAKE_SOURCE_DIR}/tools/pack_resources/pack_tool - ${CMAKE_SOURCE_DIR}/data - ${CMAKE_SOURCE_DIR}/resources.pack - DEPENDS pack_tool - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +file(GLOB_RECURSE DATA_FILES "${CMAKE_SOURCE_DIR}/data/*") + +add_custom_command( + OUTPUT "${CMAKE_SOURCE_DIR}/resources.pack" + COMMAND $ + "${CMAKE_SOURCE_DIR}/data" + "${CMAKE_SOURCE_DIR}/resources.pack" + DEPENDS pack_tool ${DATA_FILES} + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Generando resources.pack desde data/..." ) + +add_custom_target(pack DEPENDS "${CMAKE_SOURCE_DIR}/resources.pack") +add_dependencies(${PROJECT_NAME} pack)