# add custom command to output compiled shader function(add_shader_command) cmake_parse_arguments(ARGS "" "FILENAME;OUT;LANG" "" ${ARGN}) cmake_path(REMOVE_EXTENSION ARGS_FILENAME LAST_ONLY OUTPUT_VARIABLE FILENAME_WITHOUT_EXT) set(SRC_FILENAME ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_FILENAME}) set(OUTPUT_FILENAME ${CMAKE_BINARY_DIR}/bin/${FILENAME_WITHOUT_EXT}.${ARGS_LANG}) message(${SRC_FILENAME}) message("new output filename " .. ${OUTPUT_FILENAME}) if(NEEDS_HOSTED_SHADER_COMPILER) set(SHADER_COMPILER_COMMAND ${SHADER_COMPILER_LOCATION}) else() set(SHADER_COMPILER_COMMAND $) endif() add_custom_command( OUTPUT ${OUTPUT_FILENAME} COMMAND ${SHADER_COMPILER_COMMAND} ${SRC_FILENAME} ${OUTPUT_FILENAME} ${ARGS_LANG} ${EXTRA_PLATFORM_ARG} DEPENDS ${SRC_FILENAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/shaders) # return the actual filename set(${ARGS_OUT} ${OUTPUT_FILENAME} PARENT_SCOPE) endfunction() # add shaders to target function(add_shaders) cmake_parse_arguments(ARGS "" "TARGET" "SHADERS" ${ARGN}) foreach(SHADER_LANG ${SHADER_LANGUAGES}) message(${SHADER_LANG}) foreach(SHADER_FILENAME ${ARGS_SHADERS}) cmake_path(REMOVE_EXTENSION SHADER_FILENAME LAST_ONLY OUTPUT_VARIABLE FILENAME_WITHOUT_EXT) # we want to remove the .nocompile extension just like the tool does, if it exists cmake_path(GET FILENAME_WITHOUT_EXT EXTENSION LAST_ONLY LAST_EXT) set(NEW_SHADER_LANG ${SHADER_LANG}) if(LAST_EXT STREQUAL ".nocompile") set(NEW_SHADER_LANG glsl) cmake_path(REPLACE_EXTENSION FILENAME_WITHOUT_EXT LAST_ONLY glsl) endif() add_shader_command(FILENAME ${SHADER_FILENAME} OUT DST_FILENAME LANG ${NEW_SHADER_LANG}) list(APPEND SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SHADER_FILENAME}) list(APPEND DST_FILES ${DST_FILENAME}) endforeach() endforeach() if(NOT NEEDS_HOSTED_SHADER_COMPILER) add_custom_target(BuildShaders DEPENDS ShaderCompilerTool ${DST_FILES}) else() add_custom_target(BuildShaders DEPENDS ${DST_FILES}) endif() add_dependencies(${ARGS_TARGET} BuildShaders) endfunction() # make the shader directory if it doesnt exist already file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/shaders)