[SOLVED] Using a vtk renderer in QtQuick
-
glPopAttrib and glPushAttrib are invalid functions?
You can do beginNativePainting within QPainter to access these functions but I'm guessing thats not what you did.
Im on qt 5.0.1 ANGLE GLES version
What header did you include?
-
I've made more progress on getting it working on GLES systems.
My window flickers for a frame and then goes gray.Also for that frame the scene is upside down and a texture is missing.
The last two things that I wish to ask
- I noticed
setFbo isn't called anywhere?
and also I have two size methods setRect and setSize
@void ColorNode::setSize(const QSize size)
{
if (size == m_size) return;m_size = size; //m_fbo = NULL; //m_texture = NULL; QSGGeometry::updateTexturedRectGeometry(&m_geometry, QRectF(0, 0, m_size.width(), m_size.height()), QRectF(0, 0, 1, 1)); markDirty(DirtyGeometry);
}
void ColorNode::setRect(const QRectF rect)
{
if (m_rect == rect) returnmarkDirty(DirtyGeometry); m_rect = rect;
}@
I'm guessing yous implementation is different?
Could I get a quick look :)I think I'm really close
- I noticed
-
Actually, I posted almost the whole implementation already, but here you go: "Node":http://pastebin.com/8CgheNzm . The implementation of the texture and the item are already posted.
bq. I noticed setFbo isn’t called anywhere?
You may have noticed that I pass the FBO to the constructor of the texture ;-)
bq. What header did you include?
I compiled Qt 5.0.0 with ANGLE deactivated and the -opengl desktop flag, because I use VTK which also uses the native OpenGL system.
-
I need to set the geometry in my setsize or I get nothing in the window.
@
QSGFboTexture::QSGFboTexture(QGLFramebufferObject* fbo)
:QSGTexture()
{
m_fbo = fbo;// setFbo(fbo);
if (m_fbo != NULL)
firstTimeBound = true;}
@same as setFbo ;-)
The problem is that on ANGLE we are using a GLES emulator not OpenGL.
Those two functions don't exsist.What happens to your window when you dont call the push and pop?
@void ColorNode::preprocess()
{
if(m_fbo == NULL) return; //will happen a few timesQOpenGLContext::currentContext()->functions()->glUseProgram(0); m_fbo->bind();
CCDirector::sharedDirector()->mainLoop();
m_fbo->release();
m_fbo->toImage().save("name.png","png");
}@
-
Its not working without the push and pop (nothing is rendered, only the background). Unfortunatelly I cannot tell you why, I'm no OpenGL expert.
-
I think I understand why.
The only problem is GLES doest support those functions so how do we get around them?Maybe I should make a new thread to this issue?
-
I found a new way of solving this problem.
It Involves setting up a separate opengl context and switching between the two before and after binding and releasing the fbo.
Any idea how to draw correctly for a y inverted fbo.
On qquickpainteditem we can set it to flip but not for the qsgtexture :/ -
Hey, thanks for your reply. Can you provide some code how you do that?
In my case, it also seems to be the cleanest way to do the same thing and I wan't to try that. :-)For the flipping problem I would naivly just scale (glScale) the y-Axis with -1. But as I mentioned, I'm no OpenGL expert.
-
Hey z.emb
I used what was on this thread.
http://qt-project.org/forums/viewthread/25268/
I just changed this line for the flip y.
QSGGeometry::updateTexturedRectGeometry(&m_geometry,
QRectF(0, 0, m_size.width(), m_size.height()),
QRectF(0, 0, 1, 1));to
QSGGeometry::updateTexturedRectGeometry(&m_geometry,
QRectF(0, 0, m_size.width(), m_size.height()),
QRectF(0, 1, 1, -1));//0011 = old y fliped -
Can you give me some code how you switched the GL-context?
-
Hey Guys,
Apologies about not replying.
I didn't realize I got a response.I swapped the context at the very beginning by using the code in this thread
http://qt-project.org/forums/viewthread/25268/
Hope that helps Ricky, just got your pm.
Many Thanks
Martell -
Hi,
I still did not get it.
Could you, please, anyone post a full example about rendering vtk to qtquick?
I was trying to understand the discussion but I did not get through...Best regards,
radek
-
Hey, I join to this request. Even the simplest example would be helpful.
Regards,
rafal -
I have created a repository with code that integrates VTK with Qt QuickControls 2, tested with VTK 8 and Qt 5.9. You can find the code here https://github.com/nicanor-romero/QtVtk with building instructions in the README. Also a brief article about it,
https://blog.bq.com/es/integrating-qtquickcontrols-2-with-vtk/