Browse Source

use colorwritemask better

cxgeorge 23 years ago
parent
commit
0dad155cf8

+ 1 - 1
panda/src/dxgsg8/dxGraphicsStateGuardian8.I

@@ -149,7 +149,7 @@ enable_blend(bool val) {
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-//     Function: DXGraphicsStateGuardian::enable_blend
+//     Function: DXGraphicsStateGuardian::set_color_writemask
 //       Access:
 //       Access:
 //  Description:
 //  Description:
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////

+ 12 - 2
panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx

@@ -4369,6 +4369,12 @@ enable_light(int light_id, bool enable) {
 #endif
 #endif
 }
 }
 
 
+void DXGraphicsStateGuardian::
+issue_color_write(const ColorWriteAttrib *attrib) {
+  _color_write_mode = attrib->get_mode();
+  set_color_writemask((_color_write_mode ==ColorWriteAttrib::M_on) ? 0xFFFFFFFF : 0x0);
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: DXGraphicsStateGuardian::set_blend_mode
 //     Function: DXGraphicsStateGuardian::set_blend_mode
 //       Access: Protected, Virtual
 //       Access: Protected, Virtual
@@ -4381,12 +4387,16 @@ void DXGraphicsStateGuardian::
 set_blend_mode(ColorWriteAttrib::Mode color_write_mode,
 set_blend_mode(ColorWriteAttrib::Mode color_write_mode,
                ColorBlendAttrib::Mode color_blend_mode,
                ColorBlendAttrib::Mode color_blend_mode,
                TransparencyAttrib::Mode transparency_mode) {
                TransparencyAttrib::Mode transparency_mode) {
-  // If color_write_mode is off, we disable writing to the colorbuffer.
-  if (color_write_mode == ColorWriteAttrib::M_off) {
+
+  // should never get here, since our dxgsg8 issue_color_write() should be called instead
+  nassertv(color_write_mode == _color_write_mode);
+#if 0
+  if(color_write_mode == ColorWriteAttrib::M_off) {
     enable_alpha_test(false);
     enable_alpha_test(false);
     set_color_writemask(0x0);
     set_color_writemask(0x0);
     return;
     return;
   }
   }
+#endif
 
 
   // Is there a color blend set?
   // Is there a color blend set?
   switch (color_blend_mode) {
   switch (color_blend_mode) {

+ 1 - 0
panda/src/dxgsg8/dxGraphicsStateGuardian8.h

@@ -126,6 +126,7 @@ public:
   virtual void issue_alpha_test(const AlphaTestAttrib *attrib);
   virtual void issue_alpha_test(const AlphaTestAttrib *attrib);
   virtual void issue_depth_test(const DepthTestAttrib *attrib);
   virtual void issue_depth_test(const DepthTestAttrib *attrib);
   virtual void issue_depth_write(const DepthWriteAttrib *attrib);
   virtual void issue_depth_write(const DepthWriteAttrib *attrib);
+  virtual void issue_color_write(const ColorWriteAttrib *attrib);
   virtual void issue_cull_face(const CullFaceAttrib *attrib);
   virtual void issue_cull_face(const CullFaceAttrib *attrib);
   virtual void issue_fog(const FogAttrib *attrib);
   virtual void issue_fog(const FogAttrib *attrib);
   virtual void issue_depth_offset(const DepthOffsetAttrib *attrib);
   virtual void issue_depth_offset(const DepthOffsetAttrib *attrib);