尝试将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/

10-17 01:32