I’m writing an Android and iOS engine in C++ and currently focusing on Android with the NDK.
I’d like to render to a viewport of a smaller size (say 600×360) and automatically upscale this to the native rez (say 800×480.) Currently the smaller viewport displays in a lower corner of my screen with black regions.
My problem is I don’t know of a simple way to do this transparently using the NDK. There is a GLSurfaceview.setScaleX (and Y) function in API level 11, which would be perfect, but doesn’t exist in API level 9, which I am targeting. Another bad solution is to render to a FBO and blit that to the screen as a final step.
I am considering simply story a scaling matrix and asking the user of the engine (for now just me) to always multiply vertices by this when drawing to the screen. This would be similar to using glPushMatrix.
I searched for a while and couldn’t find a good solution. Does anyone know how to help?
What you can do is get the SurfaceHolder from GLSurfaceView, GLSurfaceView.getHolder() and then set the resolution you desire by calling SurfaceHolder.setFixedSize(width, height).
In my case the GLSurfaceView has a FrameLayout root which fills the screen, I am not sure if thats required – I have it because I add other elements on top – but if you set the size and it doesnt fill the screen then you know what’s missing!
Using a FrameBuffer is also a valid way and you could draw some cool effects with it as well, the way above is just faster when the only thing you want to do is scale the rendering down (or possibly up? I haven’t tried).