Initiative to rework OvRendering to improve its modularity and prepare the field for upcoming work (such as shadow casting).
This work includes:
Partially moving Material from OvCore to OvRendering (The serialization part of material remains in OvCore for now)
Moved driver-specific features from Renderer to Driver
Improved StateMask for materials (take up less memory)
Renderer functionalities split into "extensions" called "render features"
Added a render pass system (custom drawing-logic executed in a per-determined order)
Implemented renderer for scene rendering: SceneRenderer (ECS-specific)
Simplified renderer usage to avoid redundant code between OvGame, OvEditor and OvCore.
Added support for multiple FBOs
Adding entities alongside the Light entity, such as Camera (moved from LowRenderer, and Drawable, which represent an entity that can be visually drawn).
Added PipelineState, which is an 8 bytes struct that contains information about the graphics context state. Rendering functions pass instances of PipelineState to each other by copy, allowing for hierarchical pipeline state updates, i.e. each scope can modify the pipeline state without affecting the level above. Lowest level functions (driver-level) are responsible for requesting the graphics backend to update its internal state. The driver also ensure that no unnecessary state change is performed (this is done by keeping track of the current state of the context, and comparing state change requests with the current state).
On-going initiative to hide the graphics backend implementation to the rest of the engine. The HAL namespace with a GraphicsAPI class has been added. This doesn't cover resources such a buffers, textures, and shaders, which individually hold graphics API-specific code (this code should be moved to the HAL in the future).
Added support for orbit and focus camera actions in Asset View
Description
Initiative to rework
OvRendering
to improve its modularity and prepare the field for upcoming work (such as shadow casting).This work includes:
Material
fromOvCore
toOvRendering
(The serialization part of material remains inOvCore
for now)Renderer
toDriver
StateMask
for materials (take up less memory)SceneRenderer
(ECS-specific)OvGame
,OvEditor
andOvCore
.Light
entity, such asCamera
(moved fromLowRenderer
, andDrawable
, which represent an entity that can be visually drawn).PipelineState
, which is an 8 bytes struct that contains information about the graphics context state. Rendering functions pass instances ofPipelineState
to each other by copy, allowing for hierarchical pipeline state updates, i.e. each scope can modify the pipeline state without affecting the level above. Lowest level functions (driver-level) are responsible for requesting the graphics backend to update its internal state. The driver also ensure that no unnecessary state change is performed (this is done by keeping track of the current state of the context, and comparing state change requests with the current state).HAL
namespace with aGraphicsAPI
class has been added. This doesn't cover resources such a buffers, textures, and shaders, which individually hold graphics API-specific code (this code should be moved to the HAL in the future).Related Issues
Screenshots
Renderer updated architecture