mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-08-17 09:21:42 +00:00
83 lines
1.6 KiB
C++
83 lines
1.6 KiB
C++
#ifndef CRENDERBUFFER_H
|
|
#define CRENDERBUFFER_H
|
|
|
|
#include <Common/BasicTypes.h>
|
|
#include <GL/glew.h>
|
|
|
|
class CRenderbuffer
|
|
{
|
|
GLuint mRenderbuffer = 0;
|
|
uint mWidth = 0;
|
|
uint mHeight = 0;
|
|
bool mEnableMultisampling = false;
|
|
bool mInitialized = false;
|
|
|
|
public:
|
|
CRenderbuffer() = default;
|
|
CRenderbuffer(uint Width, uint Height)
|
|
: mWidth(Width)
|
|
, mHeight(Height)
|
|
{
|
|
}
|
|
|
|
~CRenderbuffer()
|
|
{
|
|
if (mInitialized)
|
|
glDeleteRenderbuffers(1, &mRenderbuffer);
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
mInitialized = true;
|
|
glGenRenderbuffers(1, &mRenderbuffer);
|
|
InitStorage();
|
|
}
|
|
|
|
void Resize(uint Width, uint Height)
|
|
{
|
|
mWidth = Width;
|
|
mHeight = Height;
|
|
|
|
if (mInitialized)
|
|
InitStorage();
|
|
}
|
|
|
|
void Bind()
|
|
{
|
|
if (!mInitialized) Init();
|
|
glBindRenderbuffer(GL_RENDERBUFFER, mRenderbuffer);
|
|
}
|
|
|
|
void Unbind()
|
|
{
|
|
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
|
}
|
|
|
|
GLuint BufferID() const
|
|
{
|
|
return mRenderbuffer;
|
|
}
|
|
|
|
void SetMultisamplingEnabled(bool Enable)
|
|
{
|
|
if (mEnableMultisampling != Enable)
|
|
{
|
|
mEnableMultisampling = Enable;
|
|
InitStorage();
|
|
}
|
|
}
|
|
|
|
private:
|
|
void InitStorage()
|
|
{
|
|
Bind();
|
|
|
|
if (mEnableMultisampling)
|
|
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT24, mWidth, mHeight);
|
|
else
|
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, mWidth, mHeight);
|
|
}
|
|
};
|
|
|
|
#endif // CRENDERBUFFER_H
|