Tidy up some of the formatting in drawprim and add missing strided
data.
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index ae7d2ec..8b73cb3 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -40,9 +40,7 @@
a vertex shader will be in use. Note the fvf bits returned may be split over
multiple streams only if the vertex shader was created, otherwise it all relates
to stream 0 */
-static BOOL initializeFVF(IWineD3DDevice *iface,
- DWORD *FVFbits, /* What to expect in the FVF across all streams */
- BOOL *useVertexShaderFunction) /* Should we use the vertex shader */
+static BOOL initializeFVF(IWineD3DDevice *iface, DWORD *FVFbits)
{
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
@@ -55,46 +53,10 @@
an 'OR' of all the FVF's together so we know what to expect across all the
streams */
#endif
-
- if (This->stateBlock->vertexShader == NULL) {
-
- /* Use this as the FVF */
- *FVFbits = This->stateBlock->fvf;
- *useVertexShaderFunction = FALSE;
- TRACE("FVF explicitally defined, using fixed function pipeline with FVF=%lx\n", *FVFbits);
-
- } else {
-
-#if 0 /* TODO */
- /* Use created shader */
- IDirect3DVertexShaderImpl* vertex_shader = NULL;
- vertex_shader = VERTEX_SHADER(This->stateBlock->VertexShader);
-
- if (vertex_shader == NULL) {
-
- /* Hmm - User pulled figure out of the air? Unlikely, probably a bug */
- ERR("trying to use unitialised vertex shader: %lu\n", This->stateBlock->VertexShader);
- return TRUE;
-
- } else {
-
- *FVFbits = This->stateBlock->vertexShaderDecl->allFVF;
-
- if (vertex_shader->function == NULL) {
- /* No function, so many streams supplied plus FVF definition pre stream */
- *useVertexShaderFunction = FALSE;
- TRACE("vertex shader (%lx) declared without program, using fixed function pipeline with FVF=%lx\n",
- This->stateBlock->VertexShader, *FVFbits);
- } else {
- /* Vertex shader needs calling */
- *useVertexShaderFunction = TRUE;
- TRACE("vertex shader will be used (unusued FVF=%lx)\n", *FVFbits);
- }
- }
-#else
- FIXME("Vertex Shaders not moved into wined3d yet\n");
+ *FVFbits = This->stateBlock->fvf;
+#if 0
+ *FVFbits = This->stateBlock->vertexShaderDecl->allFVF;
#endif
- }
return FALSE;
}
@@ -108,37 +70,37 @@
switch (PrimitiveType) {
case D3DPT_POINTLIST:
TRACE("POINTS\n");
- *primType = GL_POINTS;
+ *primType = GL_POINTS;
NumVertexes = NumPrimitives;
break;
case D3DPT_LINELIST:
TRACE("LINES\n");
- *primType = GL_LINES;
+ *primType = GL_LINES;
NumVertexes = NumPrimitives * 2;
break;
case D3DPT_LINESTRIP:
TRACE("LINE_STRIP\n");
- *primType = GL_LINE_STRIP;
+ *primType = GL_LINE_STRIP;
NumVertexes = NumPrimitives + 1;
break;
case D3DPT_TRIANGLELIST:
TRACE("TRIANGLES\n");
- *primType = GL_TRIANGLES;
+ *primType = GL_TRIANGLES;
NumVertexes = NumPrimitives * 3;
break;
case D3DPT_TRIANGLESTRIP:
TRACE("TRIANGLE_STRIP\n");
- *primType = GL_TRIANGLE_STRIP;
+ *primType = GL_TRIANGLE_STRIP;
NumVertexes = NumPrimitives + 2;
break;
case D3DPT_TRIANGLEFAN:
TRACE("TRIANGLE_FAN\n");
- *primType = GL_TRIANGLE_FAN;
+ *primType = GL_TRIANGLE_FAN;
NumVertexes = NumPrimitives + 2;
break;
@@ -194,7 +156,7 @@
checkGLcall("glMaterialfv");
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float*) &This->stateBlock->material.Diffuse);
checkGLcall("glMaterialfv");
- if (This->stateBlock->renderState[D3DRS_SPECULARENABLE]) {
+ if (This->stateBlock->renderState[WINED3DRS_SPECULARENABLE]) {
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float*) &This->stateBlock->material.Specular);
checkGLcall("glMaterialfv");
} else {
@@ -208,7 +170,7 @@
}
-static GLfloat invymat[16]={
+static GLfloat invymat[16] = {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, -1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
@@ -243,12 +205,12 @@
matrices. Reset all matrices to identity and leave the default matrix in world
mode. */
glMatrixMode(GL_MODELVIEW);
- checkGLcall("glMatrixMode");
+ checkGLcall("glMatrixMode(GL_MODELVIEW)");
glLoadIdentity();
checkGLcall("glLoadIdentity");
glMatrixMode(GL_PROJECTION);
- checkGLcall("glMatrixMode");
+ checkGLcall("glMatrixMode(GL_PROJECTION)");
glLoadIdentity();
checkGLcall("glLoadIdentity");
@@ -309,8 +271,9 @@
-1 and 1 respectively but (-1-1/viewport_widh) and (1-1/viewport_width)
instead. */
glLoadIdentity();
- glTranslatef(1.0/This->stateBlock->viewport.Width, -1.0/This->stateBlock->viewport.Height, 0);
- checkGLcall("glTranslatef (1.0/width, -1.0/height, 0)");
+
+ glTranslatef(1.0 / This->stateBlock->viewport.Width, -1.0 / This->stateBlock->viewport.Height, 0);
+ checkGLcall("glTranslatef (1.0 / width, -1.0 / height, 0)");
if (This->renderUpsideDown) {
glMultMatrixf(invymat);
@@ -333,8 +296,8 @@
glLoadIdentity();
/* Window Coord 0 is the middle of the first pixel, so translate by half
a pixel (See comment above glTranslate above) */
- glTranslatef(1.0/This->stateBlock->viewport.Width, -1.0/This->stateBlock->viewport.Height, 0);
- checkGLcall("glTranslatef (1.0/width, -1.0/height, 0)");
+ glTranslatef(1.0 / This->stateBlock->viewport.Width, -1.0 / This->stateBlock->viewport.Height, 0);
+ checkGLcall("glTranslatef (1.0 / width, -1.0 / height, 0)");
if (This->renderUpsideDown) {
glMultMatrixf(invymat);
checkGLcall("glMultMatrixf(invymat)");
@@ -357,7 +320,7 @@
int i;
D3DVERTEXELEMENT9 *element;
DWORD stride;
- for(i = 0 ; i < vertexDeclaration->declaration9NumElements -1; i++){
+ for (i = 0 ; i < vertexDeclaration->declaration9NumElements - 1; ++i) {
element = vertexDeclaration->pDeclaration9 + i;
TRACE("%p Elements %p %d or %d\n", vertexDeclaration->pDeclaration9, element, i, vertexDeclaration->declaration9NumElements);
@@ -372,28 +335,34 @@
data += (BaseVertexIndex * stride);
data += element->Offset;
/* Why can't I just use a lookup table instead of a switch statment? */
- switch(element->Usage){
+ switch (element->Usage) {
case D3DDECLUSAGE_POSITION:
- switch(element->UsageIndex){
+ switch (element->UsageIndex) {
case 0: /* N-patch */
strided->u.s.position.lpData = data;
strided->u.s.position.dwType = element->Type;
strided->u.s.position.dwStride = stride;
break;
case 1: /* tweened see http://www.gamedev.net/reference/articles/article2017.asp */
- FIXME("Tweened positions\n");
+ TRACE("Tweened positions\n");
+ strided->u.s.position2.lpData = data;
+ strided->u.s.position2.dwType = element->Type;
+ strided->u.s.position2.dwStride = stride;
break;
}
break;
case D3DDECLUSAGE_NORMAL:
- switch(element->UsageIndex){
+ switch (element->UsageIndex) {
case 0: /* N-patch */
strided->u.s.normal.lpData = data;
strided->u.s.normal.dwType = element->Type;
strided->u.s.normal.dwStride = stride;
break;
case 1: /* skinning */
- FIXME("Skinning normals\n");
+ TRACE("Skinning / tween normals\n");
+ strided->u.s.normal2.lpData = data;
+ strided->u.s.normal2.dwType = element->Type;
+ strided->u.s.normal2.dwStride = stride;
break;
}
*fvf |= D3DFVF_NORMAL;
@@ -417,7 +386,7 @@
strided->u.s.pSize.dwStride = stride;
break;
case D3DDECLUSAGE_COLOR:
- switch(element->UsageIndex){
+ switch (element->UsageIndex) {
case 0:/* diffuse */
strided->u.s.diffuse.lpData = data;
strided->u.s.diffuse.dwType = element->Type;
@@ -438,46 +407,38 @@
strided->u.s.texCoords[textureNo].dwType = element->Type;
strided->u.s.texCoords[textureNo].dwStride = stride;
- textureNo++;
+ ++textureNo;
break;
case D3DDECLUSAGE_TANGENT:
/* Implement tangents and binormals using http://oss.sgi.com/projects/ogl-sample/registry/EXT/coordinate_frame.txt
this is easy so long as the OpenGL implementation supports it, otherwise drop back to calculating the
normal using tangents where no normal data has been provided */
-#if 0
- strided->u.s.tangent.lpData = data;
- strided->u.s.tangent.dwType = element->type;
- strided->u.s.tangent.dsString = stride;
-#endif
- TRACE("Tangents\n");
+ TRACE("Tangents\n");
+ strided->u.s.tangent.lpData = data;
+ strided->u.s.tangent.dwType = element->Type;
+ strided->u.s.tangent.dwStride = stride;
break;
case D3DDECLUSAGE_BINORMAL:
/* Binormals are really bitangents perpendicular to the normal but s-aligned to the tangent, basically they are the vectors of any two lines on the plain at right angles to the normal and at right angles to each other, like the x,y,z axis.
tangent data makes it easier to perform some calculations (a bit like using 2d graph paper instead of the normal of the piece of paper)
The only thing they are useful for in fixed function would be working out normals when none are given.
*/
-#if 0
- strided->u.s.binormal.lpData = data;
- strided->u.s.binormal.dwType = element->type;
- strided->u.s.binormal.dsString = stride;
-#endif
- /* Don't bother showing fixme's tangents aren't that interesting */
- TRACE("BI-Normal\n");
+ TRACE("BI-Normal\n");
+ strided->u.s.binormal.lpData = data;
+ strided->u.s.binormal.dwType = element->Type;
+ strided->u.s.binormal.dwStride = stride;
break;
case D3DDECLUSAGE_TESSFACTOR:
/* a google for D3DDECLUSAGE_TESSFACTOR turns up a whopping 36 entries, 7 of which are from MSDN.
*/
-#if 0
- strided->u.s.tessFacrot.lpData = data;
- strided->u.s.tessFactor.dwType = element->type;
- strided->u.s.tessFactor.dsString = stride;
-#else
- FIXME("Tess Factor\n");
-#endif
+ TRACE("Tess Factor\n");
+ strided->u.s.tessFactor.lpData = data;
+ strided->u.s.tessFactor.dwType = element->Type;
+ strided->u.s.tessFactor.dwStride = stride;
break;
case D3DDECLUSAGE_POSITIONT:
- switch(element->UsageIndex){
+ switch (element->UsageIndex) {
case 0: /* N-patch */
strided->u.s.position.lpData = data;
strided->u.s.position.dwType = element->Type;
@@ -487,7 +448,10 @@
/* see http://rsn.gamedev.net/tutorials/ms3danim.asp
http://xface.blogspot.com/2004_08_01_xface_archive.html
*/
- FIXME("Skinning positionsT\n");
+ TRACE("Skinning positionsT\n");
+ strided->u.s.position2.lpData = data;
+ strided->u.s.position2.dwType = element->Type;
+ strided->u.s.position2.dwStride = stride;
break;
}
/* TODO: change fvf usage to a plain boolean flag */
@@ -502,30 +466,22 @@
* fragment depth-based fog equation.
*
* */
-#if 0
- strided->u.s.fog.lpData = data;
- strided->u.s.fog.dwType = element->type;
- strided->u.s.fog.dsString = stride;
-#else
- FIXME("Fog\n");
-#endif
+ TRACE("Fog\n");
+ strided->u.s.fog.lpData = data;
+ strided->u.s.fog.dwType = element->Type;
+ strided->u.s.fog.dwStride = stride;
break;
case D3DDECLUSAGE_DEPTH:
- FIXME("depth\n");
-#if 0
- strided->u.s.depth.lpData = data;
- strided->u.s.depth.dwType = element->type;
- strided->u.s.depth.dsString = stride;
-#endif
-
- break;
+ TRACE("depth\n");
+ strided->u.s.depth.lpData = data;
+ strided->u.s.depth.dwType = element->Type;
+ strided->u.s.depth.dwStride = stride;
+ break;
case D3DDECLUSAGE_SAMPLE: /* VertexShader textures */
-#if 0
- strided->u.s.sample.lpData = data;
- strided->u.s.sample.dwType = element->type;
- strided->u.s.sample.dsString = stride;
-#endif
- FIXME("depth\n");
+ TRACE("depth\n");
+ strided->u.s.sample.lpData = data;
+ strided->u.s.sample.dwType = element->Type;
+ strided->u.s.sample.dwStride = stride;
break;
};
@@ -556,7 +512,7 @@
}
/* Work through stream by stream */
- for (nStream=0; nStream<LoopThroughTo; nStream++) {
+ for (nStream=0; nStream<LoopThroughTo; ++nStream) {
DWORD stride = This->stateBlock->streamStride[nStream];
BYTE *data = NULL;
DWORD thisFVF = 0;
@@ -690,6 +646,7 @@
}
}
+#if 0 /* TODO: Software Shaders */
/* Draw a single vertex using this information */
static void draw_vertex(IWineD3DDevice *iface, /* interface */
BOOL isXYZ, float x, float y, float z, float rhw, /* xyzn position*/
@@ -744,7 +701,7 @@
if (This->stateBlock->textures[textureNo] != NULL) {
int coordIdx = This->stateBlock->textureState[textureNo][D3DTSS_TEXCOORDINDEX];
- if (coordIdx > 7) {
+ if (coordIdx >= MAX_TEXTURES) {
VTRACE(("tex: %d - Skip tex coords, as being system generated\n", textureNo));
continue;
} else if (numcoords[coordIdx] == 0) {
@@ -818,6 +775,7 @@
}
}
}
+#endif /* TODO: Software shaders */
/*
* Actually draw using the supplied information.
@@ -1057,12 +1015,12 @@
TRACE("glElements(%x, %d, %ld, ...)\n", glPrimType, NumVertexes, minIndex);
#if 1 /* FIXME: Want to use DrawRangeElements, but wrong calculation! */
- glDrawElements(glPrimType, NumVertexes, idxSize==2?GL_UNSIGNED_SHORT:GL_UNSIGNED_INT,
- (const char *)idxData+(idxSize * startIdx));
+ glDrawElements(glPrimType, NumVertexes, idxSize == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT,
+ (const char *)idxData + (idxSize * startIdx));
#else
- glDrawRangeElements(glPrimType, minIndex, minIndex+NumVertexes-1, NumVertexes,
- idxSize==2?GL_UNSIGNED_SHORT:GL_UNSIGNED_INT,
- (const char *)idxData+(idxSize * startIdx));
+ glDrawRangeElements(glPrimType, minIndex, minIndex + NumVertexes - 1, NumVertexes,
+ idxSize == 2 ? GL_UNSIGNED_SHORT:GL_UNSIGNED_INT,
+ (const char *)idxData + (idxSize * startIdx));
#endif
checkGLcall("glDrawRangeElements");
@@ -1115,7 +1073,7 @@
glBegin(glPrimType);
/* For each primitive */
- for (vx_index = 0; vx_index < NumVertexes; vx_index++) {
+ for (vx_index = 0; vx_index < NumVertexes; ++vx_index) {
/* Initialize diffuse color */
diffuseColor = 0xFFFFFFFF;
@@ -1259,7 +1217,7 @@
}
/* crude support for non-power2 textures */
- if(((IWineD3DSurfaceImpl *) ((IWineD3DTextureImpl *)This->stateBlock->textures[textureNo])->surfaces[0])->nonpow2){
+ if (((IWineD3DSurfaceImpl *) ((IWineD3DTextureImpl *)This->stateBlock->textures[textureNo])->surfaces[0])->nonpow2) {
t *= ((IWineD3DSurfaceImpl *)((IWineD3DTextureImpl *)This->stateBlock->textures[textureNo])->surfaces[0])->pow2scalingFactorY;
s *= ((IWineD3DSurfaceImpl *)((IWineD3DTextureImpl *)This->stateBlock->textures[textureNo])->surfaces[0])->pow2scalingFactorX;
}
@@ -1367,7 +1325,7 @@
/* For non indexed mode, step onto next parts */
if (idxData == NULL) {
- SkipnStrides += 1;
+ ++SkipnStrides;
}
}
@@ -1420,7 +1378,7 @@
glBegin(glPrimType);
/* For each primitive */
- for (vx_index = 0; vx_index < NumVertexes; vx_index++) {
+ for (vx_index = 0; vx_index < NumVertexes; ++vx_index) {
/* For indexed data, we need to go a few more strides in */
if (idxData != NULL) {
@@ -1507,7 +1465,7 @@
/* For non indexed mode, step onto next parts */
if (idxData == NULL) {
- SkipnStrides += 1;
+ ++SkipnStrides;
}
} /* for each vertex */
@@ -1520,7 +1478,7 @@
int PrimitiveType, ULONG NumPrimitives,
const void *idxData, short idxSize, ULONG minIndex, ULONG startIdx) {
- IDirect3DVertexShaderImpl* vertex_shader = NULL;
+ IDirect3DVertexShaderImpl *vertex_shader = NULL;
int i;
int NumVertexes;
int glPrimType;
@@ -1539,7 +1497,7 @@
checkGLcall("glEnable(GL_VERTEX_PROGRAM_ARB);");
/* Update the constants */
- for (i=0; i<D3D8_VSHADER_MAX_CONSTANTS; i++) {
+ for (i = 0; i < D3D8_VSHADER_MAX_CONSTANTS; ++i) {
GL_EXTCALL(glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, i, (GLfloat *)&This->stateBlock->vertexShaderConstant[i]));
checkGLcall("glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB");
}
@@ -1556,12 +1514,12 @@
TRACE("glElements(%x, %d, %ld, ...)\n", glPrimType, NumVertexes, minIndex);
#if 1 /* FIXME: Want to use DrawRangeElements, but wrong calculation! */
- glDrawElements(glPrimType, NumVertexes, idxSize==2?GL_UNSIGNED_SHORT:GL_UNSIGNED_INT,
- (const char *)idxData+(idxSize * startIdx));
+ glDrawElements(glPrimType, NumVertexes, idxSize == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT,
+ (const char *)idxData + (idxSize * startIdx));
#else
- glDrawRangeElements(glPrimType, minIndex, minIndex+NumVertexes-1, NumVertexes,
- idxSize==2?GL_UNSIGNED_SHORT:GL_UNSIGNED_INT,
- (const char *)idxData+(idxSize * startIdx));
+ glDrawRangeElements(glPrimType, minIndex, minIndex+NumVertexes - 1, NumVertexes,
+ idxSize == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT,
+ (const char *)idxData + (idxSize * startIdx));
#endif
checkGLcall("glDrawRangeElements");
@@ -1587,7 +1545,7 @@
/* MESA does not support it right not */
if (glGetError() != GL_NO_ERROR)
maxAttribs = 16;
- for (i=0; i<maxAttribs; i++) {
+ for (i = 0; i < maxAttribs; ++i) {
GL_EXTCALL(glDisableVertexAttribArrayARB(i));
checkGLcall("glDisableVertexAttribArrayARB(reg);");
}
@@ -1597,7 +1555,7 @@
}
#endif
-void inline drawPrimitiveTraceDataLocations(Direct3DVertexStridedData *dataLocations,DWORD fvf){
+void inline drawPrimitiveTraceDataLocations(Direct3DVertexStridedData *dataLocations,DWORD fvf) {
/* Dump out what parts we have supplied */
TRACE("Strided Data (from FVF/VS): %lx\n", fvf);
@@ -1626,7 +1584,7 @@
unsigned int i;
register IWineD3DBaseTexture *texture;
/* And re-upload any dirty textures */
- for (i = 0; i<GL_LIMITS(textures); ++i) {
+ for (i = 0; i < GL_LIMITS(textures); ++i) {
texture = This->stateBlock->textures[i];
if (texture != NULL) {
if(IWineD3DBaseTexture_GetDirty(texture)) {
@@ -1672,7 +1630,7 @@
if (This->stateBlock->vertexDecl == NULL) {
/* Work out what the FVF should look like */
- rc = initializeFVF(iface, &fvf, &useVertexShaderFunction);
+ rc = initializeFVF(iface, &fvf);
if (rc) return;
} else {
TRACE("(%p) : using vertex declaration %p \n", iface, This->stateBlock->vertexDecl);
@@ -1717,7 +1675,7 @@
IDirect3DPixelShaderImpl_SetConstantF(pixel_shader, 0, (CONST FLOAT*) &This->stateBlock->pixelShaderConstant[0], 8);
}
/* Update the constants */
- for (i=0; i<D3D8_PSHADER_MAX_CONSTANTS; i++) {
+ for (i = 0; i < D3D8_PSHADER_MAX_CONSTANTS; ++i) {
GL_EXTCALL(glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, i, (GLfloat *)&This->stateBlock->pixelShaderConstant[i]));
checkGLcall("glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB");
}
@@ -1729,10 +1687,10 @@
memset(&dataLocations, 0x00, sizeof(dataLocations));
/* Convert to strided data */
- if(This->stateBlock->vertexDecl != NULL){
+ if (This->stateBlock->vertexDecl != NULL) {
TRACE("================ Vertex Declaration ===================\n");
primitiveDeclarationConvertToStridedData(iface, &dataLocations, StartVertexIndex, &fvf);
- }else{
+ } else {
TRACE("================ FVF ===================\n");
primitiveConvertToStridedData(iface, &dataLocations, StartVertexIndex);
}
@@ -1835,28 +1793,28 @@
if (isDumpingFrames) {
D3DLOCKED_RECT r;
char buffer[80];
- IDirect3DSurface8Impl_LockRect((LPDIRECT3DSURFACE8) This->renderTarget, &r, NULL, D3DLOCK_READONLY);
+ IWineD3DSurface_LockRect(This->renderTarget, &r, NULL, D3DLOCK_READONLY);
sprintf(buffer, "/tmp/backbuffer_%ld.ppm", primCounter);
TRACE("Saving screenshot %s\n", buffer);
- IDirect3DSurface8Impl_SaveSnapshot((LPDIRECT3DSURFACE8) This->renderTarget, buffer);
- IDirect3DSurface8Impl_UnlockRect((LPDIRECT3DSURFACE8) This->renderTarget);
+ IWineD3DSurface_SaveSnapshot(This->renderTarget, buffer);
+ IWineD3DSurface_UnlockRect(This->renderTarget);
#if defined(SHOW_TEXTURE_MAKEUP)
{
- LPDIRECT3DSURFACE8 pSur;
+ IWineD3DSurface *pSur;
int textureNo;
for (textureNo = 0; textureNo < GL_LIMITS(textures); ++textureNo) {
if (This->stateBlock->textures[textureNo] != NULL) {
sprintf(buffer, "/tmp/texture_%ld_%d.ppm", primCounter, textureNo);
- TRACE("Saving texture %s (Format:%s)\n", buffer, debug_d3dformat(((IDirect3DBaseTexture8Impl *)This->stateBlock->textures[textureNo])->format));
- IDirect3DTexture8Impl_GetSurfaceLevel((LPDIRECT3DTEXTURE8) This->stateBlock->textures[textureNo], 0, &pSur);
- IDirect3DSurface8Impl_SaveSnapshot(pSur, buffer);
- IDirect3DSurface8Impl_Release(pSur);
+ TRACE("Saving texture %s\n", buffer);
+ IWineD3DTexture_GetSurfaceLevel(This->stateBlock->textures[textureNo], 0, &pSur);
+ IWineD3DSurface_SaveSnapshot(pSur, buffer);
+ IWineD3DSurface_Release(pSur);
}
}
}
#endif
- primCounter = primCounter + 1;
+ ++primCounter;
}
}
#endif
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index a25270a..e8f2c92 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -329,6 +329,14 @@
Direct3DStridedData diffuse;
Direct3DStridedData specular;
Direct3DStridedData texCoords[MAX_TEXTURES];
+ Direct3DStridedData position2; /* tween data */
+ Direct3DStridedData normal2; /* tween data */
+ Direct3DStridedData tangent;
+ Direct3DStridedData binormal;
+ Direct3DStridedData tessFactor;
+ Direct3DStridedData fog;
+ Direct3DStridedData depth;
+ Direct3DStridedData sample;
} s;
Direct3DStridedData input[16]; /* Indexed by constants in D3DVSDE_REGISTER */
} u;