38 lines
1.4 KiB
CMake
Executable File
38 lines
1.4 KiB
CMake
Executable File
option(SHADERS_DIR "Directory to look for GLSL shaders" "assets/shaders")
|
|
|
|
find_program(GLSLC_EXECUTABLE NAMES glslc)
|
|
if(NOT GLSLC_EXECUTABLE)
|
|
message(FATAL_ERROR "glslc executable not found.")
|
|
else()
|
|
message(STATUS "Found glslc executable: ${GLSLC_EXECUTABLE}")
|
|
endif()
|
|
|
|
function(create_glslc_shader_target TARGET SOURCE_DIR OUTPUT_DIR)
|
|
file(MAKE_DIRECTORY ${OUTPUT_DIR})
|
|
message(STATUS "GLSL Shader output directory: ${OUTPUT_DIR}")
|
|
file (GLOB SHADER_FILES "${SOURCE_DIR}/*.vert")
|
|
file(GLOB FRAG_FILES "${SOURCE_DIR}/*.frag")
|
|
list(APPEND SHADER_FILES ${FRAG_FILES})
|
|
message(STATUS "Found glsl shaders: ${SHADER_FILES}")
|
|
set(OUTPUT_FILES "")
|
|
foreach(SHADER_FILE ${SHADER_FILES})
|
|
get_filename_component(SHADER_NAME ${SHADER_FILE} NAME)
|
|
set(OUTPUT_FILE "${OUTPUT_DIR}/${SHADER_NAME}.spv")
|
|
list(APPEND OUTPUT_FILES ${OUTPUT_FILE})
|
|
message(STATUS "Compiling ${SHADER_FILE} to ${OUTPUT_FILE}")
|
|
add_custom_command (
|
|
OUTPUT ${OUTPUT_FILE}
|
|
COMMAND ${GLSLC_EXECUTABLE} ${SHADER_FILE} -o ${OUTPUT_FILE}
|
|
DEPENDS ${SHADER_FILE}
|
|
COMMENT "Compiling ${SHADER_FILE} -> ${OUTPUT_FILE}"
|
|
VERBATIM
|
|
)
|
|
endforeach()
|
|
add_custom_target(${TARGET} ALL DEPENDS ${OUTPUT_FILES})
|
|
endfunction()
|
|
|
|
create_glslc_shader_target(glsl_shaders
|
|
"${SHADERS_DIR}"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${SHADERS_DIR}"
|
|
)
|