操作系统:Windows8.1

显卡:Nivida GTX965M

开发工具:Visual Studio 2017


Introduction

通过接下来的章节,我们将会开启有关图形管线的话题,通过对图形渲染管线的配置完成最后的三角形绘画。所谓图形管线就是将mesh使用到的vertices定点数据和贴图数据,转化为渲染targets像素的操作序列。简要的概述如下图所示:

Input assembler收集最原始的顶点数据,并且还可以使用索引缓冲区复用这些数据元素,而不必复制冗余的顶点数据副本。

vertex shader会应用在每一个顶点数据,通常应用变换操作,从而将顶点的位置坐标数据从模型空间转换为屏幕空间。在处理完毕之后会将数据继续在管线传递下去。

tessellation shader曲面着色器允许基于某些规则进一步细分几何数据增加网格的质量。经常应用与墙面和楼梯表面,使附近看起来不是那么平坦。

geometry shader集合着色器应用在每一个图元上,可用于增减图元,它与曲面着色器类似,但更加灵活。然而,它在今天的应用中并没有太多的应用情景,因为除了Intel的集成显卡外,大多数显卡性能支持都不理想。

光栅化阶段将图元分解为片元。这些是填充在帧缓冲区上的像素元素。屏幕外区域的片元会被丢弃,顶点着色器输出的数据在传递到片元着色器的过程中会进行内插值,如图所示。除此之外,根据深度测试的结果也会对片元进行丢弃。

fragment shader应用于每个片元,确定每个帧缓冲区中写入的片元数据的颜色和深度值。片元着色器可以使用顶点着色器的插值数据,贴图的UV坐标和光源法线数据。

混色操作阶段会对不同片元的颜色进行混合,最终映射到帧缓冲区的同一个像素上。片元也可以简单的互相重写,叠加或者根据透明度混合。

绿色的阶段被称为固定流水线。这个阶段允许使用自定义的参数数值,但是它内部的工作逻辑是预制好的。

橙色的阶段被称为可编程阶段programmable,我们可以向GPU提交自己编写的代码执行具体的逻辑。比如在使用fragment shader的时候,可以实现任何从贴图到灯光的光线追踪。这些程序同时运行在多核GPU上处理许多对象,比如并行的顶点和片段程序。

如果之前使用过旧的API(OpenGL和Direct3D),那么将可以随意通过glBlendFuncOMSetBlendState调用更改管线设置。Vulkan中的图形管线几乎不可改变,因此如果需要更改着色器,绑定到不同的帧缓冲区或者更改混合函数,则必须从头创建管线。缺点是必须创建一些管线,这些管线代表在渲染操作中使用的不同的组合状态。但是由于所有管线的操作都是提前知道的,所以可以通过驱动程序更好的优化它。

一些可编程阶段是基于打算做什么而决定的。比如,如果只是简单的绘制几何图形,则可以禁用tessellation和geometry着色器。如果只对深度值感兴趣,则可以禁用fragment着色器,这对于生成shadow map生成很有用。

在下一个章节中,我们首先创建将三角形放在屏幕上所需要的两个可编程阶段:vertice shader和fragment shader。固定功能的设置包括blending mode, viewport, rasterization将在之后的章节中设置。在Vulkan中设置图形流水线的最后一部分内容涉及输入和输出帧缓冲区。

initVulkan中创建函数createGraphicsPipeline并在createImageViews后立即调用。我们在下一章节介绍函数功能。

void initVulkan() {
createInstance();
setupDebugCallback();
createSurface();
pickPhysicalDevice();
createLogicalDevice();
createSwapChain();
createImageViews();
createGraphicsPipeline();
} ... void createGraphicsPipeline() { }

在结尾处分享一下Vulkan官方的图形管线结构图,如下:

项目代码 GitHub地址。

Vulkan Tutorial 10 图形管线的更多相关文章

  1. [译]Vulkan教程(10)交换链

    [译]Vulkan教程(10)交换链 Vulkan does not have the concept of a "default framebuffer", hence it r ...

  2. OpenGL图形管线和坐标变换[转]

    1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Transformation).做个比 ...

  3. OpenGL图形管线和坐标变换

    转:http://blog.csdn.net/zhulinpptor/article/details/5897102 1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(Mo ...

  4. Vulkan Tutorial 11 Shader modules

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 与之前的图像API不同,Vulkan中的着色器代码必须以二进制字节码的格式使用,而不 ...

  5. Vulkan Tutorial 12 Fixed functions

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 早起的图形API在图形渲染管线的许多阶段提供了默认的状态.在Vulkan中,从vie ...

  6. Vulkan Tutorial 13 Render passes

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Setup 在我们完成管线的创建工作,我们接下来需要告诉Vulkan渲染时候使用的f ...

  7. Vulkan Tutorial 14 Integration pipeline

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 我们现在整合前几章节的结构体和对象创建图形管线!以下是我们现在用到的对象类型,作为一 ...

  8. Vulkan Tutorial 16 Command buffers

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 诸如绘制和内存操作相关命令,在Vulkan中不是通过函数直接调用的.我们需要在命令缓 ...

  9. Vulkan Tutorial 17 Rendering and presentation

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Setup 这一章节会把之前的所有内容进行整合.我们将会编写drawFrame函数, ...

随机推荐

  1. docker-web管理工具实验

    工具名称 共有功能 备注 UCP   官方.收费 portainer 镜像库 容器管理   rancher   shipyard   kubernetes     (上诉部署都基于linux) UCP ...

  2. L125

    The United States Senate (参议院)has taken the first step toward ending President Barack Obama's health ...

  3. IE中iframe兼容性问题

    在使用iframe的时候,有时候想要让调用的iframe框架里面的不显示白背景,让它变得透明,在firefox是透明的,但是在IE浏览器却不透明. 这个其实比较容易解决,只需要增加一个属性即可. 就是 ...

  4. java中常用的帮助类。加快开发速度

    数据库帮助类 package com.cwnu.uitl; import java.sql.*; /** * 数据库基础操作实现类 * * @author BlackWinter * * @date ...

  5. 关于htonl()

    htons #include <arpa/inet.h> uint16_t htons(uint16_t hostshort); htons的功能:                     ...

  6. 请求URL中有body怎么使用jmeter进行接口测试

    业务场景: 微信内免费领取激活码 1.点击“免费领取”按钮调取的接口 2.URL如下 https://yxyapi2.drcuiyutao.com/yxy-api-gateway/api/json/v ...

  7. linux 备份svn

    下面具体描述备份的方法: =============== 1.svnadmin dump备份工具 ------------------------     这是subversion官方推荐的备份方式. ...

  8. linux学习 XShell上传、下载本地文件到linux服务器

    (一)通过命令行的方式 1.linux服务器端设置 在linux主机上,安装上传下载工具包rz及sz; 如果不知道你要安装包的具体名称,可以使用yum provides */name 进行查找系统自带 ...

  9. C++多态技术

    转自:    http://blog.sciencenet.cn/blog-58025-691458.html 摘要 本文介绍了C++中的各种多态性,重点阐述了面向对象的动态多态和基于模板的静态多态, ...

  10. Windows 7 中的 God Mode

    Windows 7系统中隐藏了一个秘密的“God Mode”,字面上译为“上帝模式”,但似乎叫它“万能模式”更贴切一些.God Mode其实就是一个简单的文件夹窗口,但包含了几乎所有Windows 7 ...