假设我有一个模型。该模型具有位置、颜色、法线和 2 个纹理坐标的数据。现在假设我有一个输入类型仅为位置和颜色的着色器。但是,此模型的顶点缓冲区格式为:
struct Vertex_PCNT2
{
D3DXVECTOR3 position;
D3DXVECTOR4 color;
D3DXVECTOR3 normal;
D3DXVECTOR2 tex1;
D3DXVECTOR2 tex2;
};
尽管这个模型中有关于获取位置和颜色的着色器的信息,但我不能使用它,因为有多余的数据。我能想到的唯一其他解决方案是拥有多个具有相同信息的顶点缓冲区减去几个字段,但这只是多余的。必须有更好的方法。这里有什么帮助吗?
编辑:我想我会在工作前的一段时间内详细说明我的问题。在谈论顶点缓冲区时,我指的是您使用 ID3D11Device::CreateBuffer 创建的 ID3D11Buffer *。在此之前,我用 Vertex_PCNT2 类型填充顶点数组。据我所知,该缓冲区现在永久采用这种格式,因此所有着色器都必须使用这种格式。当数据已经存在时,设置其他缓冲区只会对 ram 造成压力。