Skip to content

Commit 2b1dbb6

Browse files
authored
Pursche/use new gpu vector (#47)
* Update all renderers to use new GPUVector * Load natvis files * Added Tracy zones * Change Model Draw shaders to calculate barycentric in model space * Update Engine submodule
1 parent 075cc5f commit 2b1dbb6

34 files changed

+1395
-961
lines changed

Premake/ProjectUtil.lua

+1
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ Solution.Util.GetFilesForCpp = function(basePath)
397397
(basePath .. "/**.hpp"),
398398
(basePath .. "/**.c"),
399399
(basePath .. "/**.cpp"),
400+
(basePath .. "/**.natvis"),
400401
}
401402

402403
return files

Source/Game-Lib/Game-Lib/ECS/Systems/CalculateCameraMatrices.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ namespace ECS::Systems
6363
camera.clipToWorld = glm::inverse(camera.worldToView) * glm::inverse(camera.viewToClip);
6464

6565
// Update the GPU binding
66-
std::vector<Camera>& gpuCameras = renderResources.cameras.Get();
67-
Camera& gpuCamera = gpuCameras[camera.cameraBindSlot];
66+
Camera& gpuCamera = renderResources.cameras[camera.cameraBindSlot];
6867

6968
gpuCamera.clipToView = camera.clipToView;
7069
gpuCamera.clipToWorld = camera.clipToWorld;

Source/Game-Lib/Game-Lib/ECS/Systems/CalculateShadowCameraMatrices.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,16 @@ namespace ECS::Systems
4040

4141
RenderResources& renderResources = gameRenderer->GetRenderResources();
4242

43-
std::vector<Camera>& gpuCameras = renderResources.cameras.Get();
44-
4543
u32 numCascades = CVAR_ShadowCascadeNum.GetU32();
4644
i32 cascadeTextureSize = CVAR_ShadowCascadeTextureSize.Get();
4745
bool stableShadows = CVAR_ShadowsStable.Get() == 1;
4846

4947
// Initialize any new shadow cascades
5048
if (numCascades != renderResources.shadowDepthCascades.size())
5149
{
52-
gpuCameras.resize(numCascades + 1); // + 1 because of main camera
50+
u32 numCameras = renderResources.cameras.Count();
51+
u32 numCamerasToAdd = numCascades - numCameras;
52+
renderResources.cameras.AddCount(numCamerasToAdd);
5353

5454
while (numCascades > renderResources.shadowDepthCascades.size())
5555
{
@@ -241,7 +241,7 @@ namespace ECS::Systems
241241
}
242242

243243
// Store split distance and matrix in cascade camera
244-
Camera& cascadeCamera = gpuCameras[i + 1]; // +1 because the first camera is the main camera
244+
Camera& cascadeCamera = renderResources.cameras[i + 1]; // +1 because the first camera is the main camera
245245

246246
cascadeCamera.worldToView = viewMatrix;
247247
cascadeCamera.viewToClip = projMatrix;

Source/Game-Lib/Game-Lib/Editor/Inspector.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ namespace Editor
7070

7171
Renderer::GPUVector<mat4x4>& instances = modelRenderer->GetInstanceMatrices();
7272

73-
instances.Get()[_instanceID] = _preEditValue;
73+
instances[_instanceID] = _preEditValue;
7474
instances.SetDirtyElement(_instanceID);
7575
}
7676

Source/Game-Lib/Game-Lib/Gameplay/MapLoader.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ using namespace ECS::Singletons;
3232

3333
void MapLoader::Update(f32 deltaTime)
3434
{
35+
ZoneScoped;
36+
3537
size_t numRequests = _requests.size_approx();
3638
if (numRequests == 0)
3739
return;

Source/Game-Lib/Game-Lib/Rendering/Canvas/CanvasRenderer.cpp

+14-27
Original file line numberDiff line numberDiff line change
@@ -354,13 +354,10 @@ void CanvasRenderer::CreatePermanentResources()
354354

355355
void CanvasRenderer::UpdatePanelVertices(ECS::Components::Transform2D& transform, ECS::Components::UI::Panel& panel, ECS::Components::UI::PanelTemplate& panelTemplate)
356356
{
357-
std::vector<vec4>& vertices = _vertices.Get();
358-
359357
// Add vertices if necessary
360358
if (panel.gpuVertexIndex == -1)
361359
{
362-
panel.gpuVertexIndex = static_cast<i32>(vertices.size());
363-
vertices.resize(vertices.size() + 6); // TODO: Indexing?
360+
panel.gpuVertexIndex = _vertices.AddCount(6);
364361
}
365362

366363
const vec2 min = panelTemplate.texCoords.min;
@@ -380,19 +377,19 @@ void CanvasRenderer::UpdatePanelVertices(ECS::Components::Transform2D& transform
380377
vec2 size = PixelSizeToNDC(transform.GetSize());
381378

382379
// Triangle 1
383-
vertices[panel.gpuVertexIndex + 0] = vec4(position, panelUVs[0]);
384-
vertices[panel.gpuVertexIndex + 1] = vec4(position + vec2(size.x, size.y), panelUVs[1]);
385-
vertices[panel.gpuVertexIndex + 2] = vec4(position + vec2(size.x, 0), panelUVs[2]);
380+
_vertices[panel.gpuVertexIndex + 0] = vec4(position, panelUVs[0]);
381+
_vertices[panel.gpuVertexIndex + 1] = vec4(position + vec2(size.x, size.y), panelUVs[1]);
382+
_vertices[panel.gpuVertexIndex + 2] = vec4(position + vec2(size.x, 0), panelUVs[2]);
386383

387384
// Triangle 2
388-
vertices[panel.gpuVertexIndex + 3] = vec4(position + vec2(0, size.y), panelUVs[3]);
389-
vertices[panel.gpuVertexIndex + 4] = vec4(position + vec2(size.x, size.y), panelUVs[4]);
390-
vertices[panel.gpuVertexIndex + 5] = vec4(position, panelUVs[5]);
385+
_vertices[panel.gpuVertexIndex + 3] = vec4(position + vec2(0, size.y), panelUVs[3]);
386+
_vertices[panel.gpuVertexIndex + 4] = vec4(position + vec2(size.x, size.y), panelUVs[4]);
387+
_vertices[panel.gpuVertexIndex + 5] = vec4(position, panelUVs[5]);
391388

392389
_vertices.SetDirtyElements(panel.gpuVertexIndex, 6);
393390
}
394391

395-
void CalculateVertices(const vec4& pos, const vec4& uv, std::vector<vec4>& vertices, u32 vertexIndex)
392+
void CalculateVertices(const vec4& pos, const vec4& uv, Renderer::GPUVector<vec4>& vertices, u32 vertexIndex)
396393
{
397394
const f32& posLeft = pos.x;
398395
const f32& posBottom = pos.y;
@@ -415,8 +412,6 @@ void CalculateVertices(const vec4& pos, const vec4& uv, std::vector<vec4>& verti
415412

416413
void CanvasRenderer::UpdateTextVertices(ECS::Components::Transform2D& transform, ECS::Components::UI::Text& text, ECS::Components::UI::TextTemplate& textTemplate)
417414
{
418-
std::vector<vec4>& vertices = _vertices.Get();
419-
420415
if (text.text.size() == 0)
421416
{
422417
return;
@@ -452,9 +447,7 @@ void CanvasRenderer::UpdateTextVertices(ECS::Components::Transform2D& transform,
452447
if (text.gpuVertexIndex == -1 || text.hasGrown)
453448
{
454449
u32 numVertices = text.numCharsNonWhitespace * 6;
455-
456-
text.gpuVertexIndex = static_cast<i32>(vertices.size());
457-
vertices.resize(vertices.size() + numVertices);
450+
text.gpuVertexIndex = _vertices.AddCount(numVertices);
458451
}
459452

460453
vec2 worldPos = transform.GetWorldPosition();
@@ -531,7 +524,7 @@ void CanvasRenderer::UpdateTextVertices(ECS::Components::Transform2D& transform,
531524
atlasTop *= texelSize.y;
532525

533526
// Add vertices
534-
CalculateVertices(vec4(planeMin, planeMax), vec4(atlasLeft, atlasBottom, atlasRight, atlasTop), vertices, vertexIndex);
527+
CalculateVertices(vec4(planeMin, planeMax), vec4(atlasLeft, atlasBottom, atlasRight, atlasTop), _vertices, vertexIndex);
535528
vertexIndex += 6;
536529
}
537530

@@ -546,19 +539,16 @@ void CanvasRenderer::UpdateTextVertices(ECS::Components::Transform2D& transform,
546539

547540
void CanvasRenderer::UpdatePanelData(ECS::Components::Transform2D& transform, Panel& panel, ECS::Components::UI::PanelTemplate& panelTemplate)
548541
{
549-
std::vector<PanelDrawData>& panelDrawDatas = _panelDrawDatas.Get();
550-
551542
// Add draw data if necessary
552543
if (panel.gpuDataIndex == -1)
553544
{
554-
panel.gpuDataIndex = static_cast<i32>(panelDrawDatas.size());
555-
panelDrawDatas.resize(panelDrawDatas.size() + 1);
545+
panel.gpuDataIndex = _panelDrawDatas.Add();
556546
}
557547
vec2 size = transform.GetSize();
558548
vec2 cornerRadius = vec2(panelTemplate.cornerRadius / size.x, panelTemplate.cornerRadius /size.y);
559549

560550
// Update draw data
561-
auto& drawData = panelDrawDatas[panel.gpuDataIndex];
551+
auto& drawData = _panelDrawDatas[panel.gpuDataIndex];
562552
drawData.packed.z = panelTemplate.color.ToRGBA32();
563553
drawData.cornerRadiusAndBorder = vec4(cornerRadius, 0.0f, 0.0f);
564554

@@ -635,8 +625,6 @@ void CanvasRenderer::UpdatePanelData(ECS::Components::Transform2D& transform, Pa
635625

636626
void CanvasRenderer::UpdateTextData(Text& text, ECS::Components::UI::TextTemplate& textTemplate)
637627
{
638-
std::vector<CharDrawData>& charDrawDatas = _charDrawDatas.Get();
639-
640628
if (text.sizeChanged)
641629
{
642630
// Count how many non whitspace characters there are
@@ -665,8 +653,7 @@ void CanvasRenderer::UpdateTextData(Text& text, ECS::Components::UI::TextTemplat
665653
// Add or update draw data if necessary
666654
if (text.gpuDataIndex == -1 || text.hasGrown)
667655
{
668-
text.gpuDataIndex = static_cast<i32>(charDrawDatas.size());
669-
charDrawDatas.resize(charDrawDatas.size() + text.numCharsNonWhitespace);
656+
text.gpuDataIndex = _charDrawDatas.AddCount(text.numCharsNonWhitespace);
670657
}
671658

672659
// Update CharDrawData
@@ -702,7 +689,7 @@ void CanvasRenderer::UpdateTextData(Text& text, ECS::Components::UI::TextTemplat
702689
continue;
703690
}
704691

705-
auto& drawData = charDrawDatas[text.gpuDataIndex + charIndex];
692+
auto& drawData = _charDrawDatas[text.gpuDataIndex + charIndex];
706693
drawData.packed0.x = fontTextureIndex;
707694
drawData.packed0.y = charIndex;
708695
drawData.packed0.z = textTemplate.color.ToRGBA32();

Source/Game-Lib/Game-Lib/Rendering/CulledRenderer.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void CulledRenderer::OccluderPass(OccluderPassParams& params)
3030
{
3131
NC_ASSERT(params.drawCallback != nullptr, "CulledRenderer : OccluderPass got params with invalid drawCallback");
3232

33-
const u32 numDrawCalls = params.cullingResources->GetDrawCallsSize();
33+
const u32 numDrawCalls = params.cullingResources->GetDrawCallCount();
3434
u32 numInstances = params.cullingResources->GetNumInstances();
3535

3636
if (numDrawCalls == 0 || numInstances == 0)
@@ -331,7 +331,7 @@ void CulledRenderer::CullingPass(CullingPassParams& params)
331331
{
332332
NC_ASSERT(params.drawCallDataSize > 0, "CulledRenderer : CullingPass params provided an invalid drawCallDataSize");
333333

334-
const u32 numDrawCalls = params.cullingResources->GetDrawCallsSize();
334+
const u32 numDrawCalls = params.cullingResources->GetDrawCallCount();
335335
u32 numInstances = params.cullingResources->GetNumInstances();
336336

337337
if (numDrawCalls > 0 && numInstances > 0)
@@ -569,7 +569,7 @@ void CulledRenderer::GeometryPass(GeometryPassParams& params)
569569
{
570570
NC_ASSERT(params.drawCallback != nullptr, "CulledRenderer : GeometryPass got params with invalid drawCallback");
571571

572-
const u32 numDrawCalls = params.cullingResources->GetDrawCallsSize();
572+
const u32 numDrawCalls = params.cullingResources->GetDrawCallCount();
573573

574574
for (u32 i = 0; i < params.numCascades + 1; i++)
575575
{

0 commit comments

Comments
 (0)