mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 15:22:16 +00:00
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:
parent
9155b773cc
commit
b8b5802599
4 changed files with 116 additions and 1 deletions
|
@ -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
|
||||
|
|
73
src/gl/data/gl_uniformbuffer.cpp
Normal file
73
src/gl/data/gl_uniformbuffer.cpp
Normal 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);
|
||||
}
|
||||
}
|
24
src/gl/data/gl_uniformbuffer.h
Normal file
24
src/gl/data/gl_uniformbuffer.h
Normal 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;
|
||||
}
|
||||
|
||||
}
|
17
src/hwrenderer/data/uniformbuffer.h
Normal file
17
src/hwrenderer/data/uniformbuffer.h
Normal 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;
|
||||
|
||||
|
||||
};
|
Loading…
Reference in a new issue