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 API_3D_UTIL_RENDER_UTIL_H 17 #define API_3D_UTIL_RENDER_UTIL_H 18 19 #include <3d/namespace.h> 20 #include <3d/render/render_data_defines_3d.h> 21 #include <render/nodecontext/intf_render_node_graph_manager.h> 22 23 CORE3D_BEGIN_NAMESPACE() 24 struct RenderCamera; 25 struct RenderScene; 26 /** @ingroup group_util_irenderutil 27 * @{ 28 */ 29 /** Interface for helper class to to create 3D rendering related objects etc. 30 */ 31 class IRenderUtil { 32 public: 33 /** Create camera render node graph desc. 34 * Camera ids are combined to render node names with render scene name. 35 * If multiple ECS are used the render scene data store name needs to be unique. 36 * @param renderScene Render camera. 37 * @param renderCamera Render camera. 38 * @param flags Reserved for later use. 39 * @return RenderNodeGraphDesc for a given render camera. 40 */ 41 virtual RENDER_NS::RenderNodeGraphDesc GetRenderNodeGraphDesc( 42 const RenderScene& renderScene, const RenderCamera& renderCamera, const uint32_t flags) const = 0; 43 44 /* Camera render node graph descs */ 45 struct CameraRenderNodeGraphDescs { 46 /* Camera render node graph desc */ 47 RENDER_NS::RenderNodeGraphDesc camera; 48 /* Camera based post process render node graph desc */ 49 RENDER_NS::RenderNodeGraphDesc postProcess; 50 /* Multi-view camera count */ 51 uint32_t multiViewCameraCount { 0U }; 52 /* Multi-view camera post processes */ 53 RENDER_NS::RenderNodeGraphDesc 54 multiViewCameraPostProcesses[RenderSceneDataConstants::MAX_MULTI_VIEW_LAYER_CAMERA_COUNT]; 55 }; 56 /** Create camera render node graph descs. (Create desc for camera and post process if any) 57 * Camera ids are combined to render node names with render scene name. 58 * If multiple ECS are used the render scene data store name needs to be unique. 59 * @param renderScene Render camera. 60 * @param renderCamera Render camera. 61 * @param flags Reserved for later use. 62 * @return RenderNodeGraphDescs for a given render camera. 63 */ 64 virtual CameraRenderNodeGraphDescs GetRenderNodeGraphDescs( 65 const RenderScene& renderScene, const RenderCamera& renderCamera, const uint32_t flags) const = 0; 66 67 /** Create camera render node graph descs. (Create desc for camera and post process if any) 68 * Camera ids are combined to render node names with render scene name. 69 * If multiple ECS are used the render scene data store name needs to be unique. 70 * Processes multi-view cameras 71 * @param renderScene Render camera. 72 * @param renderCamera Render camera. 73 * @param flags Reserved for later use. 74 * @param multiviewCameras when multi-view enabled in main camera. 75 * @return RenderNodeGraphDescs for a given render camera. 76 */ 77 virtual CameraRenderNodeGraphDescs GetRenderNodeGraphDescs(const RenderScene& renderScene, 78 const RenderCamera& renderCamera, const uint32_t flags, 79 const BASE_NS::array_view<const RenderCamera> multiviewCameras) const = 0; 80 81 /** Create scene render node graph desc. Render scene naming will be used for uniqueness. 82 * @param renderScene Render scene. 83 * @param flags Reserved for later use. 84 * @return RenderNodeGraphDesc for a given render scene. 85 */ 86 virtual RENDER_NS::RenderNodeGraphDesc GetRenderNodeGraphDesc( 87 const RenderScene& renderScene, const uint32_t flags) const = 0; 88 89 /** Create scene render node graph desc. Render scene naming will be used for uniqueness. 90 * @param renderScene Render scene. 91 * @param rngFile Custom rng file which will be patched with scene ids. 92 * @param flags Reserved for later use. 93 * @return RenderNodeGraphDesc for a given render scene. 94 */ 95 virtual RENDER_NS::RenderNodeGraphDesc GetRenderNodeGraphDesc( 96 const RenderScene& renderScene, const BASE_NS::string& rngFile, const uint32_t flags) const = 0; 97 98 protected: 99 IRenderUtil() = default; 100 virtual ~IRenderUtil() = default; 101 }; 102 /** @} */ 103 CORE3D_END_NAMESPACE() 104 105 #endif // API_3D_UTIL_RENDER_UTIL_H 106