基于PC的OpenGL跨平台实现及性能研究
(原文地址: http://qkzz.net/magazine/1001-9081/2007/05/846684.htm )
摘要:针对OpenGL独立于操作系统和窗口系统的特性,分析了OpenGL基于PC的工作原理,包括泛型实现、硬件实现和OpenGL跨平台实现。使用OpenGL性能特征小组的SPECViewperf 9.0对OpenGL在Windows和Linux操作平台上的实现性能进行了测评和对比,并给出相关数据和图表。结果显示,OpenGL运行在硬件模式时会获得更好的性能。在PC平台上,OpenGL的实现性能受操作系统和窗口系统影响。测评方法和结果对选择OpenGL操作平台具有一定参考价值。
关键词:OpenGL;性能;测评;SPECViewperf
中图分类号: TP302.7
文献标识码:A
0引言
OpenGL作为开发灵活的、交互的2D和3D图形应用程序的一个主要环境,目前已经成为工业界最广泛使用和支持的2D和3D图形应用程序接口(Application Programming Interface, API),它是真正意义上开放的、跨平台的图形标准[1]。随着并不昂贵但性能卓越的图形硬件的普及,以及原来只在图形工作站上才具有的OpenGL硬件实现技术在个人计算机(Personal Computer, PC)上的应用,OpenGL在PC上得到了广泛的运用,例如在Windows系统上应用于机器人模拟[2]和虚拟地形漫游系统[3],以及在Linux环境下模型直升机飞行过程的实时3D仿真[4]和地震数据的三维可视化[5]中的应用。同时其性能成为至关重要的问题。目前对于OpenGL性能的主要研究可分为两个方面:一是针对计算机3D图形卡、CPU等“硬件层”的研究,例如J.W.Sheaffer,D.Luebke,K.Skadron开发的GPU模拟工具Qsilver[6],以及Chris J.Thompson,Sahngyun,Hahn Mark Oskin对图形硬件结构的研究[7];二是对应用软件的“应用软件层”的研究,例如罗朔锋,李雪耀,熊新平等在高性能面向对象场景图系统中对OpenGL图形性能的优化[8]。然而,OpenGL在跨平台的具体实现时,其性能除了与“硬件层”和“应用软件层”相关外,由于OpenGL没有附属任何窗口函数,OpenGL必须要与具体的操作系统和窗口系统相结合才能执行[9],使得OpenGL的性能又与具体操作系统及窗口系统这一“操作平台层”密切相关。
针对这一问题,本文对基于PC的OpenGL跨平台实现性能作了研究,分析了OpenGL跨平台实现的原理,详细论述了使用SPECViewperf 9.0对OpenGL在Windows和Linux上实现性能的测评,分析和比较了PC上不同操作平台对OpenGL性能的影响。
1OpenGL工作原理
1.1实现模式
OpenGL的实现有两种模式:泛型实现和硬件实现。泛型实现即软件实现,也就是对OpenGL函数调用做出响应创建三维图像的软件函数库。图1显示当一个应用程序运行时OpenGL的泛型实现所占据的典型位置。在不同的操作系统上想要在屏幕上创建输出的应用程序通常会调用一种本地显示服务。OpenGL的硬件实现又称为加速实现,通常采用图形卡驱动程序的形式。图2显示了它与应用程序的关系。OpenGL调用将传递给硬件驱动。这个驱动程序并不把它的输出传递给本地显示服务以进行显示,而是直接与图形显示硬件进行通信[10]。需要说明的是,OpenGL的硬件实现中通常也包含了OpenGL的软件实现,这在图2中并未明确反映出。
1.2OpenGL在PC上的实现
OpenGL是操作系统独立的和窗口系统独立的。为了将它结合到各种窗口系统中,需要利用附加库,为此每个窗口系统有它自己的特定的库和函数。在Linux上,X Windows系统和OpenGL之间的“桥梁”是GLX;在微软的Windows上则是WGL。对于Windows操作系统,Windows NT 3.5和Windows 95(Service Release 2以后)之后的每个版本都提供了OpenGL的实现。Windows 2000和Windows XP也包含了对OpenGL的支持。在屏幕上创建输出的Windows应用程序通常会调用一种叫做图形设备接口(GDI)的Windows API。一般来说,如果安装系统时使用操作系统自带的显卡驱动程序,那么OpenGL程序就会运行在泛型实现模式下,而安装显卡驱动程序之后,OpenGL就会运行在硬件实现模式下。
Linux上通常使用直接渲染结构(Direct Rendering Infrastructure, DRI)提供加速的OpenGL实现。Mesa是一个开源的OpenGL实现,通常它是作为DRI的核心与DRI一起完成OpenGL硬件实现[11],而当3D图形硬件不在Mesa支持或使用的范围内时,Mesa完成OpenGL的泛型实现。一般来说,Linux上3D图形硬件驱动是基于DRI的,但是也有一些例外,比如本文测试平台中使用的3D图形硬件NVIDIA的驱动就不是基于DRI(安装该驱动程序会在X Window配置文件中去掉“载入DRI”一项)。它提供了自己的非开源驱动程序,并为Linux与Windows使用一致的驱动代码。其驱动方式在Linux上为内核模式驱动,在Windows上是以VXD最小端口方式驱动。为了获得OpenGL的硬件实现,本文在Windows各版本和Linux各发行版中均安装NVIDIA最新显卡驱动程序(作者写稿时,Windows最新版本是91.47,Linux最新版本为1.09625 beta)。
2测试平台
2.1硬件平台
本文测试计算机(Ⅰ),代表了中低水平的PC性能,其配置如下:CPUP4 3.00GHz, 内存512MB, 显卡NVIDIA GeForce FX 5200。
在计算机高速发展的今天,双核技术已经成为PC发展的方向。为了更加全面的比较OpenGL在相对高端性能的PC上实现性能的不同,本文使用“双核”测试计算机(Ⅱ),其配置如下:CPU PD 2.80GHz, 内存1GB, 显卡NVIDIA GeForce 7300 LE。
2.2操作系统
在Windows平台上本文选用操作系统如下:
(1) Windows 2000 Professional
(2) Windows 2000 Advanced Server
(3) Windows XP Professional
(4) Windows Server 2003, Enterprise Edition
在下文中,Windows XP Professional和Windows Server 2003, Enterprise Edition将会分别用Windows XP和Windows Server 2003代替。
Linux作为OpenGL实现的一个主要操作系统平台,除了是免费分发之外,还因其多功能性、可改写性和健壮性,成为UNIX和微软操作系统的主要替代者[12]。作为Linux操作系统核心的内核也由最初的0.01版本发展到目前的2.6版本(2003年12月发布)。而基于内核之上的Linux发行版有上百种,本文选择其中3个有代表性的Linux发行版:Fedora Core 5、Ubuntu 6.06和RedFlag 5.0。
本文原文
3性能分析程序SPECViewperf
3.1SPECViewperf简介
SPECViewperf是OpenGL性能特征组织(OpenGL Performance Characterization, SPECopc)发布的一个OpenGL性能测评程序,它由IBM用C语言编写开发,后经SGI、Digital、3Dlabs和其他SPECopc项目小组的贡献使之不断完善。目前,该程序能够运行于绝大多数操作系统,包括UNIX,Windows系列以及OS/2[13]。本文使用SPECViewperf 9.0对OpenGL性能进行测评。
SPECViewperf 9.0对OpenGL的测评数据源(称之为Viewset)并不是由SPECopc项目小组开发的,而是来自于独立软件提供商(Independent Software Vendor, ISV)本身。目前,共有9个SPECopc Viewset:3DSMAX,CATIA,ENSIGHT,LIGHT,MAYA,PROE,SW,UGNX和TCVIS。
3.2SPECViewperf测评基准和方法
SPECViewperf是通过测试每秒帧数(Frames Per Second, FPS)反映OpenGL性能。其他相关信息如测试的操作系统版本,所有的渲染状态,建立显示列表时间(如果使用了的话)以及使用的数据源等都输出在标准化的报告中。以3DSMAX Viewset为例,3DSMAX Viewset当中包含了14个不同的测试包,每个测试包具有一个权值,由公式(1)计算得到一个加权几何图形平均值(Weighted Geometric Mean):
∏ni=1(frames/secondi)(wi)(1)
式中:
n — Viewset中独立测试包总数。
w — 每个独立测试包的权重值。
4性能测试
以下将使用SPECViewperf 9.0对OpenGL在Windows和Linux平台上的实现性能做出综合测评和分析,测评过程中测试窗口大小均为宽1280高1024。
4.1OpenGL不同实现模式性能比较
OpenGL运行在不同实现模式时实现环境有所不同,在Windows上主要不同如表1所示。OpenGL版本方面,Windows的OpenGL实现为1.1版本,事实上,Windows对于OpenGL的支持在1.1版本之后就再也没有更新过。泛型实现模式下OpenGL的本地显示服务是GDI,而在硬件实现模式下显卡驱动提供了对OpenGL最新的支持,对OpenGL的调用则直接由硬件驱动来完成。
在Linux上,与Windows对OpenGL支持不多不同,Mesa近几年来一直紧随OpenGL逐渐增加特性(如表2所示),Mesa 6.x 已经支持OpenGL 1.5。当OpenGL运行在泛型模式时,Mesa为间接渲染状态,在硬件实现模式下则为直接渲染状态。然而正如表3和表4所示,不论是在Windows还是在Linux上,OpenGL运行在硬件模式时的性能都要优于泛型模式时几倍甚至更多。
不同之处泛型实现硬件实现
不同之处泛型实现硬件实现
4.2OpenGL的硬件实现性能
下面将针对OpenGL的硬件实现性能(以下简称性能)做出测评。在此之前,因为Linux各个发行版的内核版本并不都相同,其中Fedora 5和Ubuntua 6.06内核版本为2.6.15,RedFlag 5.0内核版本则为2.6.9。由于Linux内核版本不断更新,新的内核修订了旧内核的bug,并增加了许多新的特性。为了能够使用这些新特性,并定制一个更高效,更稳定的内核,减少由于内核差别对于测评可能带来的影响,就需要下载最新内核2.6.18[14],并重新编译安装Linux内核(编译安装新内核后,还需要重新安装Linux显卡驱动程序)。
表5是对Windows操作平台上OpenGL性能测评的结果。可以看出,Windows XP上在CATIA、ENSIGHT、LIGHT、MAYA、PROE和UGNX几项上OpenGL性能都最为出色,特别是CATIA和LIGHT两项,而OpenGL在Windows Server 2003上较在其他Windows版本上性能则有明显的差距。Windows 2000 Professional和Windows 2000 Advanced Server由于版本一样,OpenGL性能测评结果也基本相同。
相比之下,Linux操作平台上OpenGL性能的差别并不十分明显,如表6所示。进一步将Windows平台上OpenGL性能表现最为突出的Windows XP与Linux平台上的Ubuntu 6.06作一个对比可以看出,虽然Windows XP上OpenGL性能在CATIA、LIGHT和SW几项上的测评结果较Ubuntu 6.06要稍好一些,但在ENSIGHT、UGNX方面却相差比较明显,而在其他各项上的差距则很小。
4.3“双核”计算机上OpenGL性能
SPECViewperf 9.0在测试过程中使用的Viewset代表了相对高端的应用程序,例如Viewset中的CATIA,它所使用的模型包含了总共两百万个顶点。此外,SPECViewperf 9.0还包括了对光照、显示列表、投影等全面的测评,而完成每一项测评需要大量的系统资源。为了尽量减少由于系统资源的不足对OpenGL性能的影响,本文使用测试计算机(Ⅱ)来进一步认识OpenGL跨平台实现的性能。
表7是在测试计算机(Ⅱ)的Windows平台上OpenGL性能比较。可以看出,在系统资源对于OpenGL性能的限制减小后,Windows平台上各操作系统对于OpenGL性能的影响也减少很多,表中显示除了ENSIGHT和TCVIS两项之外,Windows各版本上的OpenGL性能相差已经非常小。同时,如表8所示,Windows XP与Ubuntu 6.06上OpenGL性能仅在3DSMAX和PROE两项上测评结果非常接近,而其他各项测评结果依然是存在较大差异。
5结语
通过对OpenGL跨平台实现
性能的全面测评可以看出,一方面,在相同配置计算机上,相比泛型模式,当OpenGL运行在硬件模式时能够发挥更好的性能;另一方面,虽然决定OpenGL性能的因素主要是CPU、图形子系统(包括GPU、图形总线、驱动)等,但是在PC上,操作平台对于OpenGL的性能的影响同样是不可忽略的,特别是在运行相对高端的应用程序而计算机系统资源又相对不足时,这种影响体现得更加明显。本文的测评方法和结果对选择OpenGL操作平台和衡量OpenGL实现性能具有一定参考价值。
本文并未对操作系统和窗口系统可能对OpenGL性能发挥产生影响的具体因素以及限制OpenGL性能发挥的瓶颈问题做出研究,如何使OpenGL在PC上发挥出最好的性能需要在今后的学习工作中作进一步深入的研究。
分享到:
相关推荐
总的来说,OpenGL ES PC dgles win 是关于在Windows环境下模拟和开发OpenGL ES应用的技术,对于移动平台的图形编程和跨平台开发具有重要意义。通过使用类似dgles的工具,开发者可以更加方便地进行OpenGL ES应用的...
OpenGL是一种开放标准的图形库,它为跨编程语言和跨平台的图形编程提供了接口,特别适用于三维图像处理。在飞行仿真领域,OpenGL因其高效、稳定和跨平台的特性,常被用作创建虚拟环境的基础。 国内对于OpenGL的研究...
在详细介绍基于Cocos2d-x的跨平台游戏设计与实现之前,我们先来了解Cocos2d-x框架以及跨平台游戏开发的基本概念。 Cocos2d-x是一个开源的游戏开发框架,它基于Cocos2d-iPhone延伸而来,支持多种平台的游戏开发,...
3. **跨平台测试**:在模拟器上验证代码的兼容性和性能,以适应多种设备。 4. **调试和优化**:利用调试工具找出性能瓶颈,优化代码以提高效率。 在实际开发流程中,开发者会首先编写代码,然后在模拟器上运行和...
7. 兼容性与标准化:OpenGL ES 2.0是跨平台的,这意味着它可以在不同厂商的硬件和操作系统上运行。此外,它还有明确的规范,保证了不同的实现之间具有良好的兼容性。 8. Android支持:在Android平台上,OpenGL ES ...
2. **Qt框架的运用**:Qt作为C++应用程序开发框架,其强大的类库和工具集,包括GUI设计、数据库连接、网络编程等功能,使其成为开发跨平台、高性能用户界面的理想选择。特别是在Unix环境下,Qt提供了完善的OpenG L...
3D Studio MAX是由Autodesk公司开发的一款基于PC系统的三维动画渲染和制作软件。它以其强大的功能和灵活性,被广泛应用于广告、影视、工业设计等行业。.max文件是3D Studio MAX默认使用的文件格式,包含了模型的所有...
- **关于OpenGL**:OpenGL是一种跨平台的应用程序接口(API),用于渲染二维和三维图形。它基于C语言开发,广泛应用于计算机图形学领域。 - **OpenGL如何工作**:OpenGL通过一系列函数调用来创建和操作图形对象。...
OpenGL是跨语言和跨平台的,允许开发者编写在不同操作系统之间可移植的图形代码。 OpenGL的起源可以追溯到SGI公司的IRIS GL,但为了提高移植性和广泛性,发展成为OpenGL。OpenGL这个名字表明它是开放的图形库,它不...
OpenGL(Open Graphics Library)是一种跨平台的API(应用程序编程接口),用于渲染2D和3D矢量图形。它最初由SGI(Silicon Graphics Inc.)为IRIS GL工作站开发,并逐渐发展成为一种广泛支持的标准API。OpenGL的核心...
OpenGL,全称为“Open Graphics Library”,是一个开源的、跨编程语言和跨平台的图形编程接口。这个接口定义了一系列用于创建2D和3D图形的函数,适用于开发高性能的图形应用程序。OpenGL不仅支持复杂的3D图像处理,...
3. **硬件加速**:OpenGL支持利用图形加速硬件来提高性能,这种高效的实现方式通常由显卡制造商提供,并且与特定的硬件密切相关。 4. **开源替代方案**:Mesa是一个开源的图形API,其代码与OpenGL兼容,虽然因许可...
通过合理的初始化设置和有效的编程技巧,程序员能够在PC平台上实现高质量的三维图形渲染,为科学研究、工程设计、游戏开发等领域提供强有力的支持。未来,随着计算机硬件性能的不断提升和图形算法的持续优化,OpenGL...
OpenGL ES(OpenGL for Embedded Systems)是一种为嵌入式设备设计的跨平台的3D图形API。它基于OpenGL标准,但是针对移动设备和其他资源受限的环境进行了优化。在《OpenGL ES 详解》这份文档中,作者详细介绍了...
OpenGL入门学习 ...总的来说,OpenGL是一个功能强大且高度可移植的图形API,适合开发跨平台的3D应用程序。通过学习OpenGL,开发者可以创建复杂、高性能的图形界面,适用于游戏、科学可视化、工程设计等多个领域。
在Android编程领域,实现手机与PC之间的通信是一个常见的需求,特别是在物联网(IoT)和远程控制应用中。...这种通信方式不仅限于Android和PC,也可以应用于其他支持TCP/IP的设备,实现了跨平台的信息交换。
VKGL,全称为Vulkan-based OpenGL,是一个开源项目,旨在实现一个高效且跨平台的OpenGL上下文,利用Vulkan图形API来提供底层渲染支持。这一创新性的设计允许开发者在享受Vulkan的高性能和低级控制的同时,继续使用已...