2

我的 Android 应用程序需要显示一个全屏位图作为背景,然后使用 OpenGL ES(1.1. 或 2.0 - 尚未确定)显示一些动态 3D 图形。背景图片是同一应用程序中 WebView 组件的快照,因此它的尺寸已经完全适合屏幕。

我是 OpenGL 新手,但我知道显示位图的常规方法包括将其缩放为 POT 纹理 (glTexImage2D)、配置矩阵、为矩形创建一些顶点并使用 glDrawArrays 显示。当只需要以 1:1 的比例在屏幕上绘制位图时,似乎需要做很多额外的工作(将图像缩小到 POT 大小时会降低质量)。

“桌面” GL 具有 glDrawPixels(),它似乎完全可以满足这种情况的需要,但 GLES 中显然没有。有没有办法将像素复制到 GLES 中的屏幕缓冲区,绕过 3D 管道?或者有什么方法可以在常规 Android 手段绘制的“平面”背景之上绘制 OpenGL 图形?或者制作一个半透明的 GLView(有 RSTextureView 用于基于 Renderscript 的显示,但我找不到 GL 的等价物)?

4

1 回答 1

1

但我知道显示位图的常规方法涉及将其缩放为 POT 纹理(glTexImage2D)

那你的知识就过时了。现代 OpenGL(第 2 版及更高版本)适用于其纹理的任意图像尺寸。

“桌面” GL 具有 glDrawPixels(),它似乎完全可以满足这种情况的需要,但 GLES 中显然没有。

好吧,现代“桌面”OpenGL,即版本 3 核心和更高版本也没有 glDrawPixels。

不管这个功能是/过去多么吸引人,它只提供了很差的性能并且有很多警告,以至于它很少使用,只要可以避免使用它。

只需将未缩放的图像上传到纹理中,禁用 mipmapping 并将其绘制到全屏四边形上。

于 2012-07-12T09:33:10.903 回答