feat: basic dependency graph cooking, updating viewport

This commit is contained in:
parker
2025-07-07 15:47:10 +01:00
parent 544889c40d
commit a14c9e973c
12 changed files with 96 additions and 21 deletions

View File

@@ -1,4 +1,5 @@
#include "gui/Interface.h"
#include "Engine/Network/NetworkManager.h"
#include "gui/viewport/Viewport.h"
#include "gui/network/Network.h"
#include <qpushbutton.h>
@@ -42,9 +43,7 @@ EnzoUI::EnzoUI()
mainLayout_->addWidget(viewportSplitter_);
QTimer::singleShot(100, this, [=] {
std::cout << "Viewport size: " << viewport->width() << " x " << viewport->height() << std::endl;
std::cout << "Network size: " << network->width() << " x " << network->height() << std::endl;
});
// connect signals
connect(enzo::nt::NetworkManager::getInstance(), &enzo::nt::NetworkManager::updateDisplay, viewport, &Viewport::geometryChanged);
}

View File

@@ -114,6 +114,7 @@ void Network::leftMousePressed(QMouseEvent *event)
else if(QGraphicsItem* clickedNode = itemOfType<NodeGraphic>(clickedItems))
{
nodeMoveDelta_=clickedNode->pos()-view_->mapToScene(event->pos());
std::cout << "move delta: " << nodeMoveDelta_.x() << " " << nodeMoveDelta_.y() << "\n";
state_=State::MOVING_NODE;
moveNodeBuffer.clear();
moveNodeBuffer.push_back(clickedNode);
@@ -190,7 +191,7 @@ void Network::mouseMoved(QMouseEvent *event)
if(state_==State::MOVING_NODE)
{
moveNodes(nodeMoveDelta_+view_->mapToScene(event->pos()));
moveNodes(view_->mapToScene(event->pos())+nodeMoveDelta_);
return;
}

View File

@@ -52,8 +52,6 @@ void SocketGraphic::initBoundingBox()
void SocketGraphic::posChanged(QPointF pos)
{
std::cout << "socket pos changed\n";
//
for(auto* edge : edges_)
{
// edge->setPos(startSocket_->scenePos(), socket->scenePos());

View File

@@ -46,12 +46,15 @@ void GLMesh::initBuffers()
void GLMesh::setPosBuffer(std::vector<enzo::bt::Vector3> data)
{
bind();
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
vertexPosData.clear();
std::cout << "pos data\n-------\n";
for(auto vector : data)
{
vertexPosData.push_back(vector.x());
vertexPosData.push_back(vector.y());
vertexPosData.push_back(vector.z());
std::cout << vector.x() << " " << vector.y() << " " << vector.z() << "\n";
}
glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
@@ -61,12 +64,15 @@ void GLMesh::setPosBuffer(std::vector<enzo::bt::Vector3> data)
void GLMesh::setIndexBuffer(std::vector<int> data)
{
bind();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
indexData.clear();
std::cout << "index data\n-------\n";
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));
std::cout << data.at(0) << " " << data.at(i) << " " << data.at(i+1) << "\n";
}
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexData.size()*sizeof(GLint), indexData.data(), GL_STATIC_DRAW);

View File

@@ -27,6 +27,11 @@ Viewport::Viewport(QWidget *parent, Qt::WindowFlags f)
}
void Viewport::geometryChanged(enzo::geo::Geometry& geometry)
{
openGLWidget_->geometryChanged(geometry);
}
void Viewport::resizeEvent(QResizeEvent *event)
{
QPainterPath path;

View File

@@ -23,4 +23,6 @@ private:
QPointF leftStartPos_;
bool rightMouseDown_=false;
QPointF rightStartPos_;
public slots:
void geometryChanged(enzo::geo::Geometry& geometry);
};

View File

@@ -20,8 +20,9 @@ void ViewportGLWidget::initializeGL()
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_MULTISAMPLE);
auto geo = std::make_unique<enzo::geo::Geometry>();
triangleMesh_ = meshFromGeo(geo);
enzo::geo::Geometry geo = enzo::geo::Geometry();
// triangleMesh_ = meshFromGeo(geo);
triangleMesh_ = std::make_unique<GLMesh>();
gridMesh_ = std::make_unique<GLGrid>();
QSurfaceFormat fmt = context()->format();
@@ -141,13 +142,13 @@ void ViewportGLWidget::paintGL()
}
std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo::Geometry>& geometry)
std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(enzo::geo::Geometry& geometry)
{
using namespace enzo;
auto mesh = std::make_unique<GLMesh>();
std::shared_ptr<ga::Attribute> PAttr = geometry->getAttribByName(ga::AttrOwner::POINT, "P");
std::shared_ptr<ga::Attribute> PAttr = geometry.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));
@@ -157,7 +158,7 @@ std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo:
mesh->setPosBuffer(PAttrHandle.getData());
std::shared_ptr<ga::Attribute> pointAttr = geometry->getAttribByName(ga::AttrOwner::VERTEX, "point");
std::shared_ptr<ga::Attribute> pointAttr = geometry.getAttribByName(ga::AttrOwner::VERTEX, "point");
ga::AttributeHandleInt pointAttrHandle = ga::AttributeHandleInt(pointAttr);
pointAttrHandle.addValue(0);
pointAttrHandle.addValue(1);
@@ -170,3 +171,16 @@ std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo:
return mesh;
}
void ViewportGLWidget::geometryChanged(enzo::geo::Geometry& geometry)
{
using namespace enzo;
std::shared_ptr<ga::Attribute> PAttr = geometry.getAttribByName(ga::AttrOwner::POINT, "P");
ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr);
triangleMesh_->setPosBuffer(PAttrHandle.getData());
std::shared_ptr<ga::Attribute> pointAttr = geometry.getAttribByName(ga::AttrOwner::VERTEX, "point");
ga::AttributeHandleInt pointAttrHandle = ga::AttributeHandleInt(pointAttr);
triangleMesh_->setIndexBuffer(pointAttrHandle.getData());
}

View File

@@ -18,10 +18,13 @@ public:
std::unique_ptr<GLMesh> triangleMesh_ ;
std::unique_ptr<GLGrid> gridMesh_ ;
std::unique_ptr<GLMesh> meshFromGeo(std::unique_ptr<enzo::geo::Geometry>& geometry);
std::unique_ptr<GLMesh> meshFromGeo(enzo::geo::Geometry& geometry);
protected:
void initializeGL() override;
void resizeGL(int w, int h) override;
void paintGL() override;
public slots:
void geometryChanged(enzo::geo::Geometry& geometry);
};