在过去一个月左右的时间里,我一直在努力学习DirectX。 所以我一直在DirectX 9和10之间来回混音。我在两者中看到的一个主要变化是如何在图形卡中处理矢量。
我注意到的一个重大变化是你如何让GPU识别你的结构。 在DirectX 9中,您可以定义灵活顶点格式。
您的典型设置如下:
#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
在DirectX 10中,我相信等效的是输入顶点描述:
D3D10_INPUT_ELEMENT_DESC layout[] = { {"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT, 0 , 0, D3D10_INPUT_PER_VERTEX_DATA, 0}, {"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT, 0 , 12, D3D10_INPUT_PER_VERTEX_DATA, 0} };
我在DirectX 10中注意到它更具描述性。 除此之外,还有一些重大变化,HLSL语法是否相同?
我想说在DX9和DX10(以及扩展DX11)之间的HLSL语法本身没有根本的变化。
正如codeka所说,变化更多的是清理API和走向泛化的道路(为了GPGPU)。 但确实有明显的差异:
明显的差异:
这就是我现在所看到的一切。 如果有什么新东西突然出现,我会更新我的答案。
我在DX9和DX10之间注意到的最大变化是,在DX10下你需要设置一个整个渲染块,在DX9中你可以改变各个状态。 这有点破坏了我的架构,因为我更依赖于能够进行一些小改动并使所有其他状态保持不变(当你从着色器设置状态时,这只会成为一个问题)。
另一个重大变化是DX10顶点声明与编译着色器(在CreateInputLayout中)相关联。 在DX9下,情况并非如此。 您只需设置声明并设置着色器。 在DX10下,您需要创建着色器,然后创建附加到给定着色器的输入布局。
正如codeka所指出的那样,D3DVERTEXELEMENT9一直是推出着色器签名的方法,因为引入了DX9。 FVF已经折旧,通过FVF,您无法执行设置切线基础的操作。 顶点表示function远远强大,不会让您固定到布局。 您可以将顶点元素放在任何您喜欢的位置。
如果您想了解有关DX9输入布局的更多信息,那么我建议您从MSDN开始。
FVF(有点)不赞成D3DVERTEXELEMENT9 (又名顶点声明 ) – 它与D3D10_INPUT_ELEMENT_DESC
非常相似 – 无论如何。 实际上,DirectX 10中的大多数内容与DirectX 9中的内容非常相似,而不是固定function管道 。
DirectX9和DirectX10之间的最大变化是API的清理(在关注点的分离方面,使得管道的哪个阶段更加清晰等等)。
以上就是c/c++开发分享DirectX 9 HLSL与DirectX 10 HLSL:语法相同吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560285.html