如何在 OpenGL 3.0 中编程? (没有更高)

Posted

技术标签:

【中文标题】如何在 OpenGL 3.0 中编程? (没有更高)【英文标题】:How to program in OpenGL 3.0? (no higher) 【发布时间】:2014-04-11 17:31:14 【问题描述】:

我想学习 OpenGL 3.0。我在 OpenGL 1.1 (lwjgl) 中编写了一个小程序,但是 *** 上的答案建议学习现代 OpenGL,包括顶点缓冲区对象、顶点和片段着色器等内容。

我已经开始使用ogldev tutorial。但是,我的显卡是 Intel HD 显卡,最高只支持 OpenGL 3.0(在 Linux 上使用 Mesa 10.1),当我编译第二个教程的代码时,我可以看到一个点,但是当我编译第三个教程的代码时代码我看不到三角形(尽管唯一的区别是顶点的数量);

我如何知道哪些函数在 OpenGL 3.0 中不存在,但在其他版本的 OpenGL 3.x 中存在,我应该用什么替换它们?

【问题讨论】:

您使用什么语言(您最初提到了 lwjgl)?大多数 Java 语言绑定实际上被拆分为命名空间,因此您必须执行以下操作:import ...opengl.GL30 才能访问 OpenGL 3.0 中引入的函数。使用得当,这会保留一组可用的函数"pure",如果你不导入它们,你将无法调用来自 GL 3.1+ 的函数.一个好的 IDE 甚至可以看到您的确切导入集,并且仅在自动完成列表等中列出您的版本中的函数。 我正在使用 C 和 GLEW。每当我使用 glDrawArrays(GL_POINTS, int, int) 时,我都会重试它,无论我作为顶点数据传递什么,我都会在中心得到相同的点。 【参考方案1】:

了解给定 OpenGL 版本中功能是否可用的唯一方法是查看文档。 OpenGL Wiki 是一个好的开始。

在 OpenGL 中处理这个问题相当笨拙,因为它严重依赖扩展和硬件特定的东西,您必须在使用前在运行时测试可用性。有很多很好的库可以帮助您解决这个问题,例如 GLEW 和 Regal。

【讨论】:

我已经在使用 GLEW,而且我使用的所有功能似乎都存在于 3.0 中

以上是关于如何在 OpenGL 3.0 中编程? (没有更高)的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线

Modern OpenGL 3.x 及更高版本如何绘制图元?

如何在模板中使用深度纹理,OpenGL ES 3.0

我的OpenGL学习进阶之旅OpenGL ES 3.0新功能

我的OpenGL学习进阶之旅OpenGL ES 3.0新功能

如何在 Android 3.0 及更高版本中更改 ActionBar 的触摸效果颜色