summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-09-13 11:10:54 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-09-22 09:42:47 +0000
commit208ed2c5f160ea05c92acf4ad4ea54496caaef80 (patch)
tree3a897e8c082016085623e5cfb17de3356d09f2cf /src/render
parent63835e2a2cdbaf88a5e87d07c19346861677247b (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')
-rw-r--r--src/render/backend/renderer.cpp6
-rw-r--r--src/render/graphicshelpers/graphicscontext.cpp16
-rw-r--r--src/render/graphicshelpers/graphicscontext_p.h4
3 files changed, 13 insertions, 13 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index da4ad0ae0..1ba178a3a 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -64,6 +64,7 @@
#include <Qt3DRender/private/renderqueue_p.h>
#include <Qt3DRender/private/shader_p.h>
#include <Qt3DRender/private/buffer_p.h>
+#include <Qt3DRender/private/glbuffer_p.h>
#include <Qt3DRender/private/renderstateset_p.h>
#include <Qt3DRender/private/technique_p.h>
#include <Qt3DRender/private/renderthread_p.h>
@@ -1078,8 +1079,9 @@ void Renderer::updateGLResources()
for (HBuffer handle: dirtyBufferHandles) {
Buffer *buffer = m_nodesManager->bufferManager()->data(handle);
// Forces creation if it doesn't exit
+ // Also note the binding point doesn't really matter here, we just upload data
if (!m_graphicsContext->hasGLBufferForBuffer(buffer))
- m_graphicsContext->glBufferForRenderBuffer(buffer);
+ m_graphicsContext->glBufferForRenderBuffer(buffer, GLBuffer::ArrayBuffer);
// Update the glBuffer data
m_graphicsContext->updateBuffer(buffer);
buffer->unsetDirty();
@@ -1604,7 +1606,7 @@ void Renderer::performDraw(RenderCommand *command)
}
// Get GLBuffer from Buffer;
- GLBuffer *indirectDrawGLBuffer = m_graphicsContext->glBufferForRenderBuffer(indirectDrawBuffer);
+ GLBuffer *indirectDrawGLBuffer = m_graphicsContext->glBufferForRenderBuffer(indirectDrawBuffer, GLBuffer::DrawIndirectBuffer);
if (Q_UNLIKELY(indirectDrawGLBuffer == nullptr)) {
qWarning() << "Invalid Indirect Draw Buffer - failed to retrieve GLBuffer";
return;
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 &parameterPack)
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 &parameterPack)
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());
diff --git a/src/render/graphicshelpers/graphicscontext_p.h b/src/render/graphicshelpers/graphicscontext_p.h
index 21ec90c58..6e5ab8520 100644
--- a/src/render/graphicshelpers/graphicscontext_p.h
+++ b/src/render/graphicshelpers/graphicscontext_p.h
@@ -188,7 +188,7 @@ public:
* @param buf
* @return
*/
- GLBuffer *glBufferForRenderBuffer(Buffer *buf);
+ GLBuffer *glBufferForRenderBuffer(Buffer *buf, GLBuffer::Type type);
/**
* @brief activateTexture - make a texture active on a hardware unit
@@ -270,7 +270,7 @@ private:
void bindFrameBufferAttachmentHelper(GLuint fboId, const AttachmentPack &attachments);
void activateDrawBuffers(const AttachmentPack &attachments);
- HGLBuffer createGLBufferFor(Buffer *buffer);
+ HGLBuffer createGLBufferFor(Buffer *buffer, GLBuffer::Type type);
void uploadDataToGLBuffer(Buffer *buffer, GLBuffer *b, bool releaseBuffer = false);
QByteArray downloadDataFromGLBuffer(Buffer *buffer, GLBuffer *b);
bool bindGLBuffer(GLBuffer *buffer, GLBuffer::Type type);