SFML community forums
Help => General => Topic started by: Eray on November 22, 2020, 10:47:48 pm
-
Hello,
I would like to use SFML with Qt.
More precisely I would like to create a QML component which is an instance of the SFML renderer.
Has anyone ever done this manipulation?
I tried to do something quickly with an object that inherits from QQuickItem and sf :: RenderWindow but the create doesn't work
and I'm not sure that's the right method.
My goal being to make an iOS / Android / Linux / Window game.
Thanks for your help
-
Not sure if that's possible at all. To be more specific, I don't think you can make SFML use the OpenGL context that Qt uses behind the scenes -- especially since it now uses an abstract rendering API which can use non-OpenGL back-ends (D3D, Vulkan, Metal).
The easiest solution, though not optimal, could be to draw your SFML scene to a render-texture, retrieve its pixels and upload them to something that QtQuick can display: ideally a QSGTexture + QSGSimpleTextureNode, or anything else that you're more familiar with (like QQuickPaintedItem + QImage).
If you've got the QSGTexture solution working, it may be worth investigating into directly transfering the pixels between the SFML render-texture and the QSGTexture's internal texture, without downloading the pixels in system RAM. I have no idea if this is possible.
-
Thank you for your help.
I use QSG quite often.
So I managed to display my RenderTexture in my SFML through an image no problem.
Now I would like to improve it by going directly from the opengl sfml texture to the QSGTexture texture.
In its Qt interface allows you to transform an opengl texture into a qt texture.
https://doc.qt.io/qt-5/qquickwindow.html#createTextureFromNativeObject
But it doesn't work as is, I just have a black texture.
After digging a little deeper, I think my textures are not shared between the sfml and Qt contexts, do you think this is a possible lead and do you have any solutions?
Thanks
-
Nop, I'm afraid you won't be able to do this since SFML and Qt use different contexts, that are not shared.
-
Thanks again for your reply !
I still have a small question with Qt, it is possible to share data from opengl contexts.
But I need to "link" my native context to a Qt context.
For that, I need to get the "GLXContext" of my SFML texture render, is it possible ?
Sources :
https://doc.qt.io/qt-5/qopenglcontext.html#setNativeHandle
https://doc.qt.io/qt-5/qglxnativecontext.html -> class I want to instantiate
https://doc.qt.io/qt-5/qopenglcontext.html#setShareContext
I do not despair yet ^^
-
After drawing to the SFML render-texture, its OpenGL context should be active, therefore a call to glXGetCurrentContext should do the trick.