微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建新的 Qt OpenGL 纹理似乎比重用旧纹理更快

如何解决创建新的 Qt OpenGL 纹理似乎比重用旧纹理更快

我一直在使用 Qt 和 OpenGL 开发 Game Boy 模拟器。我对 Qt 和 OpenGL 都很陌生。它处于非常稳定的状态,我从 OpenGL 例程中删除了一些我认为是浪费的代码我有一个例程,Qt 信号每秒大约调用 60 次,以更新模拟屏幕的 OpenGL 纹理。我将其更改为仅使用新的屏幕缓冲区设置纹理数据。我遇到的问题是,留下破坏和创建新纹理的浪费代码以某种方式比仅设置新数据运行得更快。这就是我所拥有的:

void OpenGlWidget::updateEmulatedScreen(uint32_t *screenData) {
    emulatedScreenTexture->destroy();
    emulatedScreenTexture->create();
    emulatedScreenTexture->setFormat(QOpenGLTexture::RGBA8_Unorm);
    emulatedScreenTexture->setSize(EMULATED_SCREEN_RESOLUTION_X,EMULATED_SCREEN_RESOLUTION_Y);
    emulatedScreenTexture->setMinMagFilters(QOpenGLTexture::Nearest,QOpenGLTexture::Nearest);
    emulatedScreenTexture->setWrapMode(QOpenGLTexture::ClampToEdge);
    emulatedScreenTexture->allocateStorage();

    emulatedScreenTexture->setData(QOpenGLTexture::PixelFormat::RGBA,QOpenGLTexture::PixelType::UInt32_RGBA8,screenData);
    this->update();
}

我改成这样:

void OpenGlWidget::updateEmulatedScreen(uint32_t *screenData) {
    emulatedScreenTexture->setData(QOpenGLTexture::PixelFormat::RGBA,screenData);
    this->update();
}

对我来说,这似乎比每次销毁和创建一个新纹理要高效得多,但它不知何故大大减慢了仿真速度。我已经测试了多次而没有改变任何其他东西,并且每次添加销毁/创建速度都会加快速度。我错过了什么吗?每次只设置数据实际上是否更糟糕?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。