Difference between revisions of "Blending mode"

From Project X Wiki
Jump to: navigation, search
(Blending mode)
(Blending mode)
Line 16: Line 16:
 
   if (q->blend & 128)
 
   if (q->blend & 128)
 
   {
 
   {
pD3DDevice->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, FALSE );
+
    pD3DDevice->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, FALSE );
} else {
+
  } else {
pD3DDevice->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, TRUE );
+
    pD3DDevice->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, TRUE );
}
+
  }
}
+
  }
if (q->blend & 64)
+
{
+
  if (q->blend & 64)
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
+
  {
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR); //col
+
    pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
 +
    pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR); //col
 
   
 
   
} else
+
  } else
if (q->blend & 1)  //additive/replace
+
  if (q->blend & 1)  //additive/replace
{
+
  {
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
+
    pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); //additive
+
    pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); //additive
} else {
+
  } else {
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
+
    pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);   //aplha-blending
+
    pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);   //aplha-blending
};
+
  };
  
 
   
 
   
int difftype = q->blend & 14;
+
  int difftype = q->blend & 14;
 +
  if (difftype == 2)  //diffusion to addition
 +
  {
 +
    pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  D3DTOP_ADD );
 +
  } else if (difftype == 0) {                                                        //diffusion to modulation
 +
    pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  D3DTOP_MODULATE );
 +
  } else if (difftype == 4) {                                                        //diffusion to smooth addition
 +
    pD3DDevice->SetTextureStageS
 +
    pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  D3DTOP_ADDSMOOTH );
 +
  } else if (difftype == 6) {                                                        //diffusion to double modulation
 +
    pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  D3DTOP_MODULATE2X );
 +
  } else if (difftype == 8) {                                                        //diffusion to signed addition
 +
    pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  D3DTOP_ADDSIGNED );
 +
  };
  
if (difftype == 2)  //diffusion to addition
+
   if (q->blend & 3)
{
+
   {  
pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_ADD );
+
   if (q->blend & 32)
} else if (difftype == 0) {                                                        //diffusion to modulation
+
  {
pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  D3DTOP_MODULATE );
+
    pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,  FALSE );
} else if (difftype == 4) {                                                        //diffusion to smooth addition
+
  } else {
pD3DDevice->SetTextureStageS
+
    pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,  TRUE );
 
+
  };
 
pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_ADDSMOOTH );
 
} else if (difftype == 6) {                                                         //diffusion to double modulation
 
pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  D3DTOP_MODULATE2X );
 
} else if (difftype == 8) {                                                        //diffusion to signed addition
 
pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_ADDSIGNED );
 
};
 
 
 
if (q->blend & 3
 
 
if (q->blend & 32)
 
{
 
pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,  FALSE );
 
} else {
 
pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,  TRUE );
 
};
 

Revision as of 00:42, 21 January 2012

Blending mode

128 - disable AA
64 - color of pixel is multiplied by target pixel color
1 - additive rendering instead of alpha
2 - diffusion color (col parameter in CVertex) adds to texture color, instead of multiplying
4 - like 2, but "smooth addition"
6 - multiplication & dividing by 2 after
8 - addition, then 127 is subtracted from each component
32 - disable alpha channel

it's in groups, flags 0,2,4,6,8, are choosing blending mode (color parameter target), everything else is just flags


 if (q->blend & 128)
 {
   pD3DDevice->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, FALSE );
 } else {
   pD3DDevice->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, TRUE );
 }
 }
 if (q->blend & 64)
 {
   pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
   pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);		 //col

 } else
 if (q->blend & 1)   //additive/replace
 {
   pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
   pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);			//additive
 } else {
   pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
   pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);	   //aplha-blending
 };


 int difftype = q->blend & 14;
 if (difftype == 2)   //diffusion to addition
 {
   pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_ADD );
 } else if (difftype == 0) {                                                         //diffusion to modulation
   pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
 } else if (difftype == 4) {                                                         //diffusion to smooth addition
   pD3DDevice->SetTextureStageS 
   pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_ADDSMOOTH );
 } else if (difftype == 6) {                                                         //diffusion to double modulation
   pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE2X );
 } else if (difftype == 8) {                                                         //diffusion to signed addition
   pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_ADDSIGNED );
 };
 if (q->blend & 3)
 { 
 if (q->blend & 32)
 {
   pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   FALSE );
 } else {
   pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
 };