Multi-pass shader!
Posted: Thu Jul 06, 2006 2:29 pm
Just playing with multi-pass algorithms and I implement multi-pass lighting and add a new new shader callback type.
One light:
Three lights:
The new shader callback:
One light:
Three lights:
The new shader callback:
Code: Select all
Class NewShaderCallBack: public IShader
{
public:
NewShaderCallBack()
{
}
s32 Begin(void)
{
return 2;
}
void End(void)
{
}
void BeginPass(s32 pass)
{
if (pass == 0)
{
float fpos[3];
vector3df position = light->getPosition();
fpos[0] = position.X;
fpos[1] = position.Y;
fpos[2] = position.Z;
setFloatVec("light_position", fpos, 3);
SColorf color = light->getLightData().DiffuseColor;
fpos[0] = color.r;
fpos[1] = color.g;
fpos[2] = color.b;
setFloatVec("light_diffuse", fpos, 3);
setFloat("light_r", light->getLightData().Radius);
}
else if (pass == 1)
{
float fpos[3];
vector3df position = light2->getPosition();
fpos[0] = position.X;
fpos[1] = position.Y;
fpos[2] = position.Z;
setFloatVec("light_position", fpos, 3);
SColorf color = light2->getLightData().DiffuseColor;
fpos[0] = color.r;
fpos[1] = color.g;
fpos[2] = color.b;
setFloatVec("light_diffuse", fpos, 3);
setFloat("light_r", light2->getLightData().Radius);
}
float fpos[3];
vector3df position = cam->getPosition();
fpos[0] = position.X;
fpos[1] = position.Y;
fpos[2] = position.Z;
setFloatVec("CAMERA_POSITION", fpos, 3);
setInt("pass", pass);
}
void EndPass()
{
}
};