在 Direct3D12 中使用 Stream Output

本文详细介绍了在Direct3D12中使用Stream Output功能进行Skining Animation的优化,通过对比D3D11和D3D12的差异,分析了在D3D12中创建Graphics Pipeline State时遇到的错误,并提供了解决方案,强调了Shader输出Semantic的一致性和无Geometry Shader时的处理方式。
摘要由CSDN通过智能技术生成

一. 引子

从 DirectX10 开始 Direct3D 引入了 Stream Output 功能(下称 SO ),它能利用 GPU 进行一些模型操作,其中利用 SO 受益最大的就是 Skinning Animation。在没有 SO 之前蒙皮动画要不就是由 CPU 完成,要不就是每次渲染的时候都需要重新做一次蒙皮,这在多光源光照渲染 Shadow Map 中是非常耗时的,引入 SO 之后只要进行一次蒙皮动画所得到的 Vertex Buffer 可以重用,这样既节省了 CPU 又获得了 GPU 加速。

二.一切从 CreateGeometryShaderWithStreamOutput 说起

1. D3D11 / D3D10 与 Stream Output

D3D10 和 D3D11 使用 SO 的时候需要调用 CreateGeometryShaderWithStreamOutput 函数。虽然看函数名这个函数是要创建一个 Geometry Shader(下称 GS ),但是在实际使用的时候并不一定需要给出 GS 的 Binary Code。像 Skinning 这种操作实际上只需要在 Vertex Shader(下称 VS ) 中就能完成,根本不需要 GS。在调用 CreateGeometryShaderWithStreamOutput 的时候 pShaderBytecode 参数给的是 VS 的 Binary Code,创建好的 ID3D11GeometryShader 对象其实并没有实际代码,只是用来对应 SO 之后数据输出的信息。
把 VB / IB / VS / GS 设置进渲染管

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值