@@ -317,6 +317,8 @@ class DX8Wrapper
317317
318318 // Set_ and Get_Transform() functions take the matrix in Westwood convention format.
319319
320+ static void Set_Projection_Transform_With_Z_Bias (const Matrix4x4& matrix,float znear, float zfar); // pointer to 16 matrices
321+
320322 static void Set_Transform (D3DTRANSFORMSTATETYPE transform,const Matrix4x4& m);
321323 static void Set_Transform (D3DTRANSFORMSTATETYPE transform,const Matrix3D& m);
322324 static void Get_Transform (D3DTRANSFORMSTATETYPE transform, Matrix4x4& m);
@@ -1191,6 +1193,24 @@ WWINLINE void DX8Wrapper::Set_Shader(const ShaderClass& shader)
11911193 SNAPSHOT_SAY ((" DX8Wrapper::Set_Shader(%s)" ,shader.Get_Description (str).str ()));
11921194}
11931195
1196+ WWINLINE void DX8Wrapper::Set_Projection_Transform_With_Z_Bias (const Matrix4x4& matrix, float znear, float zfar)
1197+ {
1198+ ZFar=zfar;
1199+ ZNear=znear;
1200+ ProjectionMatrix=To_D3DMATRIX (matrix);
1201+
1202+ if (!Get_Current_Caps ()->Support_ZBias () && ZNear!=ZFar) {
1203+ D3DMATRIX tmp=ProjectionMatrix;
1204+ float tmp_zbias=ZBias;
1205+ tmp_zbias*=(1 .0f /16 .0f );
1206+ tmp_zbias*=1 .0f / (ZFar - ZNear);
1207+ tmp.m [2 ][2 ]-=tmp_zbias*tmp.m [3 ][2 ];
1208+ DX8CALL (SetTransform (D3DTS_PROJECTION,&tmp));
1209+ }
1210+ else {
1211+ DX8CALL (SetTransform (D3DTS_PROJECTION,&ProjectionMatrix));
1212+ }
1213+ }
11941214
11951215WWINLINE void DX8Wrapper::Set_Transform (D3DTRANSFORMSTATETYPE transform,const Matrix4x4& m)
11961216{
0 commit comments