diff --git a/Outputs/CRT/CRT.cpp b/Outputs/CRT/CRT.cpp index 61616e70a..3f4823229 100644 --- a/Outputs/CRT/CRT.cpp +++ b/Outputs/CRT/CRT.cpp @@ -203,10 +203,13 @@ void CRT::advance_cycles(unsigned int number_of_cycles, unsigned int source_divi // Construct the output run uint8_t *next_run = openGL_output_builder_.array_builder.get_output_storage(OutputVertexSize); - output_x1() = output_run_.x1; - output_position_y() = output_run_.y; - output_tex_y() = output_y; - output_x2() = (uint16_t)horizontal_flywheel_->get_current_output_position(); + if(next_run) + { + output_x1() = output_run_.x1; + output_position_y() = output_run_.y; + output_tex_y() = output_y; + output_x2() = (uint16_t)horizontal_flywheel_->get_current_output_position(); + } openGL_output_builder_.array_builder.flush(); openGL_output_builder_.unlock_output(); diff --git a/Outputs/CRT/Internals/ArrayBuilder.cpp b/Outputs/CRT/Internals/ArrayBuilder.cpp index 43eff9698..d3666fb5c 100644 --- a/Outputs/CRT/Internals/ArrayBuilder.cpp +++ b/Outputs/CRT/Internals/ArrayBuilder.cpp @@ -130,7 +130,13 @@ uint8_t *ArrayBuilder::Buffer::reget_storage(size_t &size) void ArrayBuilder::Buffer::flush() { - if(submitted_data && !is_full && allocated_data > submitted_data) + if(allocated_data > submitted_data) + { + flushed_data = allocated_data; + return; + } + + if(submitted_data) { memcpy(data.data(), &data[flushed_data], allocated_data - flushed_data); allocated_data -= flushed_data; diff --git a/Outputs/CRT/Internals/ArrayBuilder.hpp b/Outputs/CRT/Internals/ArrayBuilder.hpp index 2f00a64bb..6d9a0587a 100644 --- a/Outputs/CRT/Internals/ArrayBuilder.hpp +++ b/Outputs/CRT/Internals/ArrayBuilder.hpp @@ -11,7 +11,7 @@ #include #include -#include +#include #include "OpenGL.hpp"