My understanding, although I have never done it personally, is that you can have as many shaders as you like, but only one main function.
So, you could have:
//shader1.fs <- Separate files
SomeShaderFunc1()
{
}
//shader2.fs <- Separate files
SomeShaderFunc2()
{
}
//shader3.fs <- Separate files
SomeShaderFunc3()
{
}
//shader4.fs <- Separate files
main()
{
SomeShaderFunc1();
SomeShaderFunc2();
SomeShaderFunc3();
}
But not:
//shader1.fs <- Separate files
SomeShaderFunc1()
{
}
main()
{
SomeShaderFunc1();
}
//shader2.fs <- Separate files
SomeShaderFunc2()
{
}
main()
{
SomeShaderFunc2();
}
//shader3.fs <- Separate files
SomeShaderFunc3()
{
}
main()
{
SomeShaderFunc3();
}
And that is one main function in your fragment shader(s) and one in your vertex shader(s).