gpt4 book ai didi

c++ - QOpenGLFunctions_4_3_与 QOpenGLContext::versionFunctions 的兼容性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:03 26 4
gpt4 key购买 nike

我正在尝试从 http://www.kdab.com/opengl-in-qt-5-1-part-5/ 编译 Tesselation 的示例(包括源代码)与兼容性配置文件,它根本无法加载此配置文件:

我所做的次要(也是唯一)修改:

@terraintessellationscene.h:

QOpenGLFunctions_4_3_Compatibility* m_funcs;

@terraintessellationscene.cpp:

m_funcs = m_context->versionFunctions<QOpenGLFunctions_4_3_Compatibility>();
if ( !m_funcs )
{
qFatal("Requires OpenGL >= 4.0");
exit( 1 );
}
m_funcs->initializeOpenGLFunctions();

当我调用 versionFunctions() 时它就崩溃了。它应该有效。我可以使用任何 Core Profile 桌面配置文件编译此源代码和其他几个不同复杂度的不同项目。稍后我将尝试使用 GLEW 来查看此问题是否与 QT 或我对 QT 或我的 opengl 驱动程序的使用有关。

我使用的是最新的 AMD 14.4 WHQL。我尝试使用预构建的 5.3 源代码和我自己编译的 5.3 静态版本。我已经尝试了两个旧的 AMD 驱动程序来查看这是否是 AMD 提供的 OpenGL 包的问题,​​但它失败了。我真的很想使用 versionFunctions。

更新 2

QOpenGLContext create() 似乎在正确设置 QSurfaceFormat 之后 (QOpenGLContext::setFormat(format)) 完全拒绝兼容性设置 (format.setProfile( QSurfaceFormat::CompatibilityProfile) 并改为创建核心配置文件上下文,完全忽略我请求兼容性上下文,但返回 true 作为无法遵循 QSurfaceFormat 格式规则的成功操作。

更新 3

嗯,我刚刚发现这个问题,它与我的修改无关,它在 kdab 的原始代码中:

// Create an OpenGL context
m_context = new QOpenGLContext;
m_context->setFormat( format );
m_context->create();

通过在 setFormat 之前创建上下文,我能够正确地启动一个适当的兼容性上下文,因为 QT 只是设置了与 setProfile( QSurfaceFormat::CoreProfile) 相关的部分设置

更新 4:最终解决方案

“在 setFormat() 之前创建上下文是错误的并且是偶然工作的,因为您当时请求的是一个普通的 OpenGL 2.0 上下文,而驱动程序很可能会为您提供 4.3 兼容性。在其他驱动程序或平台上,这可能会失败,所以要小心.您看到的行为是由 AMD 驱动程序引起的:它拒绝创建适当的兼容性配置文件上下文,除非未设置向前兼容性集。 Qt 默认设置 fwdcompat 位,可以通过在 QSurfaceFormat 上设置 DeprecatedFunctions 选项来关闭它。因此,与 DeprecatedFunctions 一起请求兼容性将提供您想要的。其他供应商的驱动程序没有这个问题,没有设置 DeprecatedFunctions(即设置向前兼容性)被兼容性配置文件忽略,这是应该的。”通过 agocs @qt devnet

最佳答案

当您想要兼容性配置文件时,您正在获取核心配置文件(感谢 Qt)

您应该通过如下格式设置初始化时请求兼容性配置文件

window.cpp 第 24 行

format.setProfile( QSurfaceFormat::CompatibilityProfile);

并且仅在创建上下文后调用 versionFunctions

关于c++ - QOpenGLFunctions_4_3_与 QOpenGLContext::versionFunctions 的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23779357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com