public void UploadLightChanges()
{
/* new light shaders and lights. */
foreach (var l in _lightDatabase.LightsToAdd)
{
if (_renderEngine.CancelRender) return;
l.Gamma = PreProcessGamma;
var lgsh = _renderEngine.CreateSimpleEmissionShader(l);
_renderEngine.Client.Scene.AddShader(lgsh);
_shaderDatabase.Add(l, lgsh);
if (_renderEngine.CancelRender) return;
var light = new CclLight(_renderEngine.Client, _renderEngine.Client.Scene, lgsh)
{
Type = l.Type,
Size = l.Size,
Location = l.Co,
Direction = l.Dir,
UseMis = l.UseMis,
CastShadow = l.CastShadow,
Samples = 1,
MaxBounces = 1024,
SizeU = l.SizeU,
SizeV = l.SizeV,
AxisU = l.AxisU,
AxisV = l.AxisV,
};
switch (l.Type)
{
case LightType.Area:
break;
case LightType.Point:
break;
case LightType.Spot:
light.SpotAngle = l.SpotAngle;
light.SpotSmooth = l.SpotSmooth;
break;
case LightType.Distant:
break;
}
light.TagUpdate();
_lightDatabase.RecordLightRelation(l.Id, light);
}
// update existing ones
foreach (var l in _lightDatabase.LightsToUpdate)
{
var existingL = _lightDatabase.ExistingLight(l.Id);
TriggerLightShaderChanged(l, existingL.Shader);
existingL.Type = l.Type;
existingL.Size = l.Size;
existingL.Location = l.Co;
existingL.Direction = l.Dir;
existingL.UseMis = l.UseMis;
existingL.CastShadow = l.CastShadow;
existingL.Samples = 1;
existingL.MaxBounces = 1024;
existingL.SizeU = l.SizeU;
existingL.SizeV = l.SizeV;
existingL.AxisU = l.AxisU;
existingL.AxisV = l.AxisV;
switch (l.Type)
{
case LightType.Area:
break;
case LightType.Point:
break;
case LightType.Spot:
existingL.SpotAngle = l.SpotAngle;
existingL.SpotSmooth = l.SpotSmooth;
break;
case LightType.Distant:
break;
}
existingL.TagUpdate();
}
}