iOS OpenGL开发(三)- OpenGL渲染架构解析

栏目: IOS · 发布时间: 4年前

内容简介:前两篇文章中给大家解析过了什么是OpenGL的一些常用名词,掌握一些常用的名词,可以更加方便我们后面的学习和理解,也方便我们后面在遇到之后更加容易去查找。然后讲了着色器的渲染流程,我们基本上把大致是怎么玩儿的也弄清楚了。那么这一片文章就从OpenGL的渲染架构开始,带大家聊了解一下OpenGL的渲染架构到底是怎么组成的。首先我们来看一张架构图::

前两篇文章中给大家解析过了什么是OpenGL的一些常用名词,掌握一些常用的名词,可以更加方便我们后面的学习和理解,也方便我们后面在遇到之后更加容易去查找。然后讲了着色器的渲染流程,我们基本上把大致是怎么玩儿的也弄清楚了。那么这一片文章就从OpenGL的渲染架构开始,带大家聊了解一下OpenGL的渲染架构到底是怎么组成的。

OpenGL渲染架构

首先我们来看一张架构图:

iOS OpenGL开发(三)- OpenGL渲染架构解析
解释一下什么叫做 客户端 ,什么叫做 服务端

  • 客户端:我们编写的代码,或者是说调用的OpenGL的API,客户端是存储在CPU存储器中的,并且在应用程序中执行,或者再主系统内存的驱动程序中执行。
  • 服务端:就是计算机图形硬件厂商所提供的OpenGL的实现。我们编写的GLSL代码也是在服务端去运行的,简单来说就是操作的GPU。

服务端和客户端在功能上是异步的,也就是说他们是各自独立的软件块或者硬件块,或者软硬件都有,为了获得最佳的性能,我们希望两方面都尽可能不停地工作。客户端不断地将数据块和命令块组合到一起送到缓冲区,然后这些缓冲区会发送到服务端执行。服务端将执行这些缓冲区的内容,与此同时客户端又做好了发送下一个用于渲染的数据或者信息的准备,如果服务端停止工作等待客户端,或者客户端停止了工作来等待服务端做好接受更多命令和数据的准备,我们就把这情况称为 管线停滞

从上面的图,我们也能看出。客户端只会向服务端传递三种数据,分别是:

1、属性值(Attributes):就是一个对每个顶点都要做改变的数据元素。实际上,顶点位置本身就是一个属性。属性值可以使浮点数、整数或布尔数据。
2、统一的值(Uniforms):Uniforms值本质上跟属性一样,但是跟属性值不同的是,顶点着色器和片元着色器中都可以有Uniform变量。
3、纹理数据(Texture Data):任何大型浮点数据块(例如消耗资源很大的函数的大型查询表)都可以通过这种方式传递给着色器。
复制代码

步骤: 1、三个值都可以通过三个通道分别传到顶点着色器中, 顶点着色器 处理从客户机输入的数据、应用变换、进行其他的类型的数学运算来计算关照效果、位移、颜色值等等。(为了渲染共有3个顶点的三角形,顶点着色器将执行3次,也就是为了每个顶点执行一次)在目前的硬件上有多个执行单元同时运行,就意味着所有的3个顶点可以同时进行处理; 2、顶点着色器处理完成之后,就会经过图元合成,将顶点组合在一起变成图元,然后裁剪、转换窗口坐标、进行光栅化; 3、接着将数据输入到 片元着色器 ,计算片元最终颜色以及深度,然后传递到片元测试模块以及混合模块,由片元着色器输出我们将屏幕上看到的最终颜色值。

注意:

  • Attributes属性值是不能直接传递给片元着色器的,只能通过顶点着色器去传递。但是Uniforms和纹理数据是可以的。

以上所述就是小编给大家介绍的《iOS OpenGL开发(三)- OpenGL渲染架构解析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人件

人件

Tom DeMarco、Timothy Lister / UML China / 清华大学出版社 / 2003-6 / 35.00元

《人件(第2版)》专门讨论了软件开发和维护的团队管理问题,并向人们的传统认识提出了挑战。作者汤姆·迪马可,蒂姆·李斯特在书中推崇人本管理思想,指出知识型企业的核心是人,而不是技术。《人件(第2版)》于1987年首次出版后,曾在西方引起了轰动,被誉为“对美国软件业影响最大的一本书”。《人件(第2版)》还对大中型组织中的软件开发团队如何运作进行了深入探讨。《人件》已成为软件图书中的经典之作。它和《人月......一起来看看 《人件》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换