diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4645cfcd5..2dd4bbaef 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1013,6 +1013,7 @@ set (PCH_SOURCES gl/compatibility/gl_20.cpp gl/compatibility/gl_swshader20.cpp gl/data/gl_vertexbuffer.cpp + gl/data/gl_uniformbuffer.cpp gl/dynlights/gl_lightbuffer.cpp gl/dynlights/gl_shadowmap.cpp gl/models/gl_models.cpp @@ -1061,7 +1062,7 @@ set (PCH_SOURCES hwrenderer/utility/hw_clock.cpp hwrenderer/utility/hw_cvars.cpp hwrenderer/utility/hw_lighting.cpp - + menu/joystickmenu.cpp menu/loadsavemenu.cpp menu/menu.cpp diff --git a/src/gl/data/gl_uniformbuffer.cpp b/src/gl/data/gl_uniformbuffer.cpp new file mode 100644 index 000000000..a63456c43 --- /dev/null +++ b/src/gl/data/gl_uniformbuffer.cpp @@ -0,0 +1,73 @@ +// +//--------------------------------------------------------------------------- +// +// Copyright(C) 2018 Christoph Oelckers +// All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see http://www.gnu.org/licenses/ +// +//-------------------------------------------------------------------------- +// +/* +** gl_uniformbuffer.cpp +** Uniform buffer abstraction class. +** +**/ + + +#include "gl_load/gl_system.h" +#include "gl_load/gl_interface.h" +#include "gl_uniformbuffer.h" + + +//========================================================================== +// +// +// +//========================================================================== + +GLUniformBuffer::GLUniformBuffer(size_t size, bool staticdraw) +: IUniformBuffer(size), mStaticDraw(staticdraw) +{ + glGenBuffers(1, &mBufferId); +} + +//========================================================================== +// +// +// +//========================================================================== + +GLUniformBuffer::~GLUniformBuffer() +{ + if (mBufferId != 0) + { + glDeleteBuffers(1, &mBufferId); + } +} + +//========================================================================== +// +// +// +//========================================================================== + +void GLUniformBuffer::SetData(const void *data) +{ + if (mBufferId != 0) + { + glBindBuffer(GL_UNIFORM_BUFFER, mBufferId); + glBufferData(GL_UNIFORM_BUFFER, size, data, mStaticDraw? GL_STATIC_DRAW : GL_STREAM_DRAW); + } +} diff --git a/src/gl/data/gl_uniformbuffer.h b/src/gl/data/gl_uniformbuffer.h new file mode 100644 index 000000000..2b0a7fe52 --- /dev/null +++ b/src/gl/data/gl_uniformbuffer.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include "hwrenderer/data/uniformbuffer.h" + + +class GLUniformBuffer : public IUniformBuffer +{ + unsigned mBufferId; + bool mStaticDraw; + +protected: + GLUniformBuffer(size_t size, bool staticdraw = false); + ~GLUniformBuffer(); + + void Bind() override; + void SetData(const void *data) override; + + unsigned ID() const + { + return mBufferId; + } + +} diff --git a/src/hwrenderer/data/uniformbuffer.h b/src/hwrenderer/data/uniformbuffer.h new file mode 100644 index 000000000..b3c914942 --- /dev/null +++ b/src/hwrenderer/data/uniformbuffer.h @@ -0,0 +1,17 @@ +#pragma once + +#include "zstring.h" + +class IUniformBuffer +{ +protected: + size_t mSize; + + IUniformBuffer(size_t size) : mSize(size) {} + +public: + virtual ~IUniformBuffer() {} + virtual void SetData(const void *data) = 0; + + +};