summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/graphics/gpu_buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-core/graphics/gpu_buffer.cpp')
-rw-r--r--source/modules/asura-core/graphics/gpu_buffer.cpp256
1 files changed, 127 insertions, 129 deletions
diff --git a/source/modules/asura-core/graphics/gpu_buffer.cpp b/source/modules/asura-core/graphics/gpu_buffer.cpp
index 4d59009..bf5ac6a 100644
--- a/source/modules/asura-core/graphics/gpu_buffer.cpp
+++ b/source/modules/asura-core/graphics/gpu_buffer.cpp
@@ -1,153 +1,151 @@
#include "gpu_buffer.h"
-namespace AsuraEngine
-{
- namespace Graphics
- {
+namespace_begin(AsuraEngine)
+namespace_begin(Graphics)
- GPUBuffer::GPUBuffer(BufferType type, BufferUsage usage, BufferDataType dataType, size_t size)
- : m_Target(GL_ZERO)
- , m_Buffer(GL_ZERO)
- , m_Size(0)
+GPUBuffer::GPUBuffer(BufferType type, BufferUsage usage, BufferDataType dataType, size_t size)
+ : m_Target(GL_ZERO)
+ , m_Buffer(GL_ZERO)
+ , m_Size(0)
#if ASURA_DEBUG
- , m_Data(nullptr)
+ , m_Data(nullptr)
#endif
- {
- m_Target = ConvertBufferType(type);
- m_Usage = ConvertBufferUsage(usage);
- m_DataType = ConvertBufferDataType(dataType);
- m_Size = size;
- }
+{
+ m_Target = ConvertBufferType(type);
+ m_Usage = ConvertBufferUsage(usage);
+ m_DataType = ConvertBufferDataType(dataType);
+ m_Size = size;
+}
- GPUBuffer::~GPUBuffer()
- {
+GPUBuffer::~GPUBuffer()
+{
#if ASURA_DEBUG
- if (m_Data)
- free(m_Data);
+ if (m_Data)
+ free(m_Data);
#endif
- glDeleteBuffers(1, &m_Buffer);
- }
+ glDeleteBuffers(1, &m_Buffer);
+}
- GLenum GPUBuffer::ConvertBufferType(BufferType type)
- {
- switch (type)
- {
- case BUFFER_TYPE_VERTEX:
- return GL_ARRAY_BUFFER;
- case BUFFER_TYPE_INDEX:
- return GL_ELEMENT_ARRAY_BUFFER;
- }
- }
+GLenum GPUBuffer::ConvertBufferType(BufferType type)
+{
+ switch (type)
+ {
+ case BUFFER_TYPE_VERTEX:
+ return GL_ARRAY_BUFFER;
+ case BUFFER_TYPE_INDEX:
+ return GL_ELEMENT_ARRAY_BUFFER;
+ }
+}
- GLenum GPUBuffer::ConvertBufferUsage(BufferUsage usage)
- {
- switch (usage)
- {
- case BUFFER_USAGE_STREAM:
- return GL_STREAM_DRAW;
- case BUFFER_USAGE_DYNAMIC:
- return GL_DYNAMIC_DRAW;
- case BUFFER_USAGE_STATIC:
- return GL_STATIC_DRAW;
- }
- }
+GLenum GPUBuffer::ConvertBufferUsage(BufferUsage usage)
+{
+ switch (usage)
+ {
+ case BUFFER_USAGE_STREAM:
+ return GL_STREAM_DRAW;
+ case BUFFER_USAGE_DYNAMIC:
+ return GL_DYNAMIC_DRAW;
+ case BUFFER_USAGE_STATIC:
+ return GL_STATIC_DRAW;
+ }
+}
- GLenum GPUBuffer::ConvertBufferDataType(BufferDataType type)
- {
- switch (type)
- {
- case BUFFER_DATA_TYPE_INT:
- return GL_INT;
- case BUFFER_DATA_TYPE_FLOAT:
- return GL_FLOAT;
- case BUFFER_DATA_TYPE_UNSIGNED_BYTE:
- return GL_UNSIGNED_BYTE;
- }
- }
+GLenum GPUBuffer::ConvertBufferDataType(BufferDataType type)
+{
+ switch (type)
+ {
+ case BUFFER_DATA_TYPE_INT:
+ return GL_INT;
+ case BUFFER_DATA_TYPE_FLOAT:
+ return GL_FLOAT;
+ case BUFFER_DATA_TYPE_UNSIGNED_BYTE:
+ return GL_UNSIGNED_BYTE;
+ }
+}
- bool GPUBuffer::Fill(const void * data, size_t size, uint offset)
+bool GPUBuffer::Fill(const void * data, size_t size, uint offset)
+{
+ if (data == nullptr)
+ return false;
+ if (m_Buffer == 0)
+ {
+ gfx.WipeError();
+ glGenBuffers(1, &m_Buffer);
+ if (m_Buffer == 0)
+ throw Exception("OpenGL glGenBuffers failed.");
+ glBindBuffer(m_Target, m_Buffer);
+ glBufferData(m_Target, m_Size, NULL, m_Usage);
+ if (gfx.HasError())
{
- if (data == nullptr)
- return false;
- if (m_Buffer == 0)
- {
- gfx.WipeError();
- glGenBuffers(1, &m_Buffer);
- if (m_Buffer == 0)
- throw Exception("OpenGL glGenBuffers failed.");
- glBindBuffer(m_Target, m_Buffer);
- glBufferData(m_Target, m_Size, NULL, m_Usage);
- if (gfx.HasError())
- {
- glBindBuffer(m_Target, 0);
- throw Exception("OpenGL glBufferData failed. Errorcode=%d.", gfx.GetError());
- }
+ glBindBuffer(m_Target, 0);
+ throw Exception("OpenGL glBufferData failed. Errorcode=%d.", gfx.GetError());
+ }
#if ASURA_DEBUG
- m_Data = (byte*)malloc(size);
- memset(m_Data, 0, size);
+ m_Data = (byte*)malloc(size);
+ memset(m_Data, 0, size);
#endif
- }
- else
- glBindBuffer(m_Target, m_Buffer);
- glBufferSubData(m_Target, offset, size, data);
- if (gfx.HasError())
- {
- glBindBuffer(m_Target, 0);
- throw Exception("OpenGL glBufferSubData failed. Errorcode=%d.", gfx.GetError());
- }
- glBindBuffer(m_Target, 0);
+ }
+ else
+ glBindBuffer(m_Target, m_Buffer);
+ glBufferSubData(m_Target, offset, size, data);
+ if (gfx.HasError())
+ {
+ glBindBuffer(m_Target, 0);
+ throw Exception("OpenGL glBufferSubData failed. Errorcode=%d.", gfx.GetError());
+ }
+ glBindBuffer(m_Target, 0);
#if ASURA_DEBUG
- memcpy(m_Data + offset, data, size);
+ memcpy(m_Data + offset, data, size);
#endif
- return true;
- }
+ return true;
+}
- void GPUBuffer::Bind()
- {
- glBindBuffer(m_Target, m_Buffer);
- }
+void GPUBuffer::Bind()
+{
+ glBindBuffer(m_Target, m_Buffer);
+}
- void GPUBuffer::UnBind()
- {
- glBindBuffer(m_Target, 0);
- }
-
- uint GPUBuffer::GetBufferSize()
- {
- return m_Size;
- }
+void GPUBuffer::UnBind()
+{
+ glBindBuffer(m_Target, 0);
+}
- GLenum GPUBuffer::GetDataType()
- {
- return m_DataType;
- }
+uint GPUBuffer::GetBufferSize()
+{
+ return m_Size;
+}
- size_t GPUBuffer::GetDataTypeSize()
- {
- //https://blog.csdn.net/nklinux/article/details/16919017
- switch (m_DataType)
- {
- case GL_UNSIGNED_BYTE:
- return sizeof(GLbyte);
- case GL_FLOAT :
- return sizeof(GLfloat);
- case GL_INT:
- return sizeof(GLint);
- }
- }
+GLenum GPUBuffer::GetDataType()
+{
+ return m_DataType;
+}
- size_t GPUBuffer::GetDataTypeSize(GLenum datatype)
- {
- switch (datatype)
- {
- case GL_UNSIGNED_BYTE:
- return sizeof(GLbyte);
- case GL_FLOAT:
- return sizeof(GLfloat);
- case GL_INT:
- return sizeof(GLint);
- }
- }
+size_t GPUBuffer::GetDataTypeSize()
+{
+ //https://blog.csdn.net/nklinux/article/details/16919017
+ switch (m_DataType)
+ {
+ case GL_UNSIGNED_BYTE:
+ return sizeof(GLbyte);
+ case GL_FLOAT :
+ return sizeof(GLfloat);
+ case GL_INT:
+ return sizeof(GLint);
+ }
+}
+size_t GPUBuffer::GetDataTypeSize(GLenum datatype)
+{
+ switch (datatype)
+ {
+ case GL_UNSIGNED_BYTE:
+ return sizeof(GLbyte);
+ case GL_FLOAT:
+ return sizeof(GLfloat);
+ case GL_INT:
+ return sizeof(GLint);
}
-} \ No newline at end of file
+}
+
+namespace_end
+namespace_end \ No newline at end of file