android glsurfaceview伸展以适应

时间:2015-10-15 06:57:06

标签: android opengl-es glsurfaceview

我正在使用glsurfaceview和它的渲染器将GLES全屏显示到设备。这可以按预期工作。

现在我想添加“缩放”输出大小的选项。我的意思是(例如)将GLES渲染到视口四分之一的屏幕,然后在显示时拉伸到全屏。这样可以让较慢的着色器在一点阻塞的情况下更快地渲染。

我现在可以缩小GLES大小,改变glViewPort,它会在屏幕的左下角渲染。如何让这个较低的季度延伸到整个屏幕?

非常感谢任何提示/答案。

经过一些试验和错误以及谷歌搜索后的解决方案。这是为了将四分之一大小的图像渲染为全屏。

创建glsurfaceview之后;

glSurfaceView.getHolder().setFixedSize(glWidth,glHeight);

glHeight和glWidth是内部GLES渲染大小。所以要渲染图像的1/4,请使用glWidth = screenWidth / 2和glHeight = screenHeight / 2

然后在onSurfaceChanged中设置glViewPort;

glViewport(0, 0, screenWidth/2, screenHeight/2);

宾果。更快的渲染(但是2x2块像素)输出。

希望能帮助其他人解决这个问题。

1 个答案:

答案 0 :(得分:0)

您已经在问题中找到了答案,但我会详细说明一些链接。

Surface的大小与View的大小无关。如果它们不同,则显示硬件会将Surface缩放到显示器的路径上。这意味着您可以使用setFixedSize()调用为Surface设置任意大小,这可用于减少必须由Canvas或GLES更新的像素数。

如果您使用Canvas绘制软件,它还可以避免重新缩放位图,因为您可以依赖每个设备上的Surface大小相同。

该功能有一个official blog post,以及Grafikavideo here)中使用该功能的示例。