diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2017-09-13 11:10:54 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-09-22 09:42:47 +0000 |
commit | 208ed2c5f160ea05c92acf4ad4ea54496caaef80 (patch) | |
tree | 3a897e8c082016085623e5cfb17de3356d09f2cf /src/render/graphicshelpers/graphicscontext.cpp | |
parent | 63835e2a2cdbaf88a5e87d07c19346861677247b (diff) |
Explicitly pass binding point on buffer creation
This way we don't rely on the buffer type member in those case, this can
be all determined from the current context anyway. It also prevents
forcing a single use for a buffer.
Change-Id: I8c5ec3878bd36ddbfd257adfb218561d44f18823
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/graphicshelpers/graphicscontext.cpp')
-rw-r--r-- | src/render/graphicshelpers/graphicscontext.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/render/graphicshelpers/graphicscontext.cpp b/src/render/graphicshelpers/graphicscontext.cpp index ec81bf829..0eb37e789 100644 --- a/src/render/graphicshelpers/graphicscontext.cpp +++ b/src/render/graphicshelpers/graphicscontext.cpp @@ -1220,7 +1220,7 @@ void GraphicsContext::setParameters(ShaderParameterPack ¶meterPack) int ssboIndex = 0; for (const BlockToSSBO b : blockToSSBOs) { Buffer *cpuBuffer = m_renderer->nodeManagers()->bufferManager()->lookupResource(b.m_bufferID); - GLBuffer *ssbo = glBufferForRenderBuffer(cpuBuffer); + GLBuffer *ssbo = glBufferForRenderBuffer(cpuBuffer, GLBuffer::ShaderStorageBuffer); bindShaderStorageBlock(shader->programId(), b.m_blockIndex, ssboIndex); // Needed to avoid conflict where the buffer would already // be bound as a VertexArray @@ -1240,7 +1240,7 @@ void GraphicsContext::setParameters(ShaderParameterPack ¶meterPack) int uboIndex = 0; for (const BlockToUBO &b : blockToUBOs) { Buffer *cpuBuffer = m_renderer->nodeManagers()->bufferManager()->lookupResource(b.m_bufferID); - GLBuffer *ubo = glBufferForRenderBuffer(cpuBuffer); + GLBuffer *ubo = glBufferForRenderBuffer(cpuBuffer, GLBuffer::UniformBuffer); bindUniformBlock(shader->programId(), b.m_blockIndex, uboIndex); // Needed to avoid conflict where the buffer would already // be bound as a VertexArray @@ -1476,9 +1476,7 @@ void GraphicsContext::specifyAttribute(const Attribute *attribute, void GraphicsContext::specifyIndices(Buffer *buffer) { - Q_ASSERT(buffer->type() == QBuffer::IndexBuffer); - - GLBuffer *buf = glBufferForRenderBuffer(buffer); + GLBuffer *buf = glBufferForRenderBuffer(buffer, GLBuffer::IndexBuffer); if (!bindGLBuffer(buf, GLBuffer::IndexBuffer)) qCWarning(Backend) << Q_FUNC_INFO << "binding index buffer failed"; @@ -1585,14 +1583,14 @@ void GraphicsContext::memoryBarrier(QMemoryBarrier::Operations barriers) m_glHelper->memoryBarrier(barriers); } -GLBuffer *GraphicsContext::glBufferForRenderBuffer(Buffer *buf) +GLBuffer *GraphicsContext::glBufferForRenderBuffer(Buffer *buf, GLBuffer::Type type) { if (!m_renderBufferHash.contains(buf->peerId())) - m_renderBufferHash.insert(buf->peerId(), createGLBufferFor(buf)); + m_renderBufferHash.insert(buf->peerId(), createGLBufferFor(buf, type)); return m_renderer->nodeManagers()->glBufferManager()->data(m_renderBufferHash.value(buf->peerId())); } -HGLBuffer GraphicsContext::createGLBufferFor(Buffer *buffer) +HGLBuffer GraphicsContext::createGLBufferFor(Buffer *buffer, GLBuffer::Type type) { GLBuffer *b = m_renderer->nodeManagers()->glBufferManager()->getOrCreateResource(buffer->peerId()); // b.setUsagePattern(static_cast<QOpenGLBuffer::UsagePattern>(buffer->usage())); @@ -1600,7 +1598,7 @@ HGLBuffer GraphicsContext::createGLBufferFor(Buffer *buffer) if (!b->create(this)) qCWarning(Render::Io) << Q_FUNC_INFO << "buffer creation failed"; - if (!bindGLBuffer(b, bufferTypeToGLBufferType(buffer->type()))) + if (!bindGLBuffer(b, type)) qCWarning(Render::Io) << Q_FUNC_INFO << "buffer binding failed"; return m_renderer->nodeManagers()->glBufferManager()->lookupHandle(buffer->peerId()); |