使用 OpenGL ES 1.0 在 Android 上进行离屏渲染的选项?

Posted

技术标签:

【中文标题】使用 OpenGL ES 1.0 在 Android 上进行离屏渲染的选项?【英文标题】:Options for offscreen rendering on Android with OpenGL ES 1.0? 【发布时间】:2011-02-10 09:00:43 【问题描述】:

我正在为我正在为 android 编写的 OpenGL 游戏实现拾取。它使用“唯一颜色”方法将每个可触摸对象绘制为每个对象唯一的纯色。然后,用户输入在触摸位置读取 glReadPixels()。我已经完成了着色工作,并且 glReadPixels 工作了,但是我无法将“颜色”渲染与主要的实际渲染分开,这使得 glReadPixels 的使用变得复杂。

据说处理这个问题的技巧是将第二个场景(用于输入)渲染到屏幕外缓冲区,但这似乎有点问题。我已经研究过使用 OpenGL ES1.1 FBO 作为屏幕外缓冲区,但我的手机(Samsung Galaxy S Vibrant (2.2))似乎不支持 FBO。我不知道如何在没有用户看到的情况下正确渲染这个场景(并在上面运行 glReadPixels)。

有什么想法可以完成这种离屏渲染吗?

【问题讨论】:

【参考方案1】:

如果不支持 FBO,您可以随时使用正常的后台缓冲区进行渲染。

典型用法是:

清除后台缓冲区 绘制“color-as-id”对象 清除后台缓冲区 正常绘制 交换缓冲区

第二次清除将确保拣货代码不会出现在最终图像上。

【讨论】:

您还需要在绘制颜色 ID 对象之后但在读取帧缓冲区中的颜色之前执行 glFlush @ryanm:你永远需要执行 glFlush。如果需要,glReadPixels 会进行刷新。 文档没有提到它,但这是完全合理的行为,所以你可能是对的。每天都是上学日!这让我觉得这在质量差的 OpenGL 实现中很容易被忽视......

以上是关于使用 OpenGL ES 1.0 在 Android 上进行离屏渲染的选项?的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenGL ES 1.0 在 Android 上进行离屏渲染的选项?

OpenGL ES 在不使用 glPixelStorei 的情况下更新纹理的子部分

OpenGL ES 2.0 雾

Android OpenGL ES 3.1着色器无法编译

使用 drawtexture (OpenGl ES Android) 旋转精灵的问题

OpenGL ES 3.0(五)坐标系