/* * Copyright (C) 2023 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 API_RENDER_IRENDERER_H #define API_RENDER_IRENDERER_H #include #include #include RENDER_BEGIN_NAMESPACE() class IRenderDataStoreManager; /** \addtogroup group_render_irenderer * @{ */ /** Rendering interface. * * Engine creates a single renderer. * 1. RenderFrame() should be called once per frame with a proper render node graphs. * or * 2 RenderDeferredFrame should be called once per frame. * * Render Node Graph: * Render node graph contains a definition of the rendering pipeline (render nodes that contain render passes). * A render node graph needs to be created before rendering can be done. * Render node graph can be created (and should be) created with json. * Json file is loaded with IRenderNodeGraphLoader and stored to RenderNodeGraphManager. * Render Data Store: * Render data store contains multiple managers that can store data that is accessable in render nodes. * * NOTE: render node graphs need to be unique per frame * The same render node graph cannot be send to rendering multiple times in a frame */ class IRenderer { public: IRenderer() = default; virtual ~IRenderer() = default; IRenderer(const IRenderer&) = delete; IRenderer& operator=(const IRenderer&) = delete; /** Render render node graphs. Should be called once a frame. Preferred method to call RenderFrame. * Render node graphs are run in input order. * @param renderNodeGraphs Multiple render node graph handles. */ virtual void RenderFrame(const BASE_NS::array_view renderNodeGraphs) = 0; /** Render deferred can be called multiple times a frame. * Creates a list of deferred render node graphs which will be rendered in order when calling * Can be called from multiple threads. * @param renderNodeGraphs Multiple render node graph handles. */ virtual void RenderDeferred(const BASE_NS::array_view renderNodeGraphs) = 0; /** Render deferred render node graphs. Should be called once a frame. * Renders deferred render node graphs in input order. */ virtual void RenderDeferredFrame() = 0; }; /** @} */ RENDER_END_NAMESPACE() #endif // API_RENDER_IRENDERER_H