From b37af6da31523bd0b5265924f069aef7d54f04c9 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Wed, 17 Aug 2022 20:03:52 +0200 Subject: [PATCH] Final skeletal fixes --- examples/Showcase/main.cpp | 33 +++++-------------- src/Nazara/Graphics/ForwardFramePipeline.cpp | 2 ++ src/Nazara/Graphics/Graphics.cpp | 5 +++ .../Resources/Shaders/BasicMaterial.nzsl | 2 +- 4 files changed, 17 insertions(+), 25 deletions(-) diff --git a/examples/Showcase/main.cpp b/examples/Showcase/main.cpp index 981176702..c98a2bd06 100644 --- a/examples/Showcase/main.cpp +++ b/examples/Showcase/main.cpp @@ -87,8 +87,6 @@ int main() Nz::MeshParams meshParams; meshParams.animated = true; meshParams.center = true; - meshParams.vertexOffset = Nz::Vector3f(3.f, 0.f, 0.f); - meshParams.vertexRotation = Nz::EulerAnglesf(0.f, 0.f, 0.f); meshParams.vertexScale = Nz::Vector3f(0.1f, 0.1f, 0.1f); meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV_Tangent_Skinning); @@ -105,7 +103,7 @@ int main() animParam.jointScale = meshParams.vertexScale; animParam.jointOffset = meshParams.vertexOffset; - std::shared_ptr bobAnim = Nz::Animation::LoadFromFile(resourceDir / "character/Wave Hip Hop Dance.fbx", animParam); + std::shared_ptr bobAnim = Nz::Animation::LoadFromFile(resourceDir / "character/Gangnam Style.fbx", animParam); if (!bobAnim) { NazaraError("Failed to load bob anim"); @@ -253,6 +251,14 @@ int main() window.EnableEventPolling(true); + renderSystem.GetFramePipeline().OnTransfer.Connect([&](Nz::FramePipeline* pipeline, Nz::RenderFrame& renderFrame, Nz::CommandBufferBuilder& builder) + { + auto& skeletalAllocation = renderFrame.GetUploadPool().Allocate(skeletalBufferMem.size()); + std::memcpy(skeletalAllocation.mappedPtr, skeletalBufferMem.data(), skeletalBufferMem.size()); + + builder.CopyBuffer(skeletalAllocation, Nz::RenderBufferView(renderBuffer.get())); + }); + Nz::Clock fpsClock, updateClock; float incr = 0.f; unsigned int currentFrame = 0; @@ -388,30 +394,9 @@ int main() playerShipBody.AddForce(Nz::Vector3f::Down() * 3.f * mass, Nz::CoordSys::Local);*/ } - Nz::RenderFrame frame = window.AcquireFrame(); - if (!frame) - continue; - - frame.Execute([&](Nz::CommandBufferBuilder& builder) - { - builder.BeginDebugRegion("Skeletal UBO Update", Nz::Color::Yellow); - { - builder.PreTransferBarrier(); - - auto& skeletalAllocation = frame.GetUploadPool().Allocate(skeletalBufferMem.size()); - std::memcpy(skeletalAllocation.mappedPtr, skeletalBufferMem.data(), skeletalBufferMem.size()); - - builder.CopyBuffer(skeletalAllocation, Nz::RenderBufferView(renderBuffer.get())); - - builder.PostTransferBarrier(); - } - builder.EndDebugRegion(); - }, Nz::QueueType::Graphics); systemGraph.Update(); - frame.Present(); - fps++; if (fpsClock.GetMilliseconds() >= 1000) diff --git a/src/Nazara/Graphics/ForwardFramePipeline.cpp b/src/Nazara/Graphics/ForwardFramePipeline.cpp index 2c87ac058..9755ea3ce 100644 --- a/src/Nazara/Graphics/ForwardFramePipeline.cpp +++ b/src/Nazara/Graphics/ForwardFramePipeline.cpp @@ -214,6 +214,8 @@ namespace Nz { builder.PreTransferBarrier(); + OnTransfer(this, renderFrame, builder); + for (std::size_t viewerIndex = m_invalidatedViewerInstances.FindFirst(); viewerIndex != m_invalidatedViewerInstances.npos; viewerIndex = m_invalidatedViewerInstances.FindNext(viewerIndex)) { ViewerData* viewerData = m_viewerPool.RetrieveFromIndex(viewerIndex); diff --git a/src/Nazara/Graphics/Graphics.cpp b/src/Nazara/Graphics/Graphics.cpp index 70058145b..30ed8a285 100644 --- a/src/Nazara/Graphics/Graphics.cpp +++ b/src/Nazara/Graphics/Graphics.cpp @@ -50,6 +50,10 @@ namespace Nz #include }; + const UInt8 r_skeletalDataModule[] = { + #include + }; + const UInt8 r_viewerDataModule[] = { #include }; @@ -233,6 +237,7 @@ namespace Nz RegisterEmbedShaderModule(r_mathCookTorrancePBRModule); RegisterEmbedShaderModule(r_phongMaterialShader); RegisterEmbedShaderModule(r_physicallyBasedMaterialShader); + RegisterEmbedShaderModule(r_skeletalDataModule); RegisterEmbedShaderModule(r_textureBlitShader); RegisterEmbedShaderModule(r_viewerDataModule); diff --git a/src/Nazara/Graphics/Resources/Shaders/BasicMaterial.nzsl b/src/Nazara/Graphics/Resources/Shaders/BasicMaterial.nzsl index a118a0101..d7c667a04 100644 --- a/src/Nazara/Graphics/Resources/Shaders/BasicMaterial.nzsl +++ b/src/Nazara/Graphics/Resources/Shaders/BasicMaterial.nzsl @@ -156,7 +156,7 @@ fn billboardMain(input: VertIn) -> VertOut fn main(input: VertIn) -> VertOut { let pos: vec3[f32]; - const if (HasSkinning && false) + const if (HasSkinning) { pos = vec3[f32](0.0, 0.0, 0.0);