小强学渲染之OpenGL的CPU管线
读到这里,应该对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管线的更多相关文章
- 小强学渲染之OpenGL的GPU管线
GPU渲染流水线,是硬件真正体现渲染概念的操作过程,也是最终将图元画到2D屏幕上的阶段.GPU管线涵盖了渲染流程的 几何阶段 和 光栅化阶段,但对开发者而言,只有对顶点和片段着色器有可编程控制权,其他 ...
- 小强学渲染之OpenGL渲染管线详析
什么是OpenGL? OpenGL是一套图形硬件的软件API接口库,它直接和GPU交互,将3D场景渲染绘制到2D屏幕上.总结说,OpenGL的功能是将程序中定义的各种2D或3D模型绘制到帧缓存中,或者 ...
- 小强学渲染之OpenGL状态机理解
状态机是理论上的一种机器,呃这个说法非常非常的抽象.通俗一点理解,状态机描述了一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动.或者说,状态机是一种行为, ...
- 小强学渲染之Unity Shader噪声应用
之前玩Tencent的仙剑4手游时,杀死boss会看到boss有“消融”的效果,就是身体上有多个洞洞然后往四周扩散直至尸体完全消失,但效果是没有关闭背面剔除的“穿帮”效果,可能也是考虑性能因素. em ...
- 小强学渲染之Unity Shader边缘描边加强
项目开发遇到一个需求,就是当坦克的准心瞄准敌方(enemy tank 或 item box)时,要让选中的对象的轮廓高亮起来,这实际上是接下来要讲解的实时渲染中轮廓线的渲染应用.实现方式有多种,下面逐 ...
- 小强学渲染之Unity Shader编程HelloWorld
第一个简单的顶点vert/片元frag着色器 1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...
- 把Android原生的View渲染到OpenGL Texture
http://blog.csdn.net/u010949962/article/details/41865777 最近要把Android 原生的View渲染到OpenGL GLSurfaceView中 ...
- 小菜学Chromium之OpenGL学习之二
在这个教程里,我们一起来玩第一个OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退出.它是我们以后应用程序的框架. 在CodeBlock里创建一个新的GLUT ...
- 【和小强学移动app测试2】移动终端app测试点归纳(持续更新)
以下所有测试最后必须在真机上完整的执行 1.安装.卸载测试 在真机上的以及通过91等第三方的安装与卸载 安装在手机上还是sd卡上 2.启动app测试 3.升级测试 数字签名.升级覆盖安装.下载后手 ...
随机推荐
- flask,gunicorn,supervisor,nginx配置服务器接口
1,申请阿里云主机 2,apt-get update 3,apt-get install pip 4,pip install virtualenv 5,virtualenv venv 6,source ...
- Vue 中使用 viewerjs
安装 viewerjs npm install viewerjs --save 创建一个 Viewer.vue 组件 <template> <div id="index&q ...
- 第一天Python
一.开发语言 高级语言:Python Java.PHP 高级语言--字节码(PHP适用于写网页) 低级语言:C.汇编--机器码(底层开发,根本,效率低) 二.Python种类 三.安装
- 物化视图SQL
物化视图SQL,如果没有结果集,就证明数据库中不存在物化视图 select a.owner,'' column_name,a.table_name,b.segment_name,b.segment_t ...
- [UE4]List View
List View适合显示数以千条的列表 要点 一.创建Entry类,实现IUserObjectListEntry. 创建一个名为“EntryWidget”的UserWidget,添加如下图所示的控件 ...
- 02-Response简单响应报文
package com.day5; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputSt ...
- 实验一:通过bridge-utils工具创建网桥并实现网络连接
实验名称: 通过bridge-utils工具创建网桥并实现网络连接 实验环境: 实验要求: 安装bridge-utils工具,创建网桥br0,通过brctl命令,为网桥配置IP地址192.168.23 ...
- vue仿淘宝结账订单
<template> <div class="container"> <div class="checkout-title"& ...
- atnodes命令使用方法
一条命令可以同时执行多台机器,结果会输出列表. atnodes -L 'grep -c "查询订单列表,userId=bing.wang03" /home/w/www/order- ...
- Spring Bean生命周期详解
对象生命周期:创建(实例化----初始化)---使用----销毁,而在Spring中,Bean对象周期当然遵从这一过程,但是Spring提供了许多对外接口,允许开发者对三个过程(实例化.初始化.销毁) ...