From 4c29d493f13f39fc6f6b07677a4744b8586a3c1d Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 21 Nov 2015 22:17:59 +0100 Subject: [PATCH] Unify the texture upload paths a bit. --- mixer.cpp | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/mixer.cpp b/mixer.cpp index e3af878..9df2201 100644 --- a/mixer.cpp +++ b/mixer.cpp @@ -324,14 +324,6 @@ void Mixer::bm_frame(unsigned card_index, uint16_t timecode, } PBOFrameAllocator::Userdata *userdata = (PBOFrameAllocator::Userdata *)video_frame.userdata; - GLuint pbo = userdata->pbo; - check_error(); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); - check_error(); - glFlushMappedBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, video_frame.size); - check_error(); - //glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT); - //check_error(); // Upload the textures. size_t cbcr_width = width / 2; @@ -344,24 +336,33 @@ void Mixer::bm_frame(unsigned card_index, uint16_t timecode, // we don't need to worry about these flip-flopping between resolutions. glBindTexture(GL_TEXTURE_2D, userdata->tex_cbcr); check_error(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RG8, cbcr_width, height, 0, GL_RG, GL_UNSIGNED_BYTE, BUFFER_OFFSET(cbcr_offset + cbcr_width * extra_lines_top * sizeof(uint16_t))); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RG8, cbcr_width, height, 0, GL_RG, GL_UNSIGNED_BYTE, nullptr); check_error(); glBindTexture(GL_TEXTURE_2D, userdata->tex_y); check_error(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, BUFFER_OFFSET(y_offset + width * extra_lines_top)); + glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, nullptr); check_error(); userdata->last_width = width; userdata->last_height = height; - } else { - glBindTexture(GL_TEXTURE_2D, userdata->tex_cbcr); - check_error(); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, cbcr_width, height, GL_RG, GL_UNSIGNED_BYTE, BUFFER_OFFSET(cbcr_offset + cbcr_width * extra_lines_top * sizeof(uint16_t))); - check_error(); - glBindTexture(GL_TEXTURE_2D, userdata->tex_y); - check_error(); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RED, GL_UNSIGNED_BYTE, BUFFER_OFFSET(y_offset + width * extra_lines_top)); - check_error(); } + + GLuint pbo = userdata->pbo; + check_error(); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); + check_error(); + glFlushMappedBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, video_frame.size); + check_error(); + //glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT); + //check_error(); + + glBindTexture(GL_TEXTURE_2D, userdata->tex_cbcr); + check_error(); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, cbcr_width, height, GL_RG, GL_UNSIGNED_BYTE, BUFFER_OFFSET(cbcr_offset + cbcr_width * extra_lines_top * sizeof(uint16_t))); + check_error(); + glBindTexture(GL_TEXTURE_2D, userdata->tex_y); + check_error(); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RED, GL_UNSIGNED_BYTE, BUFFER_OFFSET(y_offset + width * extra_lines_top)); + check_error(); glBindTexture(GL_TEXTURE_2D, 0); check_error(); GLsync fence = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, /*flags=*/0); -- 2.39.2