wine/dlls/wined3d vertexdeclaration.c
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Nov 28 05:02:40 CST 2005
ChangeSet ID: 21467
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/28 05:02:40
Modified files:
dlls/wined3d : vertexdeclaration.c
Log message:
Oliver Stieber <oliver_stieber at yahoo.co.uk>
Correct some errors in the way vertex declarations for directx 8 are
parsed and add offset support.
Patch: http://cvs.winehq.org/patch.py?id=21467
Old revision New revision Changes Path
1.12 1.13 +19 -14 wine/dlls/wined3d/vertexdeclaration.c
Index: wine/dlls/wined3d/vertexdeclaration.c
diff -u -p wine/dlls/wined3d/vertexdeclaration.c:1.12 wine/dlls/wined3d/vertexdeclaration.c:1.13
--- wine/dlls/wined3d/vertexdeclaration.c:1.12 28 Nov 2005 11: 2:40 -0000
+++ wine/dlls/wined3d/vertexdeclaration.c 28 Nov 2005 11: 2:40 -0000
@@ -270,25 +270,26 @@ IWineD3DVertexDeclarationImpl *This = (I
DWORD tokenlen;
DWORD tokentype;
DWORD nTokens = 0;
+ DWORD offset = 0;
D3DVERTEXELEMENT9 convTo9[128];
/* TODO: find out where rhw (or positionT) is for declaration8 */
Decl8to9Lookup decl8to9Lookup[MAX_D3DVSDE];
MAKE_LOOKUP(D3DVSDE_POSITION, D3DDECLUSAGE_POSITION, 0);
MAKE_LOOKUP(D3DVSDE_POSITION2, D3DDECLUSAGE_POSITION, 1);
MAKE_LOOKUP(D3DVSDE_BLENDWEIGHT, D3DDECLUSAGE_BLENDWEIGHT, 0);
- MAKE_LOOKUP(D3DVSDE_BLENDINDICES, D3DDECLUSAGE_BLENDWEIGHT, 0);
+ MAKE_LOOKUP(D3DVSDE_BLENDINDICES, D3DDECLUSAGE_BLENDINDICES, 0);
MAKE_LOOKUP(D3DVSDE_NORMAL, D3DDECLUSAGE_NORMAL, 0);
MAKE_LOOKUP(D3DVSDE_NORMAL2, D3DDECLUSAGE_NORMAL, 1);
MAKE_LOOKUP(D3DVSDE_DIFFUSE, D3DDECLUSAGE_COLOR, 0);
MAKE_LOOKUP(D3DVSDE_SPECULAR, D3DDECLUSAGE_COLOR, 1);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD0, D3DDECLUSAGE_BLENDWEIGHT, 0);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD1, D3DDECLUSAGE_BLENDWEIGHT, 1);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD2, D3DDECLUSAGE_BLENDWEIGHT, 2);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD3, D3DDECLUSAGE_BLENDWEIGHT, 3);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD4, D3DDECLUSAGE_BLENDWEIGHT, 4);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD5, D3DDECLUSAGE_BLENDWEIGHT, 5);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD6, D3DDECLUSAGE_BLENDWEIGHT, 6);
- MAKE_LOOKUP(D3DVSDE_TEXCOORD7, D3DDECLUSAGE_BLENDWEIGHT, 7);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD0, D3DDECLUSAGE_TEXCOORD, 0);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD1, D3DDECLUSAGE_TEXCOORD, 1);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD2, D3DDECLUSAGE_TEXCOORD, 2);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD3, D3DDECLUSAGE_TEXCOORD, 3);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD4, D3DDECLUSAGE_TEXCOORD, 4);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD5, D3DDECLUSAGE_TEXCOORD, 5);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD6, D3DDECLUSAGE_TEXCOORD, 6);
+ MAKE_LOOKUP(D3DVSDE_TEXCOORD7, D3DDECLUSAGE_TEXCOORD, 7);
#undef MAKE_LOOKUP
TRACE("(%p) : pDecl(%p)\n", This, pDecl);
@@ -299,11 +300,12 @@ IWineD3DVertexDeclarationImpl *This = (I
tokentype = ((token & D3DVSD_TOKENTYPEMASK) >> D3DVSD_TOKENTYPESHIFT);
if (D3DVSD_TOKEN_STREAM == tokentype && 0 == (D3DVSD_STREAMTESSMASK & token)) {
- /**
- * how really works streams,
- * in DolphinVS dx8 dsk sample they seems to decal reg numbers !!!
- */
- stream = ((token & D3DVSD_STREAMNUMBERMASK) >> D3DVSD_STREAMNUMBERSHIFT);
+ /**
+ * how really works streams,
+ * in DolphinVS dx8 dsk sample they seems to decal reg numbers !!!
+ */
+ stream = ((token & D3DVSD_STREAMNUMBERMASK) >> D3DVSD_STREAMNUMBERSHIFT);
+ offset = 0;
} else if (D3DVSD_TOKEN_STREAMDATA == tokentype && 0 == (0x10000000 & tokentype)) {
DWORD type = ((token & D3DVSD_DATATYPEMASK) >> D3DVSD_DATATYPESHIFT);
@@ -314,6 +316,8 @@ IWineD3DVertexDeclarationImpl *This = (I
convTo9[nTokens].Usage = decl8to9Lookup[reg].usage;
convTo9[nTokens].UsageIndex = decl8to9Lookup[reg].usageIndex;
convTo9[nTokens].Type = type;
+ convTo9[nTokens].Offset = offset;
+ offset += glTypeLookup[type][1] * glTypeLookup[type][4];
++nTokens;
}/* TODO: Constants. */
len += tokenlen;
@@ -325,6 +329,7 @@ IWineD3DVertexDeclarationImpl *This = (I
convTo9[nTokens].Stream = 0xFF;
convTo9[nTokens].Type = D3DDECLTYPE_UNUSED;
+ ++nTokens;
/* compute size */
This->declaration8Length = len * sizeof(DWORD);
More information about the wine-cvs
mailing list