From e47baca4f23db43ec91fbf64d5d06d7c0dbee495 Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 6 Apr 2019 07:39:49 +0800 Subject: *misc --- source/modules/asura-core/graphics/gpu_buffer.h | 69 +++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 source/modules/asura-core/graphics/gpu_buffer.h (limited to 'source/modules/asura-core/graphics/gpu_buffer.h') diff --git a/source/modules/asura-core/graphics/gpu_buffer.h b/source/modules/asura-core/graphics/gpu_buffer.h new file mode 100644 index 0000000..aba1157 --- /dev/null +++ b/source/modules/asura-core/graphics/gpu_buffer.h @@ -0,0 +1,69 @@ +#ifndef __ASURA_GPU_BUFFER_H__ +#define __ASURA_GPU_BUFFER_H__ + +#include +#include + +#include "gl.h" + +namespace AsuraEngine +{ + namespace Graphics + { + + enum BufferType + { + BUFFER_TYPE_VERTEX, ///< 顶点缓冲 + BUFFER_TYPE_INDEX, ///< 索引缓冲 + }; + + enum BufferUsage + { + BUFFER_USAGE_STREAM, ///< 修改一次,使用次数低 + BUFFER_USAGE_DYNAMIC, ///< 修改一次,经常使用 + BUFFER_USAGE_STATIC, ///< 经常修改和使用 + }; + + /// + /// GPU缓冲,分顶点缓冲和索引缓冲两种,避免每次都从内存向显存上传数据。 + /// + class GPUBuffer + { + public: + + GPUBuffer(BufferType type, BufferUsage usage, size_t size) ASURA_THROW(Exception); + ~GPUBuffer(); + + /// + /// 初始化\更新缓存,如果没有gpu buffer资源,认为是初始化,否则认为是更新。 + /// + bool Fill(const void* data, size_t size, uint offset = 0) ASURA_THROW(Exception); + + /// + /// 绑定到对应的目标上,接下来就可以使用了。 + /// + void Bind(); + void UnBind(); + + uint GetBufferSize(); + + private: + + GLenum mTarget; + GLuint mBuffer; + GLuint mUsage; + uint mSize; + +#if ASURA_DEBUG + /// + /// 本地保存的buffer数据,和显存数据保持一致,用来调试和更新显存。 + /// + byte* mData; +#endif + + }; + + } +} + +#endif \ No newline at end of file -- cgit v1.1-26-g67d0