Hardware scaling the OpenGL surface with NativeAct

2019-03-04 23:02发布

问题:

We're trying to run a complex OpenGL app on a device whose native screen size is 1080p. Unfortunately, the device's 3D chipset isn't really good enough for a decent frame rate at this size.

What we'd much prefer to do is the render at 720p (or less) and then do hardware accelerated upscaling to fill the screen.

I know Android can do this automatically with 2D content (using ANativeWindow_lock() and friends). Is there any way to do this automatically for 3D content as well?

回答1:

For a GLSurfaceView, use:

surfaceView = new GLSurfaceView(this);
surfaceView.getHolder().setFixedSize(1280, 720);

For a NativeActivity, use:

int32_t ret = ANativeWindow_setBuffersGeometry(window, 1280, 720, 0);

Found this in following blogpost:

Android Developers Blog - Using the Hardware Scaler for Performance and Efficiency