Fix graphics examples
This commit is contained in:
parent
3ce072c8e0
commit
bb5aea5244
|
|
@ -2,14 +2,8 @@
|
|||
#include <Nazara/Platform.hpp>
|
||||
#include <Nazara/Math/Angle.hpp>
|
||||
#include <Nazara/Graphics.hpp>
|
||||
#include <Nazara/Graphics/FrameGraph.hpp>
|
||||
#include <Nazara/Graphics/ViewerInstance.hpp>
|
||||
#include <Nazara/Renderer.hpp>
|
||||
#include <Nazara/Shader.hpp>
|
||||
#include <Nazara/Shader/SpirvConstantCache.hpp>
|
||||
#include <Nazara/Shader/SpirvPrinter.hpp>
|
||||
#include <Nazara/Shader/ShaderLangLexer.hpp>
|
||||
#include <Nazara/Shader/ShaderLangParser.hpp>
|
||||
#include <Nazara/Utility.hpp>
|
||||
#include <array>
|
||||
#include <iostream>
|
||||
|
|
@ -554,6 +548,10 @@ int main()
|
|||
std::size_t bloomTextureB;
|
||||
std::size_t lightOutput;
|
||||
|
||||
Nz::SubmeshRenderer submeshRenderer;
|
||||
|
||||
std::size_t forwardPassIndex = Nz::Graphics::Instance()->GetMaterialPassRegistry().GetPassIndex("ForwardPass");
|
||||
|
||||
Nz::BakedFrameGraph bakedGraph = [&]
|
||||
{
|
||||
Nz::PixelFormat depthStencilFormat = Nz::PixelFormat::Undefined;
|
||||
|
|
@ -650,15 +648,16 @@ int main()
|
|||
|
||||
builder.BindShaderBinding(Nz::Graphics::ViewerBindingSet, viewerInstance.GetShaderBinding());
|
||||
|
||||
builder.BindShaderBinding(Nz::Graphics::WorldBindingSet, modelInstance1.GetShaderBinding());
|
||||
spaceshipModel.Draw("ForwardPass", builder);
|
||||
std::vector<std::unique_ptr<Nz::RenderElement>> elements;
|
||||
spaceshipModel.BuildElement(forwardPassIndex, modelInstance1, elements);
|
||||
spaceshipModel.BuildElement(forwardPassIndex, modelInstance2, elements);
|
||||
planeModel.BuildElement(forwardPassIndex, planeInstance, elements);
|
||||
|
||||
builder.BindShaderBinding(Nz::Graphics::WorldBindingSet, modelInstance2.GetShaderBinding());
|
||||
spaceshipModel.Draw("ForwardPass", builder);
|
||||
std::vector<Nz::Pointer<const Nz::RenderElement>> elementPointers;
|
||||
for (const auto& element : elements)
|
||||
elementPointers.emplace_back(element.get());
|
||||
|
||||
// Plane
|
||||
builder.BindShaderBinding(Nz::Graphics::WorldBindingSet, planeInstance.GetShaderBinding());
|
||||
planeModel.Draw("ForwardPass", builder);
|
||||
submeshRenderer.Render(builder, elementPointers.data(), elementPointers.size());
|
||||
});
|
||||
|
||||
Nz::FramePass& lightingPass = graph.AddPass("Lighting pass");
|
||||
|
|
@ -673,8 +672,8 @@ int main()
|
|||
builder.SetViewport(renderArea);
|
||||
|
||||
//builder.BindVertexBuffer(0, vertexBuffer.get());
|
||||
builder.BindIndexBuffer(coneMeshGfx->GetIndexBuffer(0).get());
|
||||
builder.BindVertexBuffer(0, coneMeshGfx->GetVertexBuffer(0).get());
|
||||
builder.BindIndexBuffer(*coneMeshGfx->GetIndexBuffer(0).get());
|
||||
builder.BindVertexBuffer(0, *coneMeshGfx->GetVertexBuffer(0).get());
|
||||
|
||||
builder.BindShaderBinding(0, viewerInstance.GetShaderBinding());
|
||||
builder.BindShaderBinding(1, *gbufferShaderBinding);
|
||||
|
|
@ -707,8 +706,8 @@ int main()
|
|||
builder.BindShaderBinding(0, viewerInstance.GetShaderBinding());
|
||||
builder.BindShaderBinding(1, *skyboxShaderBinding);
|
||||
|
||||
builder.BindIndexBuffer(cubeMeshGfx->GetIndexBuffer(0).get());
|
||||
builder.BindVertexBuffer(0, cubeMeshGfx->GetVertexBuffer(0).get());
|
||||
builder.BindIndexBuffer(*cubeMeshGfx->GetIndexBuffer(0));
|
||||
builder.BindVertexBuffer(0, *cubeMeshGfx->GetVertexBuffer(0));
|
||||
builder.BindPipeline(*skyboxPipeline);
|
||||
|
||||
builder.DrawIndexed(static_cast<Nz::UInt32>(cubeMeshGfx->GetIndexCount(0)));
|
||||
|
|
@ -733,7 +732,7 @@ int main()
|
|||
builder.BindShaderBinding(1, *bloomBrightShaderBinding);
|
||||
|
||||
builder.BindPipeline(*bloomBrightPipeline);
|
||||
builder.BindVertexBuffer(0, fullscreenVertexBuffer.get());
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
|
|
@ -754,7 +753,7 @@ int main()
|
|||
builder.BindShaderBinding(0, viewerInstance.GetShaderBinding());
|
||||
builder.BindShaderBinding(1, *gaussianBlurShaderBinding);
|
||||
builder.BindPipeline(*gaussianBlurPipeline);
|
||||
builder.BindVertexBuffer(0, fullscreenVertexBuffer.get());
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
|
|
@ -775,7 +774,7 @@ int main()
|
|||
builder.BindShaderBinding(0, viewerInstance.GetShaderBinding());
|
||||
builder.BindShaderBinding(1, *bloomBlendShaderBinding);
|
||||
builder.BindPipeline(*bloomBlendPipeline);
|
||||
builder.BindVertexBuffer(0, fullscreenVertexBuffer.get());
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
|
|
@ -1124,7 +1123,7 @@ int main()
|
|||
|
||||
builder.BindShaderBinding(0, *finalBlitBinding);
|
||||
builder.BindPipeline(*fullscreenPipeline);
|
||||
builder.BindVertexBuffer(0, fullscreenVertexBuffer.get());
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
builder.Draw(3);
|
||||
}
|
||||
builder.EndRenderPass();
|
||||
|
|
|
|||
|
|
@ -81,15 +81,22 @@ int main()
|
|||
|
||||
Nz::Vector2ui windowSize = window.GetSize();
|
||||
|
||||
Nz::ViewerInstance viewerInstance;
|
||||
Nz::Camera camera(window.GetImpl());
|
||||
|
||||
Nz::ViewerInstance& viewerInstance = camera.GetViewerInstance();
|
||||
viewerInstance.UpdateTargetSize(Nz::Vector2f(window.GetSize()));
|
||||
viewerInstance.UpdateProjViewMatrices(Nz::Matrix4f::Perspective(Nz::DegreeAnglef(70.f), float(windowSize.x) / windowSize.y, 0.1f, 1000.f), Nz::Matrix4f::Translate(Nz::Vector3f::Backward() * 1));
|
||||
|
||||
Nz::WorldInstance modelInstance;
|
||||
modelInstance.UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Forward() * 2 + Nz::Vector3f::Left()));
|
||||
Nz::WorldInstancePtr modelInstance = std::make_shared<Nz::WorldInstance>();
|
||||
modelInstance->UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Forward() * 2 + Nz::Vector3f::Left()));
|
||||
|
||||
Nz::WorldInstance modelInstance2;
|
||||
modelInstance2.UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Forward() * 2 + Nz::Vector3f::Right()));
|
||||
Nz::WorldInstancePtr modelInstance2 = std::make_shared<Nz::WorldInstance>();
|
||||
modelInstance2->UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Forward() * 2 + Nz::Vector3f::Right()));
|
||||
|
||||
Nz::ForwardFramePipeline framePipeline;
|
||||
framePipeline.RegisterViewer(&camera);
|
||||
framePipeline.RegisterInstancedDrawable(modelInstance, &model);
|
||||
framePipeline.RegisterInstancedDrawable(modelInstance2, &model);
|
||||
|
||||
Nz::RenderWindowImpl* windowImpl = window.GetImpl();
|
||||
|
||||
|
|
@ -106,7 +113,6 @@ int main()
|
|||
|
||||
Nz::Mouse::SetRelativeMouseMode(true);
|
||||
|
||||
bool updateMat = false;
|
||||
while (window.IsOpen())
|
||||
{
|
||||
Nz::WindowEvent event;
|
||||
|
|
@ -120,10 +126,7 @@ int main()
|
|||
|
||||
case Nz::WindowEventType::KeyPressed:
|
||||
if (event.key.virtualKey == Nz::Keyboard::VKey::A)
|
||||
{
|
||||
basicMat.EnableAlphaTest(!basicMat.IsAlphaTestEnabled());
|
||||
updateMat = true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
|
@ -192,52 +195,9 @@ int main()
|
|||
Nz::UploadPool& uploadPool = frame.GetUploadPool();
|
||||
|
||||
viewerInstance.UpdateViewMatrix(Nz::Matrix4f::ViewMatrix(viewerPos, camAngles));
|
||||
framePipeline.InvalidateViewer(&camera);
|
||||
|
||||
frame.Execute([&](Nz::CommandBufferBuilder& builder)
|
||||
{
|
||||
builder.BeginDebugRegion("UBO Update", Nz::Color::Yellow);
|
||||
{
|
||||
builder.PreTransferBarrier();
|
||||
|
||||
viewerInstance.UpdateBuffers(uploadPool, builder);
|
||||
modelInstance.UpdateBuffers(uploadPool, builder);
|
||||
modelInstance2.UpdateBuffers(uploadPool, builder);
|
||||
|
||||
updateMat = materialPass->Update(frame, builder) || updateMat;
|
||||
|
||||
builder.PostTransferBarrier();
|
||||
}
|
||||
builder.EndDebugRegion();
|
||||
}, Nz::QueueType::Transfer);
|
||||
|
||||
frame.Execute([&](Nz::CommandBufferBuilder& builder)
|
||||
{
|
||||
Nz::Recti renderRect(0, 0, window.GetSize().x, window.GetSize().y);
|
||||
|
||||
Nz::CommandBufferBuilder::ClearValues clearValues[2];
|
||||
clearValues[0].color = Nz::Color::Black;
|
||||
clearValues[1].depth = 1.f;
|
||||
clearValues[1].stencil = 0;
|
||||
|
||||
builder.BeginDebugRegion("Main window rendering", Nz::Color::Green);
|
||||
{
|
||||
builder.BeginRenderPass(windowImpl->GetFramebuffer(frame.GetFramebufferIndex()), windowImpl->GetRenderPass(), renderRect, { clearValues[0], clearValues[1] });
|
||||
{
|
||||
builder.SetScissor(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) });
|
||||
builder.SetViewport(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) });
|
||||
builder.BindShaderBinding(Nz::Graphics::ViewerBindingSet, viewerInstance.GetShaderBinding());
|
||||
|
||||
for (Nz::WorldInstance& instance : { std::ref(modelInstance), std::ref(modelInstance2) })
|
||||
{
|
||||
builder.BindShaderBinding(Nz::Graphics::WorldBindingSet, instance.GetShaderBinding());
|
||||
|
||||
model.Draw("ForwardPass", builder);
|
||||
}
|
||||
}
|
||||
builder.EndRenderPass();
|
||||
}
|
||||
builder.EndDebugRegion();
|
||||
}, Nz::QueueType::Graphics);
|
||||
framePipeline.Render(frame);
|
||||
|
||||
frame.Present();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue