feat(gpu): afegir suport SPIRV (Vulkan) per Linux/Windows
- Nou: shaders/sprite.vert|frag, postfx.vert|frag, ball.vert (GLSL) - Nou: cmake/spv_to_header.cmake — converteix .spv → uint8_t C header - CMakeLists.txt: bloc non-Apple troba glslc, compila GLSL → SPIRV en build-time i genera headers embeguts a build/generated_shaders/ - gpu_context.cpp: MSL|METALLIB en Apple, SPIRV en la resta - gpu_pipeline.cpp: createShaderSPIRV() + branques #ifdef __APPLE__ per sprite/ball/postfx pipelines - Corregeix crash a engine.cpp:821 (Windows/Linux) causat per pipelines null quan init() fallava en no trobar suport MSL Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,48 @@ if (NOT SDL3_ttf_FOUND)
|
||||
message(FATAL_ERROR "SDL3_ttf no encontrado. Por favor, verifica su instalación.")
|
||||
endif()
|
||||
|
||||
# ---- Shader compilation (non-Apple only: Vulkan/SPIRV) ----
|
||||
if(NOT APPLE)
|
||||
find_program(GLSLC glslc HINTS "$ENV{VULKAN_SDK}/bin" "$ENV{VULKAN_SDK}/Bin")
|
||||
if(NOT GLSLC)
|
||||
message(FATAL_ERROR "glslc not found. Install the Vulkan SDK and ensure glslc is on PATH.")
|
||||
endif()
|
||||
|
||||
set(SHADER_SRC_DIR "${CMAKE_SOURCE_DIR}/shaders")
|
||||
set(SHADER_GEN_DIR "${CMAKE_BINARY_DIR}/generated_shaders")
|
||||
file(MAKE_DIRECTORY "${SHADER_GEN_DIR}")
|
||||
|
||||
set(SPIRV_HEADERS)
|
||||
foreach(SHADER sprite_vert sprite_frag postfx_vert postfx_frag ball_vert)
|
||||
if(SHADER MATCHES "_vert$")
|
||||
set(STAGE_FLAG "-fshader-stage=vertex")
|
||||
else()
|
||||
set(STAGE_FLAG "-fshader-stage=fragment")
|
||||
endif()
|
||||
string(REGEX REPLACE "_vert$" ".vert" GLSL_NAME "${SHADER}")
|
||||
string(REGEX REPLACE "_frag$" ".frag" GLSL_NAME "${GLSL_NAME}")
|
||||
|
||||
set(GLSL_FILE "${SHADER_SRC_DIR}/${GLSL_NAME}")
|
||||
set(SPV_FILE "${SHADER_GEN_DIR}/${SHADER}.spv")
|
||||
set(H_FILE "${SHADER_GEN_DIR}/${SHADER}_spv.h")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${H_FILE}"
|
||||
COMMAND "${GLSLC}" ${STAGE_FLAG} -o "${SPV_FILE}" "${GLSL_FILE}"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
-DINPUT="${SPV_FILE}"
|
||||
-DOUTPUT="${H_FILE}"
|
||||
-DVAR_NAME="k${SHADER}_spv"
|
||||
-P "${CMAKE_SOURCE_DIR}/cmake/spv_to_header.cmake"
|
||||
DEPENDS "${GLSL_FILE}"
|
||||
COMMENT "Compiling ${GLSL_NAME} to SPIRV"
|
||||
)
|
||||
list(APPEND SPIRV_HEADERS "${H_FILE}")
|
||||
endforeach()
|
||||
|
||||
add_custom_target(shaders ALL DEPENDS ${SPIRV_HEADERS})
|
||||
endif()
|
||||
|
||||
# Archivos fuente (excluir main_old.cpp)
|
||||
file(GLOB SOURCE_FILES source/*.cpp source/external/*.cpp source/boids_mgr/*.cpp source/gpu/*.cpp source/input/*.cpp source/scene/*.cpp source/shapes/*.cpp source/shapes_mgr/*.cpp source/state/*.cpp source/themes/*.cpp source/text/*.cpp source/ui/*.cpp)
|
||||
list(REMOVE_ITEM SOURCE_FILES "${CMAKE_SOURCE_DIR}/source/main_old.cpp")
|
||||
@@ -60,6 +102,11 @@ set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAK
|
||||
# Enlazar las bibliotecas necesarias
|
||||
target_link_libraries(${PROJECT_NAME} ${LINK_LIBS})
|
||||
|
||||
if(NOT APPLE)
|
||||
add_dependencies(${PROJECT_NAME} shaders)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${SHADER_GEN_DIR}")
|
||||
endif()
|
||||
|
||||
# Tool: pack_resources
|
||||
add_executable(pack_resources tools/pack_resources.cpp source/resource_pack.cpp)
|
||||
target_include_directories(pack_resources PRIVATE ${CMAKE_SOURCE_DIR}/source)
|
||||
|
||||
Reference in New Issue
Block a user