/* * Copyright (c) 2024 Huawei Device Co., Ltd. * 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. */ #ifndef RENDER_NODE_DOTFIELD_RENDER_H #define RENDER_NODE_DOTFIELD_RENDER_H #include <3d/render/intf_render_node_scene_util.h> #include #include #include #include #include #include #include #include namespace RENDER_NS { class IRenderCommandList; class IRenderNodeContextManager; class IPipelineDescriptorSetBinder; } // namespace RENDER_NS namespace Dotfield { class RenderNodeDotfieldRender final : public RENDER_NS::IRenderNode { public: RenderNodeDotfieldRender() = default; ~RenderNodeDotfieldRender() override = default; void InitNode(RENDER_NS::IRenderNodeContextManager& renderNodeContextMgr) override; void PreExecuteFrame() override; void ExecuteFrame(RENDER_NS::IRenderCommandList& cmdList) override; ExecuteFlags GetExecuteFlags() const override { return 0U; } static constexpr BASE_NS::Uid UID { "4ce00e60-68c9-46c8-aea8-87c4e7994d27" }; static constexpr char const* TYPE_NAME = "RenderNodeDotfieldRender"; static constexpr RENDER_NS::IRenderNode::BackendFlags BACKEND_FLAGS = RENDER_NS::IRenderNode::BackendFlagBits::BACKEND_FLAG_BITS_DEFAULT; static constexpr RENDER_NS::IRenderNode::ClassType CLASS_TYPE = RENDER_NS::IRenderNode::ClassType::CLASS_TYPE_NODE; static RENDER_NS::IRenderNode* Create(); static void Destroy(RENDER_NS::IRenderNode* instance); private: void ParseRenderNodeInputs(); RENDER_NS::IRenderNodeContextManager* renderNodeContextMgr_ { nullptr }; CORE3D_NS::SceneRenderDataStores stores_; struct PsoData { RENDER_NS::RenderHandle psoHandle; RENDER_NS::PushConstant pushConstant; }; struct RenderBinders { RENDER_NS::IDescriptorSetBinder::Ptr set0; RENDER_NS::IDescriptorSetBinder::Ptr set1; }; void RenderData(RENDER_NS::IRenderNodeContextManager& renderNodeContextMgr, RENDER_NS::IRenderCommandList& cmdList); PsoData GetPsoData( RENDER_NS::IRenderNodeContextManager& renderNodeContextMgr, const RENDER_NS::RenderHandle& shaderHandle); BASE_NS::unordered_map shaderToPsoData_; RenderBinders binders_; RENDER_NS::RenderNodeHandles::InputRenderPass inputRenderPass_; RENDER_NS::RenderPass renderPass_; RENDER_NS::RenderHandle cameraUniformBufferHandle_; RENDER_NS::RenderHandle shaderHandle_; struct JsonInputs { RENDER_NS::RenderNodeGraphInputs::InputRenderPass renderPass; }; JsonInputs jsonInputs_; }; } // namespace Dotfield #endif // RENDER_NODE_DOTFIELD_SIMULATION_H