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_; }
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 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_; }
// Drawing commands
@ -211,7 +211,7 @@ namespace psemek::gfx
private:
array array_;
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();
struct mesh_info
@ -298,11 +298,8 @@ namespace psemek::gfx
assert((index_count % (*n)) == 0);
if (!index_buffer_)
{
index_buffer_ = buffer{};
array_.bind();
gl::BindBuffer(gl::ELEMENT_ARRAY_BUFFER, index_buffer_.id());
}
index_buffer_ = {};
array_.bind();
index_buffer_.load(indices, index_count, usage);
info_.index_count_ = index_count;
info_.indexed_ = true;

View file

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