> On 24 Apr 2016, at 16:49, Artem Fedoskin <afedosk...@gmail.com> wrote:
> 
> I'm sorry. My first E-Mail was sent accidentally. Here is the final version 
> of my E-Mail.
> Hello everybody. I have a project where a lot of objects are painted on the 
> screen whenever the user interacts with the app (pan, zoom, move) I would be 
> really grateful to you if you could answer a few questions regarding the 
> internals of Qt Quick Scene Graph:
> 
>       • Imagine that I add 1000 nodes with the same color inside 
> QQuickItem::updatePaintNode() function of some QQuickItem derived class. Will 
> they be drawn in batch as described in 
> http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph-renderer.html#batching?

Depends on the cirucmstances, but if they share clipping their 
QSGMaterial::compare() indicates they are all identical, they will be batched, 
yes. Verify with QSG_VISUALIZE=batches, as indicated by this same document.

>       • Can I call the function of some other class in 
> QQuickItem::updatePaintNode()? I have some class named Data, class named View 
> and a subclass of QSGGeometryNode Triangle. Imagine that after objects of 
> these classes are created the Data asks View to create 10 Triangles. The View 
> creates 10 Triangles during the updatePaintNode() call and passes to them 
> pointers to the object of class Data, that required their instantiation. The 
> Triangles refers to the Data and get some values from it and converts them to 
> x,y coordinates. Is it something possible?
> Do I violate the rule stated here 
> http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph.html#scene-graph-and-rendering
>  "Warning: It is crucial that OpenGL operations and interaction with the 
> scene graph happens exclusively on the render thread, primarily during the 
> updatePaintNode() call. The rule of thumb is to only use classes with the 
> "QSG" prefix inside the QQuickItem::updatePaintNode() function." ? 

The point here is really that on many systems, there will be two threads that 
are running. The GUI thread where your QQuickItems live and the render thread 
where your QSGXxx objects live. updatePaintNode() is called on the render 
thread while the GUI thread is blocked, so you are safe to read state out of 
the QQuickItem at that time and use that to create/update/modify/delete your 
QSGXxx objects accordingly. At any other time, the two worlds live separate 
lives and should have no connection. 

There are other places where interaction between the threads are also ok, as 
outlined in the QQuickItem docs, but by sticking to the rule outlined in the 
updatePaintNode() function, 99% of all usecases will be covered. 

For your usecase you are free to construct View, Data, x number of Triangles 
during updatePaintNode() and then store that under some subclass of a QSGNode. 
On the next call,  you can update your structure if needed. Your QQuickItem 
does not store a pointer to this QSGNode, it only exists inside the scene graph 
and during the updatePaintNode() function.

cheers,
Gunnar

> 
> At first I was thinking about deriving classes like Triangle from QQuickItem 
> and then reparenting them to the View but the direct creation of 
> QSGGeometryNodes seems to me to be less memory requiring approach.
> 
> Regards,
> Artem Fedoskin
> 
> 2016-04-24 16:41 GMT+02:00 Artem Fedoskin <afedosk...@gmail.com>:
> Hello everybody. I have a project where a lot of objects are painted on the 
> screen whenever the user interacts with the app (pan, zoom, move) I would be 
> really grateful to you if you could answer a few questions regarding the 
> internals of Qt Quick Scene Graph:
> 
>       • Imagine that I add 1000 nodes with the same color inside 
> QQuickItem::updatePaintNode() function of some QQuickItem derived class. Will 
> they be drawn in batch as described in 
> http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph-renderer.html#batching?
>       • Can I call the function of some other class in 
> QQuickItem::updatePaintNode()? I have some class named Data, class named View 
> and a subclass of QSGGeometryNode Triangle. Imagine that after objects of 
> these classes are created the Data asks View to create 10 Triangles. The View 
> creates 10 Triangles during the updatePaintNode() call and passes pointers to 
> the object of class Data, that required their instantiation. The Triangles 
> refers to the Data and get coordinates from it. Is it something possible. Do 
> I violate the rule stated here "Warning: It is crucial that OpenGL operations 
> and interaction with the scene graph happens exclusively on the render 
> thread, primarily during the updatePaintNode() call. The rule of thumb is to 
> only use classes with the "QSG" prefix inside the 
> QQuickItem::updatePaintNode() function."
> 
> 
> 
>       • For example, I want to get new coordinates of the object and to do 
> that I should refer to function of some other not QSGNode derived object and 
> then use these coordinates for rendering one of the nodes.
> 
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to