为图形处理器提供数据

程序会保存3D场景数据到硬件随机存取存储器(RAM)中。嵌入式系统的中央处理单元有专门为其分配的RAM。在图形处理的过程中,GPU也有专门为其分配的RAM。使用现代硬件渲染3D图形的速度几乎完全取决于不同的内存区域被访问的方式。

OpenGLES是一种软件技术。OpenGLES部分运行在CPU.上,部分运行在GPU上。OpenGL ES横跨在两个处理器之间,协调两个内存区域之间的数据交换。图1-4中的箭头代表了与3D渲染相关的硬件组件之间的数据交换。每个箭头也代表着一个渲染性能的瓶颈。OpenGLES通常会高效地协调数据交换,但是程序与OpenGLES的交互方式会明显地增加或者减少所需的数据交换的数量和类型。对于渲染速度,最快的数据交换方式是没有数据交换。首先,从一个内存区域复制数据到另一个内存区域速度是相对较慢的。更糟糕的是,除非非常小心,在内存复制发生的时候GPU和CPU都不能把内存另作它用。因此内存区域之间的数据交换需要尽量避免。

图 1-4

其次,所有的内存访问都是相对较慢的。最新的嵌入式CPU可以很容易地完成大约每秒- -亿次的运算,但是它只能每秒读写内存200万次。这意味着,除非CPU能够在每次从内存读取- -块数据后有效地运行五个或者更多个运算,否则处理器的性能就处于次优状态,这种状态叫做“ 数据饥饿”。这种情况对于GPU来说更明显,在理想条件下,GPU能够每秒执行数亿次运算,但是却只能每秒访问内存2亿次。GPU几乎总是受限于内存访问的性能,并且通常需要在每块数据上执行10~30次运算才不会影响整体的图形输出。

概括最新OpenGLES和以前的OpenGL版本之间差异的一种方式是,最新的OpenGLES为了支持新改进的方法抛弃了对于旧式的低效的内存复制操作的支持。如果你曾做过老式的桌面OpenGL开发,那么现在可以忘掉那些经验了。现在的嵌人式 系统不再支持以前的糟糕技术了。OpenGLES仍然支持多种为图形处理器提供数据的方式,但只存在一-种最好的方式,并且本书会始终使用这种方式。

results matching ""

    No results matching ""