1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef CORE_UTIL_RENDER_UTIL_H
17 #define CORE_UTIL_RENDER_UTIL_H
18 
19 #include <3d/intf_graphics_context.h>
20 #include <3d/util/intf_render_util.h>
21 #include <core/namespace.h>
22 
23 RENDER_BEGIN_NAMESPACE()
24 class IRenderContext;
25 RENDER_END_NAMESPACE()
26 
27 CORE3D_BEGIN_NAMESPACE()
28 class IGraphicsContext;
29 class IEngine;
30 struct RenderCamera;
31 struct RenderScene;
32 
33 class RenderUtil : public IRenderUtil {
34 public:
35     explicit RenderUtil(IGraphicsContext& graphicsContext);
36     ~RenderUtil() override = default;
37 
38     RENDER_NS::RenderNodeGraphDesc GetRenderNodeGraphDesc(
39         const RenderScene& renderScene, const RenderCamera& renderCamera, const uint32_t flags) const override;
40     CameraRenderNodeGraphDescs GetRenderNodeGraphDescs(
41         const RenderScene& renderScene, const RenderCamera& renderCamera, const uint32_t flags) const override;
42     CameraRenderNodeGraphDescs GetRenderNodeGraphDescs(const RenderScene& renderScene, const RenderCamera& renderCamera,
43         const uint32_t flags, const BASE_NS::array_view<const RenderCamera> multiviewCameras) const override;
44 
45     RENDER_NS::RenderNodeGraphDesc GetRenderNodeGraphDesc(
46         const RenderScene& renderScene, const uint32_t flags) const override;
47     RENDER_NS::RenderNodeGraphDesc GetRenderNodeGraphDesc(
48         const RenderScene& renderScene, const BASE_NS::string& rngFile, const uint32_t flags) const override;
49 
50 private:
51     void InitRenderNodeGraphs();
52     RENDER_NS::RenderNodeGraphDesc SelectBaseDesc(const RenderCamera& renderCamera) const;
53     RENDER_NS::RenderNodeGraphDesc GetBasePostProcessDesc(const RenderCamera& renderCamera) const;
54 
55     RENDER_NS::IRenderContext& context_;
56     const RENDER_NS::DeviceBackendType backendType_ { RENDER_NS::DeviceBackendType::VULKAN };
57 
58     RENDER_NS::RenderNodeGraphDesc rngdScene_;
59     RENDER_NS::RenderNodeGraphDesc rngdCamLwrp_;
60     RENDER_NS::RenderNodeGraphDesc rngdCamLwrpMsaa_;
61     RENDER_NS::RenderNodeGraphDesc rngdCamLwrpMsaaDepth_;
62     RENDER_NS::RenderNodeGraphDesc rngdCamLwrpMsaaGles_;
63     RENDER_NS::RenderNodeGraphDesc rngdCamHdr_;
64     RENDER_NS::RenderNodeGraphDesc rngdCamHdrMsaa_;
65     RENDER_NS::RenderNodeGraphDesc rngdCamHdrMsaaDepth_;
66     RENDER_NS::RenderNodeGraphDesc rngdReflCam_;
67     RENDER_NS::RenderNodeGraphDesc rngdReflCamMsaa_;
68     RENDER_NS::RenderNodeGraphDesc rngdCamPrePass_;
69 
70     RENDER_NS::RenderNodeGraphDesc rngdDeferred_;
71 
72     RENDER_NS::RenderNodeGraphDesc rngdPostProcess_;
73 };
74 CORE3D_END_NAMESPACE()
75 
76 #endif // CORE_UTIL_RENDER_UTIL_H
77