尝试将QML用户界面呈现到SDL窗口中。
有一个SDL 1.2游戏通过SDL_SetVideoMode
以SDL_OPENGLBLIT
标志创建OpenGL上下文。
我们的想法是获取OpenGL上下文句柄并将其传递给将在场景中绘制GUI的QQuickRenderControl。
获取本机上下文(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。
如何让它发挥作用?