--- Irrlicht.old/CD3D8MaterialRenderer.h 2005-05-25 18:43:26.000000000 +0200 +++ Irrlicht/CD3D8MaterialRenderer.h 2005-06-03 09:23:17.000000000 +0200 @@ -129,7 +129,12 @@ } }; +//------------------------------------------------------------------ +// Irrlicht My3D Patch 1 in Direct3D driver +// ( EMT_TRANSPARENT_VERTEX_ALPHA material patch) +//------------------------------------------------------------------ +/* //! Transparent vertex alpha material renderer class CD3D8MaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public CD3D8MaterialRenderer { @@ -165,7 +170,42 @@ return true; } }; +*/ +//! Transparent vertex alpha material renderer +class CD3D8MaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public CD3D8MaterialRenderer +{ +public: + + CD3D8MaterialRenderer_TRANSPARENT_VERTEX_ALPHA(IDirect3DDevice8* p, video::IVideoDriver* d) + : CD3D8MaterialRenderer(p, d) {} + + virtual void OnSetMaterial(SMaterial& material, const SMaterial& lastMaterial, + bool resetAllRenderstates, IMaterialRendererServices* services) + { + if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) + { + pID3DDevice->SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_MODULATE); + pID3DDevice->SetTextureStageState (0, D3DTSS_COLORARG1, D3DTA_TEXTURE); + pID3DDevice->SetTextureStageState (0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); + pID3DDevice->SetTextureStageState (0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); + pID3DDevice->SetTextureStageState (0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE); + + pID3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); + pID3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); + pID3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); + pID3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR); + } + + material.ZWriteEnable = false; + services->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); + } + //! Returns if the material is transparent. + virtual bool isTransparent() + { + return true; + } +}; // END Irrlicht My3D Patch 1 in Direct3D driver //! Transparent alpha channel material renderer class CD3D8MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL : public CD3D8MaterialRenderer --- Irrlicht.old/COpenGLMaterialRenderer.h 2005-05-25 18:43:26.000000000 +0200 +++ Irrlicht/COpenGLMaterialRenderer.h 2005-06-03 09:23:22.000000000 +0200 @@ -150,6 +150,12 @@ }; +//------------------------------------------------------------------ +// Irrlicht My3D Patch 1 in OpenGL driver +// ( EMT_TRANSPARENT_VERTEX_ALPHA material patch) +//------------------------------------------------------------------ + +/* //! Transparent vertex alpha material renderer class COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public COpenGLMaterialRenderer { @@ -195,6 +201,44 @@ return true; } }; +*/ + +//! Transparent vertex alpha material renderer +class COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public COpenGLMaterialRenderer +{ +public: + + COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA(video::COpenGLDriver* d) + : COpenGLMaterialRenderer(d) {} + + virtual void OnSetMaterial(SMaterial& material, const SMaterial& lastMaterial, + bool resetAllRenderstates, IMaterialRendererServices* services) + { + if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) + { + glDisable(GL_ALPHA_TEST); + + Driver->setTexture(1,0); + + if (Driver->hasMultiTextureExtension()) + Driver->extGlActiveTextureARB(GL_TEXTURE0_ARB); + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + glEnable(GL_BLEND); + glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); + } + + material.ZWriteEnable = false; + services->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); + } + + //! Returns if the material is transparent. + virtual bool isTransparent() + { + return true; + } +}; // END Irrlicht My3D Patch 1 in OpenGL driver //! Transparent alpha channel material renderer @@ -237,7 +281,11 @@ }; - +//------------------------------------------------------------------ +// Irrlicht My3D Patch 2 in OpenGL driver +// ( EMT_TRANSPARENT_ALPHA_CHANNEL_REF material patch ) +//------------------------------------------------------------------ +/* //! Transparent alpha channel material renderer class COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF : public COpenGLMaterialRenderer { @@ -277,7 +325,44 @@ return false; // this material is not really transparent because it does no blending. } }; +*/ +//! Transparent alpha channel material renderer +class COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF : public COpenGLMaterialRenderer +{ +public: + + COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF(video::COpenGLDriver* d) + : COpenGLMaterialRenderer(d) {} + + virtual void OnSetMaterial(SMaterial& material, const SMaterial& lastMaterial, + bool resetAllRenderstates, IMaterialRendererServices* services) + { + if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) + { + glEnable(GL_ALPHA_TEST); + glDisable(GL_BLEND); + + glAlphaFunc(GL_GREATER, 0.5); + if (Driver->hasMultiTextureExtension()) + Driver->extGlActiveTextureARB(GL_TEXTURE0_ARB); + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + } + services->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); + } + + virtual void OnUnsetMaterial() + { + glDisable(GL_ALPHA_TEST); + } + + //! Returns if the material is transparent. + virtual bool isTransparent() + { + return false; // this material is not really transparent because it does no blending. + } +};// END Irrlicht My3D Patch 2 in OpenGL driver //! material renderer for all kinds of linghtmaps class COpenGLMaterialRenderer_LIGHTMAP : public COpenGLMaterialRenderer