From 503ca43713914e45727b13a5708af5324d74da46 Mon Sep 17 00:00:00 2001 From: parker Date: Thu, 3 Jul 2025 00:27:48 +0100 Subject: [PATCH] feat: use attribute for glmesh indices --- src/Engine/Operator/Geometry.cpp | 1 + src/gui/viewport/GLMesh.cpp | 32 ++++++++++++++++----------- src/gui/viewport/GLMesh.h | 1 + src/gui/viewport/ViewportGLWidget.cpp | 16 +++++++++----- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/Engine/Operator/Geometry.cpp b/src/Engine/Operator/Geometry.cpp index 5246ee7..97ccc4a 100644 --- a/src/Engine/Operator/Geometry.cpp +++ b/src/Engine/Operator/Geometry.cpp @@ -9,6 +9,7 @@ using namespace enzo; geo::Geometry::Geometry() { addVector3Attribute(ga::AttrOwner::POINT, "P"); + addIntAttribute(ga::AttrOwner::VERTEX, "point"); } ga::AttributeHandle geo::Geometry::addIntAttribute(ga::AttributeOwner owner, std::string name) diff --git a/src/gui/viewport/GLMesh.cpp b/src/gui/viewport/GLMesh.cpp index 701f325..d30092c 100644 --- a/src/gui/viewport/GLMesh.cpp +++ b/src/gui/viewport/GLMesh.cpp @@ -15,21 +15,10 @@ void GLMesh::init() initBuffers(); - std::vector foo = {0,1,2,3,4}; - for(int i=1;i+1 data) { + bind(); vertexPosData.clear(); for(auto vector : data) { @@ -65,6 +55,22 @@ void GLMesh::setPosBuffer(std::vector data) } glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW); + unbind(); +} + +void GLMesh::setIndexBuffer(std::vector data) +{ + bind(); + indexData.clear(); + for(int i=1;i+1 data); + void setIndexBuffer(std::vector data); void bind(); void unbind(); void draw(); diff --git a/src/gui/viewport/ViewportGLWidget.cpp b/src/gui/viewport/ViewportGLWidget.cpp index ab1a183..9c189b2 100644 --- a/src/gui/viewport/ViewportGLWidget.cpp +++ b/src/gui/viewport/ViewportGLWidget.cpp @@ -156,12 +156,16 @@ std::unique_ptr ViewportGLWidget::meshFromGeo(std::unique_ptrsetPosBuffer(PAttrHandle.getData()); - // mesh->setPosBuffer(std::vector{ - // bt::Vector3(-0.5f, -0.5f, 0.0f), - // bt::Vector3(0.5f, -0.5f, 0.0f), - // bt::Vector3(0.0f, 0.5f, 0.0f), - // bt::Vector3(0.5f, 0.5f, 0.0f), - // }); + + std::shared_ptr pointAttr = geometry->getAttribByName(ga::AttrOwner::VERTEX, "point"); + ga::AttributeHandleInt pointAttrHandle = ga::AttributeHandleInt(pointAttr); + pointAttrHandle.addValue(0); + pointAttrHandle.addValue(1); + pointAttrHandle.addValue(2); + pointAttrHandle.addValue(3); + pointAttrHandle.addValue(4); + mesh->setIndexBuffer(pointAttrHandle.getData()); + return mesh; }