核心模板架构
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <cmath>
|
||||
#include <memory>
|
||||
#include "renderive/renderable/Renderable.hpp"
|
||||
#include "renderive/scene/Scene.hpp"
|
||||
struct Renderable_Base_Test_Renderable : Renderable_Base {
|
||||
Renderable_Base_Test_Renderable(Scene_Base& scene, bool cache_enabled) : Renderable_Base(scene, {.cache_enabled = cache_enabled}) {}
|
||||
void render(const Scene_Render_Context&) override {
|
||||
++render_count;
|
||||
}
|
||||
int render_count{};
|
||||
};
|
||||
TEST(renderable_base_test, exposes_scene_and_strategy_members_directly) {
|
||||
Scene2D_Context<> low_latency_scene;
|
||||
Scene2D_Context<Manual_Refresh_Strategy<Scene2D_Frame_Data>> manual_scene;
|
||||
Renderable_Base_Test_Renderable low_latency_renderable(low_latency_scene, true);
|
||||
Renderable_Base_Test_Renderable manual_renderable(manual_scene, true);
|
||||
EXPECT_EQ(low_latency_renderable.scene, &low_latency_scene);
|
||||
EXPECT_EQ(low_latency_renderable.scene->frame_control_strategy, &low_latency_scene.frame_control);
|
||||
EXPECT_DOUBLE_EQ(low_latency_renderable.scene->frame_control_strategy->frequency_hz(), 60.0);
|
||||
EXPECT_TRUE(std::isnan(manual_renderable.scene->frame_control_strategy->frequency_hz()));
|
||||
}
|
||||
TEST(renderable_base_test, controls_cache_with_configuration) {
|
||||
Scene2D_Context<> scene;
|
||||
auto cached = std::make_shared<Renderable_Base_Test_Renderable>(scene, true);
|
||||
auto uncached = std::make_shared<Renderable_Base_Test_Renderable>(scene, false);
|
||||
scene.attach_renderable(cached);
|
||||
scene.attach_renderable(uncached);
|
||||
scene.render();
|
||||
scene.wait_for_render();
|
||||
scene.render();
|
||||
scene.wait_for_render();
|
||||
EXPECT_EQ(cached->render_count, 1);
|
||||
EXPECT_EQ(uncached->render_count, 2);
|
||||
cached->invalidate_cache();
|
||||
scene.render();
|
||||
scene.wait_for_render();
|
||||
EXPECT_EQ(cached->render_count, 2);
|
||||
EXPECT_EQ(uncached->render_count, 3);
|
||||
}
|
||||
Reference in New Issue
Block a user