Init
This commit is contained in:
106
shaders/CMakeLists.txt
Normal file
106
shaders/CMakeLists.txt
Normal file
@@ -0,0 +1,106 @@
|
||||
|
||||
# Ref.: https://stackoverflow.com/questions/67040258/cmake-compile-glsl-shaders
|
||||
# Ref.: https://cmake.org/cmake/help/latest/command/add_custom_command.html
|
||||
|
||||
set(SHADER_SOURCE_DIR ${PROJECT_SOURCE_DIR}/shaders)
|
||||
set(SHADER_BIN_DIR ${PROJECT_SOURCE_DIR}/assets/shaders)
|
||||
file(GLOB VERTEX_SHADERS ${SHADER_SOURCE_DIR}/vs_*.sc)
|
||||
file(GLOB FRAGMENT_SHADERS ${SHADER_SOURCE_DIR}/fs_*.sc)
|
||||
file(GLOB COMPUTE_SHADERS ${SHADER_SOURCE_DIR}/cs_*.sc)
|
||||
|
||||
# vertex shaders
|
||||
foreach(SHADER_IN IN LISTS VERTEX_SHADERS)
|
||||
cmake_path(GET SHADER_IN FILENAME SHADER_NAME) # ex. SHADER_NAME==vs_cubes.sc
|
||||
|
||||
# output file
|
||||
string(REPLACE ".sc" ".spv" SHADER_OUT ${SHADER_NAME})
|
||||
set(SHADER_OUT ${SHADER_BIN_DIR}/${SHADER_OUT})
|
||||
|
||||
# varying file
|
||||
string(REPLACE "vs" "varying" SHADER_VARYING ${SHADER_IN})
|
||||
|
||||
# message("SHADER_IN: " ${SHADER_IN} " - SHADER_VARYING: " ${SHADER_VARYING} " - SHADER_OUT: " ${SHADER_OUT})
|
||||
|
||||
_bgfx_shaderc_parse(CLI
|
||||
FILE ${SHADER_IN}
|
||||
OUTPUT ${SHADER_OUT}
|
||||
VERTEX
|
||||
LINUX
|
||||
PROFILE spirv
|
||||
VARYINGDEF ${SHADER_VARYING}
|
||||
INCLUDES ${SHADER_BIN_DIR}
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${SHADER_OUT}
|
||||
COMMAND ${SHADERC} ${CLI}
|
||||
DEPENDS ${SHADER_IN}
|
||||
COMMENT "Compiling shader ${SHADER_NAME}"
|
||||
)
|
||||
|
||||
list(APPEND SPV_SHADERS ${SHADER_OUT})
|
||||
endforeach()
|
||||
|
||||
# fragment shaders
|
||||
foreach(SHADER_IN IN LISTS FRAGMENT_SHADERS)
|
||||
cmake_path(GET SHADER_IN FILENAME SHADER_NAME) # ex. SHADER_NAME==vs_cubes.sc
|
||||
|
||||
# output file
|
||||
string(REPLACE ".sc" ".spv" SHADER_OUT ${SHADER_NAME})
|
||||
set(SHADER_OUT ${SHADER_BIN_DIR}/${SHADER_OUT})
|
||||
|
||||
# varying file
|
||||
string(REPLACE "fs" "varying" SHADER_VARYING ${SHADER_IN})
|
||||
|
||||
# message("SHADER_IN: " ${SHADER_IN} " - SHADER_VARYING: " ${SHADER_VARYING} " - SHADER_OUT: " ${SHADER_OUT})
|
||||
|
||||
_bgfx_shaderc_parse(CLI
|
||||
FILE ${SHADER_IN}
|
||||
OUTPUT ${SHADER_OUT}
|
||||
FRAGMENT
|
||||
LINUX
|
||||
PROFILE spirv
|
||||
VARYINGDEF ${SHADER_VARYING}
|
||||
INCLUDES ${SHADER_BIN_DIR}
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${SHADER_OUT}
|
||||
COMMAND ${SHADERC} ${CLI}
|
||||
DEPENDS ${SHADER_IN}
|
||||
COMMENT "Compiling shader ${SHADER_NAME}"
|
||||
)
|
||||
|
||||
list(APPEND SPV_SHADERS ${SHADER_OUT})
|
||||
endforeach()
|
||||
|
||||
# compute shaders
|
||||
foreach(SHADER_IN IN LISTS COMPUTE_SHADERS)
|
||||
cmake_path(GET SHADER_IN FILENAME SHADER_NAME) # ex. SHADER_NAME==vs_cubes.sc
|
||||
|
||||
# output file
|
||||
string(REPLACE ".sc" ".spv" SHADER_OUT ${SHADER_NAME})
|
||||
set(SHADER_OUT ${SHADER_BIN_DIR}/${SHADER_OUT})
|
||||
|
||||
# message("SHADER_IN: " ${SHADER_IN} " - "SHADER_OUT: " ${SHADER_OUT})
|
||||
|
||||
_bgfx_shaderc_parse(CLI
|
||||
FILE ${SHADER_IN}
|
||||
OUTPUT ${SHADER_OUT}
|
||||
COMPUTE
|
||||
LINUX
|
||||
PROFILE spirv
|
||||
INCLUDES ${SHADER_BIN_DIR}
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${SHADER_OUT}
|
||||
COMMAND ${SHADERC} ${CLI}
|
||||
DEPENDS ${SHADER_IN}
|
||||
COMMENT "Compiling shader ${SHADER_NAME}"
|
||||
)
|
||||
|
||||
list(APPEND SPV_SHADERS ${SHADER_OUT})
|
||||
endforeach()
|
||||
|
||||
add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS})
|
||||
Reference in New Issue
Block a user