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

测试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这边的视口是比较小。

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

时间: 2024-08-07 21:16:45

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

Qt Quick 简单介绍

Qt Quick 是 Qt 提供的一种高级用户界面技术.使用它可轻松地为移动和嵌入式设备创建流畅的用户界面. 在 Android 设备上, Qt Quick 应用默认使用 OpenGL ES ,渲染效率很高,你能够用它创建很炫很酷很迷人的界面. Qt Quick 模块是开发 QML 应用的标准库,提供了使用 QML 创建用户界面所需的一切东西,包括可视化类型.交互类型.动画.模型与视图.粒子效果与着色效果等等. Qt Quick 提供了两组 API : QML API ,它提供了使用 QML 语

Qt on Android:Qt Quick 简介

Qt Quick 是 Qt 提供的一种高级用户界面技术,使用它可轻松地为移动和嵌入式设备创建流畅的用户界面.在 Android 设备上, Qt Quick 应用默认使用 OpenGL ES ,渲染效率很高,你可以用它创建非常炫非常酷非常迷人的界面. Qt Quick 模块是开发 QML 应用的标准库,提供了使用 QML 创建用户界面所需的一切东西,包括可视化类型.交互类型.动画.模型与视图.粒子效果与着色效果等等. Qt Quick 提供了两组 API : QML API ,它提供了使用 QML

Qt Quick + OpenGL + Bullet初次测试

Qt Quick + OpenGL + Bullet初次测试 目前Qt的Quick模块已经表现得非常出色,而且可以预留接口来渲染OpenGL场景.一般来说,已经能够满足大部分编程需要了.这次呢,尝试使用结合一些技术,来做一些有趣儿的事情--将Bullet整合进来,并且进行测试. 蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/44284317.欢迎同行前来探讨. 有关Bullet的选择,其实也是有一番讲究的.目前Bullet的

Qt使用教程之创建Qt Quick项目

<Qt Enterprise最新版下载> Qt长期以来一直以"linux平台下,最著名的开发平台"身份在全世界开发者中享有盛誉.Qt Enterprise v5.5是目前最先进.最完整的跨平台C++开发工具.它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具.那么在本文中,我们将为大家展示如何创建一个新的Qt Quick项目. 当你从头开始创建一个新的Qt Quick项目时,你有一下选择: Qt Quick Application创建一个

GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式. 对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局.能够让开发者轻松开发

Qt Quick

Qt是一个跨平台的图形用户界面的框架. Qt quick是Qt提供的一种高级用户界面工具包. 在Android等移动设备上,Qt quick应用默认使用OpenGL ES,渲染效率很高. Qt Creator是针对Qt的集成开发环境. qmlscene是用来测试QML应用的,不要用于生产环境.qmlscene yourapp.qml QML是一种标记语言,实现并扩展了ECMAScript. 在centos7下编译时,说cannot find -lGL,解决办法:yum install libGL

Qt Quick编程(1)——QML的核心部分ECMAScript

说道QML,不得不先说一下ECMAScript: ECMAScript语言的标准是由Netscape.Sun.微软.Borland等公司基于JavaScript和JScript锤炼.定义出来的. ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力.ECMAScript仅仅是一个描述,定义了脚本语言的所有属性.方法和对象.它描述了一下内容: 语法 类型 语句 关键字 保留字 运算符 对象 其他语言可以以它为基础拓展出新特性,比如QML引入了Qt对象系统中的信号与槽等特色功能. QM

对Qt for Android的评价(很全面,基本已经没有问题了,网易战网客户端就是Qt quick写的),可以重用QT积累20年的RTL是好事,QML效率是HTML5的5倍

现在Qt不要光看跨平台了,Qt也有能力和原生应用进行较量的.可以直接去Qt官网查看他和那些厂商合作.关于和Java的比较,框架和Java进行比较似乎不且实际.如果是C++和Java比较,网上有很多文章,可自行翻阅,不要在知乎上看C++和Java比较,黑了C++,捧了Python和PHP.Java呢?晾一边了.在安卓上的话,现在问题可能很多,但是随着Qt的更新,大体解决得七七八八了.Qt on Android 对于原有Qt开发人员和爱好者是一个不错的选择,虽然在Qt可以完成大部分安卓的对应功能,可

Centos 6.6 x86_64 平台上yum的使用

友情提醒:本文的实验平台vmware 10 + Centos 6.6 X86_64,所述内容中的命令请谨慎使用. -------------------------------------楔子-------------------------------------------------- 胖子法师上次在小酒馆中,关于<grep与正则表达式使用>的阐述为其赢得了几个粉丝.今日在魔法塔中喜滋滋翻看着粉丝来信,一封信中提到在Gnu/Linux os平台上安装程序包的种种不顺,这又勾起了胖子好为人