Browse Source

fix texture matrix on dx7

David Rose 22 years ago
parent
commit
e541881492
1 changed files with 18 additions and 1 deletions
  1. 18 1
      panda/src/dxgsg7/dxGraphicsStateGuardian7.cxx

+ 18 - 1
panda/src/dxgsg7/dxGraphicsStateGuardian7.cxx

@@ -3856,7 +3856,24 @@ issue_transform(const TransformState *transform) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void DXGraphicsStateGuardian7::
 void DXGraphicsStateGuardian7::
 issue_tex_matrix(const TexMatrixAttrib *attrib) {
 issue_tex_matrix(const TexMatrixAttrib *attrib) {
-  // Not implemented.
+  const LMatrix4f &m = attrib->get_mat();
+
+  // This is ugly.  Need to make this a simple boolean test instead of
+  // a matrix compare.
+  if (m == LMatrix4f::ident_mat()) {
+    _pScrn->pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 
+                                             D3DTTFF_DISABLE);
+  } else {
+    // We have to reorder the elements of the matrix for some reason.
+    LMatrix4f dm(m(0, 0), m(0, 1), m(0, 3), 0.0f,
+                 m(1, 0), m(1, 1), m(1, 3), 0.0f,
+                 m(3, 0), m(3, 1), m(3, 3), 0.0f,
+                 0.0f, 0.0f, 0.0f, 1.0f);
+    _pScrn->pD3DDevice->SetTransform(D3DTRANSFORMSTATE_TEXTURE0,
+                                     (D3DMATRIX *)dm.get_data());
+    _pScrn->pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 
+                                             D3DTTFF_COUNT2);
+  }
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////