85 lines
2.0 KiB
C++
85 lines
2.0 KiB
C++
#ifndef ARE_INCLUDE_RESOURCE_BUFFER_H
|
|
#define ARE_INCLUDE_RESOURCE_BUFFER_H
|
|
|
|
#include "basic/types.h"
|
|
|
|
namespace are {
|
|
|
|
/// @brief Buffer usage hint
|
|
enum class BufferUsage {
|
|
STATIC_DRAW,
|
|
DYNAMIC_DRAW,
|
|
STREAM_DRAW
|
|
};
|
|
|
|
/// @brief Buffer type
|
|
enum class BufferType {
|
|
VERTEX_BUFFER,
|
|
INDEX_BUFFER,
|
|
UNIFORM_BUFFER,
|
|
SHADER_STORAGE_BUFFER
|
|
};
|
|
|
|
/// @brief GPU buffer resource
|
|
class Buffer {
|
|
public:
|
|
/// @brief Constructor
|
|
Buffer();
|
|
|
|
/// @brief Destructor
|
|
~Buffer();
|
|
|
|
/// @brief Create buffer
|
|
/// @param type Buffer type
|
|
/// @param size Buffer size in bytes
|
|
/// @param data Initial data (nullptr for empty buffer)
|
|
/// @param usage Usage hint
|
|
/// @return True if creation succeeded
|
|
bool create(BufferType type, size_t size, const void* data, BufferUsage usage);
|
|
|
|
/// @brief Update buffer data
|
|
/// @param offset Offset in bytes
|
|
/// @param size Size in bytes
|
|
/// @param data Data to upload
|
|
void update(size_t offset, size_t size, const void* data);
|
|
|
|
/// @brief Bind buffer
|
|
void bind() const;
|
|
|
|
/// @brief Bind buffer to binding point (for UBO/SSBO)
|
|
/// @param binding_point Binding point index
|
|
void bind_base(uint binding_point) const;
|
|
|
|
/// @brief Unbind buffer
|
|
void unbind() const;
|
|
|
|
/// @brief Release buffer resources
|
|
void release();
|
|
|
|
/// @brief Get buffer handle
|
|
/// @return Buffer handle
|
|
BufferHandle get_handle() const { return handle_; }
|
|
|
|
/// @brief Get buffer size
|
|
/// @return Size in bytes
|
|
size_t get_size() const { return size_; }
|
|
|
|
/// @brief Get buffer type
|
|
/// @return Buffer type
|
|
BufferType get_type() const { return type_; }
|
|
|
|
/// @brief Check if buffer is valid
|
|
/// @return True if valid
|
|
bool is_valid() const { return handle_ != INVALID_HANDLE; }
|
|
|
|
private:
|
|
BufferHandle handle_;
|
|
BufferType type_;
|
|
size_t size_;
|
|
BufferUsage usage_;
|
|
};
|
|
|
|
} // namespace are
|
|
|
|
#endif // ARE_INCLUDE_RESOURCE_BUFFER_H
|