改造一些
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "Renderable_Base.hpp"
|
||||
#include <stdexcept>
|
||||
#include <algorithm>
|
||||
#include "renderive/real_time_data/base/Real_Time_Data_Base.hpp"
|
||||
#include "renderive/scene/base/Scene_Base.hpp"
|
||||
Renderable_Base::Renderable_Base(Scene_Base& scene, Renderable_Configuration configuration)
|
||||
: memory_domain_(scene.memory_domain_), real_time_data_state_(std::allocate_shared<Real_Time_Data_State>(Scene_Memory_Allocator<Real_Time_Data_State>{memory_domain_}, scene.scene_lifetime_)), discard_stale_frame_on_latest_data_update(real_time_data_state_->discard_stale_frame_on_latest_data_update), layer_node_(this, memory_domain_->resource()), dependency_node_(this, memory_domain_->resource()), configuration_(configuration) {}
|
||||
@@ -55,6 +57,12 @@ void Renderable_Base::build_task_graph(Renderable_Task_Graph& graph) {
|
||||
render(context);
|
||||
}, "render");
|
||||
}
|
||||
Render_State_View Renderable_Base::render_state_view() const noexcept {
|
||||
return {};
|
||||
}
|
||||
Real_Time_Data_Binding Renderable_Base::bind_real_time_data(Real_Time_Data_Base& data) {
|
||||
return data.bind_renderable(*this);
|
||||
}
|
||||
bool Renderable_Base::requires_render() const noexcept {
|
||||
const auto config = configuration();
|
||||
return !config.cache_enabled || rendered_cache_revision() != cache_revision();
|
||||
@@ -66,3 +74,19 @@ void Renderable_Base::set_configuration(Renderable_Configuration configuration)
|
||||
std::lock_guard lock(configuration_mutex_);
|
||||
configuration_ = configuration;
|
||||
}
|
||||
void Renderable_Base::register_real_time_data(Real_Time_Data_Base& data) {
|
||||
std::lock_guard lock(real_time_data_mutex_);
|
||||
if (std::find(real_time_data_.begin(), real_time_data_.end(), &data) == real_time_data_.end()) {
|
||||
real_time_data_.push_back(&data);
|
||||
}
|
||||
}
|
||||
void Renderable_Base::unregister_real_time_data(Real_Time_Data_Base& data) noexcept {
|
||||
std::lock_guard lock(real_time_data_mutex_);
|
||||
std::erase(real_time_data_, &data);
|
||||
}
|
||||
void Renderable_Base::publish_real_time_data() {
|
||||
std::lock_guard lock(real_time_data_mutex_);
|
||||
for (Real_Time_Data_Base* data : real_time_data_) {
|
||||
data->publish_render_state();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user