0

我正在开发仅完全支持 GL < 2 的上网本。这一切都以超过 100fps 的速度运行。但是由于我读到状态机已被弃用,我正在尝试移动,但这似乎是不可能的。许多函数没有使用最新的 glext.h 声明。所以我不能创建一个着色器程序或至少一个 VBO。所以我尝试使用 glm 移动矩阵。但是从 glm 向 ogl 发送一个矩阵是通过调用 glUniformMatrix*v 来完成的,这里也没有声明。那么有没有办法在不使用 GLSL 的情况下“升级”呢?我不需要任何暗示我只包含 GLSL,因为它既好又快等,因为我不能使用它,我不敢相信没有它是不可能的。

我使用 OpenGL Extension Viewer 3 检查了扩展。报告显示:
1.1 100%
1.2 100%
1.3 100%
1.4 100%
1.5 66%(不支持:GL_ARB_occlusion_query)
2.0 10%(仅支持:GL_EXT_stencil_two_side)
2.X 0%
3。 X 0%
4.X 0%

4

3 回答 3

6

…仅完全支持 GL <= 2.2。(...)但由于我读到状态机已被弃用,我正在尝试移动,但这似乎是不可能的。

首先:状态机没有被弃用。固定功能管道已被弃用。但这种变化只适用于 OpenGL-3 核心和更远的地方。因此,如果您仅限于 OpenGL-2,那么固定功能和所有爵士乐仍然可用。

那么有没有办法在不使用 GLSL 的情况下“升级”呢?

您确实意识到弃用固定功能管道的含义大致相同:现在一切都发生在着色器中。用 GLSL 编写的着色器。

GLSL 在 OpenGL-2 中也可用。这不是强制性的。

许多函数没有使用最新的 glext.h 声明。所以我不能创建一个着色器程序或至少一个 VBO。

您需要的不仅仅是 glext.h。您还需要一些从 OpenGL 实现中加载高级功能的代码。一个流行的选择是 GLEW,可在http://glew.sourceforge.net获得

我不能使用它

好吧,不是开箱即用。但是使用 GLEW 是小菜一碟:

  1. 下载 GLEW
  2. 安装到额外安装的库并包含目录
  3. 将所有出现的 替换#include <GL/gl.h>#include <GL/glew.h>
  4. 将 glew32.lib 作为库依赖添加到链接器设置
  5. glewInit();在每个 OpenGL 上下文创建之后添加对 right 的调用。
于 2012-12-11T12:40:07.303 回答
1

尝试使用glew。它不会直接解决您的问题,而是与在 Windows 上使用 OpenGL 扩展有关的许多(可能相关的)问题。

于 2012-12-11T12:29:40.383 回答
0

查看您的平台是否支持 OpenGL ES 2.0。这实际上已成为现代台式机的标准。如果是这样,请使用 OpenGL ES 2.0。

此外,您还可以在 OpenGL 扩展中找到许多您需要的功能。查看您的平台上有哪些扩展可用,并注意函数名称可能与后来的标准名称不同(例如 glBindFramebuffer_EXT)

于 2012-12-11T12:51:36.407 回答