测试Qt Quick在各个平台上的3D渲染性能

测试Qt Quick在各个平台上的3D渲染性能

Qt是一个跨平台的GUI框架,它的QtQuick更是支持结合OpenGL原生的代码进行渲染。我想将我以前写的程序整合到QtQuick上来,看看渲染效果是否满意,于是写了一个小小的程序,来做一下渲染基准测试。运行结果出来,不容乐观呐。

蒋彩阳原创文章,首发地址:。欢迎同行前来探讨。

首先为了描述最基本的情况,我制作了一个带有纹理的立方体。它使用透视投影,并且辅以简单的着色器来完成贴图,最终得以渲染。渲染代码可能比较长,但也是相当精简了。

void TexturedCubePrivate::render( void ){EntityPrivate::render( );// 运动m_ModelViewMatrix.setToIdentity( );m_ModelViewMatrix.translate( 0.0f, 0.0f, -60.0f );m_ModelViewMatrix.rotate( m_RotateAngle, m_Axis.x( ),m_Axis.y( ), m_Axis.z( ) );// 渲染glEnable( GL_DEPTH_TEST );glEnable( GL_CULL_FACE );glFrontFace( GL_CW );m_ShaderProgram.bind( );m_VertexBuffer.bind( );int offset = 0;setVertexAttribute( "position", GL_FLOAT, 3, offset );offset += 3 * sizeof( GLfloat );setVertexAttribute( "texCoord", GL_FLOAT, 2, offset );m_ShaderProgram.setUniformValue( "modelViewMatrix", m_ModelViewMatrix );m_ShaderProgram.setUniformValue( "projectionMatrix", m_ProjectionMatrix );m_texture.bind( );glDrawArrays( GL_TRIANGLES, 0, VERTEX_COUNT );m_ShaderProgram.disableAttributeArray( "position" );m_ShaderProgram.disableAttributeArray( "texCoord" );m_texture.release( );m_VertexBuffer.release( );m_ShaderProgram.release( );}

最终的效果是这样的:

一个非常简单的立方体,使用了36个顶点、16个三角形以及1个纹理图像。使用OpenGLES 2.0的代码来看,这个是非常简单的。在这个例子的基础上,我做了一些改进,使用动态载入QML文件的方法创建component,作为窗口的孩子进行渲染。同时,我也做了一个简单的FPS功能,就这样尝试在不同的平台下渲染的性能究竟如何。

首先来看看我们的Android系统,我有一个台电平板电脑A10,是Android系统的,拥有1G内存。用它来测试一下渲染性能,看看是否给力。结果呢,还是挺争气的。

我发誓,,为了得到这三张截图,我不知道重启程序究竟多少次。主要是因为在这么高密度的渲染下,使用Android程序自带的截图,就变得无比困难。很多时候没有等到你截图,程序就闪退了,更有甚者,还会重启系统。

在Android下,当渲染5000个以下的顶点时,FPS还是挺不错的,可以一直保持60,但是到了5000个以上,系统就有些吃不消了,FPS会一直下降,而到了15000以上,基本到了崩溃的边缘了,我也是碰巧能够截下当顶点为17064时候的截图。总之看到Qt结合OpenGL在Android渲染的瓶颈了。

接下来就是Windows Phone系统了,我的WindowsPhone手机是新款的低端手机,Lumia530,内存只有512M。我对它能不能顶得住渲染感到怀疑。

实验结果表明,我的Lumia系统性能还是不行,由于渲染字体glyph的问题,渲染的字体都没有办法显示了。但是立方体还是能够看到的,我随便点了点,发现在创建立方体的一瞬间会卡住,但是创建了之后渲染依然很流畅。由于没有数据,我们也不知道最终的结果怎么样……

最后则是我们的PC客户端登场了。在渲染这一点PC客户端的确当仁不让,效率比手机平台好了不知道多少倍!两万个顶点也能够保持FPS为40。

当然,这可能与视口更新有关。如图所见,的确PC这边的视口是比较小。

但是,我们要关注移动端的渲染性能,既然要做跨平台的程序,那么根据木桶原则,我们必须照顾性能最低的一端,也就是说,为了覆盖更多的用户群,我们在做性能测试的时候,要选用尽可能低配置的机器测试才行。

世界上那些最容易的事情中,拖延时间最不费力。

测试Qt Quick在各个平台上的3D渲染性能

相关文章:

你感兴趣的文章:

标签云: