gpt4 book ai didi

c++ - 这是 glGetTexParameterIuiv 的错误或预期行为吗?

转载 作者:行者123 更新时间:2023-12-01 14:25:28 25 4
gpt4 key购买 nike

我的 OpenGL 代码有问题,它只出现在英特尔 UHD GPU/驱动程序中(尝试使用不同的 UHD 和驱动程序版本(内部版本 26.20.100.7810、27.20.100.8190))。

基本上 glGetTexParameterIuiv(name, GL_TEXTURE_TARGET, &textureTarget) 似乎根本不起作用。它总是给出一个 GL_INVALID_ENUM 错误。

驱动程序报告 OpenGL 4.6,规范说明从 v4.5 开始支持 GL_TEXTURE_TARGET(使用 Nvidia 驱动程序它按预期工作,即我得到纹理的类型)

这是重现问题的示例代码:

GLuint tex1;
glGenTextures(1, &tex1);
glBindTexture(GL_TEXTURE_2D, tex1);
glBindTexture(GL_TEXTURE_2D, 0);

GLuint tex2;
glGenTextures(1, &tex2);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex2);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);
GLenum rslt1 = GL_INVALID_ENUM;
GLenum rslt2 = GL_INVALID_ENUM;

glGetTextureParameterIuiv(tex1, GL_TEXTURE_TARGET, &rslt1);
assert(glGetError() == GL_NO_ERROR);
glGetTextureParameterIuiv(tex2, GL_TEXTURE_TARGET, &rslt2);
assert(glGetError() == GL_NO_ERROR);

对于 Intel 驱动程序,断言会失败。我现在的问题是:这是一个错误吗?还是我遗漏了什么,而 NVidia 驱动程序更宽容?

最佳答案

我已经检查了您手头的 AMD、NVIDIA 和 Intel(HD Graphics 630)驱动程序的代码示例 - 只有后者在调用 glGetTextureParameterIuiv() 时因错误而失败,我也没有从功能描述中看不出这种不当行为的原因。已使用 GL_ARB_debug_output 进行测试,但未提供更多信息。

我认为当前英特尔驱动程序对 OpenGL 4.5+ 的支持具有误导性和破坏性(最好在您的问题中添加驱动程序版本,以跟踪问题是否会在较新的驱动程序中得到解决)。

驱动程序如何报告支持特定的 OpenGL 版本而不提供该版本定义的完整功能集?例如,我检查过的所有 Intel 驱动程序都没有公开 glGetnCompressedTexImage 函数,即 not optional for OpenGL 4.5 .

由于这个原因(缺少符号),我的应用程序报告假装支持 OpenGL 的英特尔驱动程序错误并回退到 OpenGL 4.4。

请注意,某些 OpenGL 驱动程序在调用不同类型的 glGet* 函数时可能会失败,而其他驱动程序可能会成功。但它看起来不像这种情况。

关于c++ - 这是 glGetTexParameterIuiv 的错误或预期行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61909401/

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