为什么没有调用QQuickFrameBufferObject::createRender?

9jyewag0  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(90)

我使用的是Qt的官方fboItem示例,但它不能正确呈现。在框架内应该自动调用createReneller,并打印日志,发现它没有被调用,所以不执行渲染。

但为什么不自动调用呢?

查看Qt官方提到,只有当当前程序使用OpenGL渲染时才会调用,但如何设置程序支持OpenGL渲染呢?https://doc.qt.io/qt-6/qquickframebufferobject.html

这是简单的代码

class FboInSGRenderer : public QQuickFramebufferObject
{
    Q_OBJECT
    QML_NAMED_ELEMENT(Renderer)
public:
    Renderer *createRenderer() const;
};

class LogoInFboRenderer : public QQuickFramebufferObject::Renderer
{
public:
    LogoInFboRenderer()
    {
        logo.initialize();
    }

    void render() override {
        logo.render();
        update();
    }

    QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) override {
        QOpenGLFramebufferObjectFormat format;
        format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
        format.setSamples(4);
        return new QOpenGLFramebufferObject(size, format);
    }

    LogoRenderer logo;
};

QQuickFramebufferObject::Renderer *FboInSGRenderer::createRenderer() const
{
    qDebug() << "#createRenderer call......";
    return new LogoInFboRenderer();
}
int main(int argc, char**argv)
{
    QGuiApplication app(argc, argv);

    QQuickView view;
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.setSource(QUrl("qrc:///scenegraph/fboitem/main.qml"));
    view.show();

    return app.exec();
}

run result

那么,我错在哪里呢?

我的开发环境:

Qt 5.15.2 MinGW64
Windows 10 Pro
Processor: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz 2.30 GHz
Graphics Card: NVIDIA GeForce MX330
oxiaedzo

oxiaedzo1#

问题解决了

我的本地注册表被某个软件修改了

QMLSCENE_DEVICE =softwarecontext

所以,只要删除这个并重新启动计算机,就会没事的

相关问题