| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- find_program(PYTHON_EXECUTABLE python3 REQUIRED)
- function(process_shader shader_file output_file_var generated_dir)
- get_filename_component(shader_name "${shader_file}" NAME)
- set(output_file "${generated_dir}/shaders/${shader_name}.h")
- set("${output_file_var}" "${output_file}" PARENT_SCOPE)
- add_custom_command(
- OUTPUT "${output_file}"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${generated_dir}/shaders"
- COMMAND "${PYTHON_EXECUTABLE}" "${R3D_ROOT_PATH}/scripts/glsl_processor.py"
- "${shader_file}" "${CMAKE_CURRENT_BINARY_DIR}/shader_${shader_name}.tmp"
- COMMAND "${PYTHON_EXECUTABLE}" "${R3D_ROOT_PATH}/scripts/bin2c.py"
- --file "${CMAKE_CURRENT_BINARY_DIR}/shader_${shader_name}.tmp"
- --name "${shader_name}" --mode text "${output_file}"
- COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_CURRENT_BINARY_DIR}/shader_${shader_name}.tmp"
- DEPENDS "${shader_file}"
- COMMENT "Processing shader: ${shader_file}"
- VERBATIM
- )
- endfunction()
- function(embed_shaders target_name)
- set(shader_files ${ARGN})
- if(NOT shader_files)
- message(FATAL_ERROR "embed_shaders: No shader file specified")
- endif()
- if(NOT DEFINED R3D_GENERATED_INCLUDE_DIR)
- message(FATAL_ERROR "embed_shaders: R3D_GENERATED_INCLUDE_DIR is not defined")
- endif()
- set(output_files)
- list(LENGTH shader_files shader_count)
- message(STATUS "Configuring processing of ${shader_count} shader(s) for target ${target_name}...")
- foreach(shader_file ${shader_files})
- if(NOT EXISTS "${shader_file}")
- message(FATAL_ERROR "embed_shaders: Shader file not found: ${shader_file}")
- endif()
- process_shader("${shader_file}" output_file "${R3D_GENERATED_INCLUDE_DIR}")
- list(APPEND output_files "${output_file}")
- message(STATUS " - ${shader_file} -> ${output_file}")
- endforeach()
- set(shader_target "${target_name}_shaders")
- add_custom_target(${shader_target}
- DEPENDS ${output_files}
- COMMENT "Generating shader headers for ${target_name}"
- )
- add_dependencies(${target_name} ${shader_target})
- message(STATUS "Target ${shader_target} created with ${shader_count} shader(s)")
- endfunction()
|