Hi,
I've made a quick fix but in the SceneManager not in the VideoDriver:
Please add/change the following lines:
CNullDriver.h
AFTER:
Code: Select all
virtual void setFog(SColor color=SColor(0,255,255,255), bool linearFog=true,
f32 start=50.0f, f32 end=100.0f,
f32 density=0.01f, bool pixelFog=false, bool rangeFog=false);
ADD:
Code: Select all
virtual void getFog(SColor& color, bool& linearFog, f32& start, f32& end,
f32& density, bool& pixelFog, bool& rangeFog);
CNullDriver.cpp
AFTER:
Code: Select all
//! Sets the fog mode.
void CNullDriver::setFog(SColor color, bool linearFog, f32 start, f32 end, f32 density,
bool pixelFog, bool rangeFog)
{
FogColor = color;
LinearFog = linearFog;
FogStart = start;
FogEnd = end;
FogDensity = density;
PixelFog = pixelFog;
RangeFog = rangeFog;
}
ADD:
Code: Select all
//! Gets the current fog settings
void CNullDriver::getFog(SColor& color, bool& linearFog, f32& start, f32& end,
f32& density, bool& pixelFog, bool& rangeFog)
{
color = FogColor;
linearFog = LinearFog;
start = FogStart;
end = FogEnd;
density = FogDensity;
pixelFog = PixelFog;
rangeFog = RangeFog;
}
IVideoDriver.h
AFTER:
Code: Select all
virtual void setFog(SColor color=SColor(0,255,255,255), bool linearFog=true, f32 start=50.0f, f32 end=100.0f,
f32 density=0.01f, bool pixelFog=false, bool rangeFog=false) = 0;
ADD:
Code: Select all
virtual void getFog(SColor& color, bool& linearFog, f32& start, f32& end,
f32& density, bool& pixelFog, bool& rangeFog) = 0;
CSceneManager.cpp
in
CSceneManager::drawAll()
REPLACE:
Code: Select all
// render transparent objects.
CurrentRendertime = ESNRP_TRANSPARENT;
TransparentNodeList.sort(); // sort by distance from camera
for (i=0; i<TransparentNodeList.size(); ++i)
TransparentNodeList[i].node->render();
TransparentNodeList.clear();
WITH:
Code: Select all
// render transparent objects.
CurrentRendertime = ESNRP_TRANSPARENT;
TransparentNodeList.sort(); // sort by distance from camera
// save the current fog settings
video::SColor fogColor;
bool linearFog, pixelFog, rangeFog;
f32 fogStart, fogEnd, fogDensity;
Driver->getFog(fogColor, linearFog, fogStart, fogEnd, fogDensity, pixelFog, rangeFog);
for (i=0; i<TransparentNodeList.size(); ++i)
{
video::SMaterial mat = TransparentNodeList[i].node->getMaterial(0);
// set the fog color to black to get transparent things work correctly
if (mat.MaterialType == video::EMT_TRANSPARENT_ADD_COLOR)
Driver->setFog(video::SColor(0,0,0,0), linearFog, fogStart, fogEnd, fogDensity, pixelFog, rangeFog);
else
Driver->setFog(fogColor, linearFog, fogStart, fogEnd, fogDensity, pixelFog, rangeFog);
TransparentNodeList[i].node->render();
}
// set the fog color back to the original one
Driver->setFog(fogColor, linearFog, fogStart, fogEnd, fogDensity, pixelFog, rangeFog);
TransparentNodeList.clear();
Regards - Xaron