@@ -1237,7 +1237,13 @@ Int ShroudTextureShader::set(Int stage)
12371237 Matrix4x4 curView;
12381238 DX8Wrapper::_Get_DX8_Transform (D3DTS_VIEW, curView);
12391239
1240- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
1240+ D3DXMATRIX d3dCurView (
1241+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
1242+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
1243+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
1244+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
1245+ );
1246+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
12411247
12421248 D3DXMATRIX scale,offset;
12431249
@@ -1260,8 +1266,8 @@ Int ShroudTextureShader::set(Int stage)
12601266 width = 1 .0f /(width*shroud->getTextureWidth ());
12611267 height = 1 .0f /(height*shroud->getTextureHeight ());
12621268 D3DXMatrixScaling (&scale, width, height, 1 );
1263- *(( D3DXMATRIX *)&curView) = (inv * offset) * scale;
1264- DX8Wrapper::_Set_DX8_Transform ((D3DTRANSFORMSTATETYPE )(D3DTS_TEXTURE0+stage), *((Matrix4x4*)&curView) );
1269+ D3DXMATRIX texTransform = (inv * offset) * scale;
1270+ DX8Wrapper::_Set_DX8_Transform ((D3DTRANSFORMSTATETYPE )(D3DTS_TEXTURE0+stage), texTransform );
12651271 }
12661272 m_stageOfSet=stage;
12671273 return TRUE ;
@@ -1330,7 +1336,13 @@ Int FlatShroudTextureShader::set(Int stage)
13301336 Matrix4x4 curView;
13311337 DX8Wrapper::_Get_DX8_Transform (D3DTS_VIEW, curView);
13321338
1333- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
1339+ D3DXMATRIX d3dCurView (
1340+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
1341+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
1342+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
1343+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
1344+ );
1345+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
13341346
13351347 D3DXMATRIX scale,offset;
13361348
@@ -1353,8 +1365,8 @@ Int FlatShroudTextureShader::set(Int stage)
13531365 width = 1 .0f /(width*shroud->getTextureWidth ());
13541366 height = 1 .0f /(height*shroud->getTextureHeight ());
13551367 D3DXMatrixScaling (&scale, width, height, 1 );
1356- *(( D3DXMATRIX *)&curView) = (inv * offset) * scale;
1357- DX8Wrapper::_Set_DX8_Transform ((D3DTRANSFORMSTATETYPE )(D3DTS_TEXTURE0+stage), *((Matrix4x4*)&curView) );
1368+ D3DXMATRIX texTransform = (inv * offset) * scale;
1369+ DX8Wrapper::_Set_DX8_Transform ((D3DTRANSFORMSTATETYPE )(D3DTS_TEXTURE0+stage), texTransform );
13581370 }
13591371 m_stageOfSet=stage;
13601372 return TRUE ;
@@ -1422,8 +1434,13 @@ Int MaskTextureShader::set(Int pass)
14221434 D3DXMATRIX inv;
14231435 float det;
14241436
1425- // Get inverse view matrix so we can transform camera space points back to world space
1426- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
1437+ D3DXMATRIX d3dCurView (
1438+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
1439+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
1440+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
1441+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
1442+ );
1443+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
14271444
14281445 D3DXMATRIX scale,offset,offsetTextureCenter;
14291446 Coord3D centerPos;
@@ -1449,18 +1466,19 @@ Int MaskTextureShader::set(Int pass)
14491466 Real worldTexelHeight=(1 .0f -fadeLevel)*25 .0f ;
14501467
14511468 // /@todo: Fix this to work with non 128x128 textures.
1469+ D3DXMATRIX texTransform;
14521470 if (worldTexelWidth != 0 && worldTexelHeight != 0 )
14531471 { Real widthScale = 1 .0f /(worldTexelWidth*128 .0f );
14541472 Real heightScale = 1 .0f /(worldTexelHeight*128 .0f );
14551473 D3DXMatrixScaling (&scale, widthScale, heightScale, 1 );
1456- *((D3DXMATRIX *)&curView) = ((inv * offset) * scale)*offsetTextureCenter;
1474+ texTransform = ((inv * offset) * scale)*offsetTextureCenter;
14571475 }
14581476 else
14591477 { D3DXMatrixScaling (&scale, 0 , 0 , 1 ); // scaling by 0 will set uv coordinates to 0,0
1460- *((D3DXMATRIX *)&curView) = ((inv * offset) * scale);
1478+ texTransform = ((inv * offset) * scale);
14611479 }
14621480
1463- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, *((Matrix4x4*)&curView) );
1481+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, texTransform );
14641482
14651483 return TRUE ;
14661484}
@@ -1715,24 +1733,32 @@ Int TerrainShader2Stage::set(Int pass)
17151733 D3DXMATRIX inv;
17161734 float det;
17171735
1718- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
1736+ D3DXMATRIX d3dCurView (
1737+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
1738+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
1739+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
1740+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
1741+ );
1742+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
17191743
17201744 if (W3DShaderManager::getCurrentShader () == W3DShaderManager::ST_TERRAIN_BASE_NOISE12)
17211745 {
17221746 // setup cloud pass
17231747 DX8Wrapper::_Get_D3D_Device8 ()->SetTexture (0 , W3DShaderManager::getShaderTexture (2 )->Peek_D3D_Texture ());
17241748
1725- updateNoise1 (((D3DXMATRIX*)&curView),&inv); // update curView with texture matrix
1726- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, curView);
1749+ D3DXMATRIX texTransform;
1750+ terrainShader2Stage.updateNoise1 (&texTransform,&inv);
1751+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, texTransform);
17271752 // clouds always need bilinear filtering
17281753 DX8Wrapper::Set_DX8_Texture_Stage_State (0 , D3DTSS_MINFILTER, D3DTEXF_LINEAR);
17291754 DX8Wrapper::Set_DX8_Texture_Stage_State (0 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
17301755
17311756 // setup noise pass
17321757 DX8Wrapper::_Get_D3D_Device8 ()->SetTexture (1 , W3DShaderManager::getShaderTexture (3 )->Peek_D3D_Texture ());
17331758
1734- updateNoise2 (((D3DXMATRIX*)&curView),&inv);
1735- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, curView);
1759+ D3DXMATRIX texTransform2;
1760+ terrainShader2Stage.updateNoise2 (&texTransform2,&inv);
1761+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, texTransform2);
17361762 // noise always needs point/linear filtering. Why point!?
17371763 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MINFILTER, D3DTEXF_POINT);
17381764 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
@@ -1751,25 +1777,26 @@ Int TerrainShader2Stage::set(Int pass)
17511777 else
17521778 { // only 1 noise or cloud texture
17531779 // Now setup the texture pipeline.
1780+ D3DXMATRIX texTransform3;
17541781 if (W3DShaderManager::getCurrentShader () == W3DShaderManager::ST_TERRAIN_BASE_NOISE1)
17551782 { // setup cloud pass
17561783 DX8Wrapper::_Get_D3D_Device8 ()->SetTexture (0 , W3DShaderManager::getShaderTexture (2 )->Peek_D3D_Texture ());
1757- updateNoise1 (((D3DXMATRIX*)&curView) ,&inv); // update curView with texture matrix
1784+ terrainShader2Stage. updateNoise1 (&texTransform3 ,&inv);
17581785 DX8Wrapper::Set_DX8_Texture_Stage_State (0 , D3DTSS_MINFILTER, D3DTEXF_LINEAR);
17591786 DX8Wrapper::Set_DX8_Texture_Stage_State (0 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
17601787 }
17611788 else
17621789 {
17631790 // setup noise pass
17641791 DX8Wrapper::_Get_D3D_Device8 ()->SetTexture (0 , W3DShaderManager::getShaderTexture (3 )->Peek_D3D_Texture ());
1765- updateNoise2 (((D3DXMATRIX*)&curView) ,&inv); // update curView with texture matrix
1792+ terrainShader2Stage. updateNoise2 (&texTransform3 ,&inv);
17661793 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MINFILTER, D3DTEXF_POINT);
17671794 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
17681795 }
17691796
17701797 DX8Wrapper::Set_DX8_Texture_Stage_State ( 1 , D3DTSS_COLOROP, D3DTOP_DISABLE );
17711798 DX8Wrapper::Set_DX8_Texture_Stage_State ( 1 , D3DTSS_ALPHAOP, D3DTOP_DISABLE );
1772- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, *((Matrix4x4*)&curView) );
1799+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, texTransform3 );
17731800 }
17741801 break ;
17751802 }
@@ -2043,7 +2070,13 @@ Int TerrainShaderPixelShader::set(Int pass)
20432070
20442071 D3DXMATRIX inv;
20452072 float det;
2046- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
2073+ D3DXMATRIX d3dCurView (
2074+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
2075+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
2076+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
2077+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
2078+ );
2079+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
20472080
20482081 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
20492082 // Two output coordinates are used.
@@ -2066,11 +2099,13 @@ Int TerrainShaderPixelShader::set(Int pass)
20662099 DX8Wrapper::Set_DX8_Texture_Stage_State (3 , D3DTSS_MINFILTER, D3DTEXF_POINT);
20672100 DX8Wrapper::Set_DX8_Texture_Stage_State (3 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
20682101
2069- terrainShader2Stage.updateNoise1 (((D3DXMATRIX*)&curView),&inv); // update curView with texture matrix
2070- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE2, curView);
2102+ D3DXMATRIX texTransform1;
2103+ terrainShader2Stage.updateNoise1 (&texTransform1,&inv);
2104+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE2, texTransform1);
20712105
2072- terrainShader2Stage.updateNoise2 (((D3DXMATRIX*)&curView),&inv); // update curView with texture matrix
2073- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE3, curView);
2106+ D3DXMATRIX texTransform2;
2107+ terrainShader2Stage.updateNoise2 (&texTransform2,&inv);
2108+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE3, texTransform2);
20742109
20752110 DX8Wrapper::Set_DX8_Texture_Stage_State (3 , D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
20762111 // Two output coordinates are used.
@@ -2080,21 +2115,22 @@ Int TerrainShaderPixelShader::set(Int pass)
20802115 { // single noise texture shader
20812116 DX8Wrapper::_Get_D3D_Device8 ()->SetPixelShader (m_dwBaseNoise1PixelShader);
20822117
2118+ D3DXMATRIX texTransform3;
20832119 if (W3DShaderManager::getCurrentShader () == W3DShaderManager::ST_TERRAIN_BASE_NOISE1)
20842120 { // cloud map
20852121 DX8Wrapper::_Get_D3D_Device8 ()->SetTexture (2 , W3DShaderManager::getShaderTexture (2 )->Peek_D3D_Texture ());
2086- terrainShader2Stage.updateNoise1 (((D3DXMATRIX*)&curView) ,&inv); // update curView with texture matrix
2122+ terrainShader2Stage.updateNoise1 (&texTransform3 ,&inv);
20872123 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_MINFILTER, D3DTEXF_LINEAR);
20882124 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
20892125 }
20902126 else
20912127 { // light map
20922128 DX8Wrapper::_Get_D3D_Device8 ()->SetTexture (2 , W3DShaderManager::getShaderTexture (3 )->Peek_D3D_Texture ());
2093- terrainShader2Stage.updateNoise2 (((D3DXMATRIX*)&curView) ,&inv); // update curView with texture matrix
2129+ terrainShader2Stage.updateNoise2 (&texTransform3 ,&inv);
20942130 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_MINFILTER, D3DTEXF_POINT);
20952131 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
20962132 }
2097- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE2, curView );
2133+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE2, texTransform3 );
20982134 }
20992135 }
21002136 else
@@ -2164,14 +2200,20 @@ Int CloudTextureShader::set(Int stage)
21642200 D3DXMATRIX inv;
21652201 float det;
21662202
2167- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
2203+ D3DXMATRIX d3dCurView (
2204+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
2205+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
2206+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
2207+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
2208+ );
2209+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
21682210
2169- // Get a texture matrix that applies the current cloud position
2170- terrainShader2Stage.updateNoise1 (((D3DXMATRIX*)&curView),&inv,false ); // update curView with texture matrix
2211+ D3DXMATRIX texTransform;
2212+ terrainShader2Stage.updateNoise1 (&texTransform,&inv,false );
2213+ DX8Wrapper::_Set_DX8_Transform ((D3DTRANSFORMSTATETYPE )(D3DTS_TEXTURE0+stage), texTransform);
21712214
21722215 DX8Wrapper::Set_DX8_Texture_Stage_State (stage, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
21732216 DX8Wrapper::Set_DX8_Texture_Stage_State (stage, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
2174- DX8Wrapper::_Set_DX8_Transform ((D3DTRANSFORMSTATETYPE )(D3DTS_TEXTURE0+stage), curView);
21752217 DX8Wrapper::Set_DX8_Texture_Stage_State (stage, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
21762218 DX8Wrapper::Set_DX8_Texture_Stage_State (stage, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
21772219 DX8Wrapper::Set_DX8_Texture_Stage_State (stage, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
@@ -2298,7 +2340,13 @@ Int RoadShaderPixelShader::set(Int pass)
22982340
22992341 D3DXMATRIX inv;
23002342 float det;
2301- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
2343+ D3DXMATRIX d3dCurView (
2344+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
2345+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
2346+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
2347+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
2348+ );
2349+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
23022350
23032351 if (TheGlobalData && TheGlobalData->m_trilinearTerrainTex )
23042352 { DX8Wrapper::Set_DX8_Texture_Stage_State (0 , D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
@@ -2330,11 +2378,13 @@ Int RoadShaderPixelShader::set(Int pass)
23302378 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_MINFILTER, D3DTEXF_POINT);
23312379 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
23322380
2333- terrainShader2Stage.updateNoise1 (((D3DXMATRIX*)&curView),&inv, false ); // get texture projection matrix
2334- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, curView);
2381+ D3DXMATRIX texTransform1;
2382+ terrainShader2Stage.updateNoise1 (&texTransform1,&inv, false );
2383+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, texTransform1);
23352384
2336- terrainShader2Stage.updateNoise2 (((D3DXMATRIX*)&curView),&inv, false ); // get texture projection matrix
2337- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE2, curView);
2385+ D3DXMATRIX texTransform2;
2386+ terrainShader2Stage.updateNoise2 (&texTransform2,&inv, false );
2387+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE2, texTransform2);
23382388
23392389 DX8Wrapper::Set_DX8_Texture_Stage_State (2 , D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
23402390 // Two output coordinates are used.
@@ -2413,7 +2463,13 @@ Int RoadShader2Stage::set(Int pass)
24132463
24142464 D3DXMATRIX inv;
24152465 float det;
2416- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
2466+ D3DXMATRIX d3dCurView (
2467+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
2468+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
2469+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
2470+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
2471+ );
2472+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
24172473
24182474 if (TheGlobalData && TheGlobalData->m_trilinearTerrainTex )
24192475 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
@@ -2434,33 +2490,33 @@ Int RoadShader2Stage::set(Int pass)
24342490 DX8Wrapper::Set_DX8_Texture_Stage_State ( 1 , D3DTSS_ALPHAARG2, D3DTA_CURRENT );
24352491 DX8Wrapper::Set_DX8_Texture_Stage_State ( 1 , D3DTSS_ALPHAOP, D3DTOP_MODULATE );
24362492
2493+ D3DXMATRIX texTransform3;
24372494 if (W3DShaderManager::getCurrentShader () == W3DShaderManager::ST_ROAD_BASE_NOISE12)
24382495 { // full shader, apply noise 1 in pass 0.
24392496 DX8Wrapper::Set_Texture (1 ,W3DShaderManager::getShaderTexture (1 ));
24402497 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MINFILTER, D3DTEXF_LINEAR);
24412498 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
24422499
2443- terrainShader2Stage.updateNoise1 (((D3DXMATRIX*)&curView),&inv, false ); // get texture projection matrix
2444- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, curView);
2500+ terrainShader2Stage.updateNoise1 (&texTransform3,&inv, false );
24452501 }
24462502 else
24472503 { // single noise texture shader
24482504 if (W3DShaderManager::getCurrentShader () == W3DShaderManager::ST_ROAD_BASE_NOISE1)
24492505 { // cloud map
24502506 DX8Wrapper::Set_Texture (1 ,W3DShaderManager::getShaderTexture (1 ));
2451- terrainShader2Stage.updateNoise1 (((D3DXMATRIX*)&curView) ,&inv, false ); // update curView with texture matrix
2507+ terrainShader2Stage.updateNoise1 (&texTransform3 ,&inv, false );
24522508 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MINFILTER, D3DTEXF_LINEAR);
24532509 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
24542510 }
24552511 else
24562512 { // light map
24572513 DX8Wrapper::Set_Texture (1 ,W3DShaderManager::getShaderTexture (2 ));
2458- terrainShader2Stage.updateNoise2 (((D3DXMATRIX*)&curView) ,&inv, false ); // update curView with texture matrix
2514+ terrainShader2Stage.updateNoise2 (&texTransform3 ,&inv, false );
24592515 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MINFILTER, D3DTEXF_POINT);
24602516 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
24612517 }
2462- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, curView);
24632518 }
2519+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, texTransform3);
24642520 }
24652521 else
24662522 { // just base texturing
@@ -2475,7 +2531,13 @@ Int RoadShader2Stage::set(Int pass)
24752531
24762532 D3DXMATRIX inv;
24772533 float det;
2478- D3DXMatrixInverse (&inv, &det, (D3DXMATRIX*)&curView);
2534+ D3DXMATRIX d3dCurView (
2535+ curView[0 ][0 ], curView[0 ][1 ], curView[0 ][2 ], curView[0 ][3 ],
2536+ curView[1 ][0 ], curView[1 ][1 ], curView[1 ][2 ], curView[1 ][3 ],
2537+ curView[2 ][0 ], curView[2 ][1 ], curView[2 ][2 ], curView[2 ][3 ],
2538+ curView[3 ][0 ], curView[3 ][1 ], curView[3 ][2 ], curView[3 ][3 ]
2539+ );
2540+ D3DXMatrixInverse (&inv, &det, &d3dCurView);
24792541
24802542 if (TheGlobalData && TheGlobalData->m_trilinearTerrainTex )
24812543 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
@@ -2484,7 +2546,9 @@ Int RoadShader2Stage::set(Int pass)
24842546
24852547 DX8Wrapper::Set_Texture (1 ,W3DShaderManager::getShaderTexture (2 ));
24862548
2487- terrainShader2Stage.updateNoise2 (((D3DXMATRIX*)&curView),&inv, false ); // update curView with texture matrix
2549+ D3DXMATRIX texTransform;
2550+ terrainShader2Stage.updateNoise2 (&texTransform,&inv, false );
2551+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE1, texTransform);
24882552 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MINFILTER, D3DTEXF_POINT);
24892553 DX8Wrapper::Set_DX8_Texture_Stage_State (1 , D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
24902554
@@ -2516,7 +2580,7 @@ Int RoadShader2Stage::set(Int pass)
25162580 DX8Wrapper::Set_DX8_Render_State (D3DRS_SRCBLEND,D3DBLEND_ZERO);
25172581 DX8Wrapper::Set_DX8_Render_State (D3DRS_DESTBLEND,D3DBLEND_SRCCOLOR);
25182582
2519- DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, curView );
2583+ DX8Wrapper::_Set_DX8_Transform (D3DTS_TEXTURE0, texTransform );
25202584 }
25212585
25222586 return TRUE ;
0 commit comments