为什么在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 功能 ,但您无需使用不同的功能。 glTexStorageARB
和 glTexStorage
是不同的功能是没有意义的,因为它们做同样的事情。
这些类型的扩展名为 "backwards-compatibility extensions" 或“core extensions”。
我正在 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 功能 ,但您无需使用不同的功能。 glTexStorageARB
和 glTexStorage
是不同的功能是没有意义的,因为它们做同样的事情。
这些类型的扩展名为 "backwards-compatibility extensions" 或“core extensions”。