diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2017-06-02 08:45:55 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-03-19 07:49:27 +0000 |
commit | 34f6d8a88677cffa44be05da7e1e2da0cfc2f3b4 (patch) | |
tree | d95b8632aa5a895b1eaa3cbb14891758923d93c9 /src/render/io | |
parent | e28192812168b676b57dc505b31eed3bfcba0e67 (diff) |
Move Renderer specific classes into new folder
This is another step toward isolating the renderer from the render aspect
Change-Id: I4031675b961d6645b65bbe05cf62d150993038b0
Task-number: QTBUG-61151
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/io')
-rw-r--r-- | src/render/io/glbuffer.cpp | 169 | ||||
-rw-r--r-- | src/render/io/glbuffer_p.h | 110 | ||||
-rw-r--r-- | src/render/io/io.pri | 2 |
3 files changed, 0 insertions, 281 deletions
diff --git a/src/render/io/glbuffer.cpp b/src/render/io/glbuffer.cpp deleted file mode 100644 index f1b860f03..000000000 --- a/src/render/io/glbuffer.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "glbuffer_p.h" -#include <private/graphicscontext_p.h> - -#if !defined(GL_UNIFORM_BUFFER) -#define GL_UNIFORM_BUFFER 0x8A11 -#endif -#if !defined(GL_ARRAY_BUFFER) -#define GL_ARRAY_BUFFER 0x8892 -#endif -#if !defined(GL_ELEMENT_ARRAY_BUFFER) -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#endif -#if !defined(GL_SHADER_STORAGE_BUFFER) -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#endif -#if !defined(GL_PIXEL_PACK_BUFFER) -#define GL_PIXEL_PACK_BUFFER 0x88EB -#endif -#if !defined(GL_PIXEL_UNPACK_BUFFER) -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#endif -#if !defined(GL_DRAW_INDIRECT_BUFFER) -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#endif - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -// A UBO is created for each ShaderData Shader Pair -// That means a UBO is unique to a shader/shaderdata - -namespace { - -GLenum glBufferTypes[] = { - GL_ARRAY_BUFFER, - GL_UNIFORM_BUFFER, - GL_ELEMENT_ARRAY_BUFFER, - GL_SHADER_STORAGE_BUFFER, - GL_PIXEL_PACK_BUFFER, - GL_PIXEL_UNPACK_BUFFER, - GL_DRAW_INDIRECT_BUFFER -}; - -} // anonymous - -GLBuffer::GLBuffer() - : m_bufferId(0) - , m_isCreated(false) - , m_bound(false) - , m_lastTarget(GL_ARRAY_BUFFER) -{ -} - -bool GLBuffer::bind(GraphicsContext *ctx, Type t) -{ - if (m_bufferId == 0) - return false; - m_lastTarget = glBufferTypes[t]; - ctx->openGLContext()->functions()->glBindBuffer(m_lastTarget, m_bufferId); - m_bound = true; - return true; -} - -bool GLBuffer::release(GraphicsContext *ctx) -{ - m_bound = false; - ctx->openGLContext()->functions()->glBindBuffer(m_lastTarget, 0); - return true; -} - -bool GLBuffer::create(GraphicsContext *ctx) -{ - ctx->openGLContext()->functions()->glGenBuffers(1, &m_bufferId); - m_isCreated = true; - return m_bufferId != 0; -} - -void GLBuffer::destroy(GraphicsContext *ctx) -{ - ctx->openGLContext()->functions()->glDeleteBuffers(1, &m_bufferId); - m_isCreated = false; -} - -void GLBuffer::allocate(GraphicsContext *ctx, uint size, bool dynamic) -{ - // Either GL_STATIC_DRAW OR GL_DYNAMIC_DRAW depending on the use case - // TO DO: find a way to know how a buffer/QShaderData will be used to use the right usage - ctx->openGLContext()->functions()->glBufferData(m_lastTarget, size, NULL, dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW); -} - -void GLBuffer::allocate(GraphicsContext *ctx, const void *data, uint size, bool dynamic) -{ - ctx->openGLContext()->functions()->glBufferData(m_lastTarget, size, data, dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW); -} - -void GLBuffer::update(GraphicsContext *ctx, const void *data, uint size, int offset) -{ - ctx->openGLContext()->functions()->glBufferSubData(m_lastTarget, offset, size, data); -} - -QByteArray GLBuffer::download(GraphicsContext *ctx, uint size) -{ - char *gpu_ptr = ctx->mapBuffer(m_lastTarget, size); - QByteArray data; - if (gpu_ptr != nullptr) { - data.resize(size); - std::copy(gpu_ptr, gpu_ptr+size, data.data()); - } - ctx->unmapBuffer(m_lastTarget); - return data; -} - -void GLBuffer::bindBufferBase(GraphicsContext *ctx, int bindingPoint, GLBuffer::Type t) -{ - ctx->bindBufferBase(glBufferTypes[t], bindingPoint, m_bufferId); -} - -void GLBuffer::bindBufferBase(GraphicsContext *ctx, int bindingPoint) -{ - ctx->bindBufferBase(m_lastTarget, bindingPoint, m_bufferId); -} - -} // namespace Render - -} // namespace Qt3DRender - -QT_END_NAMESPACE diff --git a/src/render/io/glbuffer_p.h b/src/render/io/glbuffer_p.h deleted file mode 100644 index 731634b6b..000000000 --- a/src/render/io/glbuffer_p.h +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QT3DRENDER_RENDER_GLBUFFER_P_H -#define QT3DRENDER_RENDER_GLBUFFER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include <QOpenGLContext> -#include <Qt3DCore/qnodeid.h> -#include <qbytearray.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -class GraphicsContext; - -class GLBuffer -{ -public: - GLBuffer(); - - enum Type - { - ArrayBuffer = 0, - UniformBuffer, - IndexBuffer, - ShaderStorageBuffer, - PixelPackBuffer, - PixelUnpackBuffer, - DrawIndirectBuffer - }; - - bool bind(GraphicsContext *ctx, Type t); - bool release(GraphicsContext *ctx); - bool create(GraphicsContext *ctx); - void destroy(GraphicsContext *ctx); - void allocate(GraphicsContext *ctx, uint size, bool dynamic = true); - void allocate(GraphicsContext *ctx, const void *data, uint size, bool dynamic = true); - void update(GraphicsContext *ctx, const void *data, uint size, int offset = 0); - QByteArray download(GraphicsContext *ctx, uint size); - void bindBufferBase(GraphicsContext *ctx, int bindingPoint, Type t); - void bindBufferBase(GraphicsContext *ctx, int bindingPoint); - - inline GLuint bufferId() const { return m_bufferId; } - inline bool isCreated() const { return m_isCreated; } - inline bool isBound() const { return m_bound; } - -private: - GLuint m_bufferId; - bool m_isCreated; - bool m_bound; - GLenum m_lastTarget; -}; - -} // namespace Render - -} // namespace Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_RENDER_GLBUFFER_P_H diff --git a/src/render/io/io.pri b/src/render/io/io.pri index aca983d4b..6a48ebbc4 100644 --- a/src/render/io/io.pri +++ b/src/render/io/io.pri @@ -9,7 +9,6 @@ HEADERS += \ $$PWD/scenemanager_p.h \ $$PWD/qsceneimporter_p.h \ $$PWD/qsceneimportplugin_p.h \ - $$PWD/glbuffer_p.h \ $$PWD/qsceneimportfactory_p.h \ $$PWD/qsceneexportfactory_p.h \ $$PWD/qsceneexporter_p.h \ @@ -25,7 +24,6 @@ SOURCES += \ $$PWD/scenemanager.cpp \ $$PWD/qsceneimporter.cpp \ $$PWD/qsceneimportplugin.cpp \ - $$PWD/glbuffer.cpp \ $$PWD/qsceneimportfactory.cpp \ $$PWD/qsceneexportfactory.cpp \ $$PWD/qsceneexporter.cpp \ |