wined3d: Add D3DFVF codes to the WINED3D namespace.
This commit is contained in:
parent
dd6c4c6800
commit
875a1eb02d
|
@ -666,7 +666,7 @@ static void CreateVBO(IWineD3DVertexBufferImpl *object) {
|
|||
* usage assume DYNAMIC usage and print a warning. The app will have to update
|
||||
* the vertices regularily for them to be useful
|
||||
*/
|
||||
if(((object->fvf & D3DFVF_POSITION_MASK) == D3DFVF_XYZRHW) &&
|
||||
if(((object->fvf & WINED3DFVF_POSITION_MASK) == WINED3DFVF_XYZRHW) &&
|
||||
!(vboUsage & WINED3DUSAGE_DYNAMIC)) {
|
||||
WARN("Application creates a vertex buffer holding transformed vertices which doesn't specify dynamic usage\n");
|
||||
vboUsage |= WINED3DUSAGE_DYNAMIC;
|
||||
|
@ -753,7 +753,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *ifac
|
|||
* There is a IDirect3DVertexBuffer7::Optimize call after which the buffer can't be locked any
|
||||
* more. In this call we can convert dx7 buffers too.
|
||||
*/
|
||||
conv = ((FVF & D3DFVF_POSITION_MASK) == D3DFVF_XYZRHW ) || (FVF & (D3DFVF_DIFFUSE | D3DFVF_SPECULAR));
|
||||
conv = ((FVF & WINED3DFVF_POSITION_MASK) == WINED3DFVF_XYZRHW ) || (FVF & (WINED3DFVF_DIFFUSE | WINED3DFVF_SPECULAR));
|
||||
if( GL_SUPPORT(ARB_VERTEX_BUFFER_OBJECT) && Pool != WINED3DPOOL_SYSTEMMEM && !(Usage & WINED3DUSAGE_DYNAMIC) &&
|
||||
(dxVersion > 7 || !conv) ) {
|
||||
CreateVBO(object);
|
||||
|
@ -5092,11 +5092,11 @@ process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIndex, DWORD dwCo
|
|||
BOOL doClip;
|
||||
int numTextures;
|
||||
|
||||
if (SrcFVF & D3DFVF_NORMAL) {
|
||||
if (SrcFVF & WINED3DFVF_NORMAL) {
|
||||
WARN(" lighting state not saved yet... Some strange stuff may happen !\n");
|
||||
}
|
||||
|
||||
if ( (SrcFVF & D3DFVF_POSITION_MASK) != D3DFVF_XYZ) {
|
||||
if ( (SrcFVF & WINED3DFVF_POSITION_MASK) != WINED3DFVF_XYZ) {
|
||||
ERR("Source has no position mask\n");
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
|
@ -5204,13 +5204,13 @@ process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIndex, DWORD dwCo
|
|||
multiply_matrix(&mat,&view_mat,&world_mat);
|
||||
multiply_matrix(&mat,&proj_mat,&mat);
|
||||
|
||||
numTextures = (DestFVF & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT;
|
||||
numTextures = (DestFVF & WINED3DFVF_TEXCOUNT_MASK) >> WINED3DFVF_TEXCOUNT_SHIFT;
|
||||
|
||||
for (i = 0; i < dwCount; i+= 1) {
|
||||
unsigned int tex_index;
|
||||
|
||||
if ( ((DestFVF & D3DFVF_POSITION_MASK) == D3DFVF_XYZ ) ||
|
||||
((DestFVF & D3DFVF_POSITION_MASK) == D3DFVF_XYZRHW ) ) {
|
||||
if ( ((DestFVF & WINED3DFVF_POSITION_MASK) == WINED3DFVF_XYZ ) ||
|
||||
((DestFVF & WINED3DFVF_POSITION_MASK) == WINED3DFVF_XYZRHW ) ) {
|
||||
/* The position first */
|
||||
float *p =
|
||||
(float *) (((char *) lpStrideData->u.s.position.lpData) + i * lpStrideData->u.s.position.dwStride);
|
||||
|
@ -5306,7 +5306,7 @@ process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIndex, DWORD dwCo
|
|||
|
||||
dest_ptr += 3 * sizeof(float);
|
||||
|
||||
if((DestFVF & D3DFVF_POSITION_MASK) == D3DFVF_XYZRHW) {
|
||||
if((DestFVF & WINED3DFVF_POSITION_MASK) == WINED3DFVF_XYZRHW) {
|
||||
dest_ptr += sizeof(float);
|
||||
}
|
||||
|
||||
|
@ -5319,16 +5319,16 @@ process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIndex, DWORD dwCo
|
|||
|
||||
dest_conv += 3 * sizeof(float);
|
||||
|
||||
if((DestFVF & D3DFVF_POSITION_MASK) == D3DFVF_XYZRHW) {
|
||||
if((DestFVF & WINED3DFVF_POSITION_MASK) == WINED3DFVF_XYZRHW) {
|
||||
dest_conv += sizeof(float);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (DestFVF & D3DFVF_PSIZE) {
|
||||
if (DestFVF & WINED3DFVF_PSIZE) {
|
||||
dest_ptr += sizeof(DWORD);
|
||||
if(dest_conv) dest_conv += sizeof(DWORD);
|
||||
}
|
||||
if (DestFVF & D3DFVF_NORMAL) {
|
||||
if (DestFVF & WINED3DFVF_NORMAL) {
|
||||
float *normal =
|
||||
(float *) (((float *) lpStrideData->u.s.normal.lpData) + i * lpStrideData->u.s.normal.dwStride);
|
||||
/* AFAIK this should go into the lighting information */
|
||||
|
@ -5339,7 +5339,7 @@ process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIndex, DWORD dwCo
|
|||
}
|
||||
}
|
||||
|
||||
if (DestFVF & D3DFVF_DIFFUSE) {
|
||||
if (DestFVF & WINED3DFVF_DIFFUSE) {
|
||||
DWORD *color_d =
|
||||
(DWORD *) (((char *) lpStrideData->u.s.diffuse.lpData) + i * lpStrideData->u.s.diffuse.dwStride);
|
||||
if(!color_d) {
|
||||
|
@ -5369,7 +5369,7 @@ process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIndex, DWORD dwCo
|
|||
}
|
||||
}
|
||||
|
||||
if (DestFVF & D3DFVF_SPECULAR) {
|
||||
if (DestFVF & WINED3DFVF_SPECULAR) {
|
||||
/* What's the color value in the feedback buffer? */
|
||||
DWORD *color_s =
|
||||
(DWORD *) (((char *) lpStrideData->u.s.specular.lpData) + i * lpStrideData->u.s.specular.dwStride);
|
||||
|
|
|
@ -487,18 +487,18 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
int numTextures;
|
||||
int textureNo;
|
||||
int coordIdxInfo = 0x00; /* Information on number of coords supplied */
|
||||
int numCoords[8]; /* Holding place for D3DFVF_TEXTUREFORMATx */
|
||||
int numCoords[8]; /* Holding place for WINED3DFVF_TEXTUREFORMATx */
|
||||
|
||||
/* Either 3 or 4 floats depending on the FVF */
|
||||
/* FIXME: Can blending data be in a different stream to the position data?
|
||||
and if so using the fixed pipeline how do we handle it */
|
||||
if (thisFVF & D3DFVF_POSITION_MASK) {
|
||||
if (thisFVF & WINED3DFVF_POSITION_MASK) {
|
||||
strided->u.s.position.lpData = data;
|
||||
strided->u.s.position.dwType = WINED3DDECLTYPE_FLOAT3;
|
||||
strided->u.s.position.dwStride = stride;
|
||||
strided->u.s.position.VBO = streamVBO;
|
||||
data += 3 * sizeof(float);
|
||||
if (thisFVF & D3DFVF_XYZRHW) {
|
||||
if (thisFVF & WINED3DFVF_XYZRHW) {
|
||||
strided->u.s.position.dwType = WINED3DDECLTYPE_FLOAT4;
|
||||
strided->u.s.position_transformed = TRUE;
|
||||
data += sizeof(float);
|
||||
|
@ -508,10 +508,10 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
|
||||
/* Blending is numBlends * FLOATs followed by a DWORD for UBYTE4 */
|
||||
/** do we have to Check This->stateBlock->renderState[D3DRS_INDEXEDVERTEXBLENDENABLE] ? */
|
||||
numBlends = 1 + (((thisFVF & D3DFVF_XYZB5) - D3DFVF_XYZB1) >> 1);
|
||||
if(thisFVF & D3DFVF_LASTBETA_UBYTE4) numBlends--;
|
||||
numBlends = 1 + (((thisFVF & WINED3DFVF_XYZB5) - WINED3DFVF_XYZB1) >> 1);
|
||||
if(thisFVF & WINED3DFVF_LASTBETA_UBYTE4) numBlends--;
|
||||
|
||||
if ((thisFVF & D3DFVF_XYZB5 ) > D3DFVF_XYZRHW) {
|
||||
if ((thisFVF & WINED3DFVF_XYZB5 ) > WINED3DFVF_XYZRHW) {
|
||||
TRACE("Setting blend Weights to %p\n", data);
|
||||
strided->u.s.blendWeights.lpData = data;
|
||||
strided->u.s.blendWeights.dwType = WINED3DDECLTYPE_FLOAT1 + numBlends - 1;
|
||||
|
@ -519,7 +519,7 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
strided->u.s.blendWeights.VBO = streamVBO;
|
||||
data += numBlends * sizeof(FLOAT);
|
||||
|
||||
if (thisFVF & D3DFVF_LASTBETA_UBYTE4) {
|
||||
if (thisFVF & WINED3DFVF_LASTBETA_UBYTE4) {
|
||||
strided->u.s.blendMatrixIndices.lpData = data;
|
||||
strided->u.s.blendMatrixIndices.dwType = WINED3DDECLTYPE_UBYTE4;
|
||||
strided->u.s.blendMatrixIndices.dwStride= stride;
|
||||
|
@ -529,7 +529,7 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
}
|
||||
|
||||
/* Normal is always 3 floats */
|
||||
if (thisFVF & D3DFVF_NORMAL) {
|
||||
if (thisFVF & WINED3DFVF_NORMAL) {
|
||||
strided->u.s.normal.lpData = data;
|
||||
strided->u.s.normal.dwType = WINED3DDECLTYPE_FLOAT3;
|
||||
strided->u.s.normal.dwStride = stride;
|
||||
|
@ -538,7 +538,7 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
}
|
||||
|
||||
/* Pointsize is a single float */
|
||||
if (thisFVF & D3DFVF_PSIZE) {
|
||||
if (thisFVF & WINED3DFVF_PSIZE) {
|
||||
strided->u.s.pSize.lpData = data;
|
||||
strided->u.s.pSize.dwType = WINED3DDECLTYPE_FLOAT1;
|
||||
strided->u.s.pSize.dwStride = stride;
|
||||
|
@ -547,7 +547,7 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
}
|
||||
|
||||
/* Diffuse is 4 unsigned bytes */
|
||||
if (thisFVF & D3DFVF_DIFFUSE) {
|
||||
if (thisFVF & WINED3DFVF_DIFFUSE) {
|
||||
strided->u.s.diffuse.lpData = data;
|
||||
strided->u.s.diffuse.dwType = WINED3DDECLTYPE_SHORT4;
|
||||
strided->u.s.diffuse.dwStride = stride;
|
||||
|
@ -556,7 +556,7 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
}
|
||||
|
||||
/* Specular is 4 unsigned bytes */
|
||||
if (thisFVF & D3DFVF_SPECULAR) {
|
||||
if (thisFVF & WINED3DFVF_SPECULAR) {
|
||||
strided->u.s.specular.lpData = data;
|
||||
strided->u.s.specular.dwType = WINED3DDECLTYPE_SHORT4;
|
||||
strided->u.s.specular.dwStride = stride;
|
||||
|
@ -565,14 +565,14 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
}
|
||||
|
||||
/* Texture coords */
|
||||
numTextures = (thisFVF & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT;
|
||||
coordIdxInfo = (thisFVF & 0x00FF0000) >> 16; /* 16 is from definition of D3DFVF_TEXCOORDSIZE1, and is 8 (0-7 stages) * 2bits long */
|
||||
numTextures = (thisFVF & WINED3DFVF_TEXCOUNT_MASK) >> WINED3DFVF_TEXCOUNT_SHIFT;
|
||||
coordIdxInfo = (thisFVF & 0x00FF0000) >> 16; /* 16 is from definition of WINED3DFVF_TEXCOORDSIZE1, and is 8 (0-7 stages) * 2bits long */
|
||||
|
||||
/* numTextures indicates the number of texture coordinates supplied */
|
||||
/* However, the first set may not be for stage 0 texture - it all */
|
||||
/* depends on WINED3DTSS_TEXCOORDINDEX. */
|
||||
/* The number of bytes for each coordinate set is based off */
|
||||
/* D3DFVF_TEXCOORDSIZEn, which are the bottom 2 bits */
|
||||
/* WINED3DFVF_TEXCOORDSIZEn, which are the bottom 2 bits */
|
||||
|
||||
/* So, for each supplied texture extract the coords */
|
||||
for (textureNo = 0; textureNo < numTextures; ++textureNo) {
|
||||
|
@ -585,13 +585,13 @@ void primitiveConvertFVFtoOffset(DWORD thisFVF, DWORD stride, BYTE *data, WineDi
|
|||
|
||||
/* Always one set */
|
||||
data += sizeof(float);
|
||||
if (numCoords[textureNo] != D3DFVF_TEXTUREFORMAT1) {
|
||||
if (numCoords[textureNo] != WINED3DFVF_TEXTUREFORMAT1) {
|
||||
strided->u.s.texCoords[textureNo].dwType = WINED3DDECLTYPE_FLOAT2;
|
||||
data += sizeof(float);
|
||||
if (numCoords[textureNo] != D3DFVF_TEXTUREFORMAT2) {
|
||||
if (numCoords[textureNo] != WINED3DFVF_TEXTUREFORMAT2) {
|
||||
strided->u.s.texCoords[textureNo].dwType = WINED3DDECLTYPE_FLOAT3;
|
||||
data += sizeof(float);
|
||||
if (numCoords[textureNo] != D3DFVF_TEXTUREFORMAT3) {
|
||||
if (numCoords[textureNo] != WINED3DFVF_TEXTUREFORMAT3) {
|
||||
strided->u.s.texCoords[textureNo].dwType = WINED3DDECLTYPE_FLOAT4;
|
||||
data += sizeof(float);
|
||||
}
|
||||
|
|
|
@ -2482,15 +2482,15 @@ void multiply_matrix(WINED3DMATRIX *dest, WINED3DMATRIX *src1, WINED3DMATRIX *sr
|
|||
DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) {
|
||||
DWORD size = 0;
|
||||
int i;
|
||||
int numTextures = (d3dvtVertexType & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT;
|
||||
int numTextures = (d3dvtVertexType & WINED3DFVF_TEXCOUNT_MASK) >> WINED3DFVF_TEXCOUNT_SHIFT;
|
||||
|
||||
if (d3dvtVertexType & D3DFVF_NORMAL) size += 3 * sizeof(float);
|
||||
if (d3dvtVertexType & D3DFVF_DIFFUSE) size += sizeof(DWORD);
|
||||
if (d3dvtVertexType & D3DFVF_SPECULAR) size += sizeof(DWORD);
|
||||
if (d3dvtVertexType & D3DFVF_PSIZE) size += sizeof(DWORD);
|
||||
switch (d3dvtVertexType & D3DFVF_POSITION_MASK) {
|
||||
case D3DFVF_XYZ: size += 3 * sizeof(float); break;
|
||||
case D3DFVF_XYZRHW: size += 4 * sizeof(float); break;
|
||||
if (d3dvtVertexType & WINED3DFVF_NORMAL) size += 3 * sizeof(float);
|
||||
if (d3dvtVertexType & WINED3DFVF_DIFFUSE) size += sizeof(DWORD);
|
||||
if (d3dvtVertexType & WINED3DFVF_SPECULAR) size += sizeof(DWORD);
|
||||
if (d3dvtVertexType & WINED3DFVF_PSIZE) size += sizeof(DWORD);
|
||||
switch (d3dvtVertexType & WINED3DFVF_POSITION_MASK) {
|
||||
case WINED3DFVF_XYZ: size += 3 * sizeof(float); break;
|
||||
case WINED3DFVF_XYZRHW: size += 4 * sizeof(float); break;
|
||||
default: TRACE(" matrix weighting not handled yet...\n");
|
||||
}
|
||||
for (i = 0; i < numTextures; i++) {
|
||||
|
|
|
@ -1478,4 +1478,43 @@ typedef enum _WINED3DSURFTYPE {
|
|||
#define WINED3DCLIPPLANE4 (1 << 4)
|
||||
#define WINED3DCLIPPLANE5 (1 << 5)
|
||||
|
||||
/* FVF (Flexible Vertex Format) codes */
|
||||
#define WINED3DFVF_RESERVED0 0x0001
|
||||
#define WINED3DFVF_POSITION_MASK 0x000E
|
||||
#define WINED3DFVF_XYZ 0x0002
|
||||
#define WINED3DFVF_XYZRHW 0x0004
|
||||
#define WINED3DFVF_XYZB1 0x0006
|
||||
#define WINED3DFVF_XYZB2 0x0008
|
||||
#define WINED3DFVF_XYZB3 0x000a
|
||||
#define WINED3DFVF_XYZB4 0x000c
|
||||
#define WINED3DFVF_XYZB5 0x000e
|
||||
#define WINED3DFVF_XYZW 0x4002
|
||||
#define WINED3DFVF_NORMAL 0x0010
|
||||
#define WINED3DFVF_PSIZE 0x0020
|
||||
#define WINED3DFVF_DIFFUSE 0x0040
|
||||
#define WINED3DFVF_SPECULAR 0x0080
|
||||
#define WINED3DFVF_TEXCOUNT_MASK 0x0f00
|
||||
#define WINED3DFVF_TEXCOUNT_SHIFT 8
|
||||
#define WINED3DFVF_TEX0 0x0000
|
||||
#define WINED3DFVF_TEX1 0x0100
|
||||
#define WINED3DFVF_TEX2 0x0200
|
||||
#define WINED3DFVF_TEX3 0x0300
|
||||
#define WINED3DFVF_TEX4 0x0400
|
||||
#define WINED3DFVF_TEX5 0x0500
|
||||
#define WINED3DFVF_TEX6 0x0600
|
||||
#define WINED3DFVF_TEX7 0x0700
|
||||
#define WINED3DFVF_TEX8 0x0800
|
||||
#define WINED3DFVF_LASTBETA_UBYTE4 0x1000
|
||||
#define WINED3DFVF_LASTBETA_D3DCOLOR 0x8000
|
||||
#define WINED3DFVF_RESERVED2 0x6000
|
||||
|
||||
#define WINED3DFVF_TEXTUREFORMAT1 3
|
||||
#define WINED3DFVF_TEXTUREFORMAT2 0
|
||||
#define WINED3DFVF_TEXTUREFORMAT3 1
|
||||
#define WINED3DFVF_TEXTUREFORMAT4 2
|
||||
#define WINED3DFVF_TEXCOORDSIZE1(CoordIndex) (WINED3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
|
||||
#define WINED3DFVF_TEXCOORDSIZE2(CoordIndex) (WINED3DFVF_TEXTUREFORMAT2)
|
||||
#define WINED3DFVF_TEXCOORDSIZE3(CoordIndex) (WINED3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
|
||||
#define WINED3DFVF_TEXCOORDSIZE4(CoordIndex) (WINED3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue