我正在使用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块像素)输出。
希望能帮助其他人解决这个问题。
答案 0 :(得分:0)
您已经在问题中找到了答案,但我会详细说明一些链接。
Surface的大小与View的大小无关。如果它们不同,则显示硬件会将Surface缩放到显示器的路径上。这意味着您可以使用setFixedSize()
调用为Surface设置任意大小,这可用于减少必须由Canvas或GLES更新的像素数。
如果您使用Canvas绘制软件,它还可以避免重新缩放位图,因为您可以依赖每个设备上的Surface大小相同。
该功能有一个official blog post,以及Grafika(video here)中使用该功能的示例。