26 const bool allocate_on_device = ibo_id_ == 0;
27 if (allocate_on_device) {
28 glGenBuffers(1, &ibo_id_);
31 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_id_);
33 if (
data_ !=
nullptr || allocate_on_device) {
36 glBufferData(GL_ELEMENT_ARRAY_BUFFER,
size,
data_, GL_STATIC_DRAW);
44 if (ibo_id_ == 0 ||
data_ !=
nullptr) {
57 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, binding, ibo_id_);
63 void *
data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_READ_ONLY);
68 bool GLIndexBuf::is_active()
const
73 int active_ibo_id = 0;
74 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &active_ibo_id);
75 return ibo_id_ == active_ibo_id;
85 glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, start,
len,
data);
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static void buf_free(GLuint buf_id)
void bind_as_ssbo(uint binding) override
const uint32_t * read() const override
void update_sub(uint start, uint len, const void *data) override
void upload_data() override