我的Android应用程序需要显示全屏位图作为背景,然后在该显示屏上显示一些使用OpenGL ES的动态3D图形(1.1或2.0 - 尚未确定)。背景图像是同一应用程序中WebView组件的快照,因此其尺寸已完全适合屏幕。
我是OpenGL的新手,但我知道显示位图的常规方法是将其缩放为POT纹理(glTexImage2D),配置矩阵,为矩形创建一些顶点并使用glDrawArrays显示。当所需的只是以1:1的比例将位图绘制到屏幕时,似乎需要进行大量的额外工作(在将图像缩小到POT尺寸时质量下降)。
“桌面”GL有glDrawPixels(),它似乎完全符合这种情况所需,但GLES中显然缺少这一点。有没有办法将像素复制到GLES中的屏幕缓冲区,绕过3D管道?或者有没有办法在常规Android手段绘制的“平面”背景之上绘制OpenGL图形?或制作半透明的GLView(基于Renderscript的显示有RSTextureView,但我找不到GL的等价物?)
答案 0 :(得分:1)
但我知道显示位图的常规方法是将其缩放为POT纹理(glTexImage2D)
然后你的知识已经过时了。现代OpenGL(版本2及更高版本)可以很好地使用纹理的任意图像尺寸。
“桌面”GL有glDrawPixels(),它似乎完全符合这种情况所需,但GLES中显然缺少这一点。
嗯,现代的“桌面”OpenGL,即版本3核心,后来也没有glDrawPixels。
然而,这个功能很吸引人,它提供的性能很差,并且有很多警告,很少使用它,只要它的使用可以避免。
只需将未缩放的图像上传到纹理中,禁用mipmapping并将其绘制到全屏四边形上。