OpenGL各向异性过滤支持,矛盾的检查结果。

4

当检查是否支持各向异性过滤时,我得到了矛盾的结果。

if(glewIsSupported("GL_EXT_texture_filter_anisotropic") || GLEW_EXT_texture_filter_anisotropic) {
        std::cout << "support anisotropic" << std::endl;
    }

GLfloat max;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max);
std::cout << max << std::endl;

这部分在我的电脑上的输出结果是:
16

看起来支持 16 级各向异性过滤,但是 glewIsSupported 和 glew 扩展字符串却说相反。
检查 GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 是否足够,并且 glew 检查是否错误,还是有其他问题?

当您调用这些函数时,GLEW是否已正确初始化? - Nicol Bolas
@AdamS 你说glewIsSupported和OpenGL扩展字符串都说它不存在,是吗?如果是的话,我会相信它们,我不认为glGetFloatv保证不会给你一些值。 - Justin Meiners
@JustinMeiners if语句中的条件都基于GLEW。 - Appleshell
@JustinMeiners http://pastebin.com/3ptc01vz 显然支持GL_EXT_texture_filter_anisotropic。 - Appleshell
1
@AdamS 哇,这一定是glew中的一个bug。好吧,这就是需要信任的东西,也许你应该编写自己的扩展检查。 - Justin Meiners
显示剩余3条评论
2个回答

2

显然,glew存在一个已知的错误(链接),即在OpenGL 3+上下文中仍使用glGetString(GL_EXTENSIONS)而不是用于替换OpenGL 3+扩展查询的glGetStringi

因此,在修复之前,必须手动查询扩展


1
这不是_确切地_一个错误,而是OpenGL遗留问题的结果。这归结为一种鸡生蛋或蛋生鸡的情况。glGetStringi(...)仅通过非OpenGL 3.0本机平台上的扩展公开;现在,要确定是否存在此扩展,必须首先查询扩展字符串。在OpenGL 3.x核心上下文中,以旧方式查询GL_EXTENSIONS字符串是无效的。这又是另一种悖论的情况,就像在Win32上创建渲染上下文一样,您可以加载扩展来创建渲染上下文... - Andon M. Coleman

0
解决鸡生蛋问题的一种可能方法是调用glGetString(GL_EXTENSIONS)并检查glGetError()是否为GL_INVALID_ENUM。只有在GL_EXTENSIONS不可用的情况下才会引发此错误。如果遇到此错误,请尝试使用glGetStringi。也别忘了在这里检查错误。GLEW在这里没有(截至版本1.10 :/)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接