Hi,
Not sure why, but uniforms was not passed to shader in D3D in that way
struct LightStruct {
vec3 position;
vec3 color;
float power;
float radius;
};
const int MAX_LIGHTS = 64;
uniform LightStruct lights[MAX_LIGHTS];
void main() {
for(int i = 0; i < MAX_LIGHTS; ++i) {
LightStruct light = lights[i];
light.color = always black
light.power = always 0
....and so on
}
}
In Haxe code:
Initialization:
lightStructs = new Array<LightStruct>();
for (i in 0...MAX_LIGHTS) {
var struct:LightStruct = new LightStruct (
pipeline.getConstantLocation("lights[" + i + "].position"),
pipeline.getConstantLocation("lights[" + i + "].color"),
pipeline.getConstantLocation("lights[" + i + "].power"),
pipeline.getConstantLocation("lights[" + i + "].radius")
);
lightStructs.push(struct);
}
Rendering:
for (i in 0...lights.length) {
if (i <= MAX_LIGHTS) {
var light:Light = lights[i];
var struct:LightStruct = lightStructs[i];
renderTarget.g4.setFloat3(struct.positionID, light.x, light.y, light.z);
renderTarget.g4.setFloat3(struct.colorID, light.color.R, light.color.G, light.color.B);
renderTarget.g4.setFloat(struct.powerID, light.power);
renderTarget.g4.setFloat(struct.radiusID, light.radius);
}
}
Hi, Not sure why, but uniforms was not passed to shader in D3D in that way
In Haxe code:
Initialization:
Rendering: