码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-16 00:29:59      阅读:1298      评论:0      收藏:0      [点我收藏+]

标签:qt   opengl   性能测试   

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

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

蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/43842131。欢迎同行前来探讨。

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

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渲染性能

标签:qt   opengl   性能测试   

原文地址:http://blog.csdn.net/gamesdev/article/details/43842131

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!