VIZ++ Class: OpenGLRenderBuffers
|
Source code
/*
* OpenGLRenderBuffers.h
* Copyright (c) 2015 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
#pragma once
#ifdef GL_ARB_framebuffer_object
#include <viz++/opengl/OpenGLObject.h>
namespace VIZ {
class OpenGLRenderBuffers :public OpenGLObject {
private:
GLsizei size;
GLuint* buffers;
protected:
void generate(GLsizei size, GLuint* buffers)
{
static PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = NULL;
if (glGenRenderbuffers == NULL) {
glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers");
}
glGenRenderbuffers(size, buffers);
}
//destroy renderbuffer
void destroy()
{
static PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = NULL;
if (glDeleteRenderbuffers == NULL) {
glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers");
}
glDeleteRenderbuffers(size, buffers);
}
void bind(GLenum target, GLuint buffer)
{
static PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = NULL;
if (glBindRenderbuffer == NULL) {
glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer");
}
glBindRenderbuffer(target, buffer);
}
public:
OpenGLRenderBuffers(GLsizei n)
:OpenGLObject(),
size(n),
buffers(NULL)
{
if (size < 1) {
throw IException("Invalid parameters. size=%d", size);
}
buffers = new GLuint[size];
generate(size, buffers);
}
~OpenGLRenderBuffers()
{
destroy();
delete [] buffers;
buffers = NULL;
}
GLuint getNth(int n)
{
if (n >= 0 && n < size) {
return buffers[n];
} else {
throw IException("Invalid nth parameter %d", n);
}
}
void bindNth(GLenum target, int n)
{
if (n >= 0 && n < size) {
bind(target, buffers[n]);
} else {
throw IException("Invalid nth parameter %d", n);
}
}
void getParameteriv(GLenum target, GLenum pname, GLint* params)
{
static PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv = NULL;
if (glGetRenderbufferParameteriv == NULL) {
glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv");
}
glGetRenderbufferParameteriv(target, pname, params);
}
GLboolean isRenderbuffer(GLuint buffer)
{
static PFNGLISRENDERBUFFERPROC glIsRenderbuffer = NULL;
if (glIsRenderbuffer == NULL) {
glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer");
}
return glIsRenderbuffer(buffer);
}
void storage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
{
static PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = NULL;
if (glRenderbufferStorage == NULL) {
glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage");
}
glRenderbufferStorage(target, internalformat, width, height);
}
};
}
#endif
Last modified: 10 Feb 2017
Copyright (c) 2009-2017 Antillia.com ALL RIGHTS RESERVED.