c - 在 C 项目中使用 OpenGL 4.3

标签 c opengl

我需要使用函数 glDeleteProgram() 但编译器告诉我该函数不存在。我认为我的 gl.h 版本太旧,但我找不到如何在我的项目中安装 OpenGL 4.3...

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <gl/gl.h>

我尝试包含 glext.h 但没有成功。

最佳答案

似乎有点困惑 gl.h 的用途到底是什么?随您的平台提供的 header 。我将在下面尝试更好地解释它,但请注意该 header 和平台的 OpenGL 库非常相关(并且基本上是不可变的)。当您谈到“安装”OpenGL 4.3 时,您实际上是在补充(在运行时,而不是编译时)该 header 所属的脆弱库。

<小时/>

诸如 Microsoft Windows 之类的平台附带了非常原始的 OpenGL 软件实现(本例中为 1.1),但其设计方式是安装的显示驱动程序可以在运行时扩展/替换软件实现。 Microsoft 将此系统称为I可安装C客户端D河流。

出于所有意图和目的,GLEW 与您的显示驱动程序交互并加载高于 1.1 的 OpenGL 的所有部分。如果不使用 GLEW,您将受限于软件实现的功能,该软件在 Microsoft Windows 上于 1997 年左右编写,此后从未更新过。 <GL/gl.h>在 Windows 上始终为 1.1,因为驱动程序负责扩展 GL,并且您永远不会将软件直接编译/链接到显示驱动程序

GLEW没什么特别的,你可以阅读扩展规范here并使用您需要的所有扩展函数原型(prototype)、枚举和常量值编写您自己的 header ...但是,多年来,这项任务变得异常乏味(目前有超过 120 个 ARB 扩展)。 GLEW 基本上将所有主要已发布的扩展规范打包到一个庞大的库中,并将加载您的驱动程序声称支持的每一项扩展。这就是 GL 版本控制的有效工作方式,顺便说一句,每个新版本都归结为一组必需的扩展。

<小时/>

以前,有一些该死的可怕的东西,叫做 MiniGL drivers ,而像《Quake 1》这样的游戏实际上确实直接链接到来自 3Dfx 和 PowerVR 等供应商的极其原始和专有的驱动程序。幸运的是,我们已经过去了那些日子。

关于c - 在 C 项目中使用 OpenGL 4.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981099/

相关文章:

c++ - openGL 奇怪的错误?

c - 将变量分组到 C 中的结构或容器中

c++ - OpenGL - glUniformBlockBinding 在 glLinkProgram 之后还是之前?

c - 使用四个不同端口的套​​接字处理连接

c - 寻找 snprintf()-替换

c - 创建现代 OpenGL 上下文是否需要假上下文?

c++ - FreeType2 - 字体较小

c++ - Ffmpeg header 不在 Windows 中编译

c# - 使用 C# 进行 Ansi C 编程还是以 C# 方式编程?

c++ - 视口(viewport)内的 OpenGL 视口(viewport)