mirror of
https://gitea.windcorp.ru/Wind-Corporation/Progressia.git
synced 2025-04-22 00:50:45 +03:00
113 lines
3.3 KiB
CMake
113 lines
3.3 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)
|
|
|
|
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()
|
|
|
|
|
|
## Global variables. Yikes. FIXME
|
|
#set(tools ${PROJECT_SOURCE_DIR}/tools)
|
|
#set(generated ${PROJECT_BINARY_DIR}/generated)
|
|
#set(assets_to_embed "")
|
|
#set(assets_to_embed_args "")
|
|
#
|
|
#file(MAKE_DIRECTORY ${generated})
|
|
#
|
|
#find_package(Vulkan COMPONENTS glslc REQUIRED)
|
|
#find_program(glslc_executable NAMES glslc HINTS Vulkan::glslc)
|
|
#set(shaders ${generated}/shaders)
|
|
#file(MAKE_DIRECTORY ${shaders})
|
|
#
|
|
## Shedules compilation of shaders
|
|
## Adapted from https://stackoverflow.com/a/60472877/4463352
|
|
#macro(compile_shader)
|
|
# foreach(source ${ARGV})
|
|
# get_filename_component(source_basename ${source} NAME)
|
|
# set(tmp "${shaders}/${source_basename}.spv")
|
|
# add_custom_command(
|
|
# OUTPUT ${tmp}
|
|
# DEPENDS ${source}
|
|
# COMMAND ${glslc_executable}
|
|
# -o ${tmp}
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/${source}
|
|
# COMMENT "Compiling shader ${source}"
|
|
# )
|
|
# list(APPEND assets_to_embed_args "${tmp};as;${source_basename}.spv")
|
|
# list(APPEND assets_to_embed "${tmp}")
|
|
# unset(tmp)
|
|
# unset(source_basename)
|
|
# endforeach()
|
|
#endmacro()
|
|
#
|
|
#compile_shader(
|
|
# desktop/graphics/shaders/shader.frag
|
|
# desktop/graphics/shaders/shader.vert
|
|
#)
|
|
#
|
|
## Generate embed files
|
|
#add_custom_command(
|
|
# OUTPUT ${generated}/embedded_resources.cpp
|
|
# ${generated}/embedded_resources.h
|
|
#
|
|
# COMMAND ${tools}/embed/embed.py
|
|
# --cpp ${generated}/embedded_resources.cpp
|
|
# --header ${generated}/embedded_resources.h
|
|
# --
|
|
# ${assets_to_embed_args}
|
|
#
|
|
# DEPENDS "${assets_to_embed}"
|
|
# ${tools}/embed/embed.py
|
|
#
|
|
# WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
# COMMENT "Embedding assets"
|
|
#)
|
|
#
|