Unsolved Black screen and normal using QOpenGLContext + QQuickWindow
-
I might be wrong, but I think you might be using that class wrongly. It looks like you want to proceed a "classic" OpenGL operations. Shouldn't you be using QOpenGLWindow ?
-
QOpenGLWindow has the controls of main looping. The "render" function (called paint) must be overriden.
This project already have infrastructure to support GLFW, native Window and now QT support.
I settle on change to QT because it has lots of UI controls and nice features.In my main looping, I call QCoreApplication::processEvents() and the swapBuffer manually.
-
So nothing QtQuick related ?
-
@SGaist
No. It just happens with QQuickWindow.
It seems QQuickWindow also update (repaints) the screen in another thread. -
Sorry, I meant: are you doing anything QtQuick related in your application ?
Threads can be involved, it's explained in the Rendering part of the QQuickWindow documentation.
-
@SGaist if I use QOpenGLWindow, how do I put QTQuickControls on the window? Is it possible?
-
@BrunoGSA QQuickWindow clears the color buffer before rendering. Try calling
setClearBeforeRendering(false)
on your QQuickWindow. -
Hi @Tom_H
I changed the code in order to use QOpenGLWindow.
It seems working. Now I want to test adding a QWidget on the screen aside OpenGL frame using the following code:MainWindow::MainWindow(QWidget *parent)
{
...
parent->layout()->addWidget( component ... );
} -
@BrunoGSA said in Black screen and normal using QOpenGLContext + QQuickWindow:
parent->layout()->addWidget( component ... );
That's a wrong thing to do. Parent might be nullptr, might not have any layout, etc.
Child widget should not know nor care about their parents. It's not their role to modify them.
-
@SGaist you are completely right. That did not work.
I solved with a big workaround.
I create another window (QWidget) and set ("no-header", transparent backgound, "always on top") in order to simulate the maind window with opengl renderer and the Controls on the surface (QWidget).It was the best option I found out using QT, unfortunately.
-
@BrunoGSA I'm not sure what exactly you're doing, but it sounds like you're doing it the hard way. There are several ways to do OpenGL and QtQuick, as described in this video:
The easiest is shown in the example
openglunderqml
, and is the first method described in the video. It's also the method I'm currently using. -
I changed to use QOpenglWidget. I have seen it is not deprecated and meet my requirements.
Now I can open a window with QT controls and render opengl frames as part of the screen.
Thank you everyone!
-
You're welcome !
Since you have it working now, please mark the thread as solved using the "Topic Tools" button so that other forum members may know solution has been found :)