引擎中的一些dynamic mesh在GForce 440MX上显示不正常,draw call全都返回成功,DX没有任何debug信息。经过仔细观察,发现主要是贴图坐标不对。在确认了uv transform,uv index等都没问题之后,开始怀疑顶点格式的问题。这些mesh都使用了下面这种顶点格式:
struct vert_ptd
{
vector3 pos;
vector2 uv;
DWORD diffuse;
};
把此顶点格式改为:
struct vert_pdt
{
vector3 pos;
DWORD diffuse;
vector2 uv;
};
并相应的修改了vertex declaration之后显示正常了——,@_@|||
初看上去有些诡异,仔细一想应该是由于GeForce MX440只支持fixed function pipeline的原因,因为老的FVF对顶点元素是有顺序要求的!看来如果想兼容老显卡,在顶点格式方面必须小心啦!
【下图来自dx8.1sdk文档】