I got Water demo working -- whew thats all of my lil demos here (crap gotta get some more...)
So heres the deal Water should have worked with wined3d -- but it was crashing on me due to the following... (the patch is attached -- you may have to use fromdos (for formatting newline issues))
...drawprim.c : drawStridedSlow : ~1210... int coordIdx = This->stateBlock->textureState[textureNo][D3DTSS_TEXCOORDINDEX]; float *ptrToCoords = (float *)(sd->u.s.texCoords[coordIdx].lpData + (SkipnStrides * sd->u.s.texCoords[coordIdx].dwStride)); /*INSTA-CRASH(tm) location*/ float s = 0.0, t = 0.0, r = 0.0, q = 0.0;
if (coordIdx > 7) { VTRACE(("tex: %d - Skip tex coords, as being system generated\n", textureNo)); continue; } else if (sd->u.s.texCoords[coordIdx].lpData == NULL) {/*NOTICE pointer validity check here*/ TRACE("tex: %d - Skipping tex coords, as no data supplied\n", textureNo); continue; } else {
/*pointer safety*/ float *ptrToCoords = (float *)(sd->u.s.texCoords[coordIdx].lpData + (SkipnStrides * sd->u.s.texCoords[coordIdx].dwStride));
-------------------the fix-use pointer after check(not before)------------------
int coordIdx = This->stateBlock->textureState[textureNo][D3DTSS_TEXCOORDINDEX]; /*former INSTA-CRASH(tm) location*/ float s = 0.0, t = 0.0, r = 0.0, q = 0.0;
if (coordIdx > 7) { VTRACE(("tex: %d - Skip tex coords, as being system generated\n", textureNo)); continue; } else if (sd->u.s.texCoords[coordIdx].lpData == NULL) {/*NOTICE pointer validity check here*/ TRACE("tex: %d - Skipping tex coords, as no data supplied\n", textureNo); continue; } else {
/*pointer safety*/ float *ptrToCoords = (float *)(sd->u.s.texCoords[coordIdx].lpData + (SkipnStrides * sd->u.s.texCoords[coordIdx].dwStride));
--------------------------------- patch version -- also attached -- dunno if the below will even format correctly --------------------------------- cvs -z4 diff -u -wb -d -p drawprim.c (in directory C:\cvs_stuff\wine\dlls\wined3d) Index: drawprim.c =================================================================== RCS file: /home/wine/wine/dlls/wined3d/drawprim.c,v retrieving revision 1.16 diff -u -w -b -d -p -r1.16 drawprim.c --- drawprim.c 14 Jul 2005 12:19:53 -0000 1.16 +++ drawprim.c 16 Jul 2005 21:08:45 -0000 @@ -1207,7 +1207,9 @@ static void drawStridedSlow(IWineD3DDevi if (This->stateBlock->textures[textureNo] != NULL) {
int coordIdx = This->stateBlock->textureState[textureNo][D3DTSS_TEXCOORDINDEX]; +#if 0 float *ptrToCoords = (float *)(sd->u.s.texCoords[coordIdx].lpData + (SkipnStrides * sd->u.s.texCoords[coordIdx].dwStride)); +#endif float s = 0.0, t = 0.0, r = 0.0, q = 0.0;
if (coordIdx > 7) { @@ -1218,6 +1220,8 @@ static void drawStridedSlow(IWineD3DDevi continue; } else {
+/*pointer safety*/ +float *ptrToCoords = (float *)(sd->u.s.texCoords[coordIdx].lpData + (SkipnStrides * sd->u.s.texCoords[coordIdx].dwStride)); int coordsToUse = sd->u.s.texCoords[coordIdx].dwType + 1; /* 0 == D3DDECLTYPE_FLOAT1 etc */
/* The coords to supply depend completely on the fvf / vertex shader */