[SOLVED] Using a vtk renderer in QtQuick
-
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");
}@
-
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 -
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 -
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/