diff --git a/src/Engine/Network/NetworkManager.cpp b/src/Engine/Network/NetworkManager.cpp index 5ce9d7c..8e41ecb 100644 --- a/src/Engine/Network/NetworkManager.cpp +++ b/src/Engine/Network/NetworkManager.cpp @@ -49,21 +49,31 @@ void enzo::nt::NetworkManager::setDisplayOp(OpId opId) std::vector dependencyGraph = getDependencyGraph(opId); enzo::geo::Geometry prevGeometry; + // ---- + // create geometry start + // ---- std::shared_ptr PAttr = prevGeometry.getAttribByName(ga::AttrOwner::POINT, "P"); - ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr); - PAttrHandle.addValue(bt::Vector3(1.0f, -1.0f, 0.0f)); - PAttrHandle.addValue(bt::Vector3(-1.0f, -1.0f, 0.0f)); - PAttrHandle.addValue(bt::Vector3(-1.0f, 1.0f, 0.0f)); - PAttrHandle.addValue(bt::Vector3(0.0f, 2.0f, 0.0f)); - PAttrHandle.addValue(bt::Vector3(1.0f, 1.0f, 0.0f)); + ga::AttributeHandleVector3 PAttrHandle(PAttr); + std::vector pts={ + {-1,-1,-1},{1,-1,-1},{1,-1,1},{-1,-1,1}, + {-1,1,-1},{1,1,-1},{1,1,1},{-1,1,1}, + {0,2,-1},{0,2,1} + }; + for(auto& p:pts) PAttrHandle.addValue(p); std::shared_ptr pointAttr = prevGeometry.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); + ga::AttributeHandleInt pointAttrHandle(pointAttr); + std::vector> faces={ + {3,2,6,9,7},{0,1,5,8,4},{0,3,7,4},{1,2,6,5}, + {0,1,2,3},{4,7,9},{4,9,8},{5,6,9},{5,9,8} + }; + for(auto& f:faces) for(int i:f) pointAttrHandle.addValue(i); + + std::shared_ptr vertexCountAttr = prevGeometry.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); + ga::AttributeHandleInt vertexCountHandle(vertexCountAttr); + for(auto& f:faces) vertexCountHandle.addValue(f.size()); + + // -------- for(enzo::nt::OpId opId : dependencyGraph) { @@ -76,7 +86,9 @@ enzo::geo::Geometry enzo::nt::NetworkManager::cookOp(enzo::nt::OpId opId, enzo:: { std::shared_ptr PAttr = inputGeometry.getAttribByName(ga::AttrOwner::POINT, "P"); ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr); - for(int i=0; i<5; ++i) + + + for(int i=0; ipush_back(value); } - std::vector getData() const + std::vector getAllValues() const { return *data_; } diff --git a/src/Engine/Operator/Geometry.cpp b/src/Engine/Operator/Geometry.cpp index 97ccc4a..589153e 100644 --- a/src/Engine/Operator/Geometry.cpp +++ b/src/Engine/Operator/Geometry.cpp @@ -10,6 +10,7 @@ geo::Geometry::Geometry() { addVector3Attribute(ga::AttrOwner::POINT, "P"); addIntAttribute(ga::AttrOwner::VERTEX, "point"); + addIntAttribute(ga::AttrOwner::PRIMITIVE, "vertexCount"); } 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 ee9ee3c..d519427 100644 --- a/src/gui/viewport/GLMesh.cpp +++ b/src/gui/viewport/GLMesh.cpp @@ -61,18 +61,33 @@ void GLMesh::setPosBuffer(std::vector data) unbind(); } -void GLMesh::setIndexBuffer(std::vector data) +void GLMesh::setIndexBuffer(std::vector pointIndices, std::vector primVertexCounts) { bind(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); indexData.clear(); - std::cout << "index data\n-------\n"; - for(int i=1;i+1 data); - void setIndexBuffer(std::vector data); + void setIndexBuffer(std::vector pointIndices, std::vector primVertexCounts); void bind(); void unbind(); void draw(); diff --git a/src/gui/viewport/ViewportGLWidget.cpp b/src/gui/viewport/ViewportGLWidget.cpp index bb44624..13ac2d5 100644 --- a/src/gui/viewport/ViewportGLWidget.cpp +++ b/src/gui/viewport/ViewportGLWidget.cpp @@ -156,7 +156,8 @@ std::unique_ptr ViewportGLWidget::meshFromGeo(enzo::geo::Geometry& geome PAttrHandle.addValue(bt::Vector3(0.0f, 2.0f, 0.0f)); PAttrHandle.addValue(bt::Vector3(1.0f, 1.0f, 0.0f)); - mesh->setPosBuffer(PAttrHandle.getData()); + + mesh->setPosBuffer(PAttrHandle.getAllValues()); std::shared_ptr pointAttr = geometry.getAttribByName(ga::AttrOwner::VERTEX, "point"); ga::AttributeHandleInt pointAttrHandle = ga::AttributeHandleInt(pointAttr); @@ -165,7 +166,13 @@ std::unique_ptr ViewportGLWidget::meshFromGeo(enzo::geo::Geometry& geome pointAttrHandle.addValue(2); pointAttrHandle.addValue(3); pointAttrHandle.addValue(4); - mesh->setIndexBuffer(pointAttrHandle.getData()); + + std::shared_ptr vertexCountAttr = geometry.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); + ga::AttributeHandleInt vertexCountHandle = ga::AttributeHandleInt(vertexCountAttr); + vertexCountHandle.addValue(5); + + mesh->setIndexBuffer(pointAttrHandle.getAllValues(), vertexCountHandle.getAllValues()); + return mesh; @@ -177,10 +184,13 @@ void ViewportGLWidget::geometryChanged(enzo::geo::Geometry& geometry) std::shared_ptr PAttr = geometry.getAttribByName(ga::AttrOwner::POINT, "P"); ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr); - triangleMesh_->setPosBuffer(PAttrHandle.getData()); + triangleMesh_->setPosBuffer(PAttrHandle.getAllValues()); std::shared_ptr pointAttr = geometry.getAttribByName(ga::AttrOwner::VERTEX, "point"); ga::AttributeHandleInt pointAttrHandle = ga::AttributeHandleInt(pointAttr); - triangleMesh_->setIndexBuffer(pointAttrHandle.getData()); + std::shared_ptr vertexCountAttr = geometry.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); + ga::AttributeHandleInt vertexCountHandle = ga::AttributeHandleInt(vertexCountAttr); + + triangleMesh_->setIndexBuffer(pointAttrHandle.getAllValues(), vertexCountHandle.getAllValues()); }