Android 在OpenGL中显示全屏背景

Android 在OpenGL中显示全屏背景,android,opengl-es,textures,Android,Opengl Es,Textures,我的Android应用程序需要显示一个全屏位图作为背景,然后在上面使用OpenGL ES显示一些动态3D图形(1.1或2.0-尚未决定)。背景图像是同一应用程序中WebView组件的快照,因此其尺寸已经完全适合屏幕 我是OpenGL新手,但我知道显示位图的常规方法包括将其缩放为POT纹理(glTexImage2D)、配置矩阵、为矩形创建一些顶点以及使用GlDrawArray显示。当只需要在屏幕上以1:1的比例绘制位图时,似乎需要做很多额外的工作(当将图像缩小到锅大小时会损失质量) “桌面”GL有

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

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

“桌面”GL有glDrawPixels(),这似乎正是这种情况下所需要的,但在GLE中显然没有。有没有办法绕过3D管道将像素复制到GLES中的屏幕缓冲区?或者,有没有办法在普通Android方式绘制的“平面”背景上绘制OpenGL图形?或者制作一个半透明的GLView(有用于基于Renderscript的显示的RSTextureView,但我找不到用于GL的等价物)

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

那你的知识就过时了。现代OpenGL(版本2及更高版本)可以为其纹理提供任意的图像尺寸

“桌面”GL有glDrawPixels(),这似乎正是这种情况下所需要的,但在GLE中显然没有

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

不管这个函数多么吸引人,它只提供了很差的性能,并且有太多的警告,所以很少使用,只要可以避免使用它


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

感谢您的澄清。如果确实支持NPOT纹理,则可以解决问题。然而,我如何确定运行不同版本Android(至少从2.3和更新版本开始)的各种设备上的情况?与其说是运行Android的版本决定了OpenGL的可用版本,还不如说是设备使用的GPU。使用glGetString(GLU版本)检索程序中的版本字符串。请注意,大多数Android设备(如果不是全部的话)都支持OpenGL ES-2。我在这里找到了一些答案,GL2.0肯定是必需的,建议使用“GL_OES_texture_npot”扩展(?)。举个例子,我的华硕TF-101并不是一个非常旧的设备,它似乎没有显示这种扩展。我在Android上编程了OpenGL,在大多数设备和模拟器上显示非POT纹理只渲染白色。我还读到,如果使用扩展名,使用NPOT纹理比使用POT要慢,尽管我没有检查过。我有过与@RedOrav相同的体验