|
在sdk doc里面关于Stream的说明(Programmable Stream Model )有这样一段:
///////////////////////////////////////////////////////////////////////////////////////
// 各个流的顶点格式
// multistream vertex
// stream 0, pos, diffuse, specular
struct POSCOLORVERTEX
{
FLOAT x, y, z;
DWORD diffColor, specColor;
};
#define D3DFVF_POSCOLORVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_SPECULAR)
// stream 1, tex coord 0
struct TEXC0VERTEX
{
FLOAT tu1, tv1;
};
#define D3DFVF_TEXC0VERTEX (D3DFVF_TEX1)
// stream 2, tex coord 1
struct TEXC1VERTEX
{
FLOAT tu2, tv2;
};
#define D3DFVF_TEXC1VERTEX (D3DFVF_TEX0)
// *** 以下是用于CreateVertexDeclation的D3DVERTEXELEMENT9 ***
// multitexture - multistream
D3DVERTEXELEMENT9 dwDecl3[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_D3DCOLOR, 3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_COLOR, 0 },
{ 0, 28, D3DDECLTYPE_D3DCOLOR, 3DDECLMETHOD_DEFAULT,
/** ~~diffColor offset=28 *****/
D3DDECLUSAGE_COLOR, 1 },
{ 1, 36, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT,
/** ~~ specColor offset=36 *****/
D3DDECLUSAGE_TEXCOORD, 0 },
{ 2, 44, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};
///////////////////////////////////////////////////////////////////////////////////////////
不明白的是关于diffColor, specColor在D3DVERTEXELEMENT9中offset的确定。他们都是DWORD类型的,但是在D3DVERTEXELEMENT9中的offset却不一样。因为offset是从开头累计的,这样算来,diffColor占用了28-12=16byte的空间,而specColor则占用了36-28=8byte的空间,但是他们都是DWORD啊,应该各都用4byte才对啊。我说的对么?是sdk的文档错了么?搞不明白。
|
|