#include #include #include #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_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(scene, true); auto uncached = std::make_shared(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); }