Commit f84412dc authored by Nadro's avatar Nadro

- 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
parent 0755c18c
......@@ -1507,17 +1507,19 @@ void CSceneManager::drawAll()
LightManager->OnRenderPassPostRender(CurrentRendertime);
}
// render shadows
// render transparent objects.
{
CurrentRendertime = ESNRP_SHADOW;
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<ShadowNodeList.size(); ++i)
for (i=0; i<TransparentNodeList.size(); ++i)
{
ISceneNode* node = ShadowNodeList[i];
ISceneNode* node = TransparentNodeList[i].Node;
LightManager->OnNodePreRender(node);
node->render();
LightManager->OnNodePostRender(node);
......@@ -1525,33 +1527,28 @@ void CSceneManager::drawAll()
}
else
{
for (i=0; i<ShadowNodeList.size(); ++i)
ShadowNodeList[i]->render();
for (i=0; i<TransparentNodeList.size(); ++i)
TransparentNodeList[i].Node->render();
}
if (!ShadowNodeList.empty())
Driver->drawStencilShadow(true,ShadowColor, ShadowColor,
ShadowColor, ShadowColor);
ShadowNodeList.set_used(0);
Parameters.setAttribute ( "drawn_transparent", (s32) TransparentNodeList.size() );
TransparentNodeList.set_used(0);
if (LightManager)
LightManager->OnRenderPassPostRender(CurrentRendertime);
}
// render transparent objects.
// render shadows
{
CurrentRendertime = ESNRP_TRANSPARENT;
CurrentRendertime = ESNRP_SHADOW;
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)
for (i=0; i<ShadowNodeList.size(); ++i)
{
ISceneNode* node = TransparentNodeList[i].Node;
ISceneNode* node = ShadowNodeList[i];
LightManager->OnNodePreRender(node);
node->render();
LightManager->OnNodePostRender(node);
......@@ -1559,12 +1556,15 @@ void CSceneManager::drawAll()
}
else
{
for (i=0; i<TransparentNodeList.size(); ++i)
TransparentNodeList[i].Node->render();
for (i=0; i<ShadowNodeList.size(); ++i)
ShadowNodeList[i]->render();
}
Parameters.setAttribute ( "drawn_transparent", (s32) TransparentNodeList.size() );
TransparentNodeList.set_used(0);
if (!ShadowNodeList.empty())
Driver->drawStencilShadow(true,ShadowColor, ShadowColor,
ShadowColor, ShadowColor);
ShadowNodeList.set_used(0);
if (LightManager)
LightManager->OnRenderPassPostRender(CurrentRendertime);
......
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