99 data_ = (GLbyte *)glMapBufferRange(GL_DRAW_INDIRECT_BUFFER, data_offset_, data_size_,
flag);
161 if (command_len_ == 0) {
174 const bool is_finishing_a_buffer = (command_offset_ + command_size > data_size_);
175 if (command_len_ > 2 || is_finishing_a_buffer) {
176 GLenum prim =
to_gl(batch_->prim_type);
177 void *offset = (
void *)data_offset_;
179 glBindBuffer(GL_DRAW_INDIRECT_BUFFER, buffer_id_);
180 glFlushMappedBufferRange(GL_DRAW_INDIRECT_BUFFER, 0, command_offset_);
181 glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER);
183 data_offset_ += command_offset_;
188 GLenum gl_type =
to_gl(batch_->elem_()->index_type_);
189 glMultiDrawElementsIndirect(prim, gl_type, offset, command_len_, 0);
192 glMultiDrawArraysIndirect(prim, offset, command_len_, 0);
199 for (
int i = 0; i < command_len_; i++, cmd++) {
209 for (
int i = 0; i < command_len_; i++, cmd++) {
void GPU_batch_draw_advanced(blender::gpu::Batch *batch, int vertex_first, int vertex_count, int instance_first, int instance_count)
static void buf_free(GLuint buf_id)
static bool multi_draw_indirect_support