From 128fcdac26a9f7b6eb5174b88483c7ca023f210b Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 23 Jan 2014 00:47:49 +0100 Subject: OpenGL: refactor all of our StreamBuffers The old way was to use big switch/case statements based on a type of buffer. The new one is to use inheritance. This change prohibits us to change the buffer type while running, but I doubt we'll ever do so. Performance should also be a bit better. Also a nice cleanup. Added some comments about this different kind of buffers. --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 8f3a545261..000398c787 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -193,18 +193,18 @@ void ProgramShaderCache::UploadConstants() { if(PixelShaderManager::dirty || VertexShaderManager::dirty) { - u8* buffer = s_buffer->Map(s_ubo_buffer_size, s_ubo_align); + auto buffer = s_buffer->Map(s_ubo_buffer_size, s_ubo_align); - memcpy(buffer, + memcpy(buffer.first, &PixelShaderManager::constants, sizeof(PixelShaderConstants)); - memcpy(buffer + ROUND_UP(sizeof(PixelShaderConstants), s_ubo_align), + memcpy(buffer.first + ROUND_UP(sizeof(PixelShaderConstants), s_ubo_align), &VertexShaderManager::constants, sizeof(VertexShaderConstants)); - size_t offset = s_buffer->Unmap(s_ubo_buffer_size); - glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_buffer->getBuffer(), offset, + s_buffer->Unmap(s_ubo_buffer_size); + glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_buffer->m_buffer, buffer.second, sizeof(PixelShaderConstants)); - glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_buffer->getBuffer(), offset + ROUND_UP(sizeof(PixelShaderConstants), s_ubo_align), + glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_buffer->m_buffer, buffer.second + ROUND_UP(sizeof(PixelShaderConstants), s_ubo_align), sizeof(VertexShaderConstants)); PixelShaderManager::dirty = false; @@ -471,7 +471,7 @@ void ProgramShaderCache::Init(void) // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - s_buffer = new StreamBuffer(GL_UNIFORM_BUFFER, UBO_LENGTH); + s_buffer = StreamBuffer::Create(GL_UNIFORM_BUFFER, UBO_LENGTH); } // Read our shader cache, only if supported -- cgit v1.2.3