Quote: " Does it? The default DBPro behaviour uses the DX9 fixed function pipeline states not shaders as far as I know."
The fixed function pipeline in DX9 is simply a hardcoded default shader.
Quote: "Seems a real shame you can't have 1 shader program and many different sets of data that different objects can read from. If you can, you defo can't do it with DBPro."
The only way I could think of doing it would be to pass in a struct of object-specific data along with the shader-specific data(light positions, texture information, worldview matrices, etc).
Kinda like this:
struct SettingInfo
{
//all of your lighting/setting info
};
struct VIn
{
float4 p : POSITION;
float3 n : NORMAL;
float2 uv : TEXCOORD0;
SettingInfo setting;
};
struct PIn
{
//all the stuff needed for your pixel/fragment shader
blah blah;
//now, the lighting info
SettingInfo setting;
};
I'm not sure how you'd manage to pull that off in DBP,maybe instead of using a struct just use individual variables, but in Ogre/C++ it'd be fairly simple to do, I think.
Of course, I could be totally off in how I interpret interaction between shaders and the program.