Skip to content

Commit c6ac10a

Browse files
committed
Fix compilation errors + continue rerouting model rendering
But tests fail.
1 parent ec58ee4 commit c6ac10a

15 files changed

Lines changed: 107 additions & 41 deletions

File tree

3DRadSpace/3DRadSpace_Editor_WindowsDX11/Frontend/AssetRenderer.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include <Engine3DRadSpace\Graphics\Model3D.hpp>
33
#include <Engine3DRadSpace\Math\Matrix4x4.hpp>
44
#include <Engine3DRadSpace\Graphics\SpriteBatch.hpp>
5+
#include <Engine3DRadSpace/Core/IGame.hpp>
6+
#include <Engine3DRadSpace/Graphics\Rendering/RenderingManager.hpp>
57

68
using namespace Engine3DRadSpace;
79
using namespace Engine3DRadSpace::Content;
@@ -25,6 +27,8 @@ template<> bool AssetRenderer(IGraphicsDevice *device, const std::string &imageP
2527

2628
auto model = modelAsset->Get();
2729

30+
auto renderer = Rendering::RenderingManager::CreateForward(device);
31+
2832
if(device && model)
2933
{
3034
auto boundingSphere = model->GetBoundingSphere();
@@ -33,8 +37,8 @@ template<> bool AssetRenderer(IGraphicsDevice *device, const std::string &imageP
3337
for (auto&& n : iota(0, 3))
3438
{
3539
cmd->Clear(Colors::Gray);
36-
model->Draw(
37-
Matrix4x4() *
40+
41+
model->SetTransform(
3842
Matrix4x4::CreateLookAtView(
3943
boundingSphere.Center + ((boundingSphere.Radius + 0.5f) *
4044
Vector3(
@@ -44,10 +48,13 @@ template<> bool AssetRenderer(IGraphicsDevice *device, const std::string &imageP
4448
)),
4549
Vector3::Zero(),
4650
Vector3::UnitY()
47-
) *
51+
),
4852
Matrix4x4::CreatePerspectiveProjection(4.f / 3.f, 65, 0.01f, 500.0f)
4953
);
5054

55+
56+
renderer->Draw(model, Rendering::RenderPassType::OpaqueNoShadow);
57+
5158
cmd->Present();
5259
}
5360

3DRadSpace/Engine3DRadSpace/Core/IGame.hpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,38 @@ namespace Engine3DRadSpace
2727
_services[typeid(T)] = service;
2828
}
2929

30+
/// <summary>
31+
/// Gets the service of the given type. If the service is not found, nullptr is returned.
32+
/// </summary>
33+
/// <param name="type">Type of the service to get.</param>
34+
/// <returns>Pointer to the service of the given type, or nullptr if not found.</returns>
3035
IService* GetService(const std::type_index &type);
3136

37+
/// <summary>
38+
/// Gets the service of type T. If the service is not found, nullptr is returned.
39+
/// </summary>
40+
/// <typeparam name="T">Type of the service to get.</typeparam>
41+
/// <param name="dummy">A dummy parameter to deduce the type T.</param>
42+
/// <returns>Pointer to the service of type T, or nullptr if not found.</returns>
3243
template<typename T>
3344
T* GetService(Tag<T> dummy)
3445
{
3546
(void)dummy;
3647
return static_cast<T*>(GetService(typeid(T)));
3748
}
3849

50+
/// <summary>
51+
/// Requires a service of the given type. If the service is not found, it is attempted to be created.
52+
/// </summary>
53+
/// <param name="type">Type of the service to require.</param>
54+
/// <returns>Pointer to the service of the given type.</returns>
3955
virtual IService* RequireService(const std::type_index& type);
4056

57+
/// <summary>
58+
/// Requires a service of type T. If the service is not found, it is attempted to be created.
59+
/// </summary>
60+
/// <typeparam name="T">Type of the service to require.</typeparam>
61+
/// <returns>Pointer to the service of type T.</returns>
4162
template<typename T>
4263
T* RequireService(Tag<T> dummy)
4364
{

3DRadSpace/Engine3DRadSpace/FFI/Graphics/Model3D.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,6 @@ E3DRSP_BoundingSphere EDRSP_Model3D_GetBoundingSphere(E3DRSP_Model3D model)
4040
};
4141
}
4242

43-
void EDRSP_Model3D_SetTransform(E3DRSP_Model3D model, const E3DRSP_Matrix4x4* matrix4x4)
44-
{
45-
static_cast<Model3D*>(model)->SetTransform(*reinterpret_cast<const Math::Matrix4x4*>(matrix4x4));
46-
}
47-
4843
void EDRSP_Model3D_Destroy(E3DRSP_Model3D model)
4944
{
5045
delete static_cast<Model3D*>(model);

3DRadSpace/Engine3DRadSpace/FFI/Graphics/Model3D.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ extern "C"
1919
E3DRSP_FFI_EXPORT E3DRSP_BoundingSphere EDRSP_Model3D_GetBoundingSphere(E3DRSP_Model3D model);
2020
E3DRSP_FFI_EXPORT void EDRSP_Model3D_SetShader(E3DRSP_Model3D model, E3DRSP_Effect effect);
2121
E3DRSP_FFI_EXPORT void EDRSP_Model3D_SetShaders(E3DRSP_Model3D model, E3DRSP_Effect* effects, size_t numEffects);
22-
E3DRSP_FFI_EXPORT void EDRSP_Model3D_SetTransform(E3DRSP_Model3D model, const E3DRSP_Matrix4x4* matrix4x4);
2322
E3DRSP_FFI_EXPORT void EDRSP_Model3D_Destroy(E3DRSP_Model3D model);
2423
#ifdef __cplusplus
2524
}

3DRadSpace/Engine3DRadSpace/FFI/Graphics/ModelMeshPart.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,18 @@ E3DRSP_IIndexBuffer E3DRSP_ModelMeshPart_GetIndexBuffer(E3DRSP_ModelMeshPart mes
6262
return static_cast<ModelMeshPart*>(meshPart)->GetIndexBuffer();
6363
}
6464

65-
E3DRSP_Matrix4x4 E3DRSP_ModelMeshPart_GetTransform(E3DRSP_ModelMeshPart meshPart)
65+
E3DRSP_Matrix4x4 E3DRSP_ModelMeshPart_GetWorldTransform(E3DRSP_ModelMeshPart meshPart)
6666
{
6767
E3DRSP_Matrix4x4 result;
68-
auto transform = reinterpret_cast<ModelMeshPart*>(meshPart)->Transform;
68+
auto transform = reinterpret_cast<ModelMeshPart*>(meshPart)->World;
6969
memcpy_s(&result, sizeof(float) * 16, &transform, sizeof(Math::Matrix4x4));
7070

7171
return result;
7272
}
7373

74-
void E3DRSP_ModelMeshPart_SetTransform(E3DRSP_ModelMeshPart meshPart, const E3DRSP_Matrix4x4* transform)
74+
void E3DRSP_ModelMeshPart_SetWorldTransform(E3DRSP_ModelMeshPart meshPart, const E3DRSP_Matrix4x4* transform)
7575
{
76-
memcpy_s(&static_cast<ModelMeshPart*>(meshPart)->Transform, sizeof(Math::Matrix4x4), transform, sizeof(E3DRSP_Matrix4x4));
76+
memcpy_s(&static_cast<ModelMeshPart*>(meshPart)->World, sizeof(Math::Matrix4x4), transform, sizeof(E3DRSP_Matrix4x4));
7777
}
7878

7979
void E3DRSP_ModelMeshPart_Destroy(E3DRSP_ModelMeshPart meshPart)

3DRadSpace/Engine3DRadSpace/FFI/Graphics/ModelMeshPart.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ extern "C"
3838
E3DRSP_FFI_EXPORT E3DRSP_IVertexBuffer E3DRSP_ModelMeshPart_GetVertexBuffer(E3DRSP_ModelMeshPart meshPart);
3939
E3DRSP_FFI_EXPORT E3DRSP_IIndexBuffer E3DRSP_ModelMeshPart_GetIndexBuffer(E3DRSP_ModelMeshPart meshPart);
4040

41-
E3DRSP_FFI_EXPORT E3DRSP_Matrix4x4 E3DRSP_ModelMeshPart_GetTransform(E3DRSP_ModelMeshPart meshPart);
42-
E3DRSP_FFI_EXPORT void E3DRSP_ModelMeshPart_SetTransform(E3DRSP_ModelMeshPart meshPart, const E3DRSP_Matrix4x4* transform);
41+
E3DRSP_FFI_EXPORT E3DRSP_Matrix4x4 E3DRSP_ModelMeshPart_GetWorldTransform(E3DRSP_ModelMeshPart meshPart);
42+
E3DRSP_FFI_EXPORT void E3DRSP_ModelMeshPart_SetWorldTransform(E3DRSP_ModelMeshPart meshPart, const E3DRSP_Matrix4x4* transform);
4343

4444
E3DRSP_FFI_EXPORT void E3DRSP_ModelMeshPart_Destroy(E3DRSP_ModelMeshPart meshPart);
4545
#ifdef __cplusplus

3DRadSpace/Engine3DRadSpace/Graphics/Model3D.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,19 @@ void Model3D::SetTransform(const Matrix4x4& v, const Matrix4x4& p)
257257
}
258258
}
259259

260+
void Model3D::SetTransform(const Matrix4x4& m, const Matrix4x4& v, const Matrix4x4& p)
261+
{
262+
for (size_t i = 0; i < _meshes.size(); i++)
263+
{
264+
for (auto& meshPart : *_meshes[i].get())
265+
{
266+
meshPart->World = m;
267+
meshPart->View = v;
268+
meshPart->Projection = p;
269+
}
270+
}
271+
}
272+
260273
std::vector<std::unique_ptr<ModelMesh>>::iterator Model3D::begin()
261274
{
262275
return _meshes.begin();
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
#include "IRenderer.hpp"
22
#include "../Effect.hpp"
33
#include "../../Core/IGame.hpp"
4+
#include "RenderingManager.hpp"
45

56
using namespace Engine3DRadSpace;
67
using namespace Engine3DRadSpace::Graphics;
78
using namespace Engine3DRadSpace::Graphics::Rendering;
89

910
IRenderer::IRenderer(RenderingManager* owner):
11+
_device(owner->GetDevice()),
12+
_context(owner->GetDevice()->ImmediateContext()),
1013
_owner(owner)
1114
{
1215
}

3DRadSpace/Engine3DRadSpace/Graphics/Rendering/RenderingManager.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,20 @@ void RenderingManager::Draw(ModelMeshPart* part, RenderPassType passType)
8282
std::unique_ptr<RenderingManager> RenderingManager::CreateForward(IGraphicsDevice* device)
8383
{
8484
RenderingManager manager(device);
85-
manager.Add<ShadowMapRenderer>(device);
86-
manager.Add<ForwardRenderer>(device);
87-
manager.Add<TransparentForwardRenderer>(device);
85+
manager.Add<ShadowMapRenderer>();
86+
manager.Add<ForwardRenderer>();
87+
manager.Add<TransparentForwardRenderer>();
8888
return std::make_unique<RenderingManager>(std::move(manager));
8989
}
9090

9191
std::unique_ptr<RenderingManager> RenderingManager::CreateNull(IGraphicsDevice* device)
9292
{
9393
RenderingManager manager(device);
94-
manager.Add<NullRenderer>(device);
94+
manager.Add<NullRenderer>();
9595
return std::make_unique<RenderingManager>(std::move(manager));
96+
}
97+
98+
IGraphicsDevice* RenderingManager::GetDevice() const noexcept
99+
{
100+
return _device;
96101
}

3DRadSpace/Engine3DRadSpace/Graphics/Rendering/RenderingManager.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ namespace Engine3DRadSpace::Graphics::Rendering
3131
/// <param name="device">Graphics device to use for rendering.</param>
3232
RenderingManager(IGraphicsDevice* device);
3333

34+
RenderingManager(RenderingManager&&) = default;
35+
RenderingManager& operator=(RenderingManager&&) = default;
36+
3437
/// <summary>
3538
/// Emplaces a new renderer of type R with the given arguments.
3639
/// </summary>
@@ -40,9 +43,7 @@ namespace Engine3DRadSpace::Graphics::Rendering
4043
template<typename R, typename... Args>
4144
void Add(Args&&... args)
4245
{
43-
auto renderer = std::make_unique<R>(_device, std::forward<Args>(args)...);
44-
renderer->SetOwner(_owner);
45-
_renderers.push_back(std::move(renderer));
46+
_renderers.emplace_back(std::make_unique<R>(this, std::forward<Args>(args)...));
4647
}
4748

4849
/// <summary>
@@ -107,6 +108,8 @@ namespace Engine3DRadSpace::Graphics::Rendering
107108
return nullptr;
108109
}
109110

111+
IGraphicsDevice* GetDevice() const noexcept;
112+
110113
~RenderingManager() override = default;
111114
};
112115
}

0 commit comments

Comments
 (0)