Qt 5.15,ANGLE:使用DirectComposition,即Flip Model SwapChain

问题描述 投票:0回答:1

我正在开发一个使用 Qt 5.15.11 和 ANGLE 的应用程序,它需要与我无法控制的另一个应用程序很好地配合。通过使用小型 DirectX 测试应用程序进行大量实验,我确定可以通过使用交换链的翻转模型来解决该问题,例如像这样:

swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;

使用PIX,我相对确定我的应用程序当前没有使用这个SwapEffect,这就是为什么它不能很好地发挥作用。

我尝试挖掘角度代码,似乎我需要将属性 EGL_DIRECT_COMPOSITION_ANGLE 设置为 EGL_TRUE 才能启用此功能。这就是我陷入困境的地方:我不知道如何实现这一目标。

我可以让 Qt 和 ANGLE 使用此 SwapEffect (或 FLIP_SEQUENTIAL;我认为两者都有效)吗?我需要重新编译 Qt 还是可以通过环境变量或其他配置方法来完成?我目前一直使用 Qt 5.15,但将来升级到 Qt 6 也并非完全不可能。

c++ qt opengl qt5 directx-11
1个回答
0
投票

这花了一些时间,但我们已经开始测试这种方法:我们的问题就这样解决了。

为了回答这个问题,我将提供我在 Qt 中到底更改了什么以启用此交换效果:

在 /src/plugins/platforms/windows/qwindowseglcontext.cpp 行中我进行了以下更改:

 void *QWindowsEGLStaticContext::createWindowSurface(void *nativeWindow, void *nativeConfig, int *err)
 {
     *err = 0;
    EGLint attribs[3] = {
       EGL_DIRECT_COMPOSITION_ANGLE, EGL_TRUE,
       EGL_NONE
    };
    EGLSurface surface = libEGL.eglCreateWindowSurface(m_display, nativeConfig,
                            static_cast<EGLNativeWindowType>(nativeWindow), attribs); //attribs was nullptr before
© www.soinside.com 2019 - 2024. All rights reserved.