cocos2d-x 渲染性能问题

我对OpenGL不熟悉,但是比较了解DirectX 11.
在dx里面,首先是需要创建一个交换链缓冲区的,这个swapbuffer可以设置一个渲染尺寸,例如我设置800600.
然后附加的窗体对象实际尺寸可能是1920
1080的,这时候,所有渲染对象都会被拉伸填充满整个屏幕。你可以发现所有对象由于拉伸都是模糊的。
-----------但是cocos并非如此。
通过setDesignResolutionSize填写的是设计尺寸,粗一看,所有2d对象似乎真的模糊掉了,但是编写一个特定的shader,亦或者是场景创建3d对象,都能发现 它并未真正模糊,也就是说,GPU耗费了巨大资源来计算每一个像素点。
由此在Android机器上带来的性能问题十分严重。事实上 没有游戏渲染渲染1080p的分辨率 这个甚至在几年前电脑上都很危险。
因为大多数安卓机,都具有极高分辨率的屏幕(作为噱头),但是GPU填充普遍是腊鸡。
---------我应该如何做修改呢?

1赞

游戏已经上线 我就不避嫌了,设计尺寸1334750,windows窗体大小19201080.可以明显看到2d部分不是很清晰的。但是3d部分绝对是按照1920*1080分辨率渲染的。 另外,在ipad pro上 也是同样效果 (2732 x2048分辨率)

对于设计分辨率的概念不是OpenGL的概念,而是引擎加入的。可以参考这篇文档.

Thanks 我去看看

我粗略看了下,似乎无法解决那个问题。(或者我没理解透彻)

cocos的屏幕适配方案,实际是依然创建了一个和屏幕一样大小尺寸的缓冲区。
然后通过各种缩放方案进行大小适配。
那么实际上,由于缓冲区依然那么大,GPU在处理的时候,就比处理指定分辨率的工作量要大的多。
在2d图形上 如果不是特殊shader 是无法看出来的,但是在3d渲染上就会暴露出问题了。
事实上2d也会有问题,例如
shader 处理一个800600分辨率的图片再映射到屏幕,需要像素着色器执行480000个点
但是先放大再执行shader 1920
1080的像素着色器则需要2073600个 性能至少差了4.32倍

我这个需求,应该是要修改渲染缓冲区尺寸大小。(或者说swap chain buffer 的size,但是OpenGL里面不知道是不是这个名字或者由相同概念的东西)
引擎里有提供setViewPort 但是这个没办法填充满整个屏幕呢(比如我尺寸减半。那么最终渲染尺寸的确达到要求了。然而没办法填充满整个屏幕)

我已经解决了这个问题~方案是新建一个fb,渲染3d部分到纹理,修改纹理尺寸大小就可以了,然后把纹理创建为Sprite加载到UI层。顺带解决了postrendering问题

1赞

哥们儿你们这个游戏低配手机上没有锯齿吗?怎么解决的呢?加灯光会不会卡顿啊?