Commit 6cc3ffc5 authored by hybrid's avatar hybrid

Add 2d override material for other hw drivers.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3032 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 38a44116
...@@ -1754,13 +1754,12 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -1754,13 +1754,12 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
{ {
if (static_cast<u32>(LastMaterial.MaterialType) < MaterialRenderers.size()) if (static_cast<u32>(LastMaterial.MaterialType) < MaterialRenderers.size())
MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial(); MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial();
}
if (!OverrideMaterial2DEnabled)
{
setBasicRenderStates(InitMaterial2D, LastMaterial, true);
LastMaterial=InitMaterial2D;
SMaterial mat;
mat.ZBuffer=ECFN_NEVER;
mat.Lighting=false;
mat.AntiAliasing=video::EAAM_OFF;
mat.TextureLayer[0].BilinearFilter=false;
setBasicRenderStates(mat, mat, true);
// fix everything that is wrongly set by SMaterial default // fix everything that is wrongly set by SMaterial default
pID3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); pID3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
pID3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); pID3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
...@@ -1771,11 +1770,8 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -1771,11 +1770,8 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
pID3DDevice->SetRenderState( D3DRS_STENCILENABLE, FALSE ); pID3DDevice->SetRenderState( D3DRS_STENCILENABLE, FALSE );
setTransform(ETS_TEXTURE_0, core::IdentityMatrix);
pID3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
} }
pID3DDevice->SetTransform(D3DTS_WORLD, &UnitMatrixD3D8); pID3DDevice->SetTransform(D3DTS_WORLD, &UnitMatrixD3D8);
core::matrix4 m; core::matrix4 m;
m.setTranslation(core::vector3df(-0.5f,-0.5f,0)); m.setTranslation(core::vector3df(-0.5f,-0.5f,0));
pID3DDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)((void*)m.pointer())); pID3DDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)((void*)m.pointer()));
...@@ -1787,6 +1783,14 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -1787,6 +1783,14 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
Transformation3DChanged = false; Transformation3DChanged = false;
} }
if (OverrideMaterial2DEnabled)
{
OverrideMaterial2D.Lighting=false;
OverrideMaterial2D.ZBuffer=ECFN_NEVER;
OverrideMaterial2D.ZWriteEnable=false;
setBasicRenderStates(OverrideMaterial2D, LastMaterial, false);
LastMaterial = OverrideMaterial2D;
}
if (texture) if (texture)
{ {
......
...@@ -2344,6 +2344,15 @@ void CD3D9Driver::setRenderStatesStencilFillMode(bool alpha) ...@@ -2344,6 +2344,15 @@ void CD3D9Driver::setRenderStatesStencilFillMode(bool alpha)
} }
//! Enable the 2d override material
void CD3D9Driver::enableMaterial2D(bool enable)
{
if (!enable)
CurrentRenderMode = ERM_NONE;
CNullDriver::enableMaterial2D(enable);
}
//! sets the needed renderstates //! sets the needed renderstates
void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChannel) void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChannel)
{ {
...@@ -2353,17 +2362,17 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -2353,17 +2362,17 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
if (CurrentRenderMode != ERM_2D || Transformation3DChanged) if (CurrentRenderMode != ERM_2D || Transformation3DChanged)
{ {
// unset last 3d material // unset last 3d material
if (CurrentRenderMode != ERM_2D) if (CurrentRenderMode == ERM_3D)
{ {
if (static_cast<u32>(LastMaterial.MaterialType) < MaterialRenderers.size()) if (static_cast<u32>(LastMaterial.MaterialType) < MaterialRenderers.size())
MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial(); MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial();
SMaterial mat; }
mat.ZBuffer=ECFN_NEVER; if (!OverrideMaterial2DEnabled)
mat.Lighting=false; {
mat.AntiAliasing=video::EAAM_OFF; setBasicRenderStates(InitMaterial2D, LastMaterial, true);
mat.TextureLayer[0].BilinearFilter=false; LastMaterial=InitMaterial2D;
setBasicRenderStates(mat, mat, true);
// fix everything that is wrongly set by SMaterial default // fix everything that is wrongly set by InitMaterial2D default
pID3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); pID3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
pID3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE); pID3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
pID3DDevice->SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE); pID3DDevice->SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE);
...@@ -2372,11 +2381,7 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -2372,11 +2381,7 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
pID3DDevice->SetTextureStageState(3, D3DTSS_ALPHAOP, D3DTOP_DISABLE); pID3DDevice->SetTextureStageState(3, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
pID3DDevice->SetRenderState( D3DRS_STENCILENABLE, FALSE ); pID3DDevice->SetRenderState( D3DRS_STENCILENABLE, FALSE );
setTransform(ETS_TEXTURE_0, core::IdentityMatrix);
pID3DDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0);
} }
pID3DDevice->SetTransform(D3DTS_WORLD, &UnitMatrixD3D9); pID3DDevice->SetTransform(D3DTS_WORLD, &UnitMatrixD3D9);
core::matrix4 m; core::matrix4 m;
...@@ -2390,6 +2395,14 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -2390,6 +2395,14 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
Transformation3DChanged = false; Transformation3DChanged = false;
} }
if (OverrideMaterial2DEnabled)
{
OverrideMaterial2D.Lighting=false;
OverrideMaterial2D.ZBuffer=ECFN_NEVER;
OverrideMaterial2D.ZWriteEnable=false;
setBasicRenderStates(OverrideMaterial2D, LastMaterial, false);
LastMaterial = OverrideMaterial2D;
}
u32 current2DSignature = 0; u32 current2DSignature = 0;
current2DSignature |= alpha ? EC2D_ALPHA : 0; current2DSignature |= alpha ? EC2D_ALPHA : 0;
......
...@@ -264,6 +264,9 @@ namespace video ...@@ -264,6 +264,9 @@ namespace video
//! Returns the graphics card vendor name. //! Returns the graphics card vendor name.
virtual core::stringc getVendorInfo() {return VendorName;} virtual core::stringc getVendorInfo() {return VendorName;}
//! Enable the 2d override material
virtual void enableMaterial2D(bool enable=true);
//! Check if the driver was recently reset. //! Check if the driver was recently reset.
virtual bool checkDriverReset() {return DriverWasReset;} virtual bool checkDriverReset() {return DriverWasReset;}
......
...@@ -2815,8 +2815,6 @@ void COpenGLDriver::setRenderStates2DMode(bool alpha, bool texture, bool alphaCh ...@@ -2815,8 +2815,6 @@ void COpenGLDriver::setRenderStates2DMode(bool alpha, bool texture, bool alphaCh
// Make sure we set first texture matrix // Make sure we set first texture matrix
if (MultiTextureExtension) if (MultiTextureExtension)
extGlActiveTexture(GL_TEXTURE0_ARB); extGlActiveTexture(GL_TEXTURE0_ARB);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
Transformation3DChanged = false; Transformation3DChanged = false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment