闪烁问题解决
This commit is contained in:
@@ -84,6 +84,7 @@ Render_Frame_Surface Explicit_Frame_Flow::begin_render_frame() {
|
||||
if (render_job_active.exchange(true, std::memory_order_acq_rel))
|
||||
return {};
|
||||
auto output = std::make_shared<Render_Output>();
|
||||
output->render_complete.store(false, std::memory_order_release);
|
||||
auto handle = std::make_unique<Explicit_Render_Surface_Handle>(output);
|
||||
auto* output_pointer = output.get();
|
||||
std::uint64_t input_version = edit_version.load(std::memory_order_acquire);
|
||||
@@ -107,6 +108,17 @@ Render_Surface_Publish_Result Explicit_Frame_Flow::publish_rendered_frame(Render
|
||||
render_job_active.store(false, std::memory_order_release);
|
||||
return result;
|
||||
}
|
||||
if (!handle->output->render_complete.load(std::memory_order_acquire)
|
||||
|| !handle->output->metadata
|
||||
|| !handle->output->metadata->render_end_ns
|
||||
|| handle->output->image.empty()) {
|
||||
if (handle->output->metadata)
|
||||
handle->output->metadata->outcome = Frame_Outcome::Publish_Dropped;
|
||||
result.dropped_frame_record = handle->output->metadata;
|
||||
supersede_update_states(handle->output->presented_update_states);
|
||||
render_job_active.store(false, std::memory_order_release);
|
||||
return result;
|
||||
}
|
||||
if (handle->output->metadata) {
|
||||
handle->output->metadata->transition_12_ns = now_ns;
|
||||
handle->output->metadata->ready_queue_wait_ns = now_ns > handle->output->metadata->render_end_ns ? now_ns - handle->output->metadata->render_end_ns : 0;
|
||||
|
||||
Reference in New Issue
Block a user