Added a uniform buffer abstraction class

May get some more methods later, this is just a start to get going.
This commit is contained in:
Christoph Oelckers 2018-06-12 10:42:03 +02:00
parent 9155b773cc
commit b8b5802599
4 changed files with 116 additions and 1 deletions

View File

@ -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

View File

@ -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);
}
}

View File

@ -0,0 +1,24 @@
#pragma once
#include <stdlib.h>
#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;
}
}

View File

@ -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;
};