Revision control

Copy as Markdown

# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#quick3d version of qrc to resource
function(_qt_internal_quick3d_generate_resource_from_qrc target resource_name)
set(generatedResourceFile "${CMAKE_CURRENT_BINARY_DIR}/.rcc/generated_${resource_name}.qrc")
set(generatedSourceCode "${CMAKE_CURRENT_BINARY_DIR}/.rcc/qrc_${resource_name}.cpp")
set(rccArgs --name "${resource_name}"
--output "${generatedSourceCode}" "${generatedResourceFile}")
if(NOT QT_FEATURE_zstd)
list(APPEND rccArgs "--no-zstd")
endif()
add_custom_command(
OUTPUT
"${generatedSourceCode}"
COMMAND
${QT_CMAKE_EXPORT_NAMESPACE}::rcc
ARGS
${rccArgs}
DEPENDS
"${generatedResourceFile}"
$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::rcc>
$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::shadergen>
COMMENT
"RCC ${resource_name}"
VERBATIM
)
get_target_property(type ${target} TYPE)
target_sources(${target} PRIVATE "${generatedSourceCode}")
endfunction()
#generate shaders from the given files
function(qt6_add_materials target resource_name)
cmake_parse_arguments(arg
"" "PREFIX" "FILES" ${ARGN}
)
set(output_qrc "generated_${resource_name}.qrc")
set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/.rcc")
_qt_internal_get_tool_wrapper_script_path(tool_wrapper)
set(shadergen_command
COMMAND
"${tool_wrapper}"
"$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::shadergen>"
-C "${PROJECT_SOURCE_DIR}"
-o "${output_dir}"
-r "${output_qrc}"
\""${arg_FILES}"\"
)
add_custom_command(
OUTPUT "${output_dir}/${output_qrc}"
${shadergen_command}
DEPENDS
$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::shadergen>
)
_qt_internal_quick3d_generate_resource_from_qrc(${target} ${resource_name})
endfunction()
# .hdr -> .ktx baker. Quite similar to qt6_add_shaders().
#
# For example, the following autogenerates the lightprobe map at build time and
# includes it in the executable under :/maps/OpenfootageNET_garage-1024.ktx:
#
# qt6_add_lightprobe_images(principledmaterial "ibl_assets"
# PREFIX
# "/"
# FILES
# "maps/OpenfootageNET_garage-1024.hdr" )
#
# In addition to PREFIX, BASE is available as well, and works like in qt6_add_resources:
# adding BASE "maps" in the above example would lead to getting :/OpenfootageNET_garage-1024.ktx
#
# OUTPUTS works like in qt6_add_shaders, allowing to specify an alternative name
# for the resource system for each entry in FILES. For example, adding
# OUTPUTS "alt/er/native/image.abc" to the above example would generate :/alt/er/native/image.abc
#
# In short, the actual file name in the resource system is
# either :/PREFIX/FILES[i]-BASE-".hdr"+".ktx" or :/PREFIX/OUTPUTS[i]
#
function(qt6_add_lightprobe_images target resource_name)
cmake_parse_arguments(arg
""
"PREFIX;BASE;_QT_INTERNAL"
"FILES;OUTPUTS"
${ARGN}
)
math(EXPR file_index "0")
foreach(file IN LISTS arg_FILES)
get_filename_component(file_name_wo_ext ${file} NAME_WLE)
get_filename_component(file_ext ${file} EXT)
set(supported_formats ".hdr" ".exr")
if(NOT file_ext IN_LIST supported_formats)
message(FATAL_ERROR "Light probe HDRI maps must have the extensions .hdr or .exr, whereas ${file} has something else")
endif()
get_filename_component(file_dir "${file}" DIRECTORY)
string(JOIN "/" res_name "${file_dir}" "${file_name_wo_ext}")
string(JOIN "." res_name "${res_name}" "ktx")
if(arg_OUTPUTS)
list(GET arg_OUTPUTS ${file_index} res_name)
elseif(arg_BASE)
get_filename_component(abs_base "${arg_BASE}" ABSOLUTE)
get_filename_component(abs_res_name "${res_name}" ABSOLUTE)
file(RELATIVE_PATH res_name "${abs_base}" "${abs_res_name}")
endif()
# This should be .../.ibl/${res_name} but balsam strips the path so no choice but
# to follow suit here and hope that the names of the files won't clash.
set(ktx_result "${CMAKE_CURRENT_BINARY_DIR}/.ibl/${file_name_wo_ext}.ktx")
get_filename_component(file_absolute ${file} ABSOLUTE)
list(APPEND balsam_args "--no-plugins")
list(APPEND balsam_args "-o")
list(APPEND balsam_args "${CMAKE_CURRENT_BINARY_DIR}/.ibl")
list(APPEND balsam_args "${file_absolute}")
add_custom_command(
OUTPUT
${ktx_result}
COMMAND
${QT_CMAKE_EXPORT_NAMESPACE}::balsam ${balsam_args}
DEPENDS
"${file_absolute}"
$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::balsam>
VERBATIM
)
list(APPEND ktx_files "${ktx_result}")
set_source_files_properties("${ktx_result}" PROPERTIES QT_RESOURCE_ALIAS "${res_name}")
math(EXPR file_index "${file_index}+1")
endforeach()
if(arg__QT_INTERNAL)
qt_internal_add_resources(${target} ${resource_name}
PREFIX
"${arg_PREFIX}"
FILES
"${ktx_files}"
)
else()
qt6_add_resources(${target} ${resource_name}
PREFIX
"${arg_PREFIX}"
FILES
"${ktx_files}"
)
endif()
endfunction()
if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
function(qt_add_materials)
qt6_add_materials(${ARGV})
endfunction()
function(qt_add_lightprobe_images)
qt6_add_lightprobe_images(${ARGV})
endfunction()
endif()
# for use by Qt modules that need qt_internal_add_resource
function(qt_internal_add_lightprobe_images)
qt6_add_lightprobe_images(${ARGV} _QT_INTERNAL)
endfunction()
# Qt 6.1 compatibility
function(qt6_quick3d_generate_materials)
message(AUTHOR_WARNING "qt6_quick3d_generate_materials is deprecated, use qt6_add_materials instead")
qt6_add_materials(${ARGV})
endfunction()
function(qt6_quick3d_bake_lightprobe_hdri)
message(AUTHOR_WARNING "qt6_quick3d_bake_lightprobe_hdri is deprecated, use qt6_add_lightprobe_images instead")
qt6_add_lightprobe_images(${ARGV})
endfunction()