diff options
Diffstat (limited to 'source/modules/asura-core/graphics/gpu_buffer.h')
-rw-r--r-- | source/modules/asura-core/graphics/gpu_buffer.h | 150 |
1 files changed, 74 insertions, 76 deletions
diff --git a/source/modules/asura-core/graphics/gpu_buffer.h b/source/modules/asura-core/graphics/gpu_buffer.h index 09c5476..3153904 100644 --- a/source/modules/asura-core/graphics/gpu_buffer.h +++ b/source/modules/asura-core/graphics/gpu_buffer.h @@ -7,91 +7,89 @@ #include "gfx_device.h" -namespace AsuraEngine +namespace_begin(AsuraEngine) +namespace_begin(Graphics) + +enum BufferType +{ + BUFFER_TYPE_VERTEX, ///< 㻺壬position\tangent\normal\color\texcoord(n) + BUFFER_TYPE_INDEX, ///< +}; + +enum BufferUsage +{ + BUFFER_USAGE_STREAM, ///< һΣʹô + BUFFER_USAGE_DYNAMIC, ///< һΣʹ + BUFFER_USAGE_STATIC, ///< ĺʹ +}; + +enum BufferDataType +{ + BUFFER_DATA_TYPE_INT, + BUFFER_DATA_TYPE_FLOAT, + BUFFER_DATA_TYPE_UNSIGNED_BYTE, +}; + +/// +/// VRAM壬ֶ㻺vboebo֣ÿζڴԴϴݡframeworkrenderers +/// +/// +ASURA_ABSTRACT class GPUBuffer { - namespace Graphics - { - - enum BufferType - { - BUFFER_TYPE_VERTEX, ///< 㻺壬position\tangent\normal\color\texcoord(n) - BUFFER_TYPE_INDEX, ///< - }; - - enum BufferUsage - { - BUFFER_USAGE_STREAM, ///< һΣʹô - BUFFER_USAGE_DYNAMIC, ///< һΣʹ - BUFFER_USAGE_STATIC, ///< ĺʹ - }; - - enum BufferDataType - { - BUFFER_DATA_TYPE_INT, - BUFFER_DATA_TYPE_FLOAT, - BUFFER_DATA_TYPE_UNSIGNED_BYTE, - }; - - /// - /// VRAM壬ֶ㻺vboebo֣ÿζڴԴϴݡframeworkrenderers - /// - /// - ASURA_ABSTRACT class GPUBuffer - { - public: - - GPUBuffer(BufferType type, BufferUsage usage, BufferDataType datatype, size_t size); - virtual ~GPUBuffer(); - - static size_t GetDataTypeSize(GLenum datatype); - - bool Fill(const void* data, size_t size, uint offset = 0) ASURA_THROW(Exception); - - void Bind(); - void UnBind(); - - uint GetBufferSize(); - uint GetBufferCount(); - GLenum GetDataType(); - size_t GetDataTypeSize(); - - private: - - GLenum ConvertBufferType(BufferType type); - GLenum ConvertBufferUsage(BufferUsage type); - GLenum ConvertBufferDataType(BufferDataType type); - - GLenum m_Target; - GLuint m_Buffer; - /// - /// openglԴ滺岢ûж͵ҪֻglVertexAttribPointerʱָ - /// drawcall ʱݸʼַʹbufferȡඥݣԲͬ - /// ԱһbufferСΪ˱ֽӿڵļ࣬ڳʼbufferʱָ - /// ͣڱ͵һ£Բͬͷͬbuffer - /// - GLenum m_DataType; - GLuint m_Usage; - uint m_Size; +public: + + GPUBuffer(BufferType type, BufferUsage usage, BufferDataType datatype, size_t size); + virtual ~GPUBuffer(); + + static size_t GetDataTypeSize(GLenum datatype); + + bool Fill(const void* data, size_t size, uint offset = 0) ASURA_THROW(Exception); + + void Bind(); + void UnBind(); + + uint GetBufferSize(); + uint GetBufferCount(); + GLenum GetDataType(); + size_t GetDataTypeSize(); + +private: + + GLenum ConvertBufferType(BufferType type); + GLenum ConvertBufferUsage(BufferUsage type); + GLenum ConvertBufferDataType(BufferDataType type); + + GLenum m_Target; + GLuint m_Buffer; + + /// openglԴ滺岢ûж͵ҪֻglVertexAttribPointerʱָdrawcall ʱݸ + /// ʼַʹbufferȡඥݣԲͬͿԱһbufferСΪ˱ + /// ӿڵļ࣬ڳʼbufferʱָͣڱ͵һ£Բͬ + /// ͷͬbuffer + + GLenum m_DataType; + GLuint m_Usage; + uint m_Size; #if ASURA_DEBUG - byte* m_Data; + byte* m_Data; #endif - luaxport: +luaxport: - LUAX_DECL_ABSTRACT_FACTORY(GPUBuffer); + LUAX_DECL_ABSTRACT_FACTORY(GPUBuffer); - LUAX_DECL_ENUM(BufferType, 1); - LUAX_DECL_ENUM(BufferUsage, 1); - LUAX_DECL_ENUM(BufferDataType, 2); + LUAX_DECL_ENUM(BufferType, 1); + LUAX_DECL_ENUM(BufferUsage, 1); + LUAX_DECL_ENUM(BufferDataType, 2); - LUAX_DECL_METHOD(_Fill); - LUAX_DECL_METHOD(_GetSize); - LUAX_DECL_METHOD(_GetCount); + LUAX_DECL_METHOD(_Fill); + LUAX_DECL_METHOD(_GetSize); + LUAX_DECL_METHOD(_GetCount); - }; +}; - } -} +namespace_end +namespace_end #endif
\ No newline at end of file |