Renderer/RenderWindow: Remove Display and GetImpl methods

This commit is contained in:
Jérôme Leclercq 2021-08-27 15:39:23 +02:00
parent 3653e9136d
commit 120d8f5427
8 changed files with 52 additions and 62 deletions

View File

@ -236,8 +236,6 @@ int main()
Nz::WorldInstance planeInstance; Nz::WorldInstance planeInstance;
Nz::RenderWindowImpl* windowImpl = window.GetImpl();
Nz::RenderPipelineLayoutInfo lightingPipelineLayoutInfo; Nz::RenderPipelineLayoutInfo lightingPipelineLayoutInfo;
Nz::Graphics::FillViewerPipelineLayout(lightingPipelineLayoutInfo); Nz::Graphics::FillViewerPipelineLayout(lightingPipelineLayoutInfo);
@ -330,8 +328,8 @@ int main()
const std::shared_ptr<const Nz::VertexDeclaration>& fullscreenVertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_UV); const std::shared_ptr<const Nz::VertexDeclaration>& fullscreenVertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_UV);
unsigned int offscreenWidth = window.GetSize().x; unsigned int offscreenWidth = windowSize.x;
unsigned int offscreenHeight = window.GetSize().y; unsigned int offscreenHeight = windowSize.y;
// Bloom data // Bloom data
@ -929,7 +927,7 @@ int main()
viewerInstance.UpdateViewMatrix(Nz::Matrix4f::ViewMatrix(viewerPos, camQuat)); viewerInstance.UpdateViewMatrix(Nz::Matrix4f::ViewMatrix(viewerPos, camQuat));
} }
Nz::RenderFrame frame = windowImpl->Acquire(); Nz::RenderFrame frame = window.AcquireFrame();
if (!frame) if (!frame)
continue; continue;
@ -1108,6 +1106,7 @@ int main()
bakedGraph.Execute(frame); bakedGraph.Execute(frame);
const Nz::RenderTarget* windowRT = window.GetRenderTarget();
frame.Execute([&](Nz::CommandBufferBuilder& builder) frame.Execute([&](Nz::CommandBufferBuilder& builder)
{ {
Nz::Recti windowRenderRect(0, 0, window.GetSize().x, window.GetSize().y); Nz::Recti windowRenderRect(0, 0, window.GetSize().x, window.GetSize().y);
@ -1116,7 +1115,7 @@ int main()
builder.BeginDebugRegion("Main window rendering", Nz::Color::Green); builder.BeginDebugRegion("Main window rendering", Nz::Color::Green);
{ {
builder.BeginRenderPass(windowImpl->GetFramebuffer(frame.GetFramebufferIndex()), windowImpl->GetRenderPass(), windowRenderRect); builder.BeginRenderPass(windowRT->GetFramebuffer(frame.GetFramebufferIndex()), windowRT->GetRenderPass(), windowRenderRect);
{ {
builder.SetScissor(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) }); 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.SetViewport(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) });
@ -1133,8 +1132,6 @@ int main()
frame.Present(); frame.Present();
window.Display();
matUpdate = false; matUpdate = false;
lightUpdate = false; lightUpdate = false;

View File

@ -81,7 +81,7 @@ int main()
Nz::Vector2ui windowSize = window.GetSize(); Nz::Vector2ui windowSize = window.GetSize();
Nz::Camera camera(window.GetImpl()); Nz::Camera camera(window.GetRenderTarget());
Nz::ViewerInstance& viewerInstance = camera.GetViewerInstance(); Nz::ViewerInstance& viewerInstance = camera.GetViewerInstance();
viewerInstance.UpdateTargetSize(Nz::Vector2f(window.GetSize())); viewerInstance.UpdateTargetSize(Nz::Vector2f(window.GetSize()));
@ -98,8 +98,6 @@ int main()
framePipeline.RegisterInstancedDrawable(modelInstance, &model); framePipeline.RegisterInstancedDrawable(modelInstance, &model);
framePipeline.RegisterInstancedDrawable(modelInstance2, &model); framePipeline.RegisterInstancedDrawable(modelInstance2, &model);
Nz::RenderWindowImpl* windowImpl = window.GetImpl();
Nz::Vector3f viewerPos = Nz::Vector3f::Zero(); Nz::Vector3f viewerPos = Nz::Vector3f::Zero();
Nz::EulerAnglesf camAngles(0.f, 0.f, 0.f); Nz::EulerAnglesf camAngles(0.f, 0.f, 0.f);
@ -188,7 +186,7 @@ int main()
viewerPos += Nz::Vector3f::Down() * cameraSpeed; viewerPos += Nz::Vector3f::Down() * cameraSpeed;
} }
Nz::RenderFrame frame = windowImpl->Acquire(); Nz::RenderFrame frame = window.AcquireFrame();
if (!frame) if (!frame)
continue; continue;
@ -201,8 +199,6 @@ int main()
frame.Present(); frame.Present();
window.Display();
// On incrémente le compteur de FPS improvisé // On incrémente le compteur de FPS improvisé
fps++; fps++;

View File

@ -37,12 +37,6 @@ int main()
Nz::RenderWindow window; Nz::RenderWindow window;
Nz::MeshParams meshParams;
meshParams.center = true;
meshParams.storage = Nz::DataStorage::Software;
meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f));
meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_UV);
std::shared_ptr<Nz::RenderDevice> device = Nz::Graphics::Instance()->GetRenderDevice(); std::shared_ptr<Nz::RenderDevice> device = Nz::Graphics::Instance()->GetRenderDevice();
std::string windowTitle = "Graphics Test"; std::string windowTitle = "Graphics Test";
@ -52,7 +46,11 @@ int main()
return __LINE__; return __LINE__;
} }
Nz::RenderWindowImpl* windowImpl = window.GetImpl(); Nz::MeshParams meshParams;
meshParams.center = true;
meshParams.storage = Nz::DataStorage::Software;
meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f));
meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_UV);
std::shared_ptr<Nz::Mesh> spaceshipMesh = Nz::Mesh::LoadFromFile(resourceDir / "Spaceship/spaceship.obj", meshParams); std::shared_ptr<Nz::Mesh> spaceshipMesh = Nz::Mesh::LoadFromFile(resourceDir / "Spaceship/spaceship.obj", meshParams);
if (!spaceshipMesh) if (!spaceshipMesh)
@ -65,17 +63,6 @@ int main()
std::shared_ptr<Nz::GraphicalMesh> gfxMesh = std::make_shared<Nz::GraphicalMesh>(*spaceshipMesh); std::shared_ptr<Nz::GraphicalMesh> gfxMesh = std::make_shared<Nz::GraphicalMesh>(*spaceshipMesh);
// Texture // Texture
std::shared_ptr<Nz::Image> diffuseImage = Nz::Image::LoadFromFile(resourceDir / "Spaceship/Texture/diffuse.png");
if (!diffuseImage || !diffuseImage->Convert(Nz::PixelFormat::RGBA8_SRGB))
{
NazaraError("Failed to load image");
return __LINE__;
}
Nz::TextureParams texParams;
texParams.renderDevice = device;
texParams.loadFormat = Nz::PixelFormat::RGBA8_SRGB;
std::shared_ptr<Nz::Material> material = std::make_shared<Nz::Material>(); std::shared_ptr<Nz::Material> material = std::make_shared<Nz::Material>();
std::shared_ptr<Nz::MaterialPass> depthPass = std::make_shared<Nz::MaterialPass>(Nz::DepthMaterial::GetSettings()); std::shared_ptr<Nz::MaterialPass> depthPass = std::make_shared<Nz::MaterialPass>(Nz::DepthMaterial::GetSettings());
@ -94,6 +81,10 @@ int main()
Nz::TextureSamplerInfo samplerInfo; Nz::TextureSamplerInfo samplerInfo;
samplerInfo.anisotropyLevel = 8; samplerInfo.anisotropyLevel = 8;
Nz::TextureParams texParams;
texParams.renderDevice = device;
texParams.loadFormat = Nz::PixelFormat::RGBA8_SRGB;
Nz::BasicMaterial basicMat(*materialPass); Nz::BasicMaterial basicMat(*materialPass);
basicMat.EnableAlphaTest(false); basicMat.EnableAlphaTest(false);
basicMat.SetAlphaMap(Nz::Texture::LoadFromFile(resourceDir / "alphatile.png", texParams)); basicMat.SetAlphaMap(Nz::Texture::LoadFromFile(resourceDir / "alphatile.png", texParams));
@ -121,7 +112,7 @@ int main()
entt::entity viewer = registry.create(); entt::entity viewer = registry.create();
registry.emplace<Nz::NodeComponent>(viewer); registry.emplace<Nz::NodeComponent>(viewer);
registry.emplace<Nz::CameraComponent>(viewer, windowImpl); registry.emplace<Nz::CameraComponent>(viewer, window.GetRenderTarget());
auto shipCollider = std::make_shared<Nz::ConvexCollider3D>(vertices, vertexMapper.GetVertexCount(), 0.01f); auto shipCollider = std::make_shared<Nz::ConvexCollider3D>(vertices, vertexMapper.GetVertexCount(), 0.01f);
@ -337,7 +328,7 @@ int main()
playerShipBody.AddForce(Nz::Vector3f::Down() * 3.f * mass, Nz::CoordSys::Local); playerShipBody.AddForce(Nz::Vector3f::Down() * 3.f * mass, Nz::CoordSys::Local);
} }
Nz::RenderFrame frame = windowImpl->Acquire(); Nz::RenderFrame frame = window.AcquireFrame();
if (!frame) if (!frame)
continue; continue;
@ -345,8 +336,6 @@ int main()
frame.Present(); frame.Present();
window.Display();
fps++; fps++;
if (secondClock.GetMilliseconds() >= 1000) if (secondClock.GetMilliseconds() >= 1000)

View File

@ -14,6 +14,8 @@
int main() int main()
{ {
std::cout << u8"Héhéhé" << std::endl;
return 0;
std::filesystem::path resourceDir = "resources"; std::filesystem::path resourceDir = "resources";
if (!std::filesystem::is_directory(resourceDir) && std::filesystem::is_directory(".." / resourceDir)) if (!std::filesystem::is_directory(resourceDir) && std::filesystem::is_directory(".." / resourceDir))
resourceDir = ".." / resourceDir; resourceDir = ".." / resourceDir;

View File

@ -221,8 +221,7 @@ int main()
Nz::RenderDevice* renderDevice = window.GetRenderDevice().get(); Nz::RenderDevice* renderDevice = window.GetRenderDevice().get();
Nz::RenderWindowImpl* windowImpl = window.GetImpl(); std::shared_ptr<Nz::CommandPool> commandPool = renderDevice->InstantiateCommandPool(Nz::QueueType::Graphics);
std::shared_ptr<Nz::CommandPool> commandPool = windowImpl->CreateCommandPool(Nz::QueueType::Graphics);
Nz::RenderBuffer* renderBufferIB = static_cast<Nz::RenderBuffer*>(meshIB->GetBuffer()->GetImpl()); Nz::RenderBuffer* renderBufferIB = static_cast<Nz::RenderBuffer*>(meshIB->GetBuffer()->GetImpl());
Nz::RenderBuffer* renderBufferVB = static_cast<Nz::RenderBuffer*>(meshVB->GetBuffer()->GetImpl()); Nz::RenderBuffer* renderBufferVB = static_cast<Nz::RenderBuffer*>(meshVB->GetBuffer()->GetImpl());
@ -329,7 +328,7 @@ int main()
uboUpdate = true; uboUpdate = true;
} }
Nz::RenderFrame frame = windowImpl->Acquire(); Nz::RenderFrame frame = window.AcquireFrame();
if (!frame) if (!frame)
continue; continue;
@ -355,6 +354,7 @@ int main()
uboUpdate = false; uboUpdate = false;
} }
const Nz::RenderTarget* windowRT = window.GetRenderTarget();
frame.Execute([&](Nz::CommandBufferBuilder& builder) frame.Execute([&](Nz::CommandBufferBuilder& builder)
{ {
Nz::Recti renderRect(0, 0, window.GetSize().x, window.GetSize().y); Nz::Recti renderRect(0, 0, window.GetSize().x, window.GetSize().y);
@ -366,7 +366,7 @@ int main()
builder.BeginDebugRegion("Main window rendering", Nz::Color::Green); builder.BeginDebugRegion("Main window rendering", Nz::Color::Green);
{ {
builder.BeginRenderPass(windowImpl->GetFramebuffer(frame.GetFramebufferIndex()), windowImpl->GetRenderPass(), renderRect, { clearValues[0], clearValues[1] }); builder.BeginRenderPass(windowRT->GetFramebuffer(frame.GetFramebufferIndex()), windowRT->GetRenderPass(), renderRect, { clearValues[0], clearValues[1] });
{ {
builder.BindIndexBuffer(*indexBufferImpl); builder.BindIndexBuffer(*indexBufferImpl);
builder.BindPipeline(*pipeline); builder.BindPipeline(*pipeline);
@ -387,8 +387,6 @@ int main()
frame.Present(); frame.Present();
window.Display();
// On incrémente le compteur de FPS improvisé // On incrémente le compteur de FPS improvisé
fps++; fps++;

View File

@ -29,15 +29,15 @@ namespace Nz
inline RenderWindow(std::shared_ptr<RenderDevice> renderDevice, void* handle, const RenderWindowParameters& parameters = RenderWindowParameters()); inline RenderWindow(std::shared_ptr<RenderDevice> renderDevice, void* handle, const RenderWindowParameters& parameters = RenderWindowParameters());
inline ~RenderWindow(); inline ~RenderWindow();
RenderFrame AcquireFrame();
bool Create(std::shared_ptr<RenderDevice> renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style = WindowStyle_Default, const RenderWindowParameters& parameters = RenderWindowParameters()); bool Create(std::shared_ptr<RenderDevice> renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style = WindowStyle_Default, const RenderWindowParameters& parameters = RenderWindowParameters());
bool Create(std::shared_ptr<RenderDevice> renderDevice, void* handle, const RenderWindowParameters &parameters = RenderWindowParameters()); bool Create(std::shared_ptr<RenderDevice> renderDevice, void* handle, const RenderWindowParameters &parameters = RenderWindowParameters());
void Display();
void EnableVerticalSync(bool enabled); void EnableVerticalSync(bool enabled);
inline RenderWindowImpl* GetImpl();
inline const std::shared_ptr<RenderDevice>& GetRenderDevice() const; inline const std::shared_ptr<RenderDevice>& GetRenderDevice() const;
inline const RenderTarget* GetRenderTarget() const;
inline RenderSurface* GetSurface(); inline RenderSurface* GetSurface();
inline bool IsValid() const; inline bool IsValid() const;

View File

@ -32,16 +32,16 @@ namespace Nz
Destroy(); Destroy();
} }
inline RenderWindowImpl* RenderWindow::GetImpl()
{
return m_impl.get();
}
inline const std::shared_ptr<RenderDevice>& RenderWindow::GetRenderDevice() const inline const std::shared_ptr<RenderDevice>& RenderWindow::GetRenderDevice() const
{ {
return m_renderDevice; return m_renderDevice;
} }
inline const RenderTarget* RenderWindow::GetRenderTarget() const
{
return m_impl.get();
}
inline RenderSurface* RenderWindow::GetSurface() inline RenderSurface* RenderWindow::GetSurface()
{ {
return m_surface.get(); return m_surface.get();

View File

@ -11,6 +11,26 @@
namespace Nz namespace Nz
{ {
RenderFrame RenderWindow::AcquireFrame()
{
if (!m_impl)
{
NazaraError("window is not created");
return RenderFrame{};
}
if (m_framerateLimit > 0)
{
int remainingTime = 1000 / static_cast<int>(m_framerateLimit) - static_cast<int>(m_clock.GetMilliseconds());
if (remainingTime > 0)
std::this_thread::sleep_for(std::chrono::milliseconds(remainingTime));
m_clock.Restart();
}
return m_impl->Acquire();
}
bool RenderWindow::Create(std::shared_ptr<RenderDevice> renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style, const RenderWindowParameters& parameters) bool RenderWindow::Create(std::shared_ptr<RenderDevice> renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style, const RenderWindowParameters& parameters)
{ {
m_parameters = parameters; m_parameters = parameters;
@ -27,18 +47,6 @@ namespace Nz
return Window::Create(handle); return Window::Create(handle);
} }
void RenderWindow::Display()
{
if (m_framerateLimit > 0)
{
int remainingTime = 1000 / static_cast<int>(m_framerateLimit) - static_cast<int>(m_clock.GetMilliseconds());
if (remainingTime > 0)
std::this_thread::sleep_for(std::chrono::milliseconds(remainingTime));
m_clock.Restart();
}
}
void RenderWindow::EnableVerticalSync(bool enabled) void RenderWindow::EnableVerticalSync(bool enabled)
{ {
///TODO ///TODO