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).
我正在使用 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).