加所有权之前
This commit is contained in:
@@ -139,41 +139,36 @@ int main() {
|
||||
auto* resized_partition_frame = new Frame_2D(Frame_Identity{2, 0});
|
||||
frame->request_taskflow_trace();
|
||||
resized_partition_frame->request_taskflow_trace();
|
||||
scene->set_frame_retired_callback(
|
||||
[resized_partition_frame, second_frame_valid, trace_valid](
|
||||
Frame_2D* retired) {
|
||||
const auto trace = retired->take_taskflow_trace();
|
||||
bool spectrum_hold{};
|
||||
bool afterglow_reduce{};
|
||||
bool afterglow_color_barrier{};
|
||||
for (const auto& graph : trace.graphs)
|
||||
for (const auto& node : graph.nodes) {
|
||||
spectrum_hold = spectrum_hold ||
|
||||
node.name == "prepare.hold.partition";
|
||||
afterglow_reduce = afterglow_reduce ||
|
||||
node.name == "prepare.normalize";
|
||||
afterglow_color_barrier = afterglow_color_barrier ||
|
||||
node.name == "prepare.color.complete";
|
||||
}
|
||||
if (!spectrum_hold || !afterglow_reduce ||
|
||||
!afterglow_color_barrier)
|
||||
trace_valid->store(false, std::memory_order_relaxed);
|
||||
if (retired == resized_partition_frame)
|
||||
std::_Exit(second_frame_valid->load(std::memory_order_relaxed) &&
|
||||
trace_valid->load(std::memory_order_relaxed)
|
||||
? 0
|
||||
: 1);
|
||||
});
|
||||
const auto validate_trace = [trace_valid](Frame_2D* completed) {
|
||||
const auto trace = completed->take_taskflow_trace();
|
||||
bool spectrum_hold{};
|
||||
bool afterglow_reduce{};
|
||||
bool afterglow_color_barrier{};
|
||||
for (const auto& graph : trace.graphs)
|
||||
for (const auto& node : graph.nodes) {
|
||||
spectrum_hold = spectrum_hold ||
|
||||
node.name == "prepare.hold.partition";
|
||||
afterglow_reduce = afterglow_reduce ||
|
||||
node.name == "prepare.normalize";
|
||||
afterglow_color_barrier = afterglow_color_barrier ||
|
||||
node.name == "prepare.color.complete";
|
||||
}
|
||||
if (!spectrum_hold || !afterglow_reduce ||
|
||||
!afterglow_color_barrier)
|
||||
trace_valid->store(false, std::memory_order_relaxed);
|
||||
};
|
||||
scene->set_frame_callback(
|
||||
[scene, spectrum, waterfall, afterglow, constellation, frame,
|
||||
resized_partition_frame, spectrum_painted,
|
||||
topology_valid, second_frame_valid](Frame_2D* completed) {
|
||||
topology_valid, second_frame_valid, trace_valid,
|
||||
validate_trace](Frame_2D* completed) {
|
||||
const bool valid = completed == frame &&
|
||||
spectrum->read_state<Spectrum::Base_Tag>().sample_count ==
|
||||
512 &&
|
||||
topology_valid->load(std::memory_order_relaxed) &&
|
||||
contains_color(completed->image());
|
||||
if (!valid) std::_Exit(1);
|
||||
validate_trace(completed);
|
||||
|
||||
spectrum->set<&Spectrum::Prop::partition_count>(2u);
|
||||
waterfall->set<&Waterfall::Prop::partition_grid>(
|
||||
@@ -188,13 +183,20 @@ int main() {
|
||||
spectrum_painted->store(false, std::memory_order_relaxed);
|
||||
scene->set_frame_callback(
|
||||
[resized_partition_frame, second_frame_valid,
|
||||
topology_valid](Frame_2D* next) {
|
||||
topology_valid, trace_valid,
|
||||
validate_trace](Frame_2D* next) {
|
||||
const bool resized_valid =
|
||||
next == resized_partition_frame &&
|
||||
topology_valid->load(std::memory_order_relaxed) &&
|
||||
contains_color(next->image());
|
||||
second_frame_valid->store(resized_valid,
|
||||
std::memory_order_relaxed);
|
||||
validate_trace(next);
|
||||
std::_Exit(
|
||||
second_frame_valid->load(std::memory_order_relaxed) &&
|
||||
trace_valid->load(std::memory_order_relaxed)
|
||||
? 0
|
||||
: 1);
|
||||
});
|
||||
if (!scene->render(resized_partition_frame)) std::_Exit(2);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user