From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/a02874.html | 677 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 677 insertions(+) create mode 100644 docs/doxygen/nel/a02874.html (limited to 'docs/doxygen/nel/a02874.html') diff --git a/docs/doxygen/nel/a02874.html b/docs/doxygen/nel/a02874.html new file mode 100644 index 00000000..23bf05a8 --- /dev/null +++ b/docs/doxygen/nel/a02874.html @@ -0,0 +1,677 @@ + + +NeL: NL3D::CMeshBlender class Reference + + + +
+

NL3D::CMeshBlender Class Reference

#include <mesh_blender.h> +

+


Detailed Description

+A tool class used for Alpha Blending of Meshes. Actually, it takes a material, modify it and modify driver so it will be correctly rendered. The backup method must be used after render, to restore the material.
Author:
Lionel Berenguier

+Nevrax France

+
Date:
2002
+ +

+ +

+Definition at line 48 of file mesh_blender.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 CMeshBlender ()
 Constructor.

void prepareRenderForGlobalAlpha (CMaterial &material, IDriver *drv, float globalAlpha, uint8 globalAlphaInt, bool gaDisableZWrite)
 Modify the material and the driver for Global Alpha Use.

void prepareRenderForGlobalAlphaCoarseMesh (CMaterial &material, IDriver *drv, NLMISC::CRGBA color, float globalAlpha, bool gaDisableZWrite)
 Same method, but special for CoarseMesh (used by CMeshMultiLod::renderMeshGeom).

void restoreRender (CMaterial &material, IDriver *drv, bool gaDisableZWrite)
 Restore the material and driver in their initial state.

void restoreRenderCoarseMesh (CMaterial &material, IDriver *drv, bool gaDisableZWrite)
 Same method, but special for CoarseMesh (used by CMeshMultiLod::renderMeshGeom).


Private Attributes

float _BkAlphaTestThreshold
bool _BkBlend
CMaterial::TBlend _BkDstBlend
uint8 _BkOpacity
CMaterial::TBlend _BkSrcBlend
NLMISC::CRGBA _BkupColor
bool _BkZWrite
+


Constructor & Destructor Documentation

+

+ + + + +
+ + + + + + + + + +
NL3D::CMeshBlender::CMeshBlender  )  [inline]
+
+ + + + + +
+   + + +

+Constructor. +

+ +

+Definition at line 53 of file mesh_blender.h. +

+

00053 {}
+
+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CMeshBlender::prepareRenderForGlobalAlpha CMaterial material,
IDriver drv,
float  globalAlpha,
uint8  globalAlphaInt,
bool  gaDisableZWrite
+
+ + + + + +
+   + + +

+Modify the material and the driver for Global Alpha Use. +

+ +

+Definition at line 37 of file mesh_blender.cpp. +

+References _BkAlphaTestThreshold, _BkBlend, _BkDstBlend, _BkOpacity, _BkSrcBlend, _BkZWrite, NL3D::CMaterial::getAlphaTest(), NL3D::CMaterial::getAlphaTestThreshold(), NL3D::CMaterial::getBlend(), NL3D::CMaterial::getDstBlend(), NL3D::CMaterial::getOpacity(), NL3D::CMaterial::getSrcBlend(), NL3D::CMaterial::getZWrite(), NL3D::CMaterial::setAlphaTestThreshold(), NL3D::CMaterial::setBlend(), NL3D::IDriver::setBlendConstantColor(), NL3D::CMaterial::setDstBlend(), NL3D::CMaterial::setOpacity(), NL3D::CMaterial::setSrcBlend(), NL3D::CMaterial::setZWrite(), NL3D::IDriver::supportBlendConstantColor(), and uint8. +

+Referenced by NL3D::CMeshMRMSkinnedGeom::render(), NL3D::CMeshMRMGeom::render(), and NL3D::CMeshGeom::render(). +

+

00038 {
+00039         // Disable ZWrite??
+00040         if(gaDisableZWrite)
+00041         {
+00042                 // Backup and set new the zwrite
+00043                 _BkZWrite=material.getZWrite ();
+00044                 material.setZWrite (false);
+00045         }
+00046 
+00047         // Backup blend
+00048         _BkBlend=material.getBlend ();
+00049         material.setBlend (true);
+00050 
+00051         // Backup opacity and blend
+00052         _BkOpacity= material.getOpacity ();
+00053         _BkSrcBlend= material.getSrcBlend();
+00054         _BkDstBlend= material.getDstBlend();
+00055 
+00056         // 2 ways: if Blend Constant Color is supported or not.
+00057         if(drv->supportBlendConstantColor())
+00058         {
+00059                 // Set opacity to 255 => If AlphaTest is used, AlphaTexture will be multiplied by 1.
+00060                 material.setOpacity ( 255 );
+00061 
+00062                 // set the Blend constant Alpha.
+00063                 drv->setBlendConstantColor( CRGBA(0,0,0, globalAlphaInt) );
+00064 
+00065                 // Active Blend with Blend Constant Alpha .
+00066                 material.setSrcBlend(CMaterial::blendConstantAlpha);
+00067 
+00068                 // Don't set dest if we are in additive blend mode
+00069                 if ((_BkBlend == false) || (_BkDstBlend != CMaterial::one))
+00070                         material.setDstBlend(CMaterial::blendConstantInvAlpha);
+00071 
+00072                 // if material is Alpha Test, no-op. Keep same threshold, since Use Alpha of the BlendConstantColor
+00073                 // to do the alpha-blending.
+00074         }
+00075         // not supported, ugly way: modify Opacity, and alpha threshold
+00076         else
+00077         {
+00078                 // New opacity
+00079                 material.setOpacity (globalAlphaInt);
+00080 
+00081                 // must ensure Std Blend.
+00082                 material.setSrcBlend(CMaterial::srcalpha);
+00083 
+00084                 // Don't set dest if we are in additive blend mode
+00085                 if ((_BkBlend == false) || (_BkDstBlend != CMaterial::one))
+00086                         material.setDstBlend(CMaterial::invsrcalpha);
+00087 
+00088                 // if material is Alpha Test, must modulate AlphaTest limit to avoid Pop effects
+00089                 if(material.getAlphaTest())
+00090                 {
+00091                         _BkAlphaTestThreshold= material.getAlphaTestThreshold();
+00092                         material.setAlphaTestThreshold(_BkAlphaTestThreshold * globalAlpha);
+00093                 }
+00094         }
+00095 
+00096 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CMeshBlender::prepareRenderForGlobalAlphaCoarseMesh CMaterial material,
IDriver drv,
NLMISC::CRGBA  color,
float  globalAlpha,
bool  gaDisableZWrite
+
+ + + + + +
+   + + +

+Same method, but special for CoarseMesh (used by CMeshMultiLod::renderMeshGeom). +

+ +

+Definition at line 132 of file mesh_blender.cpp. +

+References _BkDstBlend, _BkSrcBlend, _BkupColor, NLMISC::CRGBA::A, NL3D::CMaterial::getColor(), NL3D::CMaterial::getDstBlend(), NL3D::CMaterial::getSrcBlend(), NLMISC::OptFastFloor(), NL3D::CMaterial::setAlphaTestThreshold(), NL3D::CMaterial::setBlend(), NL3D::IDriver::setBlendConstantColor(), NL3D::CMaterial::setColor(), NL3D::CMaterial::setDstBlend(), NL3D::CMaterial::setSrcBlend(), NL3D::CMaterial::setZWrite(), NL3D::IDriver::supportBlendConstantColor(), and uint8. +

+Referenced by NL3D::CMeshMultiLod::renderMeshGeom(). +

+

00133 {
+00134         // Don't need to bkup some values, because CoarseMesh.
+00135 
+00136         uint8   globalAlphaInt= (uint8)NLMISC::OptFastFloor(255 * globalAlpha);
+00137 
+00138         // Disable ZWrite??
+00139         if(gaDisableZWrite)
+00140                 material.setZWrite (false);
+00141         // Enable blend
+00142         material.setBlend (true);
+00143 
+00144         // bkup color and blend factors.
+00145         _BkupColor= material.getColor();
+00146         _BkSrcBlend= material.getSrcBlend();
+00147         _BkDstBlend= material.getDstBlend();
+00148 
+00149         // 2 ways: if Blend Constant Color is supported or not.
+00150         if(drv->supportBlendConstantColor())
+00151         {
+00152                 // Set opacity to 255 => AlphaTexture will be multiplied by 1.
+00153                 color.A= 255;
+00154                 // change color
+00155                 material.setColor ( color );
+00156 
+00157                 // set the Blend constant Alpha.
+00158                 drv->setBlendConstantColor( CRGBA(0,0,0, globalAlphaInt) );
+00159 
+00160                 // Active Blend with Blend Constant Alpha .
+00161                 material.setSrcBlend(CMaterial::blendConstantAlpha);
+00162                 material.setDstBlend(CMaterial::blendConstantInvAlpha);
+00163         }
+00164         else
+00165         {
+00166                 // Set current Alpha blend transparency (in color becausematerial is unlit)
+00167                 color.A= globalAlphaInt;
+00168                 // change color
+00169                 material.setColor ( color );
+00170 
+00171                 // Active Blend with Blend Constant Alpha .
+00172                 material.setSrcBlend(CMaterial::srcalpha);
+00173                 material.setDstBlend(CMaterial::invsrcalpha);
+00174 
+00175                 // must modulate AlphaTest limit to avoid Pop effects
+00176                 material.setAlphaTestThreshold(0.5f * globalAlpha);
+00177         }
+00178 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CMeshBlender::restoreRender CMaterial material,
IDriver drv,
bool  gaDisableZWrite
+
+ + + + + +
+   + + +

+Restore the material and driver in their initial state. +

+ +

+Definition at line 99 of file mesh_blender.cpp. +

+References _BkAlphaTestThreshold, _BkBlend, _BkDstBlend, _BkOpacity, _BkSrcBlend, _BkZWrite, NL3D::CMaterial::getAlphaTest(), NL3D::CMaterial::setAlphaTestThreshold(), NL3D::CMaterial::setBlend(), NL3D::CMaterial::setDstBlend(), NL3D::CMaterial::setOpacity(), NL3D::CMaterial::setSrcBlend(), NL3D::CMaterial::setZWrite(), and NL3D::IDriver::supportBlendConstantColor(). +

+Referenced by NL3D::CMeshMRMSkinnedGeom::render(), NL3D::CMeshMRMGeom::render(), and NL3D::CMeshGeom::render(). +

+

00100 {
+00101         // Resetup backuped zwrite
+00102         if(gaDisableZWrite)
+00103         {
+00104                 material.setZWrite (_BkZWrite);
+00105         }
+00106 
+00107         // Resetup backuped blend
+00108         material.setBlend (_BkBlend);
+00109 
+00110         // Resetup backuped opacity and blend factors
+00111         material.setOpacity (_BkOpacity);
+00112         material.setSrcBlend(_BkSrcBlend);
+00113         material.setDstBlend(_BkDstBlend);
+00114 
+00115         // 2 ways: if Blend Constant Color is supported or not.
+00116         if(drv->supportBlendConstantColor())
+00117         {
+00118                 // nop
+00119         }
+00120         else
+00121         {
+00122                 // Resetup backuped AlphaTest threshold
+00123                 if(material.getAlphaTest())
+00124                 {
+00125                         material.setAlphaTestThreshold(_BkAlphaTestThreshold);
+00126                 }
+00127         }
+00128 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CMeshBlender::restoreRenderCoarseMesh CMaterial material,
IDriver drv,
bool  gaDisableZWrite
+
+ + + + + +
+   + + +

+Same method, but special for CoarseMesh (used by CMeshMultiLod::renderMeshGeom). +

+ +

+Definition at line 181 of file mesh_blender.cpp. +

+References _BkDstBlend, _BkSrcBlend, _BkupColor, NL3D::CMaterial::setAlphaTestThreshold(), NL3D::CMaterial::setBlend(), NL3D::CMaterial::setColor(), NL3D::CMaterial::setDstBlend(), NL3D::CMaterial::setSrcBlend(), NL3D::CMaterial::setZWrite(), and NL3D::IDriver::supportBlendConstantColor(). +

+Referenced by NL3D::CMeshMultiLod::renderMeshGeom(). +

+

00182 {
+00183         // Resetup backuped color and blend factors
+00184         material.setColor ( _BkupColor );
+00185         material.setSrcBlend(_BkSrcBlend);
+00186         material.setDstBlend(_BkDstBlend);
+00187 
+00188         // ReEnable ZWrite??
+00189         if(gaDisableZWrite)
+00190                 material.setZWrite (true);
+00191         // Reset blend
+00192         material.setBlend (false);
+00193         
+00194         // 2 ways: if Blend Constant Color is supported or not.
+00195         if(drv->supportBlendConstantColor())
+00196         {
+00197                 // nop
+00198         }
+00199         else
+00200         {
+00201                 // reset AlphaTest limit
+00202                 material.setAlphaTestThreshold(0.5f);
+00203         }
+00204 }
+
+


Field Documentation

+

+ + + + +
+ + +
float NL3D::CMeshBlender::_BkAlphaTestThreshold [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 73 of file mesh_blender.h. +

+Referenced by prepareRenderForGlobalAlpha(), and restoreRender().

+

+ + + + +
+ + +
bool NL3D::CMeshBlender::_BkBlend [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 70 of file mesh_blender.h. +

+Referenced by prepareRenderForGlobalAlpha(), and restoreRender().

+

+ + + + +
+ + +
CMaterial::TBlend NL3D::CMeshBlender::_BkDstBlend [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 72 of file mesh_blender.h. +

+Referenced by prepareRenderForGlobalAlpha(), prepareRenderForGlobalAlphaCoarseMesh(), restoreRender(), and restoreRenderCoarseMesh().

+

+ + + + +
+ + +
uint8 NL3D::CMeshBlender::_BkOpacity [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 68 of file mesh_blender.h. +

+Referenced by prepareRenderForGlobalAlpha(), and restoreRender().

+

+ + + + +
+ + +
CMaterial::TBlend NL3D::CMeshBlender::_BkSrcBlend [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 71 of file mesh_blender.h. +

+Referenced by prepareRenderForGlobalAlpha(), prepareRenderForGlobalAlphaCoarseMesh(), restoreRender(), and restoreRenderCoarseMesh().

+

+ + + + +
+ + +
NLMISC::CRGBA NL3D::CMeshBlender::_BkupColor [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 74 of file mesh_blender.h. +

+Referenced by prepareRenderForGlobalAlphaCoarseMesh(), and restoreRenderCoarseMesh().

+

+ + + + +
+ + +
bool NL3D::CMeshBlender::_BkZWrite [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 69 of file mesh_blender.h. +

+Referenced by prepareRenderForGlobalAlpha(), and restoreRender().

+


The documentation for this class was generated from the following files: +
Generated on Tue Mar 16 06:51:46 2004 for NeL by + +doxygen +1.3.6
+ + -- cgit v1.2.1