glbuffer.h File Reference
Go to the documentation of this file.
Source: include/ffw/graphics/glbuffer.h
/* This file is part of FineFramework project */
#ifndef FFW_GRAPHICS_GL_BUFFER
#define FFW_GRAPHICS_GL_BUFFER
#include <vector>
#include <cstdint>
#include "glrenderextensions.h"
namespace ffw {
class RenderContext;
class FFW_API GLBuffer {
public:
GLBuffer();
GLBuffer(GLenum buffertype, const GLvoid* data, GLsizei size, GLenum type);
GLBuffer(const GLBuffer& other) = delete;
GLBuffer(GLBuffer&& other) NOEXCEPT;
void swap(GLBuffer& other) NOEXCEPT;
virtual ~GLBuffer();
inline bool isCreated() const {
return loaded;
}
void resize(const GLvoid* data, GLsizei size);
void setData(const GLvoid* data, GLsizei offset, GLsizei size);
void mapBuffer(GLvoid** pointer, GLenum access) const;
void mapBufferRange(GLvoid** pointer, GLsizei offset, GLsizei size, GLenum access) const;
void flushMappedBufferRange(GLsizei offset, GLsizei size) const;
void unMapBuffer() const;
void destroy();
void bind() const;
void unbind() const;
inline GLuint getHandle() const {
return buffer;
}
inline GLsizei getSize() const {
return size;
}
inline GLenum getAccessType() const {
return accesstype;
}
inline GLenum getBufferType() const {
return buffertype;
}
void copyFrom(const GLBuffer* other, GLintptr readoffset,
GLintptr writeoffset, GLsizeiptr size);
void getData(GLvoid* data, GLsizei offset, GLsizei size);
std::vector<uint8_t> getData(GLsizei offset, GLsizei size);
GLBuffer& operator = (const GLBuffer& other) = delete;
GLBuffer& operator = (GLBuffer&& other) NOEXCEPT;
protected:
GLenum accesstype;
GLenum buffertype;
bool loaded;
GLuint buffer;
GLsizei size;
};
class FFW_API GLVertexBuffer: public GLBuffer {
public:
GLVertexBuffer() = default;
GLVertexBuffer(const GLvoid* data, const GLsizei size, const GLenum type):
GLBuffer(GL_ARRAY_BUFFER, data, size, type) {
}
GLVertexBuffer(const GLVertexBuffer& other) = delete;
GLVertexBuffer(GLVertexBuffer&& other) NOEXCEPT :GLBuffer(std::forward<GLBuffer>(other)){
}
GLVertexBuffer& operator = (const GLVertexBuffer& other) = delete;
GLVertexBuffer& operator = (GLVertexBuffer&& other) NOEXCEPT {
GLBuffer::operator=(std::forward<GLBuffer>(other));
return *this;
}
};
class FFW_API GLElementBuffer: public GLBuffer {
public:
GLElementBuffer() = default;
GLElementBuffer(const GLvoid* data, const GLsizei size, const GLenum type):
GLBuffer(GL_ELEMENT_ARRAY_BUFFER, data, size, type) {
}
GLElementBuffer(const GLElementBuffer& other) = delete;
GLElementBuffer(GLElementBuffer&& other) NOEXCEPT :GLBuffer(std::forward<GLBuffer>(other)) {
}
GLElementBuffer& operator = (const GLElementBuffer& other) = delete;
GLElementBuffer& operator = (GLElementBuffer&& other) NOEXCEPT {
GLBuffer::operator=(std::forward<GLBuffer>(other));
return *this;
}
};
};
inline void swap(ffw::GLBuffer& first, ffw::GLBuffer& second) NOEXCEPT {
first.swap(second);
}
inline void swap(ffw::GLVertexBuffer& first, ffw::GLVertexBuffer& second) NOEXCEPT {
first.swap(second);
}
inline void swap(ffw::GLElementBuffer& first, ffw::GLElementBuffer& second) NOEXCEPT {
first.swap(second);
}
#endif