diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt index fc52c0306a..c54a592354 100644 --- a/framework/CMakeLists.txt +++ b/framework/CMakeLists.txt @@ -131,10 +131,8 @@ set(SCENE_GRAPH_FILES scene_graph/node.h scene_graph/scene.h scene_graph/script.h - scene_graph/hpp_scene.h # Source Files scene_graph/component.cpp - scene_graph/scene.cpp scene_graph/script.cpp) set(SCENE_GRAPH_COMPONENT_FILES diff --git a/framework/common/hpp_utils.h b/framework/common/hpp_utils.h index 0c0b306936..352bfbc6aa 100644 --- a/framework/common/hpp_utils.h +++ b/framework/common/hpp_utils.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2021-2025, NVIDIA CORPORATION. All rights reserved. +/* Copyright (c) 2021-2026, NVIDIA CORPORATION. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -18,7 +18,6 @@ #pragma once #include "common/utils.h" -#include "scene_graph/hpp_scene.h" /** * @brief facade helper functions around the functions in common/utils.h, providing a vulkan.hpp-based interface @@ -27,10 +26,10 @@ namespace vkb { namespace common { -inline vkb::scene_graph::NodeCpp &add_free_camera(vkb::scene_graph::HPPScene &scene, const std::string &node_name, vk::Extent2D const &extent) +inline vkb::scene_graph::NodeCpp &add_free_camera(vkb::scene_graph::SceneCpp &scene, const std::string &node_name, vk::Extent2D const &extent) { return reinterpret_cast( - vkb::add_free_camera(reinterpret_cast(scene), node_name, static_cast(extent))); + vkb::add_free_camera(reinterpret_cast(scene), node_name, static_cast(extent))); } inline void screenshot(vkb::rendering::RenderContextCpp &render_context, const std::string &filename) diff --git a/framework/common/utils.cpp b/framework/common/utils.cpp index 631f4b0327..a3ceab2a5c 100644 --- a/framework/common/utils.cpp +++ b/framework/common/utils.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2018-2025, Arm Limited and Contributors +/* Copyright (c) 2018-2026, Arm Limited and Contributors * * SPDX-License-Identifier: Apache-2.0 * @@ -215,7 +215,7 @@ std::string to_snake_case(const std::string &text) return result.str(); } -sg::Light &add_light(sg::Scene &scene, +sg::Light &add_light(vkb::scene_graph::SceneC &scene, sg::LightType type, const glm::vec3 &position, const glm::quat &rotation, @@ -249,22 +249,22 @@ sg::Light &add_light(sg::Scene &scene, return light; } -sg::Light &add_point_light(sg::Scene &scene, const glm::vec3 &position, const sg::LightProperties &props, vkb::scene_graph::NodeC *parent_node) +sg::Light &add_point_light(vkb::scene_graph::SceneC &scene, const glm::vec3 &position, const sg::LightProperties &props, vkb::scene_graph::NodeC *parent_node) { return add_light(scene, sg::LightType::Point, position, {}, props, parent_node); } -sg::Light &add_directional_light(sg::Scene &scene, const glm::quat &rotation, const sg::LightProperties &props, vkb::scene_graph::NodeC *parent_node) +sg::Light &add_directional_light(vkb::scene_graph::SceneC &scene, const glm::quat &rotation, const sg::LightProperties &props, vkb::scene_graph::NodeC *parent_node) { return add_light(scene, sg::LightType::Directional, {}, rotation, props, parent_node); } -sg::Light &add_spot_light(sg::Scene &scene, const glm::vec3 &position, const glm::quat &rotation, const sg::LightProperties &props, vkb::scene_graph::NodeC *parent_node) +sg::Light &add_spot_light(vkb::scene_graph::SceneC &scene, const glm::vec3 &position, const glm::quat &rotation, const sg::LightProperties &props, vkb::scene_graph::NodeC *parent_node) { return add_light(scene, sg::LightType::Spot, position, rotation, props, parent_node); } -vkb::scene_graph::NodeC &add_free_camera(sg::Scene &scene, const std::string &node_name, VkExtent2D extent) +vkb::scene_graph::NodeC &add_free_camera(vkb::scene_graph::SceneC &scene, const std::string &node_name, VkExtent2D extent) { auto camera_node = scene.find_node(node_name); diff --git a/framework/common/utils.h b/framework/common/utils.h index a5b68bacad..9042ba7d9f 100644 --- a/framework/common/utils.h +++ b/framework/common/utils.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2018-2025, Arm Limited and Contributors +/* Copyright (c) 2018-2026, Arm Limited and Contributors * * SPDX-License-Identifier: Apache-2.0 * @@ -25,6 +25,7 @@ #include "filesystem/legacy.h" #include "rendering/pipeline_state.h" #include "rendering/render_context.h" +#include "scene_graph/components/light.h" #include "scene_graph/components/sub_mesh.h" #include "scene_graph/scene.h" @@ -66,7 +67,7 @@ void screenshot(vkb::rendering::RenderContextC &render_context, const std::strin * @param parent_node The parent node for the line, defaults to root * @return The newly created light component */ -sg::Light &add_light(sg::Scene &scene, +sg::Light &add_light(vkb::scene_graph::SceneC &scene, sg::LightType type, const glm::vec3 &position, const glm::quat &rotation = {}, @@ -82,7 +83,7 @@ sg::Light &add_light(sg::Scene &scene, * @return The newly created light component */ sg::Light & - add_point_light(sg::Scene &scene, const glm::vec3 &position, const sg::LightProperties &props = {}, vkb::scene_graph::NodeC *parent_node = nullptr); + add_point_light(vkb::scene_graph::SceneC &scene, const glm::vec3 &position, const sg::LightProperties &props = {}, vkb::scene_graph::NodeC *parent_node = nullptr); /** * @brief Adds a directional light to the scene with the specified parameters @@ -92,7 +93,7 @@ sg::Light & * @param parent_node The parent node for the line, defaults to root * @return The newly created light component */ -sg::Light &add_directional_light(sg::Scene &scene, +sg::Light &add_directional_light(vkb::scene_graph::SceneC &scene, const glm::quat &rotation, const sg::LightProperties &props = {}, vkb::scene_graph::NodeC *parent_node = nullptr); @@ -106,7 +107,7 @@ sg::Light &add_directional_light(sg::Scene &scene, * @param parent_node The parent node for the line, defaults to root * @return The newly created light component */ -sg::Light &add_spot_light(sg::Scene &scene, +sg::Light &add_spot_light(vkb::scene_graph::SceneC &scene, const glm::vec3 &position, const glm::quat &rotation, const sg::LightProperties &props = {}, @@ -120,6 +121,6 @@ sg::Light &add_spot_light(sg::Scene &scene, * @param extent The initial resolution of the camera * @return Node where the script was attached as component */ -vkb::scene_graph::NodeC &add_free_camera(sg::Scene &scene, const std::string &node_name, VkExtent2D extent); +vkb::scene_graph::NodeC &add_free_camera(vkb::scene_graph::SceneC &scene, const std::string &node_name, VkExtent2D extent); } // namespace vkb diff --git a/framework/gltf_loader.cpp b/framework/gltf_loader.cpp index b7fc3859ab..42362e1a28 100644 --- a/framework/gltf_loader.cpp +++ b/framework/gltf_loader.cpp @@ -1,5 +1,5 @@ -/* Copyright (c) 2018-2025, Arm Limited and Contributors - * Copyright (c) 2019-2025, Sascha Willems +/* Copyright (c) 2018-2026, Arm Limited and Contributors + * Copyright (c) 2019-2026, Sascha Willems * * SPDX-License-Identifier: Apache-2.0 * @@ -407,7 +407,7 @@ GLTFLoader::GLTFLoader(vkb::core::DeviceC &device) : { } -std::unique_ptr GLTFLoader::read_scene_from_file(const std::string &file_name, int scene_index, VkBufferUsageFlags additional_buffer_usage_flags) +std::unique_ptr GLTFLoader::read_scene_from_file(const std::string &file_name, int scene_index, VkBufferUsageFlags additional_buffer_usage_flags) { PROFILE_SCOPE("Load GLTF Scene"); @@ -447,7 +447,7 @@ std::unique_ptr GLTFLoader::read_scene_from_file(const std::string &f model_path.clear(); } - return std::make_unique(load_scene(scene_index, additional_buffer_usage_flags)); + return std::make_unique(load_scene(scene_index, additional_buffer_usage_flags)); } std::unique_ptr GLTFLoader::read_model_from_file(const std::string &file_name, uint32_t index, bool storage_buffer, VkBufferUsageFlags additional_buffer_usage_flags) @@ -494,11 +494,11 @@ std::unique_ptr GLTFLoader::read_model_from_file(const std::string return std::move(load_model(index, storage_buffer, additional_buffer_usage_flags)); } -sg::Scene GLTFLoader::load_scene(int scene_index, VkBufferUsageFlags additional_buffer_usage_flags) +vkb::scene_graph::SceneC GLTFLoader::load_scene(int scene_index, VkBufferUsageFlags additional_buffer_usage_flags) { PROFILE_SCOPE("Process Scene"); - auto scene = sg::Scene(); + auto scene = vkb::scene_graph::SceneC(); scene.set_name("gltf_scene"); diff --git a/framework/gltf_loader.h b/framework/gltf_loader.h index 4176e96f5d..9051b98386 100644 --- a/framework/gltf_loader.h +++ b/framework/gltf_loader.h @@ -1,5 +1,5 @@ -/* Copyright (c) 2018-2025, Arm Limited and Contributors - * Copyright (c) 2019-2025, Sascha Willems +/* Copyright (c) 2018-2026, Arm Limited and Contributors + * Copyright (c) 2019-2026, Sascha Willems * * SPDX-License-Identifier: Apache-2.0 * @@ -29,6 +29,7 @@ #include "scene_graph/components/sampler.h" #include "scene_graph/node.h" +#include "scene_graph/scene.h" #include "timer.h" #include "vulkan/vulkan.h" @@ -54,7 +55,6 @@ class Mesh; class Node; class PBRMaterial; class Sampler; -class Scene; class SubMesh; class Texture; } // namespace sg @@ -84,7 +84,7 @@ class GLTFLoader virtual ~GLTFLoader() = default; - std::unique_ptr read_scene_from_file(const std::string &file_name, int scene_index = -1, VkBufferUsageFlags additional_buffer_usage_flags = 0); + std::unique_ptr read_scene_from_file(const std::string &file_name, int scene_index = -1, VkBufferUsageFlags additional_buffer_usage_flags = 0); /** * @brief Loads the first model from a GLTF file for use in simpler samples @@ -143,7 +143,7 @@ class GLTFLoader static std::unordered_map supported_extensions; private: - sg::Scene load_scene(int scene_index = -1, VkBufferUsageFlags additional_buffer_usage_flags = 0); + vkb::scene_graph::SceneC load_scene(int scene_index = -1, VkBufferUsageFlags additional_buffer_usage_flags = 0); std::unique_ptr load_model(uint32_t index, bool storage_buffer = false, VkBufferUsageFlags additional_buffer_usage_flags = 0); }; diff --git a/framework/hpp_gltf_loader.h b/framework/hpp_gltf_loader.h index cb001d85ea..4613bbf238 100644 --- a/framework/hpp_gltf_loader.h +++ b/framework/hpp_gltf_loader.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2021-2025, NVIDIA CORPORATION. All rights reserved. +/* Copyright (c) 2021-2026, NVIDIA CORPORATION. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -20,7 +20,6 @@ #include #include -#include namespace vkb { @@ -43,9 +42,9 @@ class HPPGLTFLoader : private vkb::GLTFLoader vkb::GLTFLoader::read_model_from_file(file_name, index, storage_buffer, static_cast(additional_buffer_usage_flags)).release())); } - std::unique_ptr read_scene_from_file(const std::string &file_name, int scene_index = -1) + std::unique_ptr read_scene_from_file(const std::string &file_name, int scene_index = -1) { - return std::unique_ptr(reinterpret_cast(vkb::GLTFLoader::read_scene_from_file(file_name, scene_index).release())); + return std::unique_ptr(reinterpret_cast(vkb::GLTFLoader::read_scene_from_file(file_name, scene_index).release())); } }; } // namespace vkb diff --git a/framework/rendering/subpasses/forward_subpass.h b/framework/rendering/subpasses/forward_subpass.h index d6fac5df9c..0be625f2d0 100644 --- a/framework/rendering/subpasses/forward_subpass.h +++ b/framework/rendering/subpasses/forward_subpass.h @@ -54,7 +54,6 @@ template class ForwardSubpass : public vkb::rendering::subpasses::GeometrySubpass { public: - using SceneType = typename std::conditional::type; using ShaderSourceType = typename std::conditional::type; public: @@ -69,7 +68,7 @@ class ForwardSubpass : public vkb::rendering::subpasses::GeometrySubpass &render_context, ShaderSourceType &&vertex_shader, ShaderSourceType &&fragment_shader, - SceneType &scene, + vkb::scene_graph::Scene &scene, sg::Camera &camera); virtual ~ForwardSubpass() = default; @@ -88,7 +87,7 @@ template inline ForwardSubpass::ForwardSubpass(vkb::rendering::RenderContext &render_context, ShaderSourceType &&vertex_source, ShaderSourceType &&fragment_source, - SceneType &scene_, + vkb::scene_graph::Scene &scene_, sg::Camera &camera) : GeometrySubpass{render_context, std::move(vertex_source), std::move(fragment_source), scene_, camera} {} diff --git a/framework/rendering/subpasses/geometry_subpass.h b/framework/rendering/subpasses/geometry_subpass.h index 60f95545b9..63a40d0d85 100644 --- a/framework/rendering/subpasses/geometry_subpass.h +++ b/framework/rendering/subpasses/geometry_subpass.h @@ -26,7 +26,6 @@ #include "scene_graph/components/image.h" #include "scene_graph/components/pbr_material.h" #include "scene_graph/components/sub_mesh.h" -#include "scene_graph/hpp_scene.h" #include "scene_graph/scene.h" namespace vkb @@ -91,7 +90,6 @@ class GeometrySubpass : public vkb::rendering::Subpass using MeshType = typename std::conditional::type; using PipelineLayoutType = typename std::conditional::type; using RasterizationStateType = typename std::conditional::type; - using SceneType = typename std::conditional::type; using ShaderModuleType = typename std::conditional::type; using ShaderSourceType = typename std::conditional::type; using SubMeshType = typename std::conditional::type; @@ -108,7 +106,7 @@ class GeometrySubpass : public vkb::rendering::Subpass GeometrySubpass(vkb::rendering::RenderContext &render_context, ShaderSourceType &&vertex_shader, ShaderSourceType &&fragment_shader, - SceneType &scene, + vkb::scene_graph::Scene &scene, sg::Camera &camera); virtual ~GeometrySubpass() = default; @@ -127,12 +125,12 @@ class GeometrySubpass : public vkb::rendering::Subpass void set_thread_index(uint32_t index); protected: - void draw_submesh(vkb::core::CommandBuffer &command_buffer, SubMeshType &sub_mesh, FrontFaceType front_face = DefaultFrontFaceTypeValue::value); - virtual void draw_submesh_command(vkb::core::CommandBuffer &command_buffer, SubMeshType &sub_mesh); - vkb::sg::Camera const &get_camera() const; - std::vector const &get_meshes() const; - RasterizationStateType const &get_rasterization_state() const; - SceneType const &get_scene() const; + void draw_submesh(vkb::core::CommandBuffer &command_buffer, SubMeshType &sub_mesh, FrontFaceType front_face = DefaultFrontFaceTypeValue::value); + virtual void draw_submesh_command(vkb::core::CommandBuffer &command_buffer, SubMeshType &sub_mesh); + vkb::sg::Camera const &get_camera() const; + std::vector const &get_meshes() const; + RasterizationStateType const &get_rasterization_state() const; + vkb::scene_graph::Scene const &get_scene() const; /** * @brief Sorts objects based on distance from camera and classifies them @@ -168,7 +166,7 @@ class GeometrySubpass : public vkb::rendering::Subpass vkb::rendering::HPPRasterizationState base_rasterization_state; vkb::sg::Camera &camera; std::vector meshes; - vkb::scene_graph::HPPScene *scene; + vkb::scene_graph::SceneCpp *scene; uint32_t thread_index = 0; }; @@ -181,7 +179,7 @@ template inline GeometrySubpass::GeometrySubpass(vkb::rendering::RenderContext &render_context, ShaderSourceType &&vertex_source, ShaderSourceType &&fragment_source, - SceneType &scene_, + vkb::scene_graph::Scene &scene_, sg::Camera &camera) : Subpass{render_context, std::move(vertex_source), std::move(fragment_source)}, camera{camera} { @@ -191,7 +189,7 @@ inline GeometrySubpass::GeometrySubpass(vkb::rendering::RenderConte } else { - scene = reinterpret_cast(&scene_); + scene = reinterpret_cast(&scene_); } meshes = scene->get_components(); } @@ -369,7 +367,7 @@ inline typename GeometrySubpass::RasterizationStateType const &Geom } template -inline typename GeometrySubpass::SceneType const &GeometrySubpass::get_scene() const +inline vkb::scene_graph::Scene const &GeometrySubpass::get_scene() const { if constexpr (bindingType == BindingType::Cpp) { @@ -377,7 +375,7 @@ inline typename GeometrySubpass::SceneType const &GeometrySubpass(scene); + return *reinterpret_cast(scene); } } diff --git a/framework/rendering/subpasses/lighting_subpass.cpp b/framework/rendering/subpasses/lighting_subpass.cpp index 8f008f34f2..e58ca37887 100644 --- a/framework/rendering/subpasses/lighting_subpass.cpp +++ b/framework/rendering/subpasses/lighting_subpass.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2019-2025, Arm Limited and Contributors +/* Copyright (c) 2019-2026, Arm Limited and Contributors * * SPDX-License-Identifier: Apache-2.0 * @@ -27,7 +27,7 @@ namespace vkb { LightingSubpass::LightingSubpass( - vkb::rendering::RenderContextC &render_context, ShaderSource &&vertex_shader, ShaderSource &&fragment_shader, sg::Camera &cam, sg::Scene &scene_) : + vkb::rendering::RenderContextC &render_context, ShaderSource &&vertex_shader, ShaderSource &&fragment_shader, sg::Camera &cam, vkb::scene_graph::SceneC &scene_) : Subpass{render_context, std::move(vertex_shader), std::move(fragment_shader)}, camera{cam}, scene{scene_} { } diff --git a/framework/rendering/subpasses/lighting_subpass.h b/framework/rendering/subpasses/lighting_subpass.h index 1f55c890af..eca8a598ef 100644 --- a/framework/rendering/subpasses/lighting_subpass.h +++ b/framework/rendering/subpasses/lighting_subpass.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2019-2025, Arm Limited and Contributors +/* Copyright (c) 2019-2026, Arm Limited and Contributors * * SPDX-License-Identifier: Apache-2.0 * @@ -18,9 +18,9 @@ #pragma once #include "buffer_pool.h" -#include "rendering/subpass.h" - #include "common/glm_common.h" +#include "rendering/subpass.h" +#include "scene_graph/scene.h" // This value is per type of light that we feed into the shader #define MAX_DEFERRED_LIGHT_COUNT 48 @@ -66,7 +66,7 @@ class LightingSubpass : public vkb::rendering::SubpassC { public: LightingSubpass( - vkb::rendering::RenderContextC &render_context, ShaderSource &&vertex_shader, ShaderSource &&fragment_shader, sg::Camera &camera, sg::Scene &scene); + vkb::rendering::RenderContextC &render_context, ShaderSource &&vertex_shader, ShaderSource &&fragment_shader, sg::Camera &camera, vkb::scene_graph::SceneC &scene); virtual void prepare() override; @@ -75,7 +75,7 @@ class LightingSubpass : public vkb::rendering::SubpassC private: sg::Camera &camera; - sg::Scene &scene; + vkb::scene_graph::SceneC &scene; ShaderVariant lighting_variant; }; diff --git a/framework/scene_graph/hpp_scene.h b/framework/scene_graph/hpp_scene.h deleted file mode 100644 index 4bcbae4288..0000000000 --- a/framework/scene_graph/hpp_scene.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (c) 2024-2026, NVIDIA CORPORATION. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 the "License"; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include "scene.h" -#include "scene_graph/components/camera.h" -#include "scene_graph/components/hpp_mesh.h" -#include "scene_graph/script.h" -#include "scene_graph/scripts/animation.h" - -namespace vkb -{ -namespace scene_graph -{ -/** - * @brief facade class around vkb::sg::Scene, providing a vulkan.hpp-based interface - * - * See vkb::sb::Scene for documentation - */ -class HPPScene : private vkb::sg::Scene -{ - public: - template - std::vector get_components() const - { - if constexpr (std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value) - { - return vkb::sg::Scene::get_components(); - } - else if constexpr (std::is_same::value) - { - std::vector meshes = vkb::sg::Scene::get_components(); - return *reinterpret_cast *>(&meshes); - } - else - { - assert(false); // path never passed -> Please add a type-check here! - return {}; - } - } - - template - bool has_component() const - { - if constexpr (std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value) - { - return vkb::sg::Scene::has_component(typeid(T)); - } - else if constexpr (std::is_same::value) - { - return vkb::sg::Scene::has_component(); - } - else - { - assert(false); // path never passed -> Please add a type-check here! - return false; - } - } -}; -} // namespace scene_graph -} // namespace vkb diff --git a/framework/scene_graph/scene.cpp b/framework/scene_graph/scene.cpp deleted file mode 100644 index 4705ef78c3..0000000000 --- a/framework/scene_graph/scene.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (c) 2018-2025, Arm Limited and Contributors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 the "License"; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "scene.h" - -#include - -#include "component.h" -#include "components/sub_mesh.h" -#include "node.h" - -namespace vkb -{ -namespace sg -{ -Scene::Scene(const std::string &name) : - name{name} -{} - -void Scene::set_name(const std::string &new_name) -{ - name = new_name; -} - -const std::string &Scene::get_name() const -{ - return name; -} - -void Scene::set_nodes(std::vector> &&n) -{ - assert(nodes.empty() && "Scene nodes were already set"); - nodes = std::move(n); -} - -void Scene::add_node(std::unique_ptr &&n) -{ - nodes.emplace_back(std::move(n)); -} - -void Scene::add_child(vkb::scene_graph::NodeC &child) -{ - root->add_child(child); -} - -std::unique_ptr Scene::get_model(uint32_t index) -{ - auto meshes = std::move(components.at(typeid(SubMesh))); - - assert(index < meshes.size()); - return std::move(meshes[index]); -} - -void Scene::add_component(std::unique_ptr &&component, vkb::scene_graph::NodeC &node) -{ - node.set_component(*component); - - if (component) - { - components[component->get_type()].push_back(std::move(component)); - } -} - -void Scene::add_component(std::unique_ptr &&component) -{ - if (component) - { - components[component->get_type()].push_back(std::move(component)); - } -} - -void Scene::set_components(const std::type_index &type_info, std::vector> &&new_components) -{ - components[type_info] = std::move(new_components); -} - -const std::vector> &Scene::get_components(const std::type_index &type_info) const -{ - return components.at(type_info); -} - -bool Scene::has_component(const std::type_index &type_info) const -{ - auto component = components.find(type_info); - return (component != components.end() && !component->second.empty()); -} - -vkb::scene_graph::NodeC *Scene::find_node(const std::string &node_name) -{ - for (auto root_node : root->get_children()) - { - std::queue traverse_nodes{}; - traverse_nodes.push(root_node); - - while (!traverse_nodes.empty()) - { - auto node = traverse_nodes.front(); - traverse_nodes.pop(); - - if (node->get_name() == node_name) - { - return node; - } - - for (auto child_node : node->get_children()) - { - traverse_nodes.push(child_node); - } - } - } - - return nullptr; -} - -void Scene::set_root_node(vkb::scene_graph::NodeC &node) -{ - root = &node; -} - -vkb::scene_graph::NodeC &Scene::get_root_node() -{ - return *root; -} -} // namespace sg -} // namespace vkb \ No newline at end of file diff --git a/framework/scene_graph/scene.h b/framework/scene_graph/scene.h index 0a1e4caad5..4bd95fb99b 100644 --- a/framework/scene_graph/scene.h +++ b/framework/scene_graph/scene.h @@ -1,4 +1,5 @@ -/* Copyright (c) 2018-2025, Arm Limited and Contributors +/* Copyright (c) 2018-2026, Arm Limited and Contributors + * Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -17,128 +18,295 @@ #pragma once -#include -#include -#include -#include -#include -#include - +#include "scene_graph/component.h" +#include "scene_graph/components/camera.h" +#include "scene_graph/components/hpp_mesh.h" #include "scene_graph/components/light.h" -#include "scene_graph/components/texture.h" +#include "scene_graph/components/pbr_material.h" +#include "scene_graph/components/sub_mesh.h" #include "scene_graph/node.h" +#include "scene_graph/scripts/animation.h" namespace vkb { -namespace sg +namespace scene_graph { -class Component; -class SubMesh; /// @brief A collection of nodes organized in a tree structure. -/// It can contain more than one root node. +template class Scene { public: Scene() = default; + Scene(std::string const &name); - Scene(const std::string &name); - - void set_name(const std::string &name); + public: + void add_child(vkb::scene_graph::Node &child); + void add_component(std::unique_ptr &&component); + void add_component(std::unique_ptr &&component, vkb::scene_graph::Node &node); + void add_node(std::unique_ptr> &&node); + template + void clear_components(); + vkb::scene_graph::Node *find_node(std::string const &name); + template + std::vector get_components() const; + std::string const &get_name() const; + vkb::scene_graph::Node &get_root_node(); + template + bool has_component() const; + template + void set_components(std::vector> &&components); + void set_name(std::string const &name); + void set_nodes(std::vector>> &&nodes); + void set_root_node(vkb::scene_graph::Node &node); - const std::string &get_name() const; + private: + template + std::type_index get_type_index() const; + bool has_component(std::type_index const &type_info) const; + std::type_index map_type_index(std::type_index ti) const; - void set_nodes(std::vector> &&nodes); + private: + std::unordered_map>> components; + std::string name; + std::vector> nodes; // List of all the nodes + vkb::scene_graph::NodeCpp *root = nullptr; +}; - void add_node(std::unique_ptr &&node); +using SceneC = Scene; +using SceneCpp = Scene; - void add_child(vkb::scene_graph::NodeC &child); +// Member function definitions - std::unique_ptr get_model(uint32_t index = 0); +template +inline Scene::Scene(std::string const &name) : + name{name} +{} - void add_component(std::unique_ptr &&component); +template +inline void Scene::add_child(vkb::scene_graph::Node &child) +{ + if constexpr (bindingType == vkb::BindingType::Cpp) + { + root->add_child(child); + } + else + { + root->add_child(reinterpret_cast(child)); + } +} - void add_component(std::unique_ptr &&component, vkb::scene_graph::NodeC &node); +template +inline void Scene::add_component(std::unique_ptr &&component) +{ + if (component) + { + components[map_type_index(component->get_type())].push_back(std::move(component)); + } +} - /** - * @brief Set list of components for the given type - * @param type_info The type of the component - * @param components The list of components (retained) - */ - void set_components(const std::type_index &type_info, std::vector> &&components); +template +inline void Scene::add_component(std::unique_ptr &&component, vkb::scene_graph::Node &node) +{ + node.set_component(*component); + add_component(std::move(component)); +} - /** - * @brief Set list of components casted from the given template type - */ - template - void set_components(std::vector> &&components) +template +inline void Scene::add_node(std::unique_ptr> &&n) +{ + if constexpr (bindingType == vkb::BindingType::Cpp) { - std::vector> result(components.size()); - std::transform(components.begin(), components.end(), result.begin(), - [](std::unique_ptr &component) -> std::unique_ptr { - return std::unique_ptr(std::move(component)); - }); - set_components(typeid(T), std::move(result)); + nodes.emplace_back(std::move(n)); } - - /** - * @brief Clears a list of components - */ - template - void clear_components() + else { - set_components(typeid(T), {}); + nodes.push_back(std::unique_ptr(reinterpret_cast(n.release()))); } +} - /** - * @return List of pointers to components casted to the given template type - */ - template - std::vector get_components() const +template +template +inline void Scene::clear_components() +{ + components[get_type_index()].clear(); +} + +template +inline vkb::scene_graph::Node *Scene::find_node(std::string const &node_name) +{ + assert(root); + + for (auto root_node : root->get_children()) { - std::vector result; - if (has_component(typeid(T))) + std::queue traverse_nodes; + traverse_nodes.push(root_node); + + while (!traverse_nodes.empty()) { - auto &scene_components = get_components(typeid(T)); + auto node = traverse_nodes.front(); + traverse_nodes.pop(); - result.resize(scene_components.size()); - std::transform(scene_components.begin(), scene_components.end(), result.begin(), - [](const std::unique_ptr &component) -> T * { - return dynamic_cast(component.get()); - }); + if (node->get_name() == node_name) + { + if constexpr (bindingType == vkb::BindingType::Cpp) + { + return node; + } + else + { + return reinterpret_cast(node); + } + } + + for (auto child_node : node->get_children()) + { + traverse_nodes.push(child_node); + } } + } + + return nullptr; +} + +template +template +inline std::vector Scene::get_components() const +{ + std::vector result; + if (has_component(get_type_index())) + { + auto &scene_components = components.at(get_type_index()); - return result; + result.resize(scene_components.size()); + std::transform(scene_components.begin(), scene_components.end(), result.begin(), + [](std::unique_ptr const &component) -> T * { + return reinterpret_cast(component.get()); + }); } - /** - * @return List of components for the given type - */ - const std::vector> &get_components(const std::type_index &type_info) const; + return result; +} - template - bool has_component() const +template +inline std::string const &Scene::get_name() const +{ + return name; +} + +template +inline vkb::scene_graph::Node &Scene::get_root_node() +{ + if constexpr (bindingType == vkb::BindingType::Cpp) { - return has_component(typeid(T)); + return *root; } + else + { + return reinterpret_cast(*root); + } +} - bool has_component(const std::type_index &type_info) const; +template +template +inline bool Scene::has_component() const +{ + return has_component(get_type_index()); +} - vkb::scene_graph::NodeC *find_node(const std::string &name); +template +template +inline std::type_index Scene::get_type_index() const +{ + // please add a type check here for types never encountered before + static_assert(std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value); - void set_root_node(vkb::scene_graph::NodeC &node); + return map_type_index(typeid(T)); +} - vkb::scene_graph::NodeC &get_root_node(); +template +inline bool Scene::has_component(std::type_index const &type_info) const +{ + auto component = components.find(type_info); + return (component != components.end() && !component->second.empty()); +} - private: - std::string name; +// map type_index from C-type to C++-type +template +inline std::type_index Scene::map_type_index(std::type_index ti) const +{ + if (ti == typeid(vkb::scene_graph::components::SamplerC)) + { + return typeid(vkb::scene_graph::components::SamplerCpp); + } + else if (ti == typeid(vkb::sg::Mesh)) + { + return typeid(vkb::scene_graph::components::HPPMesh); + } + else + { + return ti; + } +} - /// List of all the nodes - std::vector> nodes; +template +template +inline void Scene::set_components(std::vector> &&new_components) +{ + std::vector> result(new_components.size()); + std::ranges::transform(new_components, result.begin(), + [](std::unique_ptr &component) -> std::unique_ptr { + return std::unique_ptr(std::move(component)); + }); + components[get_type_index()] = std::move(result); +} - vkb::scene_graph::NodeC *root{nullptr}; +template +inline void Scene::set_name(std::string const &new_name) +{ + name = new_name; +} - std::unordered_map>> components; -}; -} // namespace sg +template +inline void Scene::set_nodes(std::vector>> &&n) +{ + assert(nodes.empty() && "Scene nodes were already set"); + if constexpr (bindingType == vkb::BindingType::Cpp) + { + nodes = std::move(n); + } + else + { + nodes.reserve(n.size()); + for (auto &node : n) + { + nodes.push_back(std::unique_ptr(reinterpret_cast(node.release()))); + } + } +} + +template +inline void Scene::set_root_node(vkb::scene_graph::Node &node) +{ + if constexpr (bindingType == vkb::BindingType::Cpp) + { + root = &node; + } + else + { + root = reinterpret_cast(&node); + } +} + +} // namespace scene_graph } // namespace vkb \ No newline at end of file diff --git a/framework/vulkan_sample.h b/framework/vulkan_sample.h index d5b90c52b0..288d98ae91 100644 --- a/framework/vulkan_sample.h +++ b/framework/vulkan_sample.h @@ -26,6 +26,9 @@ #include "platform/application.h" #include "platform/window.h" #include "rendering/render_pipeline.h" +#include "scene_graph/components/camera.h" +#include "scene_graph/script.h" +#include "scene_graph/scripts/animation.h" #include "stats/hpp_stats.h" #if defined(PLATFORM__MACOS) @@ -133,7 +136,6 @@ class VulkanSample : public vkb::Application VulkanSample() = default; ~VulkanSample() override; - using SceneType = typename std::conditional::type; using StatsType = typename std::conditional::type; using Extent2DType = typename std::conditional::type; @@ -262,7 +264,7 @@ class VulkanSample : public vkb::Application vkb::core::Instance const &get_instance() const; vkb::rendering::RenderPipeline &get_render_pipeline(); vkb::rendering::RenderPipeline const &get_render_pipeline() const; - SceneType &get_scene(); + vkb::scene_graph::Scene &get_scene(); StatsType &get_stats(); SurfaceType get_surface() const; std::vector &get_surface_priority_list(); @@ -382,7 +384,7 @@ class VulkanSample : public vkb::Application /** * @brief Holds all scene information */ - std::unique_ptr scene; + std::unique_ptr scene; std::unique_ptr gui; @@ -1049,7 +1051,7 @@ inline vkb::rendering::RenderPipeline &VulkanSample::g } template -inline typename VulkanSample::SceneType &VulkanSample::get_scene() +inline vkb::scene_graph::Scene &VulkanSample::get_scene() { assert(scene && "Scene not loaded"); if constexpr (bindingType == BindingType::Cpp) @@ -1058,7 +1060,7 @@ inline typename VulkanSample::SceneType &VulkanSample: } else { - return reinterpret_cast(*scene); + return reinterpret_cast(*scene); } } diff --git a/samples/extensions/conditional_rendering/conditional_rendering.h b/samples/extensions/conditional_rendering/conditional_rendering.h index 5f4274b45c..d0619f9beb 100644 --- a/samples/extensions/conditional_rendering/conditional_rendering.h +++ b/samples/extensions/conditional_rendering/conditional_rendering.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2023-2025, Sascha Willems +/* Copyright (c) 2023-2026, Sascha Willems * * SPDX-License-Identifier: Apache-2.0 * @@ -29,7 +29,7 @@ class ConditionalRendering : public ApiVulkanSample std::unique_ptr vertex_buffer = nullptr; std::unique_ptr index_buffer = nullptr; - std::unique_ptr scene; + std::unique_ptr scene; struct SceneNode { std::string name; diff --git a/samples/extensions/dynamic_multisample_rasterization/dynamic_multisample_rasterization.h b/samples/extensions/dynamic_multisample_rasterization/dynamic_multisample_rasterization.h index 5a73dca6b9..c0528b0bdd 100644 --- a/samples/extensions/dynamic_multisample_rasterization/dynamic_multisample_rasterization.h +++ b/samples/extensions/dynamic_multisample_rasterization/dynamic_multisample_rasterization.h @@ -29,9 +29,9 @@ class DynamicMultisampleRasterization : public ApiVulkanSample std::unique_ptr vertex_buffer = nullptr; std::unique_ptr index_buffer = nullptr; - std::unique_ptr scene; - std::vector image_infos; - std::map name_to_texture_id; + std::unique_ptr scene; + std::vector image_infos; + std::map name_to_texture_id; struct SceneNode { diff --git a/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.cpp b/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.cpp index 9709d54d47..50c21d89d5 100644 --- a/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.cpp +++ b/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.cpp @@ -772,7 +772,7 @@ void DynamicRenderingLocalRead::prepare_pipelines() VK_CHECK(vkCreateGraphicsPipelines(get_device().get_handle(), pipeline_cache, 1, &pipeline_create_info, nullptr, &composition_pass.pipeline)); } -void DynamicRenderingLocalRead::draw_scene(std::unique_ptr &scene, VkCommandBuffer cmd, VkPipelineLayout pipeline_layout) +void DynamicRenderingLocalRead::draw_scene(std::unique_ptr &scene, VkCommandBuffer cmd, VkPipelineLayout pipeline_layout) { for (auto &mesh : scene->get_components()) { diff --git a/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.h b/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.h index 1b34df5e92..a5aa591ea3 100644 --- a/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.h +++ b/samples/extensions/dynamic_rendering_local_read/dynamic_rendering_local_read.h @@ -46,8 +46,8 @@ class DynamicRenderingLocalRead : public ApiVulkanSample private: struct Scenes { - std::unique_ptr opaque; - std::unique_ptr transparent; + std::unique_ptr opaque; + std::unique_ptr transparent; } scenes; struct @@ -124,7 +124,7 @@ class DynamicRenderingLocalRead : public ApiVulkanSample void update_uniform_buffer(); void prepare_layouts_and_descriptors(); - void draw_scene(std::unique_ptr &scene, VkCommandBuffer cmd, VkPipelineLayout pipeline_layout); + void draw_scene(std::unique_ptr &scene, VkCommandBuffer cmd, VkPipelineLayout pipeline_layout); }; std::unique_ptr> create_dynamic_rendering_local_read(); diff --git a/samples/extensions/fragment_density_map/fragment_density_map.cpp b/samples/extensions/fragment_density_map/fragment_density_map.cpp index 73801fc1cd..e1b5aed650 100644 --- a/samples/extensions/fragment_density_map/fragment_density_map.cpp +++ b/samples/extensions/fragment_density_map/fragment_density_map.cpp @@ -17,6 +17,7 @@ #include "fragment_density_map.h" #include "api_vulkan_sample.h" +#include "scene_graph/components/mesh.h" #include #include diff --git a/samples/extensions/fragment_density_map/fragment_density_map.h b/samples/extensions/fragment_density_map/fragment_density_map.h index 7ae39bc4f2..dee491c88e 100644 --- a/samples/extensions/fragment_density_map/fragment_density_map.h +++ b/samples/extensions/fragment_density_map/fragment_density_map.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2025, Arm Limited and Contributors +/* Copyright (c) 2025-2026, Arm Limited and Contributors * * SPDX-License-Identifier: Apache-2.0 * @@ -140,7 +140,7 @@ class FragmentDensityMap : public ApiVulkanSample vkb::DebugUtilsExtDebugUtils debug_utils; - std::unique_ptr sg_scene; + std::unique_ptr sg_scene; std::vector scene_data; diff --git a/samples/extensions/ray_tracing_extended/ray_tracing_extended.h b/samples/extensions/ray_tracing_extended/ray_tracing_extended.h index 7fc709e746..d7a0fcb0a3 100644 --- a/samples/extensions/ray_tracing_extended/ray_tracing_extended.h +++ b/samples/extensions/ray_tracing_extended/ray_tracing_extended.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2021-2025 Holochip Corporation +/* Copyright (c) 2021-2026 Holochip Corporation * * SPDX-License-Identifier: Apache-2.0 * @@ -197,10 +197,10 @@ class RaytracingExtended : public ApiVulkanSample RaytracingScene() = default; ~RaytracingScene() = default; RaytracingScene(vkb::core::DeviceC &device, const std::vector &scenesToLoad); - std::vector> scenes; - std::vector imageInfos; - std::vector models; - std::vector model_buffers; + std::vector> scenes; + std::vector imageInfos; + std::vector models; + std::vector model_buffers; }; std::unique_ptr raytracing_scene; diff --git a/samples/extensions/ray_tracing_invocation_reorder/ray_tracing_invocation_reorder.h b/samples/extensions/ray_tracing_invocation_reorder/ray_tracing_invocation_reorder.h index 598e58a181..ee23429193 100644 --- a/samples/extensions/ray_tracing_invocation_reorder/ray_tracing_invocation_reorder.h +++ b/samples/extensions/ray_tracing_invocation_reorder/ray_tracing_invocation_reorder.h @@ -193,10 +193,10 @@ class RaytracingInvocationReorder : public ApiVulkanSample RaytracingScene() = default; ~RaytracingScene() = default; RaytracingScene(vkb::core::DeviceC &device, const std::vector &scenesToLoad); - std::vector> scenes; - std::vector imageInfos; - std::vector models; - std::vector model_buffers; + std::vector> scenes; + std::vector imageInfos; + std::vector models; + std::vector model_buffers; }; std::unique_ptr raytracing_scene; diff --git a/samples/performance/async_compute/async_compute.cpp b/samples/performance/async_compute/async_compute.cpp index a1a5173c50..da93a5056f 100644 --- a/samples/performance/async_compute/async_compute.cpp +++ b/samples/performance/async_compute/async_compute.cpp @@ -825,7 +825,7 @@ std::unique_ptr create_async_compute() AsyncComputeSample::DepthMapSubpass::DepthMapSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, vkb::sg::Camera &camera) : + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera) : vkb::rendering::subpasses::ForwardSubpassC(render_context, std::move(vertex_shader), std::move(fragment_shader), scene, camera) { // PCF, so need depth bias to avoid (most) shadow acne. @@ -843,7 +843,7 @@ void AsyncComputeSample::DepthMapSubpass::draw(vkb::core::CommandBufferC &comman AsyncComputeSample::ShadowMapForwardSubpass::ShadowMapForwardSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, vkb::sg::Camera &camera, vkb::sg::Camera &shadow_camera_) : + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera, vkb::sg::Camera &shadow_camera_) : vkb::rendering::subpasses::ForwardSubpassC(render_context, std::move(vertex_shader), std::move(fragment_shader), scene, camera), shadow_camera(shadow_camera_) { diff --git a/samples/performance/async_compute/async_compute.h b/samples/performance/async_compute/async_compute.h index 5dd3b7fc46..9bd925d7c9 100644 --- a/samples/performance/async_compute/async_compute.h +++ b/samples/performance/async_compute/async_compute.h @@ -86,7 +86,7 @@ class AsyncComputeSample : public vkb::VulkanSampleC DepthMapSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera); virtual void draw(vkb::core::CommandBufferC &command_buffer) override; }; @@ -96,7 +96,7 @@ class AsyncComputeSample : public vkb::VulkanSampleC ShadowMapForwardSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera, vkb::sg::Camera &shadow_camera); void set_shadow_map(const vkb::core::ImageView *view, const vkb::core::Sampler *sampler); diff --git a/samples/performance/command_buffer_usage/command_buffer_usage.cpp b/samples/performance/command_buffer_usage/command_buffer_usage.cpp index 27b7cadd2b..17a256beba 100644 --- a/samples/performance/command_buffer_usage/command_buffer_usage.cpp +++ b/samples/performance/command_buffer_usage/command_buffer_usage.cpp @@ -256,7 +256,7 @@ void CommandBufferUsage::draw_renderpass(vkb::core::CommandBufferC &primary_comm CommandBufferUsage::ForwardSubpassSecondary::ForwardSubpassSecondary(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene_, + vkb::scene_graph::SceneC &scene_, vkb::sg::Camera &camera) : vkb::rendering::subpasses::ForwardSubpassC{render_context, std::move(vertex_shader), std::move(fragment_shader), scene_, camera} { diff --git a/samples/performance/command_buffer_usage/command_buffer_usage.h b/samples/performance/command_buffer_usage/command_buffer_usage.h index 1ba7875d62..1bff8197df 100644 --- a/samples/performance/command_buffer_usage/command_buffer_usage.h +++ b/samples/performance/command_buffer_usage/command_buffer_usage.h @@ -147,7 +147,7 @@ class CommandBufferUsage : public vkb::VulkanSampleC ForwardSubpassSecondary(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_source, vkb::ShaderSource &&fragment_source, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera); void draw(vkb::core::CommandBufferC &primary_command_buffer) override; diff --git a/samples/performance/constant_data/constant_data.h b/samples/performance/constant_data/constant_data.h index 2bf3270492..10669ab41a 100644 --- a/samples/performance/constant_data/constant_data.h +++ b/samples/performance/constant_data/constant_data.h @@ -108,7 +108,7 @@ class ConstantData : public vkb::VulkanSampleC ConstantDataSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera) : vkb::rendering::subpasses::ForwardSubpassC(render_context, std::move(vertex_shader), std::move(fragment_shader), scene, camera) {} @@ -129,7 +129,7 @@ class ConstantData : public vkb::VulkanSampleC PushConstantSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera) : ConstantDataSubpass(render_context, std::move(vertex_shader), std::move(fragment_shader), scene, camera) {} @@ -166,7 +166,7 @@ class ConstantData : public vkb::VulkanSampleC DescriptorSetSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera) : ConstantDataSubpass(render_context, std::move(vertex_shader), std::move(fragment_shader), scene, camera) {} @@ -203,7 +203,7 @@ class ConstantData : public vkb::VulkanSampleC BufferArraySubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera) : ConstantDataSubpass(render_context, std::move(vertex_shader), std::move(fragment_shader), scene, camera) {} diff --git a/samples/performance/multithreading_render_passes/multithreading_render_passes.cpp b/samples/performance/multithreading_render_passes/multithreading_render_passes.cpp index e849707f1b..d2885aff86 100644 --- a/samples/performance/multithreading_render_passes/multithreading_render_passes.cpp +++ b/samples/performance/multithreading_render_passes/multithreading_render_passes.cpp @@ -444,7 +444,7 @@ void MultithreadingRenderPasses::draw_main_pass(vkb::core::CommandBufferC &comma MultithreadingRenderPasses::MainSubpass::MainSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_source, vkb::ShaderSource &&fragment_source, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera, vkb::sg::Camera &shadowmap_camera, std::vector> &shadow_render_targets) : @@ -501,7 +501,7 @@ void MultithreadingRenderPasses::MainSubpass::draw(vkb::core::CommandBufferC &co MultithreadingRenderPasses::ShadowSubpass::ShadowSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_source, vkb::ShaderSource &&fragment_source, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera) : vkb::rendering::subpasses::GeometrySubpassC{render_context, std::move(vertex_source), std::move(fragment_source), scene, camera} { diff --git a/samples/performance/multithreading_render_passes/multithreading_render_passes.h b/samples/performance/multithreading_render_passes/multithreading_render_passes.h index d659283094..c6fac00d93 100644 --- a/samples/performance/multithreading_render_passes/multithreading_render_passes.h +++ b/samples/performance/multithreading_render_passes/multithreading_render_passes.h @@ -64,7 +64,7 @@ class MultithreadingRenderPasses : public vkb::VulkanSampleC ShadowSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_source, vkb::ShaderSource &&fragment_source, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera); protected: @@ -86,7 +86,7 @@ class MultithreadingRenderPasses : public vkb::VulkanSampleC MainSubpass(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_source, vkb::ShaderSource &&fragment_source, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera, vkb::sg::Camera &shadowmap_camera, std::vector> &shadow_render_targets); diff --git a/samples/performance/specialization_constants/specialization_constants.cpp b/samples/performance/specialization_constants/specialization_constants.cpp index f2ccb228bb..bf45fd9632 100644 --- a/samples/performance/specialization_constants/specialization_constants.cpp +++ b/samples/performance/specialization_constants/specialization_constants.cpp @@ -37,7 +37,7 @@ SpecializationConstants::SpecializationConstants() SpecializationConstants::ForwardSubpassCustomLights::ForwardSubpassCustomLights(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_shader, vkb::ShaderSource &&fragment_shader, - vkb::sg::Scene &scene_, + vkb::scene_graph::SceneC &scene_, vkb::sg::Camera &camera) : vkb::rendering::subpasses::ForwardSubpassC{render_context, std::move(vertex_shader), std::move(fragment_shader), scene_, camera} { diff --git a/samples/performance/specialization_constants/specialization_constants.h b/samples/performance/specialization_constants/specialization_constants.h index 351a9a9861..3818149794 100644 --- a/samples/performance/specialization_constants/specialization_constants.h +++ b/samples/performance/specialization_constants/specialization_constants.h @@ -55,7 +55,7 @@ class SpecializationConstants : public vkb::VulkanSampleC ForwardSubpassCustomLights(vkb::rendering::RenderContextC &render_context, vkb::ShaderSource &&vertex_source, vkb::ShaderSource &&fragment_source, - vkb::sg::Scene &scene, + vkb::scene_graph::SceneC &scene, vkb::sg::Camera &camera); virtual void prepare() override;