Mesa + Linux:gl.h 不包含现代 OpenGL

2024-01-15

这是我目前使用的环境:Eclipse-Luna,Linux Mint -Rebecca 上的 C++11。

当我尝试使用现代 OpenGL(例如 VAO 或 VBO)时,我收到编译器错误,导致方法无法解析。

例如:

GLuint VaoID;                   //GLuint is working

glGenVertexArrays(1, &VaoID);

or:

GLuint VboID;              
glGenBuffers(1, &VboID);
glBindBuffer(GL_ARRAY_BUFFER, VboID);
glBufferData(GL_ARRAY_BUFFER, vbo_size, data, usage);

我检查了 GL/gl.h、GL/glext.h,发现其中只有 OpenGL 1.x 方法。

所以我检查了我的OpenGL版本glxinfo | grep“OpenGL”。这似乎没问题:

glxinfo|grep "OpenGL" 
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.1.3
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.1.3
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:

尝试再次安装或更新软件包只会表明一切都是最新的。

  sudo apt-get install freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'libglew1.5-dev' for regex 'libglew1.5'
Note, selecting 'libglew-dev' instead of 'libglew1.5-dev'
Note, selecting 'libglew-dev' instead of 'libglew1.5-dev'
freeglut3 is already the newest version.
freeglut3-dev is already the newest version.
libglew-dev is already the newest version.
libglu1-mesa is already the newest version.
libglu1-mesa-dev is already the newest version.
libgl1-mesa-dev is already the newest version.
libgl1-mesa-glx is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 150 not upgraded.

那么有没有一种方法可以解决这个问题,而无需手动弄乱包含目录呢?

如果没有,我如何获得适合我的 OpenGL 版本的最新标头?


我检查了 GL/gl.h、GL/glex.h 并注意到我只得到了 OpenGL 1.x 方法在那里。

For GL/gl.h,实际上就是这样supposed成为。如果你想以与平台无关的方式使用OpenGL,你只能依赖GL 1.1由 GL 库导出,并且也不应该在标题中假设更多内容。GL/glext.h实际上应该包含更多的东西。但默认情况下,它会not为新函数提供函数声明。 A该文件的最新版本 https://www.opengl.org/registry/api/GL/glext.h顺便说一句,始终可以从 OpenGL 网站获取。

对于 GL 1.1 之外的所有内容,您应该使用 GL 的扩展机制,这基本上意味着您必须查询函数指针每一个运行时 GL 函数 >= GL 1.2。这glext.hheader 提供函数指针类型声明、枚举常量和其他数据类型。因此,每个扩展基本上都是这样的(在这种情况下,新的核心功能被视为“扩展”):

#ifndef GL_ARB_vertex_buffer_object
#define GL_ARB_vertex_buffer_object 1
// new types
typedef ptrdiff_t GLsizeiptrARB; 
typedef ptrdiff_t GLintptrARB;
// constants for GLenum values
#define GL_BUFFER_SIZE_ARB                0x8764
#define GL_BUFFER_USAGE_ARB               0x8765
#define GL_ARRAY_BUFFER_ARB               0x8892
// ...
// function pointer tpes for every function
typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
// ...
#ifdef GL_GLEXT_PROTOTYPES
// function declatations
GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer);
GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); 
// ...
#endif
#endif /* GL_ARB_vertex_buffer_object */

所以函数声明只有在以下情况下才有效GL_GLEXT_PROTOTYPES已被定义。但你不应该这样做。仅当 GL 库恰好导出这些符号时它才会起作用,而大多数平台上不需要这样做。

通常,人们不想手动加载数百个 GL 函数指针。有几个OpenGL加载库 https://www.opengl.org/wiki/OpenGL_Loading_Library它在幕后为您处理所有这一切。和GLEW http://glew.sourceforge.net/- 由于某种原因您已经安装了 - 就是其中之一,所以您可能想使用它。请注意,GLEW 本身存在一些问题,特别是与现代核心配置文件 OpenGL 上下文结合使用时,它有些损坏,但它仍然可以使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mesa + Linux:gl.h 不包含现代 OpenGL 的相关文章

随机推荐

  • 实体框架 edmx 点击图表非常慢

    首先了解背景 我在 Windows 10 Pro 笔记本电脑上的 Visual Studio 2015 最新的 nuget 6 1 3 指向本地 SQL Server 2014 SP1 Express 数据库 中有一个数据库优先的 EF6
  • 在 C++ 中删除数组中的重复项同时保留顺序[重复]

    这个问题在这里已经有答案了 可能的重复 如何使向量的元素唯一 删除不相邻的重复项 https stackoverflow com questions 1453333 how to make elements of vector unique
  • 与 .net 和 mono 一起使用的最佳对象关系映射框架?

    我正在为我的学位项目做一些研究 使用 net3 5 和 mono2 0 开发的多平台应用程序 我需要一些关于你们认为最好的对象关系映射框架的意见 该框架也可以与单声道运行 此外 任何有关哪种 ROM 最适合我的项目的意见都会很方便 简单思考
  • Javafx:没有工具包发现异常

    我已在 intellij 插件中添加了 javafx 库 以添加 jfxwebview 但是当我尝试创建 JFXPanel 对象时 JFXPanle jfxpanel new JFXPanel 它给出了以下异常 No toolkit fou
  • 字典中的特征数量

    我正在努力从这样的 pickle 文件加载数据集 Load the dictionary containing the dataset with open final project dataset pkl r as data file d
  • Marklogic 中的 JavaScript 多语句事务

    我想在 marklogic 中的服务器端 JavaScript 中编写多语句事务 我想要实现的是 执行更新事务 然后编写查询语句来查询更新的文档并确认更新在事务中可见 最后进行回滚 通过进行回滚 我想确认事务内进行的更新在事务外不可见 而在
  • 如何获取函数参数列表(以便我可以删除函数)

    我想让 SQL 删除 PostgreSQL 中的一个函数 我写的DROP FUNCTION以及从中获取函数名称pg proc 那不是问题 但是 如果我保留空白参数 它不会删除该函数 我检查了手册 里面写着我必须识别该函数及其参数才能删除它
  • 带有字母范围的 PATINDEX 排除变音符号(重音字符)

    我试图弄清楚如何使用 patindex 来查找一系列字母字符 但排除重音字符 如果我进行直接搜索 使用默认排序 不敏感 就可以了 但是 当我搜索一系列字母时 它将匹配重音字符 SELECT IIF U COLLATE Latin1 Gene
  • C#变量到sql命令

    string alpha this is text string sql INSERT INTO dokimastikospinakas pliroforia VALUES alpha 将 C 变量传递到 sql 命令的正确语法是什么 这只
  • SQL 中的变量“IN”表达式[重复]

    这个问题在这里已经有答案了 可能的重复 SQL 多个参数值 https stackoverflow com questions 694536 sql multiple parameter values SQL Server 2008 将 A
  • require_once(Google/Auth/AssertionCredentials.php):无法打开流:没有这样的文件或目录

    我正在尝试做一个非常简单的事情 require once vendor google src Google Client php require once vendor google src Google Service Plus php
  • 如何将自定义 HTML 类名称添加到管理屏幕子菜单项?

    这是下面的这些子菜单项Posts menu 我检查了代码 发现它的标记是这样的 ul class wp submenu wp submenu wrap li class wp submenu head Posts li li class w
  • 必须创建一个matlab计数器[重复]

    这个问题在这里已经有答案了 Q 从 0 limit 1 创建一个 计数器 例如 如果您选择 3 它将显示 0 1 2 计数器的长度不是在程序中确定的 应该在运行时确定 并且输入可以彼此不同 不太确定你的意思 但是 for i 0 limit
  • 带有渐变的CSS3动画[重复]

    这个问题在这里已经有答案了 难道真的没有办法用 CSS 来制作渐变背景的动画吗 就像是 webkit keyframes pulse 0 background webkit gradient linear left top left bot
  • Android 虚拟设备 - Armeabi-v7a 与 x86_64

    我想制作自己的 Android 应用程序 我正在使用 Ubuntu 64 位和 IntelliJ 在虚拟设备配置中 它要求我选择系统映像 所有选项都有一个Download另外 这意味着我还没有下载任何系统映像 有 3 个选项可供选择Loll
  • grep 排除多个字符串

    我正在尝试使用查看日志文件tail f并想要排除包含以下字符串的所有行 Nopaging the limit is and keyword to remove is 我可以像这样排除一个字符串 tail f admin log grep v
  • 如何在 Cloud Machine Learning Engine 上获取模型的 C# 在线预测?

    我已成功部署在 Cloud ML Engine 上的模型上 并验证它正在使用gcloud ml engine models predict依照指示说明 https cloud google com ml engine docs how to
  • 在bash中将字符插入字符串?

    我需要转动绳子 125959 into 12 59 59 显然 字符串是时间 所以正则表达式在这里不太好 time 125959 echo time 0 2 time 2 2 time 4 2
  • 并发程序中的 I/O

    我正在开发一个并发程序 它有两个线程 其中一个监听来自服务器的消息 另一个线程向服务器发送消息 我需要从用户获取命令 使用 cin 并同时显示来自服务器的消息 我该如何处理这种情况 问题是 如果我在收到消息时读取用户的命令 则用户的输入会被
  • Mesa + Linux:gl.h 不包含现代 OpenGL

    这是我目前使用的环境 Eclipse Luna Linux Mint Rebecca 上的 C 11 当我尝试使用现代 OpenGL 例如 VAO 或 VBO 时 我收到编译器错误 导致方法无法解析 例如 GLuint VaoID GLui