// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "dawnlibs.hpp" #include "scene/components/display/Material.hpp" #include "scene/components/display/MeshRenderer.hpp" #include "scene/components/display/Camera.hpp" #include "scene/components/scene/SubSceneController.hpp" #include "ui/UIComponent.hpp" namespace Dawn { class RenderManager; class RenderPipeline { private: int_fast16_t renderId = -1; public: RenderManager *renderManager; /** * Constructs a new RenderPipeline. Render Pipelines are my attempt to * create both a flexible, but standard way to allow the individual games * to decide how they want to render the common scene-item models. * * @param renderManager Parent render manager this pipeline belongs to. */ RenderPipeline(RenderManager *renderManager); /** * Initialize the render pipeline. */ virtual void init(); /** * Renders the games' currently active scene, and all of its' cameras. */ virtual void render(); /** * Render a specific scene, usually just called for the currently active * scene, but in future this could include sub-scenes. * * @param scene Scene to render. */ virtual void renderScene(Scene *scene); /** * Render a specific camera on a specific scene. * * @param scene Scene to render. * @param camera Camera within the scene to render. */ virtual void renderSceneCamera(Scene *scene, Camera *camera); /** * Cleanup a render pipeline that has been initialized. */ virtual ~RenderPipeline(); }; }