OpenGL--渲染流程解析

OpenGL--渲染流程解析

  • 1.客户端-服务端
  • 2.着色器
  • 3.着色器使用数据类型
  • 4.输出

OpenGL--渲染流程解析_第1张图片

1.客户端-服务端

OpeneGL渲染流程是遵循客户端-服务器模式的,客户端与服务端协作完成图形图像的渲染流程。

  客户端:负责发送OpenGl命令(如OprnGLAPI、C++代码等)至服务端,客户端运行于CPU中,在主系统内存中的驱动程序中执行,将渲染命令和数组进行组合,并发送到服务端。
  服务端:负责执行OpenGL命令,进行主要的渲染操作,服务端运行于GPU中。
  客户端与服务端在功能上是异步的,他们各自是独立的软件块或硬件块。图形渲染的过程就是客户端与服务端持续通信的过程。如果客户端停止工作等待服务端或者服务端停止工作等待客户端,这种情况称为管线停滞。

2.着色器

  着色器是用GLSL语言编写的程序,用于处理客户端传入的数据。

  顶点着色器:处理客户端输入的原始数据,进行计算光照效果、位移值、颜色值等。而且每个顶点对应一次顶点着色器的执行。这个阶段对于所有的OpenGl程序都是必需的。
  片元着色器:将纹理数据、Uniforms数据等进行处理,输出屏幕上将看到的颜色值数据。这个阶段对于所有的OpenGl程序都是必需的。
  着色器有了,那么着色器使用的数据有哪些呢?着色器接收的数据类型主要有三种:属性、纹理Uniforms。

3.着色器使用数据类型

  • Attribute属性

  定义每个顶点特性的数据元素,可以是纹理坐标、颜色值、光照计算等。

  属性值数据类型可以是浮点型、整型、布尔型。
  属性会从本地客户机内存中复制在图形硬件中的缓冲区上,直接用于顶点着色器使用。
  这些属性对每个顶点都要做改变,但并不意味着它们的值不能重复。通常情况下,它们都是不一样的,但有可能整个数组都是同一值的情况。

  • Uniform值

  描述了一类可以无限次使用的统一值,可以是表面统一颜色值,也可以是一个时间值,可以在每次渲染某种类型顶点时修改它。

  Uniform值在每个批次改变一次,而不是每个顶点改变一次。
  Uniform值最常见的应用是在顶点渲染中设置变换矩阵。
  Uniforms值数据类型可以是浮点型、整型、布尔型,还可以是标量类型、矢量类型、uniform矩阵等。
  可用于顶点着色器和片元着色器,例如存储着色器的设置方法:

GLint UseStockShader(GLT_STOCK_SHADER nShaderID, ...);

  该方法使用了Uniform参数来匹配着色器类型,不同的参数GLT_STOCK_SHADER,对应不同的存储着色器,如使用平面着色器:

GLT_STOCK_SHADER值为GLT_SHADER_FLAT:shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), vBlack);
  • Texture Data纹理

  用于渲染于图形表面的数据类型,可通俗理解为图片。传递给顶点着色器与片元着色器,着色器对纹理数据进行采样并在图形表面进行渲染。

  纹理数据,不仅仅表现在图形,很多图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的。纹理的应用例如:
  滤镜:其实就是对纹理数据进行处理,在处理过程中改变纹理在读取时候的颜色值。
  渲染立方体:可以使用线框,可以使用颜色填充,也可以使用纹理填充。

4.输出

  输出数据是作为一个阶段着色器处理结果的输出而定义的,而对应后续阶段的着色器则作为输入。也可简单理解为渲染过程从一个阶段传递到下一个阶段的标志。

参考:
1.《OpenGL编程指南(原书第8版)》
2. CC老师_HelloCoder:OpenGL渲染管线流程解析
3. 凡几多:OpenGL基础渲

你可能感兴趣的:(OpenGL)