Files
Renderive/render_3D/tests/Scene_Frame_Control_Tests.cpp
T
2026-08-14 06:22:14 +08:00

47 lines
1.6 KiB
C++

#include <render_3D/scene/Basic_Scene3D.h>
#include <gtest/gtest.h>
#include <chrono>
#include <future>
namespace renderive::render_3D {
using namespace std::chrono_literals;
TEST(Render3DFrameControl, LowLatencyBackpressuresInsteadOfReplacingPublishedFrame) {
Scene3D scene({.width = 64, .height = 64});
ASSERT_TRUE(scene.prepare_frame());
auto second_prepare = std::async(std::launch::async, [&] { return scene.prepare_frame(); });
EXPECT_EQ(second_prepare.wait_for(100ms), std::future_status::timeout);
EXPECT_TRUE(scene.render_frame());
ASSERT_EQ(second_prepare.wait_for(5s), std::future_status::ready);
EXPECT_TRUE(second_prepare.get());
EXPECT_TRUE(scene.render_frame());
}
TEST(Render3DFrameControl, ManualRefreshReleasesTheWaitingPainter) {
Manual_Scene3D scene({.width = 64, .height = 64});
ASSERT_TRUE(scene.prepare_frame());
auto second_prepare = std::async(std::launch::async, [&] { return scene.prepare_frame(); });
EXPECT_EQ(second_prepare.wait_for(100ms), std::future_status::timeout);
ASSERT_TRUE(scene.refresh());
ASSERT_EQ(second_prepare.wait_for(5s), std::future_status::ready);
EXPECT_TRUE(second_prepare.get());
EXPECT_TRUE(scene.render_frame());
ASSERT_TRUE(scene.refresh());
EXPECT_TRUE(scene.render_frame());
}
TEST(Render3DFrameControl, PlaybackPreservesQueuedFrames) {
Playback_Scene3D scene({.width = 64, .height = 64});
ASSERT_TRUE(scene.prepare_frame());
ASSERT_TRUE(scene.prepare_frame());
EXPECT_TRUE(scene.render_frame());
EXPECT_TRUE(scene.render_frame());
EXPECT_FALSE(scene.render_frame());
}
} // namespace renderive::render_3D