47 lines
1.6 KiB
C++
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
|