2013-08-26 31 views
4

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

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是否足够,并且是检查错误,或者是不同的事情?

+0

当您调用这些函数时,GLEW是否已正确初始化? –

+0

@NicolBolas是的,'glewInit'和'glewExperimental = GL_TRUE'返回'GLEW_OK'。 – Appleshell

+0

相信字符串 –

回答

2

显然有一个known bug in glew,其中glGetString(GL_EXTENSIONS)甚至在OpenGL 3+上下文中使用,而不是glGetStringi,它们取代了OpenGL 3+中的扩展查询。

因此,直到修补程序,扩展查询必须是done manually

+1

这不是_exactly_错误,而是OpenGL遗留的后果。这归结为鸡和鸡蛋的情况。 'glGetStringi(...)'只通过不是OpenGL 3.0 native的平台上的扩展来公开;现在,要确定是否存在此扩展,您必须首先查询扩展字符串。在OpenGL 3.x核心上下文中,以旧方式查询'GL_EXTENSIONS'字符串是无效的。这是另一个出现的矛盾情况,例如必须在Win32上创建渲染上下文,以便加载扩展以创建渲染上下文... –

0

解决鸡和鸡蛋问题的一种可能的方法是调用glGetString(GL_EXTENSIONS)并检查GL_INVALID_ENUM的glGetError()。这只能在GL_EXTENSIONS不可用的情况下才会引发。如果遇到此错误,请尝试glGetStringi。不要忘记在这里检查错误。 GLEW不(版本1.10:/)。