- Fixed D3D9 shadow bug visible in Example no. 8.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4313 dfc29bdd-3216-0410-991c-e03cc46cb475
master
Nadro 2012-09-18 06:27:52 +00:00
parent 0755c18c3b
commit f84412dc66
1 changed files with 31 additions and 31 deletions

View File

@ -1507,6 +1507,37 @@ void CSceneManager::drawAll()
LightManager->OnRenderPassPostRender(CurrentRendertime); LightManager->OnRenderPassPostRender(CurrentRendertime);
} }
// render transparent objects.
{
CurrentRendertime = ESNRP_TRANSPARENT;
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRendertime) != 0);
TransparentNodeList.sort(); // sort by distance from camera
if (LightManager)
{
LightManager->OnRenderPassPreRender(CurrentRendertime);
for (i=0; i<TransparentNodeList.size(); ++i)
{
ISceneNode* node = TransparentNodeList[i].Node;
LightManager->OnNodePreRender(node);
node->render();
LightManager->OnNodePostRender(node);
}
}
else
{
for (i=0; i<TransparentNodeList.size(); ++i)
TransparentNodeList[i].Node->render();
}
Parameters.setAttribute ( "drawn_transparent", (s32) TransparentNodeList.size() );
TransparentNodeList.set_used(0);
if (LightManager)
LightManager->OnRenderPassPostRender(CurrentRendertime);
}
// render shadows // render shadows
{ {
CurrentRendertime = ESNRP_SHADOW; CurrentRendertime = ESNRP_SHADOW;
@ -1539,37 +1570,6 @@ void CSceneManager::drawAll()
LightManager->OnRenderPassPostRender(CurrentRendertime); LightManager->OnRenderPassPostRender(CurrentRendertime);
} }
// render transparent objects.
{
CurrentRendertime = ESNRP_TRANSPARENT;
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRendertime) != 0);
TransparentNodeList.sort(); // sort by distance from camera
if (LightManager)
{
LightManager->OnRenderPassPreRender(CurrentRendertime);
for (i=0; i<TransparentNodeList.size(); ++i)
{
ISceneNode* node = TransparentNodeList[i].Node;
LightManager->OnNodePreRender(node);
node->render();
LightManager->OnNodePostRender(node);
}
}
else
{
for (i=0; i<TransparentNodeList.size(); ++i)
TransparentNodeList[i].Node->render();
}
Parameters.setAttribute ( "drawn_transparent", (s32) TransparentNodeList.size() );
TransparentNodeList.set_used(0);
if (LightManager)
LightManager->OnRenderPassPostRender(CurrentRendertime);
}
// render transparent effect objects. // render transparent effect objects.
{ {
CurrentRendertime = ESNRP_TRANSPARENT_EFFECT; CurrentRendertime = ESNRP_TRANSPARENT_EFFECT;