/* * 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_IRENDER_CONTEXT_H #define API_RENDER_IRENDER_CONTEXT_H #include #include #include #include #include #include RENDER_BEGIN_NAMESPACE() class IRenderDataStoreManager; class IRenderNodeGraphManager; class IRenderer; class IRenderUtil; /** * RenderResultCode */ enum class RenderResultCode : uint32_t { RENDER_SUCCESS = 0, RENDER_ERROR = 1, }; /** * VersionInfo */ struct VersionInfo { /** Name, default is "no_name" */ BASE_NS::string name { "no_name" }; /** Major number of version */ uint32_t versionMajor { 0 }; /** Minor number of version */ uint32_t versionMinor { 0 }; /** Patch number of version */ uint32_t versionPatch { 0 }; }; /** * RenderCreateInfo */ struct RenderCreateInfo { /** Application version info */ VersionInfo applicationInfo; /** Device create info */ DeviceCreateInfo deviceCreateInfo; }; /** * IRenderContext interface for accessing managers and renderer. * Device must be created to access valid renderer, render node graph manager, and render data store manager. */ class IRenderContext : public CORE_NS::IClassFactory { public: static constexpr auto UID = BASE_NS::Uid { "c8d8650b-efac-4e04-8e66-e12b35d2749e" }; using Ptr = BASE_NS::refcnt_ptr; /** Init, create device for render use. * @param createInfo Device creation info. */ virtual RenderResultCode Init(const RenderCreateInfo& createInfo) = 0; /** Get active device. */ virtual IDevice& GetDevice() const = 0; /** Get rendererer */ virtual IRenderer& GetRenderer() const = 0; /** Get render node graph manager */ virtual IRenderNodeGraphManager& GetRenderNodeGraphManager() const = 0; /** Get render data store manager */ virtual IRenderDataStoreManager& GetRenderDataStoreManager() const = 0; /** Get render utilities */ virtual IRenderUtil& GetRenderUtil() const = 0; /** Get engine */ virtual CORE_NS::IEngine& GetEngine() const = 0; /** Get version */ virtual BASE_NS::string_view GetVersion() = 0; protected: IRenderContext() = default; virtual ~IRenderContext() = default; }; inline constexpr BASE_NS::string_view GetName(const IRenderContext*) { return "IRenderContext"; } RENDER_END_NAMESPACE() #endif // API_RENDER_IRENDER_CONTEXT_H