IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> ?GLSL-2-着色器概述 -> 正文阅读

[游戏开发]?GLSL-2-着色器概述


大多数API状态都不会被跟踪或提供给着色器。通常,用户定义的变量将用于API管道不同阶段之间的通信。然而,仍有少量状态被跟踪并自动提供给着色器,并且API管道不同阶段之间的接口有一些内置变量。

1.顶点处理器(Vertex Processor)

顶点处理器是一个可编程单元,对传入顶点及其相关数据进行操作。用OpenGL着色语言编写并在该处理器上运行的编译单元称为顶点着色器(vertex shaders)。成功编译并链接一组顶点着色器后,它们将生成顶点处理器上运行的顶点着色器可执行文件。

顶点处理器一次处理一个顶点。它不会取代一次需要了解多个顶点的图形操作。

2.细分控制处理器(Tessellation Control Processor)

细分控制处理器是一个可编程单元,它对输入顶点及其相关数据的面片(patch)进行操作,并发出新的输出面片。用OpenGL着色语言编写并在该处理器上运行的编译单元称为细分控制着色器(tessellation control shaders)。成功编译并链接一组细分控制着色器后,它们将生成在细分控制处理器上运行的细分控制着色器可执行文件。

将为输出面片的每个顶点调用细分控制着色器。每次调用都可以读取输入或输出面片中任何顶点的属性,但只能写入相应输出面片顶点的逐顶点属性(per-vertex attributes)。着色器调用为输出面片共同生成一组逐面片属性(per-patch attributes)。

在所有细分控制着色器调用完成后,输出顶点和逐面片属性将被组合,以形成一个面片,供后续管道阶段使用。

细分控制着色器调用主要独立运行,相对执行顺序未定义。但是,内置函数*barrier()*可以通过同步调用来控制执行顺序,从而有效地将细分控制着色器执行划分为一组阶段。如果一个调用在同一阶段的任何时间点读取另一个调用写入的逐顶点或逐面片属性,或者如果两个调用试图在单个阶段向同一个逐面片输出32位组件(32-bit component)写入不同的值,细分控制着色器将获得未定义的结果。

3.细分评估处理器(Tessellation Evaluation Processor)

细分评估处理器是一个可编程单元,它使用传入顶点的面片及其相关数据,评估由细分图元生成器(tessellation primitive generator)生成的顶点的位置和其他属性。用OpenGL着色语言编写并在该处理器上运行的编译单元称为细分评估着色器(tessellation evaluation shaders)。成功编译并链接一组细分评估着色器后,它们将生成在细分评估处理器上运行的细分评估着色器可执行文件。

每次调用细分评估可执行文件都会计算由细分图元生成器生成的单个顶点的位置和属性。可执行文件可以读取输入面片中任何顶点的属性,以及细分坐标,该坐标是要细分的图元中顶点的相对位置。可执行文件写入顶点的位置和其他属性。

4.几何处理器(Geometry Processor)

几何处理器是一个可编程单元,它对顶点处理后组装的图元的传入顶点数据进行操作,并输出形成输出图元的顶点序列。用OpenGL着色语言编写并在该处理器上运行的编译单元称为几何着色器(geometry shaders)。成功编译和链接一组几何着色器后,它们将生成在几何处理器上运行的几何着色器可执行文件。

对几何处理器上的几何着色器可执行文件的单个调用将对具有固定顶点数的已声明输入图元(a declared input primitive)进行操作。这个单一调用可以发出(emit)数量可变的顶点,这些顶点被组装成已声明的输出图元类型的图元(primitives of a declared output primitive type),并传递给后续的管道阶段。

5.片段处理器(Fragment Processor)

片段处理器是一个可编程单元,对片段(fragment)值及其相关数据进行操作。用OpenGL着色语言编写并在该处理器上运行的编译单元称为片段着色器(fragment shaders)。当一组片段着色器成功编译和链接时,它们会生成一个在片段处理器上运行的片段着色器可执行文件。

片段着色器无法更改片段的(x, y)位置。不允许访问相邻的片段。片段着色器计算的值最终用于更新帧缓冲区内存或纹理内存,具体取决于当前API状态和导致生成片段的API命令。

6.计算处理器(Compute Processor)

计算处理器是一个可编程单元,独立于其他着色器处理器运行。用OpenGL着色语言编写并在该处理器上运行的编译单元称为计算着色器(compute shaders)。当一组计算着色器成功编译和链接时,它们会生成一个在计算处理器上运行的计算着色器可执行文件。

计算着色器可以访问与片段和其他着色器处理器相同的许多资源,例如纹理、缓冲区、图像变量(image variables)和原子计数器(atomic counters)。它没有固定的功能输出。它不是图形管道的一部分,其可见的副作用是通过更改图像、存储缓冲区和原子计数器。

计算着色器对一组称为工作组(workgroup)的工作项(work items)进行操作。工作组是一组着色器调用,它们可能并行执行相同的代码。工作组内的调用可以通过共享变量与同一工作组的其他成员共享数据,并发出内存和控制流屏障(issue memory and control flow barriers),以与同一工作组的其他成员同步。

补充说明

面片(patch):最基本的面片(也叫“补丁”)是平面三角形区域,我们通常说的面片也就是三角形面片。(如果一个多边形在同一平面,则多边形区域也是一个面片。)

图元(primitive):OpenGL认为,所有物体都是由点、线、多边形构成的;点、线、多边形就被称为图元。

OpenGL一共定义了10种图元:
在这里插入图片描述

片段(fragment):二维图象上每个像素点都包含了位置、颜色、深度等信息;该点和相关信息一起就叫做一个片段(也叫“片元”)。片段和像素两者的直观印象都是像素,但片段比像素多了许多信息。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:59:49  更:2022-03-30 19:05:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 17:47:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码