OpenGL and Graphics Pipeline

The word pipeline is from production lines in factories.Generating a product at high efficiency and volume generally requires two things: scalability and parallelism.While one worker installs the engine in a car, another can be installing the doors and yet another can be installing the wheels.That is parallelism.

Just as a car plant can build multiple cars simultaneously, so can OpenGL break up the work you give it and work on its fundamental elements in parallel.Though a combination of pipelining and parallelism,incredible performance of modern graphics processors is realized.

Current GPUs consist of large number of small programmable processors called shader cores which run mini-programs called shaders. Each core has a relatively low throughput , processing a single instruction of the shader in one or more clock cycles and normally lacking advanced features such as out-of-order execution,branch prediction, super-scalar issue,and together the can perform an immense amount of work.

Figure:

In Figure,the boxes with rounded corners are considered fixed-function stages whereas the boxes with square corners are programmable, which means that they execute shaders that you supply.In practice,some or all of the fixed-function stages may really be implemented in shader code too——it is just that you don’t supply that code, but rather the GPU manufacturer would generally supply it as part of a driver, firmware, or other system software.

The version numbers and dates of publication of 17 editions of the OpenGL specification are shown in follow Table:

OpenGL 4.4               July 2013

OpenGL 4.4 pipeline:

Core Profile OpenGL

In 2008,the ARB fork the OpenGL specification into two profiles.The first is the modern ,core profile ,which remove a number of legacy features leaving only those that are truly accelerated by current graphics hardware.The other is the compatibility profile which maintains backwards compatibility with all revisions of OpenGL back to version 1.0.The core profile is strongly recommended by most OpenGL experts to be the profile that should be used for new application development.

Primitives, Pipelines, and Pixels

The fundamental unit of rendering in OpenGL is known as the primitive.

Primitive A group of one or more vertices formed into a geometric shape by OpenGL such as a line, point, or triangle. All objects and scenes are composed of various combinations of primitives.

Three basic renderable primitive types in OpenGL:

  • Points
  • Lines
  • Triangles

Applications will normally break complex surfaces into a very large number of triangles and send them to OpenGL where they are rendered using a hardware accelerator called a rasterizer.

As polygons, triangles are always convex, and therefore filling rules are easy to devise and follow.

A vertex is simply a point within a coordinate space.

Vertex A single point in space. Except when used for point and line primitives, it also defines the point at which two edges of a polygon meet.

The graphics pipeline is broken down into two major parts:

The first part:

Often known as the front end, processes vertices and primitives, eventually forming them into the points, lines, and triangles that will be handed off to the rasterizer. (primitive assembly)

The second part:

After the rasterizer, the geometry has been converted from what is essentially a vector representation into a large number of independent pixels. These are handed off to the back end, which includes depth and stencil testing, fragment shading, blending, and updating the output image.

OpenGL is really a large collection of fairly simple concepts, built upon each other.

Having a good foundation and big-picture view of the system is essential.

See you later.

OpenGL学习 Introduction的更多相关文章

  1. OpenGL学习笔记3——缓冲区对象

    在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...

  2. OpenGL学习进程(12)第九课:矩阵乘法实现3D变换

    本节是OpenGL学习的第九个课时,下面将详细介绍OpenGL的多种3D变换和如何操作矩阵堆栈.     (1)3D变换: OpenGL中绘制3D世界的空间变换包括:模型变换.视图变换.投影变换和视口 ...

  3. OpenGL学习进程(11)第八课:颜色绘制的详解

        本节是OpenGL学习的第八个课时,下面将详细介绍OpenGL的颜色模式,颜色混合以及抗锯齿.     (1)颜色模式: OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. R ...

  4. OpenGL学习笔记:拾取与选择

    转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...

  5. OpenGL学习之路(一)

    1 引子 虽然是计算机科班出身,但从小对几何方面的东西就不太感冒,空间想象能力也较差,所以从本科到研究生,基本没接触过<计算机图形学>.为什么说基本没学过呢?因为好奇(尤其是惊叹于三维游戏 ...

  6. OpenGL学习之路(三)

    1 引子 这些天公司一次次的软件发布节点忙的博主不可开交,另外还有其它的一些事也占用了很多时间.现在坐在电脑前,在很安静的环境下,与大家分享自己的OpenGL学习笔记和理解心得,感到格外舒服.这让我回 ...

  7. OpenGL学习之路(四)

    1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器 ...

  8. OpenGL学习之路(五)

    1 引子 不知不觉我们已经进入到读书笔记(五)了,我们先对前四次读书笔记做一个总结.前四次读书笔记主要是学习了如何使用OpenGL来绘制几何图形(包括二维几何体和三维几何体),并学习了平移.旋转.缩放 ...

  9. OpenGL学习之windows下安装opengl的glut库

    OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装.  Windows环境下的GLUT下载地址:(大小约为15 ...

随机推荐

  1. windows_study_3

    描述:如何解决hyper-v全屏不能自适应屏幕大小? 解决:调节虚拟机的分辨率.

  2. python练习六十八:字符串练习

    题目:一个商城在搞抽奖的活动,需要在搞活动的宣传单上印刷优惠卷的验证码,验证码规定20位,生成100个 先来个简单的,20位码中只取数字 import random def num_1(num): l ...

  3. SpringBoot中使用Servlet

    1.在入口Application类上加入注解@ServletComponentScan @SpringBootApplication @ServletComponentScan public clas ...

  4. MOS管

    mos工作原理:http://www.360doc.com/content/15/0930/11/28009762_502419576.shtml, 开关特性好,长用于开关电源马达驱动,CMOS相机场 ...

  5. Murano Weekly Meeting 2015.08.18

    Meeting time: 2015.August.18th 1:00~2:00 Chairperson:  Nikolay Starodubtsev, from Mirantis Meeting s ...

  6. Oracle之RMAN备份及还原

    RMAN可以进行增量备份:数据库,表空间,数据文件 只有使用过的block可以被备份成backup set 表空间与数据文件对应关系:dba_data_files / v$datafile_heade ...

  7. jQuery的实现编码,解决特殊字符 <script> "

    function htmlEncode(value){ if (value) { return jQuery('<div />').text(value).html(); } else { ...

  8. 【linux】Linux tcpdump命令详解

    Tcpdump 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送 ...

  9. C#测试程序运行时间的方法

    C#测试程序运行时间的三种方法如下: (1)Datetime DateTime dtBegin = System.DateTime.Now;... DateTime dtEnnd = System.D ...

  10. mysql中count(*)和found_rows()的区别

    count(*)和found_rows()都可以用来求查询记录的数量 而count(*)往往单独使用,found_rows()却可以跟上前面一个查询,即select * from table limi ...