mirror of
https://gitea.windcorp.ru/Wind-Corporation/Progressia.git
synced 2025-04-22 00:40:46 +03:00
54 lines
1.6 KiB
CMake
54 lines
1.6 KiB
CMake
# glslc.cmake
|
|
# Compiles GLSL shaders to SPV files
|
|
|
|
find_package(Vulkan COMPONENTS glslc REQUIRED)
|
|
find_program(glslc_EXECUTABLE NAMES glslc HINTS Vulkan::glslc REQUIRED)
|
|
|
|
macro (get_target_property_or var target prop default)
|
|
get_property(__is_set TARGET ${target} PROPERTY ${prop} SET)
|
|
if (__is_set)
|
|
get_property(${var} TARGET ${target} PROPERTY ${prop})
|
|
else()
|
|
set(${var} "${default}")
|
|
endif()
|
|
unset(__is_set)
|
|
endmacro()
|
|
|
|
function (target_glsl_shaders)
|
|
set(target "")
|
|
|
|
foreach (word ${ARGV})
|
|
# First argument is target name
|
|
if (target STREQUAL "")
|
|
set(target ${word})
|
|
get_target_property_or(glsl_shaders ${target} GLSL_SHADERS "")
|
|
else()
|
|
list(APPEND glsl_shaders ${word})
|
|
endif()
|
|
endforeach()
|
|
|
|
set_target_properties(${target} PROPERTIES GLSL_SHADERS "${glsl_shaders}")
|
|
endfunction()
|
|
|
|
file(MAKE_DIRECTORY "${generated}/compiled_glsl_shaders")
|
|
|
|
function(compile_glsl target)
|
|
get_target_property(glsl_shaders ${target} GLSL_SHADERS)
|
|
|
|
foreach (source_path ${glsl_shaders})
|
|
get_filename_component(source_basename ${source_path} NAME)
|
|
set(spv_path
|
|
"${generated}/compiled_glsl_shaders/${source_basename}.spv")
|
|
|
|
add_custom_command(
|
|
OUTPUT ${spv_path}
|
|
DEPENDS ${source_path}
|
|
COMMAND ${glslc_EXECUTABLE}
|
|
-o ${spv_path}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${source_path}
|
|
COMMENT "Compiling shader ${source_path}"
|
|
)
|
|
target_embeds(${target} ${spv_path} AS "${source_basename}.spv")
|
|
endforeach()
|
|
endfunction()
|