android glsurfaceview 拉伸以适应

android glsurfaceview stretch to fit

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

现在我想将选项添加到 "zoom" 输出大小。我的意思是(例如)将 GLES 渲染到屏幕四分之一的视口,然后在显示时拉伸到全屏。这将允许较慢的着色器渲染得更快,但有一点块效应。

我目前可以通过更改 glViewPort 缩小 GLES 大小,并将其呈现在屏幕的左下角。我怎样才能让这个下四分之一伸展到整个屏幕?

非常感谢任何tips/answers。

经过反复试验和谷歌搜索后的解决方案。这是将四分之一大小的图像渲染到全屏。

创建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 块状像素)输出。

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

您的问题已经有了答案,但我会通过一些链接进行详细说明。

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

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

有一个official blog post about the feature, and an example of its use in Grafika (video here).