为什么 GLEW 说我没有扩展?

Why does GLEW say that I don't have extensions?

本文关键字:扩展 GLEW 为什么      更新时间:2023-10-16

我正处于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认为我没有这些扩展。

这是怎么回事?

请允许我(适度地(胡乱猜测:你是否有可能使用核心配置文件上下文?你会因此而使用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来说,这些扩展根本不存在。

更新

我不知道为什么GLEW多年来一直没有修复这个isse(甚至有人提出了使其与现代核心配置文件兼容的补丁(,但看起来这种行为将伴随我们很长一段时间

有了GLEW 2.0,这个问题终于得到了解决,它确实支持核心配置文件,并且不再需要glewExperimental破解操作系统。它也不会生成总账错误。