Skip to content

Commit 0eabdfc

Browse files
authored
Merge pull request #580 from sdslabs/transform-system
Transform System
2 parents 602e180 + 337653f commit 0eabdfc

File tree

9 files changed

+201
-175
lines changed

9 files changed

+201
-175
lines changed

rootex/core/resource_files/basic_material_resource_file.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ void BasicMaterialResourceFile::bindSamplers()
144144

145145
void BasicMaterialResourceFile::bindVSCB()
146146
{
147-
RenderingDevice::GetSingleton()->editBuffer(PerModelVSCBData(RenderSystem::GetSingleton()->getCurrentMatrix()), m_VSCB.Get());
147+
RenderingDevice::GetSingleton()->editBuffer(PerModelVSCBData(TransformSystem::GetSingleton()->getCurrentMatrix()), m_VSCB.Get());
148148
RenderingDevice::GetSingleton()->setVSCB(PER_OBJECT_VS_CPP, 1, m_VSCB.GetAddressOf());
149149
}
150150

rootex/core/resource_files/custom_material_resource_file.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ void CustomMaterialResourceFile::bindSamplers()
239239

240240
void CustomMaterialResourceFile::bindVSCB()
241241
{
242-
RenderingDevice::GetSingleton()->editBuffer(PerModelVSCBData(RenderSystem::GetSingleton()->getCurrentMatrix()), m_VSCB.Get());
242+
RenderingDevice::GetSingleton()->editBuffer(PerModelVSCBData(TransformSystem::GetSingleton()->getCurrentMatrix()), m_VSCB.Get());
243243
RenderingDevice::GetSingleton()->setVSCB(PER_OBJECT_VS_CPP, 1, m_VSCB.GetAddressOf());
244244
}
245245

rootex/core/resource_files/decal_material_resource_file.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void DecalMaterialResourceFile::bindSamplers()
8989

9090
void DecalMaterialResourceFile::bindVSCB()
9191
{
92-
RenderingDevice::GetSingleton()->editBuffer(PerModelVSCBData(RenderSystem::GetSingleton()->getCurrentMatrix()), m_VSCB.Get());
92+
RenderingDevice::GetSingleton()->editBuffer(PerModelVSCBData(TransformSystem::GetSingleton()->getCurrentMatrix()), m_VSCB.Get());
9393
RenderingDevice::GetSingleton()->setVSCB(PER_OBJECT_VS_CPP, 1, m_VSCB.GetAddressOf());
9494
}
9595

rootex/framework/components/visual/model/renderable_component.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ bool RenderableComponent::setupEntities()
4343

4444
bool RenderableComponent::preRender(float deltaMilliseconds)
4545
{
46-
RenderSystem::GetSingleton()->pushMatrixOverride(getTransformComponent()->getAbsoluteTransform());
46+
TransformSystem::GetSingleton()->pushMatrixOverride(getTransformComponent()->getAbsoluteTransform());
4747
return true;
4848
}
4949

@@ -62,7 +62,7 @@ void RenderableComponent::render(float viewDistance)
6262

6363
void RenderableComponent::postRender()
6464
{
65-
RenderSystem::GetSingleton()->popMatrix();
65+
TransformSystem::GetSingleton()->popMatrix();
6666
}
6767

6868
bool RenderableComponent::addAffectingStaticLight(SceneID ID)

rootex/framework/components/visual/model/sprite_component.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ bool SpriteComponent::preRender(float deltaMilliseconds)
6767
billboardMatrix.Up(billboardMatrix.Up() * scaling.y);
6868
billboardMatrix.Backward(billboardMatrix.Backward() * scaling.z);
6969

70-
RenderSystem::GetSingleton()->pushMatrixOverride(billboardMatrix);
70+
TransformSystem::GetSingleton()->pushMatrixOverride(billboardMatrix);
7171
}
7272

7373
return true;
@@ -77,7 +77,7 @@ void SpriteComponent::postRender()
7777
{
7878
if (m_IsBillboarded)
7979
{
80-
RenderSystem::GetSingleton()->popMatrix();
80+
TransformSystem::GetSingleton()->popMatrix();
8181
}
8282
ModelComponent::postRender();
8383
}

rootex/framework/systems/render_system.cpp

Lines changed: 3 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ RenderSystem::RenderSystem()
2929
m_Binder.bind(RootexEvents::OpenedScene, this, &RenderSystem::onOpenedScene);
3030

3131
m_Camera = SceneLoader::GetSingleton()->getRootScene()->getEntity().getComponent<CameraComponent>();
32-
m_TransformationStack.push_back(Matrix::Identity);
3332

3433
m_LineMaterial = ResourceLoader::CreateBasicMaterialResourceFile("rootex/assets/materials/line.basic.rmat");
3534
m_CurrentFrameLines.m_Endpoints.reserve(LINE_MAX_VERTEX_COUNT * LINE_VERTEX_COUNT * 3);
@@ -68,54 +67,7 @@ void RenderSystem::setConfig(const SceneSettings& sceneSettings)
6867

6968
setCamera(camera);
7069

71-
calculateTransforms(SceneLoader::GetSingleton()->getRootScene());
72-
}
73-
74-
void RenderSystem::calculateTransforms(Scene* scene)
75-
{
76-
Entity& entity = scene->getEntity();
77-
if (TransformComponent* transform = entity.getComponent<TransformComponent>())
78-
{
79-
int passDown = transform->getPassDowns();
80-
81-
if (passDown == (int)TransformPassDown::All)
82-
{
83-
pushMatrix(transform->getLocalTransform());
84-
}
85-
else
86-
{
87-
Matrix matrix = Matrix::Identity;
88-
if (passDown & (int)TransformPassDown::Position)
89-
{
90-
matrix = Matrix::CreateTranslation(transform->getPosition()) * matrix;
91-
}
92-
if (passDown & (int)TransformPassDown::Rotation)
93-
{
94-
matrix = Matrix::CreateFromQuaternion(transform->getRotation()) * matrix;
95-
}
96-
if (passDown & (int)TransformPassDown::Scale)
97-
{
98-
matrix = Matrix::CreateScale(transform->getScale()) * matrix;
99-
}
100-
pushMatrix(matrix);
101-
}
102-
}
103-
else
104-
{
105-
pushMatrix(Matrix::Identity);
106-
}
107-
108-
for (auto& child : scene->getChildren())
109-
{
110-
Entity& childEntity = child->getEntity();
111-
if (TransformComponent* childTransform = childEntity.getComponent<TransformComponent>())
112-
{
113-
childTransform->setParentAbsoluteTransform(getCurrentMatrix());
114-
}
115-
116-
calculateTransforms(child.get());
117-
}
118-
popMatrix();
70+
TransformSystem::GetSingleton()->calculateTransforms(SceneLoader::GetSingleton()->getRootScene());
11971
}
12072

12173
void RenderSystem::renderPassRender(float deltaMilliseconds, RenderPass renderPass)
@@ -219,7 +171,7 @@ void RenderSystem::update(float deltaMilliseconds)
219171
}
220172
{
221173
ZoneNamedN(absoluteTransform, "Absolute Transformations", true);
222-
calculateTransforms(SceneLoader::GetSingleton()->getRootScene());
174+
TransformSystem::GetSingleton()->calculateTransforms(SceneLoader::GetSingleton()->getRootScene());
223175
}
224176
{
225177
ZoneNamedN(stateSet, "Render PlayerState Reset", true);
@@ -423,21 +375,6 @@ void RenderSystem::submitCone(const Matrix& transform, const float& height, cons
423375
submitLine(center, end - right);
424376
}
425377

426-
void RenderSystem::pushMatrix(const Matrix& transform)
427-
{
428-
m_TransformationStack.push_back(transform * m_TransformationStack.back());
429-
}
430-
431-
void RenderSystem::pushMatrixOverride(const Matrix& transform)
432-
{
433-
m_TransformationStack.push_back(transform);
434-
}
435-
436-
void RenderSystem::popMatrix()
437-
{
438-
m_TransformationStack.pop_back();
439-
}
440-
441378
void RenderSystem::enableWireframeRasterizer()
442379
{
443380
RenderingDevice::GetSingleton()->setRSType(RenderingDevice::RasterizerState::Wireframe);
@@ -510,7 +447,7 @@ void RenderSystem::setPerFramePSCBs(const Color& fogColor)
510447

511448
void RenderSystem::setPerScenePSCBs()
512449
{
513-
calculateTransforms(SceneLoader::GetSingleton()->getRootScene());
450+
TransformSystem::GetSingleton()->calculateTransforms(SceneLoader::GetSingleton()->getRootScene());
514451
updateStaticLights();
515452
}
516453

@@ -556,11 +493,6 @@ void RenderSystem::restoreCamera()
556493
}
557494
}
558495

559-
const Matrix& RenderSystem::getCurrentMatrix() const
560-
{
561-
return m_TransformationStack.back();
562-
}
563-
564496
Variant RenderSystem::onOpenedScene(const Event* event)
565497
{
566498
updatePerSceneBinds();
Lines changed: 88 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,88 @@
1-
#pragma once
2-
3-
#include "core/renderer/renderer.h"
4-
#include "core/renderer/render_pass.h"
5-
#include "core/resource_files/basic_material_resource_file.h"
6-
#include "main/window.h"
7-
#include "framework/ecs_factory.h"
8-
#include "framework/scene.h"
9-
#include "framework/system.h"
10-
#include "framework/components/visual/camera_component.h"
11-
#include "components/visual/model/model_component.h"
12-
#include "components/visual/model/animated_model_component.h"
13-
#include "components/visual/model/sprite_component.h"
14-
15-
#include "ASSAO/ASSAO.h"
16-
17-
/// Responsible for handling all the rendering in the editor.
18-
class RenderSystem : public System
19-
{
20-
EventBinder<RenderSystem> m_Binder;
21-
22-
struct LineRequests
23-
{
24-
Vector<float> m_Endpoints;
25-
Vector<unsigned short> m_Indices;
26-
};
27-
28-
CameraComponent* m_Camera;
29-
30-
Ptr<Renderer> m_Renderer;
31-
Vector<Matrix> m_TransformationStack;
32-
33-
Ref<BasicMaterialResourceFile> m_LineMaterial;
34-
LineRequests m_CurrentFrameLines;
35-
36-
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFrameVSCB;
37-
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerCameraChangeVSCB;
38-
39-
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerCameraChangePSCB;
40-
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFrameCustomPSCB;
41-
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFramePSCB;
42-
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerScenePSCB;
43-
44-
bool m_IsEditorRenderPassEnabled;
45-
46-
RenderSystem();
47-
RenderSystem(RenderSystem&) = delete;
48-
49-
void renderPassRender(float deltaMilliseconds, RenderPass renderPass);
50-
51-
Variant onOpenedScene(const Event* event);
52-
53-
public:
54-
static RenderSystem* GetSingleton();
55-
56-
void setConfig(const SceneSettings& sceneSettings) override;
57-
void update(float deltaMilliseconds) override;
58-
void renderLines();
59-
60-
void submitLine(const Vector3& from, const Vector3& to);
61-
62-
void submitBox(const Vector3& min, const Vector3& max);
63-
void submitSphere(const Vector3& center, const float& radius);
64-
void submitCone(const Matrix& transform, const float& height, const float& radius);
65-
66-
void recoverLostDevice();
67-
68-
void setCamera(CameraComponent* camera);
69-
void restoreCamera();
70-
71-
void calculateTransforms(Scene* scene);
72-
void pushMatrix(const Matrix& transform);
73-
void pushMatrixOverride(const Matrix& transform);
74-
void popMatrix();
75-
76-
void enableWireframeRasterizer();
77-
void resetDefaultRasterizer();
78-
79-
void setPerCameraVSCBs();
80-
void setPerFrameVSCBs(float fogStart, float fogEnd);
81-
void setPerCameraChangePSCBs();
82-
void setPerFramePSCBs(const Color& fogColor);
83-
void setPerScenePSCBs();
84-
void updateStaticLights();
85-
void updatePerSceneBinds();
86-
87-
void setIsEditorRenderPass(bool enabled) { m_IsEditorRenderPassEnabled = enabled; }
88-
89-
void enableLineRenderMode();
90-
void resetRenderMode();
91-
92-
CameraComponent* getCamera() const { return m_Camera; }
93-
const Matrix& getCurrentMatrix() const;
94-
Renderer* getRenderer() const { return m_Renderer.get(); }
95-
96-
void draw() override;
97-
};
1+
#pragma once
2+
3+
#include "core/renderer/renderer.h"
4+
#include "core/renderer/render_pass.h"
5+
#include "core/resource_files/basic_material_resource_file.h"
6+
#include "main/window.h"
7+
#include "framework/components/visual/camera_component.h"
8+
#include "components/visual/model/model_component.h"
9+
#include "components/visual/model/animated_model_component.h"
10+
#include "components/visual/model/sprite_component.h"
11+
#include "transform_system.h"
12+
13+
#include "ASSAO/ASSAO.h"
14+
15+
/// Responsible for handling all the rendering in the editor.
16+
class RenderSystem : public System
17+
{
18+
EventBinder<RenderSystem> m_Binder;
19+
20+
struct LineRequests
21+
{
22+
Vector<float> m_Endpoints;
23+
Vector<unsigned short> m_Indices;
24+
};
25+
26+
CameraComponent* m_Camera;
27+
28+
Ptr<Renderer> m_Renderer;
29+
30+
Ref<BasicMaterialResourceFile> m_LineMaterial;
31+
LineRequests m_CurrentFrameLines;
32+
33+
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFrameVSCB;
34+
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerCameraChangeVSCB;
35+
36+
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerCameraChangePSCB;
37+
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFrameCustomPSCB;
38+
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFramePSCB;
39+
Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerScenePSCB;
40+
41+
bool m_IsEditorRenderPassEnabled;
42+
43+
RenderSystem();
44+
RenderSystem(RenderSystem&) = delete;
45+
46+
void renderPassRender(float deltaMilliseconds, RenderPass renderPass);
47+
48+
Variant onOpenedScene(const Event* event);
49+
50+
public:
51+
static RenderSystem* GetSingleton();
52+
53+
void setConfig(const SceneSettings& sceneSettings) override;
54+
void update(float deltaMilliseconds) override;
55+
void renderLines();
56+
57+
void submitLine(const Vector3& from, const Vector3& to);
58+
59+
void submitBox(const Vector3& min, const Vector3& max);
60+
void submitSphere(const Vector3& center, const float& radius);
61+
void submitCone(const Matrix& transform, const float& height, const float& radius);
62+
63+
void recoverLostDevice();
64+
65+
void setCamera(CameraComponent* camera);
66+
void restoreCamera();
67+
68+
void enableWireframeRasterizer();
69+
void resetDefaultRasterizer();
70+
71+
void setPerCameraVSCBs();
72+
void setPerFrameVSCBs(float fogStart, float fogEnd);
73+
void setPerCameraChangePSCBs();
74+
void setPerFramePSCBs(const Color& fogColor);
75+
void setPerScenePSCBs();
76+
void updateStaticLights();
77+
void updatePerSceneBinds();
78+
79+
void setIsEditorRenderPass(bool enabled) { m_IsEditorRenderPassEnabled = enabled; }
80+
81+
void enableLineRenderMode();
82+
void resetRenderMode();
83+
84+
CameraComponent* getCamera() const { return m_Camera; }
85+
Renderer* getRenderer() const { return m_Renderer.get(); }
86+
87+
void draw() override;
88+
};

0 commit comments

Comments
 (0)