gpt4 book ai didi

c++ - DirectX 9 HLSL 与 DirectX 10 HLSL : syntax the same?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:02 26 4
gpt4 key购买 nike

在过去一个月左右的时间里,我一直在努力学习 DirectX。所以我一直在 DirectX 9 和 10 之间来回混合。我在两者中看到的主要变化之一是如何在显卡中处理 vector 。

我注意到的一个重大变化是您如何让 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)。但确实存在明显的差异:

显着差异:

  • 要将常量传递给着色器,您现在必须经过常量缓冲区。

  • 通用着色器核心:所有类型着色器可以访问同一组内在函数(有一些异常(exception),例如 GS 阶段)。整数和按位运算现在完全符合 IEEE(而不是通过浮点模拟)。您现在可以访问二进制转换,将 int 解释为 float,将 float 解释为 uint 等。

  • 纹理和采样器已分离。您现在使用语法 g_myTexture.Sample( g_mySampler, texCoord )而不是 tex2D( g_mySampledTexture, texCoord )

  • 缓冲区:一种使用新的 Object.Load 函数以随机访问方式访问不需要过滤的数据的新型资源。

  • 系统值语义:POSITIONDEPTHCOLOR 语义的概括和扩展,现在是 SV_PositionSV_DepthSV_Target 并为每个阶段添加新语义,例如 SV_InstanceIDSV_VertexId 等.

这就是我目前看到的全部内容。如果我想到什么新东西,我会更新我的答案。

关于c++ - DirectX 9 HLSL 与 DirectX 10 HLSL : syntax the same?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2853997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com