尝试将QML用户界面呈现到SDL窗口中。
有一个SDL 1.2游戏,它通过带有SDL_SetVideoMode
标志的SDL_OPENGLBLIT
创建OpenGL上下文。
这个想法是获取OpenGL上下文句柄并将其传递给QQuickRenderControl,后者将在场景上绘制GUI。
获取 native 上下文(X11示例):
GLXContext currentContext;
SDL_SysWMinfo wmInfo;
SDL_VERSION(&wmInfo.version);
if (SDL_GetWMInfo(&wmInfo))
{
Display *display = wmInfo.info.x11.gfxdisplay;
currentContext = glXGetCurrentContext();
assert(currentContext);
}
在Qt中采用它:
QOpenGLContext *ctx = new QOpenGLContext;
ctx->setNativeHandle(QVariant::fromValue<QGLXNativeContext>(
QGLXNativeContext(currentContext, wmInfo.info.x11.display, wmInfo.info.x11.window)
));
并创建QQuickRenderControl:
QQuickRenderControl *renderControl = new QQuickRenderControl;
renderControl->initialize(ctx);
但是,如果没有QWindow,QQuickRenderControl就无法启动:
QQuickRenderControl::initialize called with no associated window
ctx->isValid()
和ctx->makeCurrent()
也会返回false。如何使其运作?
最佳答案
至少SDL2有可能。
Qt应用程序单例必须正在运行,必须从 native 句柄中提取窗口并将其传递给RenderControl。
关于qt - 通过SDL渲染QtQuick GUI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31678667/