Android 使用NativeActivity硬件缩放OpenGL曲面

Android 使用NativeActivity硬件缩放OpenGL曲面,android,opengl-es,native-activity,Android,Opengl Es,Native Activity,我们正在尝试在本机屏幕大小为1080p的设备上运行一个复杂的OpenGL应用程序。不幸的是,该设备的3D芯片组在这种尺寸下还不足以提供像样的帧速率 我们更愿意做的是以720p(或更低)的速度渲染,然后进行硬件加速放大以填充屏幕 我知道Android可以通过2D内容(使用ANativeWindow_lock()和friends)自动完成这项功能。是否有任何方法可以自动为3D内容执行此操作?对于GLSURFACHEVIEW,请使用: surfaceView = new GLSurfaceView(t

我们正在尝试在本机屏幕大小为1080p的设备上运行一个复杂的OpenGL应用程序。不幸的是,该设备的3D芯片组在这种尺寸下还不足以提供像样的帧速率

我们更愿意做的是以720p(或更低)的速度渲染,然后进行硬件加速放大以填充屏幕


我知道Android可以通过2D内容(使用ANativeWindow_lock()和friends)自动完成这项功能。是否有任何方法可以自动为3D内容执行此操作?

对于GLSURFACHEVIEW,请使用:

surfaceView = new GLSurfaceView(this);
surfaceView.getHolder().setFixedSize(1280, 720);
对于本地活动,请使用:

int32_t ret = ANativeWindow_setBuffersGeometry(window, 1280, 720, 0);
在以下博客帖子中找到此内容:


渲染到较小尺寸的FBO,然后将其内容渲染到全屏,这对你来说行吗?是的,但如果可能的话,我真的想避免这种情况——Android上的屏幕外表面乱七八糟:它会爆炸成一百万个不同的难以测试的代码路径。因此我渴望一个内置的机制…我已经使用FBO很多次了,从来没有发现任何问题。无论如何,它们是以较小分辨率AFAIK渲染的唯一方法。使用FBO只会添加FBO创建代码—渲染到FBO—并将FBO复制到屏幕缓冲区。不应该有太多的逻辑使测试比没有FBO更困难。我也建议FBO。我想这将是解决你问题的最好办法。一个诀窍-创建RGBA格式的FBO-显然RGB FBO在某些硬件上不受支持-galaxy s2与Mali。还记得当应用程序进入后台时上下文丢失的情况-当应用程序恢复时,您必须重新创建FBO。不幸的是,FBO在这里不合适-我不允许向应用程序的GL上下文添加内容,而必须创建一个新的;所以,这将是一个很好的选择。这就是为什么我想完全避免整个问题。。。关于失去上下文,你不会相信我们需要处理多少代码。有时它甚至起作用。