From 026ce0255f57650650b27a9d5f16bc1a1d810ff4 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 13 Apr 2016 22:20:13 -0400 Subject: [PATCH] Source runs are now captured, and that buffer appropriately reset. --- Machines/Electron/Electron.cpp | 2 +- Outputs/CRT/Internals/CRTOpenGL.cpp | 4 ++++ Outputs/CRT/Internals/CRTOpenGL.hpp | 8 +++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Machines/Electron/Electron.cpp b/Machines/Electron/Electron.cpp index 81c466d41..cd8bf65c3 100644 --- a/Machines/Electron/Electron.cpp +++ b/Machines/Electron/Electron.cpp @@ -65,7 +65,7 @@ void Machine::setup_output(float aspect_ratio) "texValue >>= 4 - (int(icoordinate.x * 8) & 4);" "return vec3( uvec3(texValue) & uvec3(4u, 2u, 1u));" "}"); - _crt->set_output_device(Outputs::CRT::Monitor); + _crt->set_output_device(Outputs::CRT::Television); _crt->set_visible_area(_crt->get_rect_for_area(first_graphics_line - 3, 256, first_graphics_cycle * crt_cycles_multiplier, 80 * crt_cycles_multiplier, 4.0f / 3.0f)); // The maximum output frequency is 62500Hz and all other permitted output frequencies are integral divisions of that; diff --git a/Outputs/CRT/Internals/CRTOpenGL.cpp b/Outputs/CRT/Internals/CRTOpenGL.cpp index 5ab01bb02..2987c7547 100644 --- a/Outputs/CRT/Internals/CRTOpenGL.cpp +++ b/Outputs/CRT/Internals/CRTOpenGL.cpp @@ -248,9 +248,13 @@ void OpenGLOutputBuilder::draw_frame(unsigned int output_width, unsigned int out // drawing commands having been issued, reclaim the array buffer pointer glBindBuffer(GL_ARRAY_BUFFER, output_array_buffer); _output_buffer_data = (uint8_t *)glMapBufferRange(GL_ARRAY_BUFFER, 0, OutputVertexBufferDataSize, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); + glBindBuffer(GL_ARRAY_BUFFER, source_array_buffer); _source_buffer_data = (uint8_t *)glMapBufferRange(GL_ARRAY_BUFFER, 0, SourceVertexBufferDataSize, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); + _source_buffer_data_pointer = 0; + _input_texture_data = (uint8_t *)glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, _input_texture_array_size, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); + _output_mutex->unlock(); } diff --git a/Outputs/CRT/Internals/CRTOpenGL.hpp b/Outputs/CRT/Internals/CRTOpenGL.hpp index a6c8837b1..4407b3e00 100644 --- a/Outputs/CRT/Internals/CRTOpenGL.hpp +++ b/Outputs/CRT/Internals/CRTOpenGL.hpp @@ -106,18 +106,20 @@ class OpenGLOutputBuilder { inline uint8_t *get_next_source_run() { - return nullptr; + _output_mutex->lock(); + return &_source_buffer_data[_source_buffer_data_pointer]; } inline void complete_source_run() { + _source_buffer_data_pointer += 2 * SourceVertexSize; + _output_mutex->unlock(); } inline uint8_t *get_next_output_run() { _output_mutex->lock(); - uint8_t *pointer = &_output_buffer_data[_output_buffer_data_pointer]; - return pointer; + return &_output_buffer_data[_output_buffer_data_pointer]; } inline void complete_output_run(size_t vertices_written)