核心模板架构
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "renderive/renderable/Renderable.hpp"
|
||||
#include "renderive/scene/Scene.hpp"
|
||||
struct Scene2D_Render_Order_State {
|
||||
std::vector<std::uint64_t> render_order;
|
||||
};
|
||||
struct Scene2D_Render_Order_Renderable : Renderable_Base {
|
||||
Scene2D_Render_Order_Renderable(Scene_Base& scene, Scene2D_Render_Order_State& state, std::uint64_t id)
|
||||
: Renderable_Base(scene, {.cache_enabled = false}), state(&state), id(id) {}
|
||||
void render(const Scene_Render_Context& context) override {
|
||||
state->render_order.push_back(id);
|
||||
dynamic_cast<Recording_Color_Cache&>(*context.color_cache).append(id);
|
||||
}
|
||||
Scene2D_Render_Order_State* state;
|
||||
std::uint64_t id;
|
||||
};
|
||||
TEST(scene2d_render_order_test, separates_dependency_order_from_display_order) {
|
||||
Scene2D_Context<> scene;
|
||||
Scene2D_Render_Order_State state;
|
||||
auto spectrum = std::make_shared<Scene2D_Render_Order_Renderable>(scene, state, 2);
|
||||
auto axis = std::make_shared<Scene2D_Render_Order_Renderable>(scene, state, 1);
|
||||
scene.attach_renderable(spectrum);
|
||||
scene.attach_renderable(axis);
|
||||
axis->dependency_node.append_child(spectrum->dependency_node);
|
||||
spectrum->layer_node.append_child(axis->layer_node);
|
||||
scene.render();
|
||||
scene.wait_for_render();
|
||||
EXPECT_EQ(state.render_order, (std::vector<std::uint64_t>{1, 2}));
|
||||
EXPECT_EQ(scene.final_color_cache.values, (std::vector<std::uint64_t>{2, 1}));
|
||||
}
|
||||
Reference in New Issue
Block a user