为什么在opengl 3环​​境下可以使用opengl 4功能

Why can I use opengl 4 function in opengl 3 environment

我正在 ubuntu 上用 freeglut 制作一个应用 运行。我使用了 glutInitContextVersion(3, 3),当我调用 glGetString(GL_VERSION) 时,函数 returns 3.3 (Core Profile) Mesa 10.3.2。但是我可以使用 glTexStorage2D 函数并且该函数运行良好。 Opengl 参考页面告诉该函数与 opengl 4.2 或更高版本兼容。为什么我可以使用这个功能?我使用 Intel Ivy Bridge i3 cpu 和 Intel GPU

如果上下文初始化成功,则仅表示您最终使用的版本与您请求的版本兼容。它不会阻止在幕后使用更高版本。至于版本字符串,它可能只是出于兼容性原因对您撒谎,因为您请求的是较旧的上下文版本。

您可以使用该函数可能是因为您的实现实现了 ARB_texture_storage。看,ARB_texture_storage 的函数不以 ARB 结尾。它定义了与 OpenGL 4.2 完全相同的功能,具有完全相同的行为。

这允许 3.3 实现实现更高版本的 select 功能 ,但您无需使用不同的功能。 glTexStorageARBglTexStorage 是不同的功能是没有意义的,因为它们做同样的事情。

这些类型的扩展名为 "backwards-compatibility extensions" 或“core extensions”。