DirectX 11 学习笔记-02【输入装配/图元拓扑/缓冲区与资源】

本文详细介绍了DirectX 11中输入装配阶段,包括顶点缓冲区、输入布局和顶点数据结构。接着讲解了图元拓扑的重要性,如何指定图元拓扑类型,以及常用图元拓扑如三角形列表。最后讨论了缓冲区的创建和资源管理,特别是资源间的拷贝和性能问题,如避免CPU与GPU的竞争。
摘要由CSDN通过智能技术生成

目录

 

输入装配阶段 

图元拓扑

创建缓冲区

资源间的拷贝与性能问题

参考


输入装配阶段 

程序生成的场景数据,本质上是一系列的几何图元。我们需要以一定的方式将这些图元绑定到图形管线中,并经过一系列的阶段,最终显示在屏幕内。渲染管线的第一阶段是输入装配阶段,这一阶段从内存中读取几何数据并将这些数据组合为几何图元。 

顶点作为一个基本的图元,三个顶点可以组成一个三角形,两个顶点可以组成一条直线。在DirectX中,我们通过顶点缓冲区这一数据结构将顶点数据绑定到图形管线中。 

顶点中除了基本的空间位置信息外,还可以包含各种附加属性,例如颜色和法线向量。因此在向管线中绑定顶点信息之前,我们必须告诉管线我们的顶点数据的形式,里面包含的各个数据的意义。 

定义顶点结构体后,我们必须使用输入布局(ID3D11InputLayout)将顶点的描述信息告诉D3D。输入布局中,语义名(SemanticName)/语义索引(SemanticIndex)用于将顶点结构体中的元素映射为顶点着色器参数,格式(Format)描述了元素的格式,InputSlot指定了当前元素来自于哪个输入槽,AlignedByteOffset表示从顶点结构体的起始位置到顶点元素的起始位置之间的字节偏移量。此外还有InputSlotClass和InstanceDataStepRate两个参数。 

有关InputSlot,这里需要一提Interleaved Buffer和Separate Buffer。

将所有的顶点数据(position, normal, uv...)放在同一个buffer中称为Interleaved Buffer,这种情况下一般我们只需要一个InputSlot,而将顶点数据分别存放到不同的buffer中则称为Separate Buffer,此时需要使用多个Inputslot(Directx 11 最多支持16个Inputslot)。从局部性原理很容易理解两者的差别,在Interleaved Buffer中的每一个顶点,其中的数据都是连续的。对顶点着色器而言,我们只需要访问当前顶点的数据即可,所以这种情况下,GPU处理顶点的效率会更高,因为访问速度更快。而另一种情况下,GPU的访问效率会略微降低,但对CPU来说,每种类型的数据数组都是连续的,所以处理起来反而可能会更快。另外,某些情况下对不同的着色器,需要的顶点数据可能是不同的,例如某个着色器只需要position信息,如果使用的是Interleaved Buffer,那么就需要把一系列不需要的信息也一同拷贝过去,但如果是Separate Buffer,那么就只需要装载需要的信息即可。

总之两种情况下都有各自的优缺点,所以通常不用太在意使用哪种方法,当出现性能问题时做性能分析再确定是否存在问题即可。

图元拓扑

现在图形管线知道如何处理每一个顶点,但对于一系列顶点,管线仍然不知道如何解释它们,它们到底是一组三角形,还是一组直线,又或者只是几个点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值