读到这里,应该对OpenGL渲染管线有了初步简单了解。下面着重分析CPU管线,即逻辑控制中心做了什么,这部分还是容易理解的。如下图:

  

  一,将数据加载到显存中。

  这是由GPU是访问显存中的数据决定的。因为显卡访问显存的速度更快,且大多数显卡没有权限直接访问RAM。

  

  当数据(如顶点,纹理坐标,颜色和法线量等)加载到显卡,便可移除RAM中的数据,但如果CPU仍需要访问这些数据如CPU访问网格数据进行碰撞检测,那就保留不移除,因为数据从硬盘加载到RAM的过程是很耗时的。

  二,设置渲染状态。

  什么是渲染状态?指一些状态定义了场景中的网格是怎样被渲染的,如颜色,使用的顶点/片段着色器(Vertex/Fragment shader),光源属性,材质等等。一旦设置好这些状态,后续管线中的渲染都直接使用修改好的状态参数,如下图使用同一种渲染状态来渲染3个不同的网格,结果是3个看起来像是同一种材质的物体:

  

  这也说明了OpenGL是一种状态机,至于对这个说法的理解,可以参考另一篇文章的内容 — 《小强学渲染之OpenGL状态机理解》

  三,调用drawCall。

  当给定一个DrawCall时,GPU就会根据渲染状态(如材质纹理着色器等)和所有输入的顶点数据进行计算,最终输出成屏幕上显示的那些像素。简单说,DrawCall就是一个命令,由CPU发起,并由GPU接收。要注意,drawCall不包含任何材质等状态信息,仅仅指向一个需要被渲染的图元列表

  

  基本的Draw函数有2种,glDrawArrays(GLenum mode, GLint first, GLsizei count) 和 glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid* indices)

小强学渲染之OpenGL的CPU管线的更多相关文章

  1. 小强学渲染之OpenGL的GPU管线

    GPU渲染流水线,是硬件真正体现渲染概念的操作过程,也是最终将图元画到2D屏幕上的阶段.GPU管线涵盖了渲染流程的 几何阶段 和 光栅化阶段,但对开发者而言,只有对顶点和片段着色器有可编程控制权,其他 ...

  2. 小强学渲染之OpenGL渲染管线详析

    什么是OpenGL? OpenGL是一套图形硬件的软件API接口库,它直接和GPU交互,将3D场景渲染绘制到2D屏幕上.总结说,OpenGL的功能是将程序中定义的各种2D或3D模型绘制到帧缓存中,或者 ...

  3. 小强学渲染之OpenGL状态机理解

    状态机是理论上的一种机器,呃这个说法非常非常的抽象.通俗一点理解,状态机描述了一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动.或者说,状态机是一种行为, ...

  4. 小强学渲染之Unity Shader噪声应用

    之前玩Tencent的仙剑4手游时,杀死boss会看到boss有“消融”的效果,就是身体上有多个洞洞然后往四周扩散直至尸体完全消失,但效果是没有关闭背面剔除的“穿帮”效果,可能也是考虑性能因素. em ...

  5. 小强学渲染之Unity Shader边缘描边加强

    项目开发遇到一个需求,就是当坦克的准心瞄准敌方(enemy tank 或 item box)时,要让选中的对象的轮廓高亮起来,这实际上是接下来要讲解的实时渲染中轮廓线的渲染应用.实现方式有多种,下面逐 ...

  6. 小强学渲染之Unity Shader编程HelloWorld

    第一个简单的顶点vert/片元frag着色器   1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...

  7. 把Android原生的View渲染到OpenGL Texture

    http://blog.csdn.net/u010949962/article/details/41865777 最近要把Android 原生的View渲染到OpenGL GLSurfaceView中 ...

  8. 小菜学Chromium之OpenGL学习之二

    在这个教程里,我们一起来玩第一个OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退出.它是我们以后应用程序的框架. 在CodeBlock里创建一个新的GLUT ...

  9. 【和小强学移动app测试2】移动终端app测试点归纳(持续更新)

      以下所有测试最后必须在真机上完整的执行 1.安装.卸载测试 在真机上的以及通过91等第三方的安装与卸载 安装在手机上还是sd卡上 2.启动app测试 3.升级测试 数字签名.升级覆盖安装.下载后手 ...

随机推荐

  1. linux自启动tomcat

    第一种方式 1.修改脚本文件rc.local:vim /etc/rc.d/rc.local 这个脚本是使用者自定的开机启动程序,可以在里面添加想在系统启动之后执行的脚本或者脚本执行命令 2.添加如下内 ...

  2. SQL-记录查询篇-009

    在学习记录查询之前,学习一些关键字的使用: 1.逻辑运算符:and . or . not  .is null select * from   table_name where  id>2 and ...

  3. linux ---> taskkill pid 8080 /f

    ★ :--linux->-端口占用 : netstat -anonetstat -ano|findstr 8003taskkill /pid 4816 /f

  4. @angular/cli 工程 项目 配置

    如果你创建工程项目用angular-cli 你的样式文件想使用scss, 并且让ng serve自动编译它们 你可以在创建项目的时候用 ng new sassy-project --style=sas ...

  5. 什么是pytorch(4.数据集加载和处理)(翻译)

    数据集加载和处理 这里主要涉及两个包:torchvision.datasets 和torch.utils.data.Dataset 和DataLoader torchvision.datasets是一 ...

  6. 解决ansible上传速度慢的问题

    问题: 假如有A.B.C.D....等机器,机器A为Ansible服务器,机器B.C.D...等为Ansible管理的节点服务器,A机器与其他机器都不在同一个网络,也就是A机器必须添加VPN之后才能与 ...

  7. laravel 路由分組

    laravel 路由分組 Route::group(['prefix' => 'admin'], function () { $namespacePrefix="\\App\\Http ...

  8. 请确保 ASP.NET State Service (ASP.NET 状态服务)已启动 问题解决

    当iis部署的网站访问遇到如下错误时: 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同.如 ...

  9. MySQL Point in Time Recovery the Right Way

    In this blog, I’ll look at how to do MySQL point in time recovery (PITR) correctly. Sometimes we nee ...

  10. FTP文件传输服务

    FTP文件传输服务 一 .FTP 连接及传输的模式 l  控制连接:TCP21,用于发送FTP命令信息. l  数据连接:TCP 20, 用于上传下载数据. · 数据连接建立的类型: ·主动模式: 服 ...