WIP: Graphics Overhaul #2

Draft
naifb wants to merge 18 commits from buffer_update into main
2 changed files with 12 additions and 14 deletions
Showing only changes of commit 2a2547f216 - Show all commits

View File

@ -25,7 +25,11 @@ struct VertexAttribute {
VertexAttributeLayout layout; VertexAttributeLayout layout;
}; };
struct VertexAttributePointer; struct VertexAttributePointer {
VertexAttribute attribute;
GLuint buffer;
GLuint index;
};
static bool isIndexInVertexAttribute(int i, const VertexAttribute& va) { static bool isIndexInVertexAttribute(int i, const VertexAttribute& va) {
if ((i -= va.layout.offset) < 0) { return false; } if ((i -= va.layout.offset) < 0) { return false; }
@ -85,12 +89,6 @@ class VertexBuffer<true>
}; };
struct VertexAttributePointer {
VertexAttribute attribute;
VertexBuffer<false>* buffer;
GLuint index;
};
class VAO : public OpenGLObject { class VAO : public OpenGLObject {
using Base = OpenGLObject; using Base = OpenGLObject;
using Codes = VAOError::Codes; using Codes = VAOError::Codes;

View File

@ -38,7 +38,7 @@ VertexAttributePointerList VAO::attributes(const VertexAttributePointerList& att
_attrs = attrs_; _attrs = attrs_;
bind(); bind();
for (auto attr_ptr : attrs_) { for (auto attr_ptr : attrs_) {
attr_ptr.buffer->bind(); glBindBuffer(GL_ARRAY_BUFFER, attr_ptr.buffer);
GLuint idx = attr_ptr.index; GLuint idx = attr_ptr.index;
glVertexAttribPointer( glVertexAttribPointer(
idx, idx,
@ -124,7 +124,7 @@ size_t VertexGroup::buffer(VertexBuffer<false>&& buf_) {
GLuint idx = attrs.size(); GLuint idx = attrs.size();
for (auto attr : buf_ptr->attributes) { for (auto attr : buf_ptr->attributes) {
attrs.emplace_back( attrs.emplace_back(
VertexAttributePointer{attr, buf_ptr,idx} VertexAttributePointer{attr, buf_ptr->id(),idx}
); );
idx++; idx++;
} }
@ -152,7 +152,7 @@ size_t VertexGroup::buffers(std::vector<VertexBuffer<false>>&& bufs_) {
for (auto buf : _vertex_data) { for (auto buf : _vertex_data) {
for (auto attr : buf->attributes) { for (auto attr : buf->attributes) {
attr_ptrs.emplace_back( attr_ptrs.emplace_back(
VertexAttributePointer{attr, buf.get(), idx} VertexAttributePointer{attr, buf->id(), idx}
); );
idx++; idx++;
} }
@ -197,10 +197,10 @@ void VertexGroup::disableAttr(GLuint idx) {
} }
void VertexGroup::disableBuffer(size_t idx) { void VertexGroup::disableBuffer(size_t idx) {
auto buf_ptr = _vertex_data[idx].get(); auto buf_idx = _vertex_data[idx]->id();
bind(); bind();
for (auto attr : _vao.attributes()) { for (auto attr : _vao.attributes()) {
if (attr.buffer == buf_ptr) { if (attr.buffer == buf_idx) {
_vao.disable(attr.index); _vao.disable(attr.index);
} }
} }
@ -208,10 +208,10 @@ void VertexGroup::disableBuffer(size_t idx) {
} }
void VertexGroup::enableBuffer(size_t idx) { void VertexGroup::enableBuffer(size_t idx) {
auto buf_ptr = _vertex_data[idx].get(); auto buf_idx = _vertex_data[idx]->id();
bind(); bind();
for (auto attr : _vao.attributes()) { for (auto attr : _vao.attributes()) {
if (attr.buffer == buf_ptr) { if (attr.buffer == buf_idx) {
_vao.enable(attr.index); _vao.enable(attr.index);
} }
} }