在 openGL 绘图调用之后会发生啥?

Posted

技术标签:

【中文标题】在 openGL 绘图调用之后会发生啥?【英文标题】:What happens after an openGL draw call?在 openGL 绘图调用之后会发生什么? 【发布时间】:2015-06-04 23:38:57 【问题描述】:

我正在尝试反转项目的图像,这应该像将投影矩阵缩放 (1, -1, 1) 一样简单。但是,屏幕是在我无法访问且没有文档的 API 中绘制的(这个项目非常旧)。因此,执行该缩放基本上没有任何作用(我假设是因为投影矩阵在 API 调用中被重置)。

在绘图调用后我是否仍然可以访问绘图信息,或者它已被清除?如果信息仍然存在,如何获取?

附: - 我正在使用 openGL 1.1

【问题讨论】:

在固定功能的管道中,在使用绘图调用发送几何图形后,您无能为力。我想也许你应该澄清一下,你是想反转单个模型、纹理还是整个场景?每种情况的答案都不同。 您可以尝试交叉/记录 opengl 命令。应该有一些调试工具可用(opengl.org/wiki/Debugging_Tools) racarate - 我的目标是翻转整个场景,从镜子中反射出来。 RedAgito - 不幸的是,使用任何类型的第 3 方软件(合法的 opengl 调试工具或其他工具,例如视觉泄漏检测器)可能需要数年时间才能获得 您在添加的代码中是否仅限于 OpenGL 1.1?还是只是使用 1.1 的遗留代码? 【参考方案1】:

程序员的角度来看,OpenGL 是可以想象到的最糟糕的短期健忘症。一旦从程序员的角度返回绘图调用,OpenGL 已经将所有内容都变成了彩色像素,并且完全忘记了它刚刚做了什么。

那么……

在绘图调用后我是否仍然可以访问绘图信息,还是已清除?

不,您在绘制后无法访问它,并且尽一切可能将其清除。


但是您提到旧代码是旧的。所以很有可能它不知道着色器,即不会禁用或加载其自定义着色器。因此,我尝试使用旧 GLSL 版本配置文件之一加载着色器,该配置文件仍然具有映射到旧固定函数管道内容的内置变量,并编写着色器以使其符合遗留代码的需求。

【讨论】:

datenwolf - 感谢您的回复。我在这个项目上已经 3 个月了,据我所知,没有着色器。我会看看我能用这个做什么!着色器会让我的生活变得非常轻松。

以上是关于在 openGL 绘图调用之后会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

如果 glutPostRedisplay() 被调用太快会发生啥?

在 OpenGL 的“原始组装”阶段会发生啥

在设备方向下 iPhone 上的 OpenGL ES 原点会发生啥

在 UIView 或 GLKView 上绘图?

调试OpenGL比在每个命令后调用glGetError有更好的方法吗?

单缓冲和双缓冲 有啥区别