feat: use attribute for glmesh indices
This commit is contained in:
@@ -9,6 +9,7 @@ using namespace enzo;
|
||||
geo::Geometry::Geometry()
|
||||
{
|
||||
addVector3Attribute(ga::AttrOwner::POINT, "P");
|
||||
addIntAttribute(ga::AttrOwner::VERTEX, "point");
|
||||
}
|
||||
|
||||
ga::AttributeHandle<int> geo::Geometry::addIntAttribute(ga::AttributeOwner owner, std::string name)
|
||||
|
||||
@@ -15,21 +15,10 @@ void GLMesh::init()
|
||||
|
||||
initBuffers();
|
||||
|
||||
std::vector<int> foo = {0,1,2,3,4};
|
||||
for(int i=1;i+1<foo.size();++i)
|
||||
{
|
||||
indexData.push_back(foo.at(0));
|
||||
indexData.push_back(foo.at(i));
|
||||
indexData.push_back(foo.at(i+1));
|
||||
}
|
||||
// indexData =
|
||||
// {
|
||||
// 0, 1, 2, 1, 2, 3
|
||||
// };
|
||||
|
||||
// store data in the buffer
|
||||
glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexData.size()*sizeof(GLint), indexData.data(), GL_STATIC_DRAW);
|
||||
// glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
|
||||
// glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexData.size()*sizeof(GLint), indexData.data(), GL_STATIC_DRAW);
|
||||
|
||||
|
||||
// unbind vertex array
|
||||
@@ -56,6 +45,7 @@ void GLMesh::initBuffers()
|
||||
|
||||
void GLMesh::setPosBuffer(std::vector<enzo::bt::Vector3> data)
|
||||
{
|
||||
bind();
|
||||
vertexPosData.clear();
|
||||
for(auto vector : data)
|
||||
{
|
||||
@@ -65,6 +55,22 @@ void GLMesh::setPosBuffer(std::vector<enzo::bt::Vector3> data)
|
||||
}
|
||||
|
||||
glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
|
||||
unbind();
|
||||
}
|
||||
|
||||
void GLMesh::setIndexBuffer(std::vector<int> data)
|
||||
{
|
||||
bind();
|
||||
indexData.clear();
|
||||
for(int i=1;i+1<data.size();++i)
|
||||
{
|
||||
indexData.push_back(data.at(0));
|
||||
indexData.push_back(data.at(i));
|
||||
indexData.push_back(data.at(i+1));
|
||||
}
|
||||
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexData.size()*sizeof(GLint), indexData.data(), GL_STATIC_DRAW);
|
||||
unbind();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ public:
|
||||
void init();
|
||||
void initBuffers();
|
||||
void setPosBuffer(std::vector<enzo::bt::Vector3> data);
|
||||
void setIndexBuffer(std::vector<int> data);
|
||||
void bind();
|
||||
void unbind();
|
||||
void draw();
|
||||
|
||||
@@ -156,12 +156,16 @@ std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo:
|
||||
PAttrHandle.addValue(bt::Vector3(1.0f, 1.0f, 0.0f));
|
||||
|
||||
mesh->setPosBuffer(PAttrHandle.getData());
|
||||
// mesh->setPosBuffer(std::vector<bt::Vector3>{
|
||||
// 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<ga::Attribute> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user