为什么GLEW说我没有扩展?

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

我正处于OpenGL应用程序的初始化阶段,我正在添加一些代码来检查各种扩展。我立即遇到了一个绊脚石:

/* Check for EXT_texture_compression_s3tc */
if (GLEW_EXT_texture_compression_s3tc)
    infomore("GL_EXT_texture_compression_s3tc supported.\n");
else
    errormore("GL_EXT_texture_compression_s3tc unsupported.\n");

/* Check for anisotropic filtering */
if (GLEW_EXT_texture_filter_anisotropic)
    infomore("GL_EXT_texture_filter_anisotropic supported.\n");
else
    warnmore("GL_EXT_texture_filter_anisotropic unsupported.\n");

据此,我的视频卡不支持S3TC和各向异性过滤,即使我知道我确实拥有它。我在这个同一个项目上使用了OpenGL,没有任何问题。 GLEW初始化正常(glewExperimental = true),我的上下文设置正确,其他一切正常,但由于某种原因,glew认为我没有这些扩展。

这里发生了什么?

c++ opengl glew
1个回答
3
投票

请允许我的sume(适度)疯狂猜测:您是否有机会使用核心配置文件上下文?你是否因为这个而使用glewExperimental = true

问题是GLEW刚刚在核心配置文件方面被打破。它试图使用glGetString(GL_EXTENSIONS),它在核心配置文件中无效(现代方式是使用glGetIntegerv(GL_NUM_EXTENSIONS, &ext_cnt); for (i=0; i<ext_cnt; i++) glGetStringi(GL_EXTENSION,i)),并且只会产生错误。 GLEW无法查询哪些扩展可用。现在glewExperimental = true所做的是:忽略扩展似乎缺失的事实,并且无论如何都要查询函数指针。这只是一个大问题,并且函数指针可能存在的事实并不能保证相应的GL扩展确实存在且可用。这个混乱的另一个副作用是你正在经历的:对于GLEW,这些扩展只是不存在。

UPDATE

我不知道为什么GLEW多年来一直没有解决这个问题(甚至还提出了补丁以使其与现代核心配置文件兼容),但看起来这种行为将长期存在于我们身上。

使用GLEW 2.0,问题终于得到解决,它确实支持核心配置文件,并且不再需要glewExperimental黑客操作系统。它也不会产生GL错误。

© www.soinside.com 2019 - 2024. All rights reserved.