From a70991d50e4c81f254cc24cd7ed0582adba734de Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 19 Nov 2018 23:35:12 -0500 Subject: [PATCH] Eliminates minor gap. --- Outputs/OpenGL/ScanTarget.cpp | 36 +++-------------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/Outputs/OpenGL/ScanTarget.cpp b/Outputs/OpenGL/ScanTarget.cpp index f33048864..ad8ecdfda 100644 --- a/Outputs/OpenGL/ScanTarget.cpp +++ b/Outputs/OpenGL/ScanTarget.cpp @@ -336,33 +336,6 @@ void ScanTarget::announce(Event event, uint16_t x, uint16_t y) { // (maybe set a flag and zero out the line coordinates?) } -/*template void ScanTarget::patch_buffer(const T &array, GLuint target, uint16_t submit_pointer, uint16_t read_pointer) { - if(submit_pointer != read_pointer) { - // Bind the buffer and map it into CPU space. - glBindBuffer(GL_ARRAY_BUFFER, target); - - const auto buffer_size = array.size() * sizeof(array[0]); - uint8_t *destination = static_cast( - glMapBufferRange(GL_ARRAY_BUFFER, 0, GLsizeiptr(buffer_size), GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT) - ); - assert(destination); - - // Populate it with the oldest data first; the oldest are those from two beyond the submit pointer; - // one beyond is the one that may currently be mutating. - const uint16_t oldest_record = (submit_pointer + 2) % array.size(); - const size_t buffer_length = array.size() * sizeof(array[0]); - const size_t splice_point = oldest_record * sizeof(array[0]); - const size_t end_length = buffer_length - splice_point; - - memcpy(&destination[0], &array[oldest_record], end_length); - memcpy(&destination[end_length], &array[0], buffer_length - end_length); - - // Flush and unmap the buffer. - glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, GLsizeiptr(buffer_size)); - glUnmapBuffer(GL_ARRAY_BUFFER); - } -}*/ - void ScanTarget::draw(bool synchronous, int output_width, int output_height) { if(fence_ != nullptr) { // if the GPU is still busy, don't wait; we'll catch it next time @@ -375,7 +348,7 @@ void ScanTarget::draw(bool synchronous, int output_width, int output_height) { if(is_drawing_.test_and_set()) return; // Grab the current read and submit pointers. - auto submit_pointers = submit_pointers_.load(); + const auto submit_pointers = submit_pointers_.load(); const auto read_pointers = read_pointers_.load(); // Submit scans; only the new ones need to be communicated. @@ -513,9 +486,7 @@ void ScanTarget::draw(bool synchronous, int output_width, int output_height) { // Figure out how many new spans are ostensible ready; use two less than that. uint16_t new_spans = (submit_pointers.line + LineBufferHeight - read_pointers.line) % LineBufferHeight; - if(new_spans > 2) { - new_spans -= 2; - + if(new_spans) { // Bind the accumulation framebuffer. accumulation_texture_->bind_framebuffer(); @@ -534,7 +505,6 @@ void ScanTarget::draw(bool synchronous, int output_width, int output_height) { // Divide spans by which frame they're in. uint16_t start_line = read_pointers.line; - submit_pointers.line = (read_pointers.line + new_spans) % LineBufferHeight; while(new_spans) { uint16_t end_line = start_line+1; @@ -580,7 +550,7 @@ void ScanTarget::draw(bool synchronous, int output_width, int output_height) { new_spans -= spans; } - // Clear untouched parts of the display. (TODO: at vertical sync, probably) + // Disable blending and the stencil test again. glDisable(GL_STENCIL_TEST); glDisable(GL_BLEND); }