CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
RendererTerrain.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
11
12#include "RendererRendering.hpp"
14
16
19
21
22namespace CeresEngine {
23
25
27
31 };
32
36
37
41 None = 0,
42
44 Transform = (1u << 0u),
45
47 Component = (1u << 1u),
48
50 UniformBuffer = (1u << 2u),
51
53 Flags = (1u << 3u),
54
56 All = 0xFFFF,
57 };
58
62
63
65 alignas(4) UInt32 type;
66
67 alignas(16) Vector3f position;
68
69 alignas(16) Matrix4f model;
70 alignas(16) Matrix4f invModel;
71
72 alignas(16) Matrix4f normalMatrix;
73 alignas(16) Matrix4f invNormalMatrix;
74 };
75
78
80 class RendererTerrain final : public TRendererSceneObject<RendererTerrain> {
83
84 private:
85 class Element;
86
89
92
95
98 bool mDirty = true;
99
102
105
108
111
112 bool mInitialized = false;
113
114 public:
118
122
123 public:
133
139 void prepare(RendererContext& context);
140
141 void draw(GPUCommandBuffer& commandBuffer);
142
143 public:
146
148 void setFlags(const RendererTerrainFlags& flags);
149
152
155
158
160 [[nodiscard]] const RendererTerrainInfo& getInfo() const { return mInfo; }
161
164
167
170
172
173 private:
212 };
213
254
255} // namespace CeresEngine
#define CE_FLAGS_OPERATORS(Enum)
Defines global operators for a Flags<Enum, Storage> implementation.
Definition Flags.hpp:216
#define CE_DECL_RENDERER_OBJECT(T)
Definition RendererObject.hpp:25
A retain-release type of smart pointer.
Definition SmartPtr.hpp:132
A GPU bindless buffer.
Definition GPUBufferObject.hpp:516
Definition GPUCommandBuffer.hpp:77
Definition GPUBufferObject.hpp:562
Definition GPUBufferObject.hpp:169
Definition GPUBufferObject.hpp:126
A element (usually a sub-mesh) visible on the screen.
Definition RendererRendering.hpp:18
The CeresEngine renderer.
Definition Renderer.hpp:35
An abstract class that represents a renderer material.
Definition RendererMaterial.hpp:31
A class that represents a scene inside the renderer.
Definition RendererScene.hpp:34
The rendering element for the terrain chunks.
Definition RendererTerrain.hpp:175
RendererTerrain & mTerrain
The owning terrain object.
Definition RendererTerrain.hpp:178
void draw(GPUCommandBuffer &commandBuffer) const final
Submits a draw command with the given renderer element.
Sphere getBoundingSphere() const final
Gets the renderable bounding sphere.
const GPUIndexBuffer & getIndexBuffer() const noexcept final
const RendererMeshPtr & getMesh() const noexcept
Definition RendererTerrain.hpp:201
RendererMeshPtr mMesh
Definition RendererTerrain.hpp:181
Vector3i mPosition
Definition RendererTerrain.hpp:180
AABox getBoundingBox() const final
Gets the renderable bounding box.
const GPUVertexBuffer & getVertexBuffer() const noexcept final
Element(RendererTerrain &terrain, MeshPtr mesh)
const RendererMaterial & getMaterial() const noexcept final
The material for the render element.
Definition RendererTerrain.hpp:204
const GPUVertexFormat & getVertexFormat() const noexcept final
Returns the vertex format which the graphics pipeline must be compatible with.
A class that represents a terrain inside the renderer.
Definition RendererTerrain.hpp:80
bool mInitialized
Definition RendererTerrain.hpp:112
const SPtr< RendererMaterial > & getMaterial() const noexcept
Definition RendererTerrain.hpp:169
RendererTerrain(RendererTerrainManager &manager, RendererScene &scene)
Creates a new RendererTerrain.
RendererTerrainFlags mFlags
A set of flags that customize and represent the state of the object.
Definition RendererTerrain.hpp:91
GPUDynamicBindlessBuffer< RendererTerrainParams > mUniformBuffer
The uniform buffer storing the terrain GPU parameters used by the renderer.
Definition RendererTerrain.hpp:107
RendererTerrainDirtyFlags mDirtyFlags
A set of flags that represent the dirty portions of the object.
Definition RendererTerrain.hpp:94
void setFlags(const RendererTerrainFlags &flags)
A set of flags that customize and represent the state of the object.
RendererTerrainParams mParameters
The GPU parameters. Will be copied to the GPU uniform buffer.
Definition RendererTerrain.hpp:104
const RendererTerrainInfo & getInfo() const
A structure that holds renderer-specific information for the terrain.
Definition RendererTerrain.hpp:160
const GPUBindlessBuffer & getUniformBuffer() const
The uniform buffer storing the terrain GPU parameters used by the renderer.
Definition RendererTerrain.hpp:166
const RendererTerrainFlags & getFlags() const noexcept
A set of flags that customize and represent the state of the object.
Definition RendererTerrain.hpp:145
TerrainRenderableComponent mComponent
A copy of the latest terrain component.
Definition RendererTerrain.hpp:88
bool mDirty
If set to true, the terrain is dirty and needs to be synchronized from the entity.
Definition RendererTerrain.hpp:98
RendererTerrainInfo & getInfo()
A structure that holds renderer-specific information for the terrain.
Definition RendererTerrain.hpp:163
void prepare(RendererContext &context)
Prepares the terrain for the rendering of the current frame.
RendererTerrainInfo mInfo
A structure that holds renderer-specific information for the terrain.
Definition RendererTerrain.hpp:101
~RendererTerrain() noexcept final
Destroys the renderer terrain and releases any renderer (and RenderAPI)-related resources.
const Vector< UPtr< Element > > & getElements() const noexcept
Definition RendererTerrain.hpp:171
const RendererTerrainDirtyFlags & getDirtyFlags() const noexcept
A set of flags that represent the dirty portions of the object.
Definition RendererTerrain.hpp:151
void draw(GPUCommandBuffer &commandBuffer)
bool isDirty() const noexcept
If set to true, the terrain is dirty and needs to be synchronized from the entity.
Definition RendererTerrain.hpp:154
Vector< UPtr< Element > > mElements
Definition RendererTerrain.hpp:110
SPtr< RendererMaterial > mMaterial
Definition RendererTerrain.hpp:109
void markAsDirty(const RendererTerrainDirtyFlags &flags=RendererTerrainDirtyFlag::All) noexcept
If set to true, the terrain is dirty and needs to be synchronized from the entity.
void synchronize(const Transform &transform, const TerrainRenderableComponent &component)
Update the renderer terrain with data from a transform and the component.
A manager that controls all terrains currently registered with the renderer.
Definition RendererTerrain.hpp:216
Async prepare(RendererContext &context)
Prepares the terrains for the rendering of the current frame.
RendererTerrainManager(Renderer &renderer)
Creates a new instance of the RendererTerrainManager.
void markAsDirty(RendererTerrain *const terrain)
Marks the given terrain as dirty.
Vector< UPtr< RendererTerrain > > mTerrains
A vector of all registered terrains.
Definition RendererTerrain.hpp:225
UniformBufferType mUniformBuffer
The uniform buffer storing all terrain GPU parameters used by the renderer.
Definition RendererTerrain.hpp:229
~RendererTerrainManager()
Destroys the RendererTerrainManager and releases all terrains objects managed by it.
Template class to help implement sub-classes of RendererSceneObject.
Definition RendererSceneObject.hpp:47
Template class to help implement sub-classes of RendererSceneObjectManager.
Definition RendererSceneObject.hpp:81
Definition Application.hpp:19
SPtr< Mesh > MeshPtr
Definition Forward.hpp:17
RendererTerrainFlag
Flags that can be either set by the renderer or by the user to customize the behavior of the terrain.
Definition RendererTerrain.hpp:30
std::shared_ptr< T > SPtr
SPtr is a smart pointer that retains shared ownership of an object through a pointer.
Definition SmartPtr.hpp:37
cti::continuable< Args... > Async
Defines a non-copyable continuation type which uses the function2 backend for type erasure.
Definition Async.hpp:22
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
@ UniformBuffer
Uniform buffer (or constant buffer) resource.
std::uint32_t UInt32
Definition DataTypes.hpp:23
@ Transform
Indicates that the object transform is dirty.
@ All
Specifies all shader stages.
auto transform(Container &container, Transform &&transform)
Returns an iterable object that iterates over the values of the container and applies transform to ev...
Definition Iterator.hpp:436
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
RendererTerrainDirtyFlag
Flags that can be either set by the renderer or by the user to customize the behavior of the mesh.
Definition RendererTerrain.hpp:39
@ None
Special value that represents a clean (i.e. non-dirty) object.
@ All
Special value that represents a dirty object with all parts dirty.
Components serve as the base for data storage for an entity.
Definition Component.hpp:68
Definition GPUVertexFormat.hpp:77
A structure that contains context given by the renderer to render it's objects.
Definition Renderer.hpp:252
A structure that holds renderer-specific information for the terrain.
Definition RendererTerrain.hpp:77
A structure that mirrors the GPU uniform data for the terrain.
Definition RendererTerrain.hpp:64
The Terrain component.
Definition TerrainRenderable.hpp:23