Make gfx::mesh only bind index buffer as GL_ELEMENT_ARRAY_BUFFER, in accordance with WebGL restrictions

This commit is contained in:
Nikita Lisitsa 2025-01-30 12:40:19 +03:00
parent 4e2aa5f577
commit f75c04d988
2 changed files with 7 additions and 13 deletions

View file

@ -195,11 +195,11 @@ namespace psemek::gfx
GLenum index_type() const { return info_.index_type_; } GLenum index_type() const { return info_.index_type_; }
buffer & vertex_buffer() { return vertex_buffer_; } buffer & vertex_buffer() { return vertex_buffer_; }
buffer & index_buffer() { return index_buffer_; } auto & index_buffer() { return index_buffer_; }
buffer & instance_buffer() { return instance_buffer_; } buffer & instance_buffer() { return instance_buffer_; }
buffer const & vertex_buffer() const { return vertex_buffer_; } buffer const & vertex_buffer() const { return vertex_buffer_; }
buffer const & index_buffer() const { return index_buffer_; } auto const & index_buffer() const { return index_buffer_; }
buffer const & instance_buffer() const { return instance_buffer_; } buffer const & instance_buffer() const { return instance_buffer_; }
// Drawing commands // Drawing commands
@ -211,7 +211,7 @@ namespace psemek::gfx
private: private:
array array_; array array_;
buffer vertex_buffer_ = buffer::null(); buffer vertex_buffer_ = buffer::null();
buffer index_buffer_ = buffer::null(); basic_buffer<gl::ELEMENT_ARRAY_BUFFER> index_buffer_ = basic_buffer<gl::ELEMENT_ARRAY_BUFFER>::null();
buffer instance_buffer_ = buffer::null(); buffer instance_buffer_ = buffer::null();
struct mesh_info struct mesh_info
@ -298,11 +298,8 @@ namespace psemek::gfx
assert((index_count % (*n)) == 0); assert((index_count % (*n)) == 0);
if (!index_buffer_) if (!index_buffer_)
{ index_buffer_ = {};
index_buffer_ = buffer{}; array_.bind();
array_.bind();
gl::BindBuffer(gl::ELEMENT_ARRAY_BUFFER, index_buffer_.id());
}
index_buffer_.load(indices, index_count, usage); index_buffer_.load(indices, index_count, usage);
info_.index_count_ = index_count; info_.index_count_ = index_count;
info_.indexed_ = true; info_.indexed_ = true;

View file

@ -144,11 +144,8 @@ namespace psemek::gfx
assert(vertex_buffer_); assert(vertex_buffer_);
if (!index_buffer_) if (!index_buffer_)
{ index_buffer_ = {};
index_buffer_ = buffer{}; array_.bind();
array_.bind();
gl::BindBuffer(gl::ELEMENT_ARRAY_BUFFER, index_buffer_.id());
}
vertex_buffer_.load(vertices, vertex_size * vertex_count, usage); vertex_buffer_.load(vertices, vertex_size * vertex_count, usage);
index_buffer_.load(indices, index_size(index_type) * index_count, usage); index_buffer_.load(indices, index_size(index_type) * index_count, usage);
info_.vertex_count_ = vertex_count; info_.vertex_count_ = vertex_count;