From 59ced5008133b6012f78e118438682a4cd8d34eb Mon Sep 17 00:00:00 2001 From: Razakhel Date: Wed, 6 Nov 2024 13:42:54 +0100 Subject: [PATCH] [Render/RenderSystem] The scene's dimensions can be recovered - They may not necessarily be the same as the window's, and should be those used for the camera's viewport & buffers --- examples/bloomDemo.cpp | 7 ++-- examples/fullDemo.cpp | 22 +++++------ examples/minDemo.cpp | 2 +- examples/physicsDemo.cpp | 2 +- examples/showcaseDemo.cpp | 2 +- examples/ssrDemo.cpp | 12 +++--- examples/xrDemo.cpp | 8 ++-- include/RaZ/Render/RenderSystem.hpp | 2 + scripts/demo.lua | 2 +- src/RaZ/Script/LuaRenderSystem.cpp | 2 + tests/src/RaZ/Render/RenderProcess.cpp | 52 +++++++++++++++----------- tests/src/RaZ/Render/RenderSystem.cpp | 11 +++--- tests/src/RaZ/Script/LuaRender.cpp | 2 + 13 files changed, 71 insertions(+), 55 deletions(-) diff --git a/examples/bloomDemo.cpp b/examples/bloomDemo.cpp index 9adbf213..02f34efc 100644 --- a/examples/bloomDemo.cpp +++ b/examples/bloomDemo.cpp @@ -27,7 +27,7 @@ int main() { window.setCloseCallback([&app] () noexcept { app.quit(); }); Raz::Entity& camera = world.addEntityWithComponent(Raz::Vec3f(0.f, 0.f, 5.f)); - camera.addComponent(window.getWidth(), window.getHeight()); + camera.addComponent(render.getSceneWidth(), render.getSceneHeight()); DemoUtils::setupCameraControls(camera, window); @@ -53,8 +53,9 @@ int main() { Raz::RenderGraph& renderGraph = render.getRenderGraph(); Raz::RenderPass& geometryPass = renderGraph.getGeometryPass(); - const auto depthBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::DEPTH); - const auto colorBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::FLOAT16); + const auto depthBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::DEPTH); + const auto colorBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::FLOAT16); #if !defined(USE_OPENGL_ES) if (Raz::Renderer::checkVersion(4, 3)) { diff --git a/examples/fullDemo.cpp b/examples/fullDemo.cpp index 54cafda4..fa21d3e8 100644 --- a/examples/fullDemo.cpp +++ b/examples/fullDemo.cpp @@ -58,16 +58,16 @@ int main() { // For demonstration purposes, a buffer is created here for each process' output. However, this is far from ideal; // always reuse buffers across passes whenever you can, as it may save a lot of memory // Note though that a buffer cannot be set as both read & write in the same pass or process - const auto depthBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::DEPTH); - const auto colorBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto gradientBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto gradDirBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto edgeBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::GRAY); - const auto edgeBlendBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto chromAberrBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto blurredBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto vignetteBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto filmGrainBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); + const auto depthBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::DEPTH); + const auto colorBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto gradientBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto gradDirBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto edgeBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::GRAY); + const auto edgeBlendBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto chromAberrBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto blurredBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto vignetteBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto filmGrainBuffer = Raz::Texture2D::create(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::TextureColorspace::RGB); #if !defined(USE_OPENGL_ES) if (Raz::Renderer::checkVersion(4, 3)) { @@ -174,7 +174,7 @@ int main() { //////////// Raz::Entity& camera = world.addEntity(); - auto& cameraComp = camera.addComponent(window.getWidth(), window.getHeight()); + auto& cameraComp = camera.addComponent(renderSystem.getSceneWidth(), renderSystem.getSceneHeight()); auto& cameraTrans = camera.addComponent(Raz::Vec3f(0.f, 0.f, 5.f)); DemoUtils::setupCameraControls(camera, window); diff --git a/examples/minDemo.cpp b/examples/minDemo.cpp index fdf51673..c8ad0871 100644 --- a/examples/minDemo.cpp +++ b/examples/minDemo.cpp @@ -15,7 +15,7 @@ int main() { window.setCloseCallback([&app] () noexcept { app.quit(); }); Raz::Entity& camera = world.addEntityWithComponent(Raz::Vec3f(0.f, 0.f, 5.f)); - camera.addComponent(window.getWidth(), window.getHeight()); + camera.addComponent(render.getSceneWidth(), render.getSceneHeight()); Raz::Entity& mesh = world.addEntityWithComponent(); mesh.addComponent(Raz::MeshFormat::load(RAZ_ROOT "assets/meshes/ball.obj").second); diff --git a/examples/physicsDemo.cpp b/examples/physicsDemo.cpp index ccb3da4b..ad7809ee 100644 --- a/examples/physicsDemo.cpp +++ b/examples/physicsDemo.cpp @@ -17,7 +17,7 @@ int main() { window.setCloseCallback([&app] () noexcept { app.quit(); }); Raz::Entity& camera = world.addEntity(); - auto& cameraComp = camera.addComponent(window.getWidth(), window.getHeight()); + auto& cameraComp = camera.addComponent(render.getSceneWidth(), render.getSceneHeight()); auto& cameraTrans = camera.addComponent(Raz::Vec3f(0.f, 10.f, 25.f)); cameraComp.setCameraType(Raz::CameraType::LOOK_AT); diff --git a/examples/showcaseDemo.cpp b/examples/showcaseDemo.cpp index b8c2ed59..a290a468 100644 --- a/examples/showcaseDemo.cpp +++ b/examples/showcaseDemo.cpp @@ -115,7 +115,7 @@ int main() { Raz::Entity& camera = world.addEntity(); auto& cameraTrans = camera.addComponent(Raz::Vec3f(0.f, 0.f, 5.f)); - camera.addComponent(window.getWidth(), window.getHeight()); + camera.addComponent(render.getSceneWidth(), render.getSceneHeight()); ////////////////// // Light entity // diff --git a/examples/ssrDemo.cpp b/examples/ssrDemo.cpp index ed5aab57..614ea3c6 100644 --- a/examples/ssrDemo.cpp +++ b/examples/ssrDemo.cpp @@ -27,7 +27,7 @@ int main() { window.setCloseCallback([&app] () noexcept { app.quit(); }); Raz::Entity& camera = world.addEntityWithComponent(Raz::Vec3f(0.f, 0.25f, 10.f)); - camera.addComponent(window.getWidth(), window.getHeight()); + camera.addComponent(render.getSceneWidth(), render.getSceneHeight()); DemoUtils::setupCameraControls(camera, window); @@ -95,11 +95,11 @@ int main() { Raz::RenderGraph& renderGraph = render.getRenderGraph(); Raz::RenderPass& geometryPass = renderGraph.getGeometryPass(); - const auto depthBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::DEPTH); - const auto colorBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto blurredColorBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto normalBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB); - const auto specularBuffer = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGBA); + const auto depthBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::DEPTH); + const auto colorBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto blurredColorBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto normalBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::RGB); + const auto specularBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::RGBA); #if !defined(USE_OPENGL_ES) if (Raz::Renderer::checkVersion(4, 3)) { diff --git a/examples/xrDemo.cpp b/examples/xrDemo.cpp index a0f0b7ff..2765e667 100644 --- a/examples/xrDemo.cpp +++ b/examples/xrDemo.cpp @@ -19,12 +19,13 @@ int main() { window.addKeyCallback(Raz::Keyboard::ESCAPE, [&app] (float) noexcept { app.quit(); }); window.setCloseCallback([&app] () noexcept { app.quit(); }); + // Enabling XR in the render system changes the render viewport's size according to what the detected XR device expects auto& xr = world.addSystem("RaZ - XR demo"); render.enableXr(xr); // In an XR workflow, the camera is optional; its parameters aren't technically used, but its transform is auto& camera = world.addEntityWithComponent(); - camera.addComponent(window.getWidth(), window.getHeight()); + camera.addComponent(render.getSceneWidth(), render.getSceneHeight()); DemoUtils::setupCameraControls(camera, window); @@ -33,9 +34,8 @@ int main() { world.addEntityWithComponent().addComponent(Raz::LightType::DIRECTIONAL, -Raz::Axis::Z, 1.f, Raz::ColorPreset::White); - // TODO: the textures' dimensions must be the same as the rendering viewport's - const auto colorBuffer = Raz::Texture2D::create(2468, 2584, Raz::TextureColorspace::RGBA); - const auto depthBuffer = Raz::Texture2D::create(2468, 2584, Raz::TextureColorspace::DEPTH); + const auto colorBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::RGBA); + const auto depthBuffer = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), Raz::TextureColorspace::DEPTH); // The last executed pass *MUST* have a write color buffer, and at least the geometry pass *MUST* have a write depth buffer Raz::RenderPass& geomPass = render.getGeometryPass(); diff --git a/include/RaZ/Render/RenderSystem.hpp b/include/RaZ/Render/RenderSystem.hpp index 471f389d..4bd4713b 100644 --- a/include/RaZ/Render/RenderSystem.hpp +++ b/include/RaZ/Render/RenderSystem.hpp @@ -52,6 +52,8 @@ class RenderSystem final : public System { m_window->getHeight()); } #endif + unsigned int getSceneWidth() const { return m_sceneWidth; } + unsigned int getSceneHeight() const { return m_sceneHeight; } #if !defined(RAZ_NO_WINDOW) bool hasWindow() const { return (m_window != nullptr); } const Window& getWindow() const { assert("Error: The window must be set before being accessed." && hasWindow()); return *m_window; } diff --git a/scripts/demo.lua b/scripts/demo.lua index 3ea9cf55..4ae2174b 100644 --- a/scripts/demo.lua +++ b/scripts/demo.lua @@ -10,7 +10,7 @@ window:setCloseCallback(function () app:quit() end) local camera = world:addEntity() camera:addComponent(Transform.new(Vec3f.new(0, 0, 5))) -camera:addComponent(Camera.new(window:getWidth(), window:getHeight())) +camera:addComponent(Camera.new(render:getSceneWidth(), render:getSceneHeight())) local shield = world:addEntity() local shieldTrans = shield:addComponent(Transform.new(Vec3f.new(), Quaternionf.identity(), Vec3f.new(0.1))) diff --git a/src/RaZ/Script/LuaRenderSystem.cpp b/src/RaZ/Script/LuaRenderSystem.cpp index 4a46cc75..c8243d54 100644 --- a/src/RaZ/Script/LuaRenderSystem.cpp +++ b/src/RaZ/Script/LuaRenderSystem.cpp @@ -27,6 +27,8 @@ void LuaWrapper::registerRenderSystemTypes() { #endif >(), sol::base_classes, sol::bases()); + renderSystem["getSceneWidth"] = &RenderSystem::getSceneWidth; + renderSystem["getSceneHeight"] = &RenderSystem::getSceneHeight; #if !defined(RAZ_NO_WINDOW) renderSystem["hasWindow"] = &RenderSystem::hasWindow; renderSystem["getWindow"] = PickNonConstOverload<>(&RenderSystem::getWindow); diff --git a/tests/src/RaZ/Render/RenderProcess.cpp b/tests/src/RaZ/Render/RenderProcess.cpp index ebef8c3f..07d1906f 100644 --- a/tests/src/RaZ/Render/RenderProcess.cpp +++ b/tests/src/RaZ/Render/RenderProcess.cpp @@ -43,15 +43,16 @@ TEST_CASE("CannyFilterRenderProcess execution", "[render]") { world.addEntityWithComponents(); const Raz::Image gradientImg = Raz::ImageFormat::load(RAZ_TESTS_ROOT "assets/renders/cook-torrance_ball_sobel_grad.png", true); - REQUIRE(gradientImg.getWidth() == window.getWidth()); - REQUIRE(gradientImg.getHeight() == window.getHeight()); + REQUIRE(gradientImg.getWidth() == render.getSceneWidth()); + REQUIRE(gradientImg.getHeight() == render.getSceneHeight()); const Raz::Image gradDirImg = Raz::ImageFormat::load(RAZ_TESTS_ROOT "assets/renders/cook-torrance_ball_sobel_grad_dir.png", true); - REQUIRE(gradDirImg.getWidth() == window.getWidth()); - REQUIRE(gradDirImg.getHeight() == window.getHeight()); + REQUIRE(gradDirImg.getWidth() == render.getSceneWidth()); + REQUIRE(gradDirImg.getHeight() == render.getSceneHeight()); Raz::Texture2DPtr gradientInput = Raz::Texture2D::create(gradientImg); Raz::Texture2DPtr gradDirInput = Raz::Texture2D::create(gradDirImg); - const Raz::Texture2DPtr output = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::GRAY, Raz::TextureDataType::BYTE); + const Raz::Texture2DPtr output = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::GRAY, Raz::TextureDataType::BYTE); auto& canny = render.getRenderGraph().addRenderProcess(); canny.addParent(render.getGeometryPass()); @@ -82,11 +83,12 @@ TEST_CASE("ChromaticAberrationRenderProcess execution", "[render]") { world.addEntityWithComponents(); const Raz::Image baseImg = Raz::ImageFormat::load(RAZ_TESTS_ROOT "assets/renders/cook-torrance_ball_base.png", true); - REQUIRE(baseImg.getWidth() == window.getWidth()); - REQUIRE(baseImg.getHeight() == window.getHeight()); + REQUIRE(baseImg.getWidth() == render.getSceneWidth()); + REQUIRE(baseImg.getHeight() == render.getSceneHeight()); Raz::Texture2DPtr input = Raz::Texture2D::create(baseImg); - const Raz::Texture2DPtr output = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); + const Raz::Texture2DPtr output = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); auto& chromaticAberration = render.getRenderGraph().addRenderProcess(); chromaticAberration.addParent(render.getGeometryPass()); @@ -128,11 +130,12 @@ TEST_CASE("ConvolutionRenderProcess execution", "[render]") { world.addEntityWithComponents(); const Raz::Image baseImg = Raz::ImageFormat::load(RAZ_TESTS_ROOT "assets/renders/cook-torrance_ball_base.png", true); - REQUIRE(baseImg.getWidth() == window.getWidth()); - REQUIRE(baseImg.getHeight() == window.getHeight()); + REQUIRE(baseImg.getWidth() == render.getSceneWidth()); + REQUIRE(baseImg.getHeight() == render.getSceneHeight()); Raz::Texture2DPtr input = Raz::Texture2D::create(baseImg); - const Raz::Texture2DPtr output = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); + const Raz::Texture2DPtr output = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); // Giving a unit kernel so that the output is the same as the input auto& convolution = render.getRenderGraph().addRenderProcess(Raz::Mat3f(0.f, 0.f, 0.f, @@ -162,8 +165,9 @@ TEST_CASE("FilmGrainRenderProcess execution", "[render][!mayfail]") { // May fai // RenderSystem::update() needs a Camera with a Transform component world.addEntityWithComponents(); - Raz::Texture2DPtr input = Raz::Texture2D::create(Raz::ColorPreset::White, window.getWidth(), window.getHeight()); - const Raz::Texture2DPtr output = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); + Raz::Texture2DPtr input = Raz::Texture2D::create(Raz::ColorPreset::White, render.getSceneWidth(), render.getSceneHeight()); + const Raz::Texture2DPtr output = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); auto& filmGrain = render.getRenderGraph().addRenderProcess(); filmGrain.addParent(render.getGeometryPass()); @@ -189,11 +193,12 @@ TEST_CASE("PixelizationRenderProcess execution", "[render][!mayfail]") { // May world.addEntityWithComponents(); const Raz::Image baseImg = Raz::ImageFormat::load(RAZ_TESTS_ROOT "assets/renders/cook-torrance_ball_base.png", true); - REQUIRE(baseImg.getWidth() == window.getWidth()); - REQUIRE(baseImg.getHeight() == window.getHeight()); + REQUIRE(baseImg.getWidth() == render.getSceneWidth()); + REQUIRE(baseImg.getHeight() == render.getSceneHeight()); Raz::Texture2DPtr input = Raz::Texture2D::create(baseImg); - const Raz::Texture2DPtr output = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); + const Raz::Texture2DPtr output = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); auto& pixelization = render.getRenderGraph().addRenderProcess(); pixelization.addParent(render.getGeometryPass()); @@ -219,12 +224,14 @@ TEST_CASE("SobelFilterRenderProcess execution", "[render]") { world.addEntityWithComponents(); const Raz::Image baseImg = Raz::ImageFormat::load(RAZ_TESTS_ROOT "assets/renders/cook-torrance_ball_base.png", true); - REQUIRE(baseImg.getWidth() == window.getWidth()); - REQUIRE(baseImg.getHeight() == window.getHeight()); + REQUIRE(baseImg.getWidth() == render.getSceneWidth()); + REQUIRE(baseImg.getHeight() == render.getSceneHeight()); Raz::Texture2DPtr input = Raz::Texture2D::create(baseImg); - const Raz::Texture2DPtr outputGrad = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); - const Raz::Texture2DPtr outputGradDir = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); + const Raz::Texture2DPtr outputGrad = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); + const Raz::Texture2DPtr outputGradDir = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); auto& sobel = render.getRenderGraph().addRenderProcess(); sobel.addParent(render.getGeometryPass()); @@ -249,8 +256,9 @@ TEST_CASE("VignetteRenderProcess execution", "[render]") { // RenderSystem::update() needs a Camera with a Transform component world.addEntityWithComponents(); - Raz::Texture2DPtr input = Raz::Texture2D::create(Raz::ColorPreset::White, window.getWidth(), window.getHeight()); - const Raz::Texture2DPtr output = Raz::Texture2D::create(window.getWidth(), window.getHeight(), Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); + Raz::Texture2DPtr input = Raz::Texture2D::create(Raz::ColorPreset::White, render.getSceneWidth(), render.getSceneHeight()); + const Raz::Texture2DPtr output = Raz::Texture2D::create(render.getSceneWidth(), render.getSceneHeight(), + Raz::TextureColorspace::RGB, Raz::TextureDataType::BYTE); auto& vignette = render.getRenderGraph().addRenderProcess(); vignette.addParent(render.getGeometryPass()); diff --git a/tests/src/RaZ/Render/RenderSystem.cpp b/tests/src/RaZ/Render/RenderSystem.cpp index 0441b155..5886508e 100644 --- a/tests/src/RaZ/Render/RenderSystem.cpp +++ b/tests/src/RaZ/Render/RenderSystem.cpp @@ -27,8 +27,9 @@ Raz::Image renderFrame(Raz::World& world, const Raz::FilePath& renderedImgPath = window.run(0.f); // Recovering the rendered frame into an image - Raz::Image renderedImg(window.getWidth(), window.getHeight(), Raz::ImageColorspace::RGB, Raz::ImageDataType::BYTE); - Raz::Renderer::recoverFrame(window.getWidth(), window.getHeight(), Raz::TextureFormat::RGB, Raz::PixelDataType::UBYTE, renderedImg.getDataPtr()); + auto& renderSystem = world.getSystem(); + Raz::Image renderedImg(renderSystem.getSceneWidth(), renderSystem.getSceneHeight(), Raz::ImageColorspace::RGB, Raz::ImageDataType::BYTE); + Raz::Renderer::recoverFrame(renderedImg.getWidth(), renderedImg.getHeight(), Raz::TextureFormat::RGB, Raz::PixelDataType::UBYTE, renderedImg.getDataPtr()); if (!renderedImgPath.isEmpty()) Raz::ImageFormat::save(renderedImgPath, renderedImg, true); @@ -64,7 +65,7 @@ TEST_CASE("RenderSystem Cook-Torrance ball", "[render]") { Raz::Entity& camera = world.addEntity(); auto& cameraTrans = camera.addComponent(Raz::Vec3f(0.f, 0.f, 3.f)); - auto& cameraComp = camera.addComponent(window.getWidth(), window.getHeight()); + auto& cameraComp = camera.addComponent(renderSystem.getSceneWidth(), renderSystem.getSceneHeight()); world.addEntityWithComponent().addComponent(Raz::MeshFormat::load(RAZ_TESTS_ROOT "../assets/meshes/ball.obj").second); @@ -99,10 +100,10 @@ TEST_CASE("RenderSystem Cook-Torrance alpha mask", "[render]") { const Raz::Window& window = TestUtils::getWindow(); - world.addSystem(window.getWidth(), window.getHeight()); + auto& renderSystem = world.addSystem(window.getWidth(), window.getHeight()); Raz::Entity& camera = world.addEntityWithComponent(Raz::Vec3f(0.f, 0.f, 3.f)); - camera.addComponent(window.getWidth(), window.getHeight()); + camera.addComponent(renderSystem.getSceneWidth(), renderSystem.getSceneHeight()); Raz::Entity& plane = world.addEntityWithComponent(Raz::Vec3f(0.f), Raz::Quaternionf(90_deg, Raz::Axis::X)); auto& meshRenderer = plane.addComponent(Raz::Mesh(Raz::Plane(0.f), 1.f, 1.f)); diff --git a/tests/src/RaZ/Script/LuaRender.cpp b/tests/src/RaZ/Script/LuaRender.cpp index 183ffb2a..22b8ea58 100644 --- a/tests/src/RaZ/Script/LuaRender.cpp +++ b/tests/src/RaZ/Script/LuaRender.cpp @@ -588,6 +588,8 @@ TEST_CASE("LuaRender RenderSystem", "[script][lua][render]") { local renderSystem = RenderSystem.new() renderSystem = RenderSystem.new(1, 1) + assert(renderSystem:getSceneWidth() == 1) + assert(renderSystem:getSceneHeight() == 1) assert(renderSystem:getGeometryPass() ~= nil) assert(renderSystem:getRenderGraph() ~= nil)