小编Ill*_*era的帖子

OpenGL实践 - 运行没有核心版本的OpenGL

我不确定这是一个问题或意见需要由用户塑造,但我们走了.

问题:即使我想支持最新版本和扩展,我是否应该在1.1版兼容性配置文件中运行openGL?更多信息提前.

某些功能要求您提供可能需要支持的openGL版本,如果要支持openGL核心配置文件或3.0及更高版本,则最常用.例子 :

SDL: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR/MINOR_VERSION, major/minor version);

GLX: glXCreateContextAttribsARB, GLX_CONTEXT_MAJOR_VERSION_ARB, GLX_CONTEXT_MINOR_VERSION_ARB

我有一些问题(实际上有几个)与openGL版本和扩展系列.

问题#1 - 查询OpenGL版本:如果我没记错的话,它从Mesa3D Mesa 7.11开始,尝试从中查询GL_VERSION,我得到:

"Mesa 7.11 OpenGL 2.1配置文件"

知道glew以及其他项目解析器,他们只查找字符串中的第一个点,并返回点所在的数字,作为字符串(您可以选择转换为浮点)

来自Glew 1.9.0:代码片段 上面的例子确实返回了"openGL"版本7.0,它实际上是MESA3D驱动程序版本,这使我认为它不可靠.

问题#2 - 使用与以前相同的MESA3D驱动程序扩展(MISSING,OK?):7.11,运行Glewinfo(glew 1.9.0)给了我以下内容:

GL_ARB_texture_storage:MISSING OK

glTexStorage1D:好的

glTexStorage2D:好的

glTexStorage3D:好的

glTextureStorage1DEXT:好的

glTextureStorage2DEXT:好的

glTextureStorage3DEXT:好的

请注意,尝试从"GL_ARB_texture_storage"API检索(导入)函数地址会导致失败(NULL指针).

我解决上述两个问题的方法是在兼容模式下将openGL初始化为版本1.1,并通过检查我可能需要的每个API系列来强制我的方式,如果openGL作为一组独立的API工作.自己的方式,但一起工作,我们不应该以这样的方式对待它们,代码明智,而不是假设它们在那里,如果你有一个核心版本?再次使用MESA3D 7.11 openGL 2.1,我仍然可以使用openGL 3.0等功能,例如"glGenerateMipmap"

**我试图避免版本和扩展字符串的方式是:**

1.)在兼容模式下初始化openGL 1.1.

2.)通过导入核心功能来扫描您可能需要的API.

3.)如果你无法获得核心功能,请尝试通过扩展来获取功能(如果存在)(不需要与扩展名列表"GL_EXTENSIONS"进行字符串比较)

4.)如果您无法获得这些功能,请尝试通过编写自己的功能来模拟它们.

5.)如果上述方法都不起作用,那就放弃吧.

6.)如果上述方法中的任何内容有效,请运行完整性测试并确保函数正常工作,例如:glGetError和断言应该有效.

你认为它安全/有效吗?我是否通过调用最小版本并试图强行进入我的方式而错过了什么?有没有办法可以改善它?*旁注 - 我知道openGL核心配置文件删除了过时的功能,但您可以自己选择不使用它们,如果您的驱动程序支持最新版本.我也知道openGL可能会尝试模拟当前版本之外的函数,取决于你的驱动程序,你仍然可以使用glGenerateMipmap(openGL 3.0函数)和openGL 2.1

问题#3 - 命名约定,Core,ARB和glew.**我还不确定名称约定是如何工作的,例如:似乎你在GL版本4.3中的"GL_ARB_debug_output"中有函数"glDebugMessageCallbackARB"和glDebugMessageCallback,看起来没问题,但是看看上面第2期的例子,你可能会在"GL_ARB_texture_storage"里面看到函数:glTexStorage1D,没有ARB后缀.

我的问题是,我怎么知道API是否还在等待董事会批准,或者它是否已经是核心的一部分,从标题和函数名称来判断.

对于文本墙感到抱歉,对主题的一些输入将不胜感激.

opengl glew

0
推荐指数
1
解决办法
639
查看次数

标签 统计

glew ×1

opengl ×1