diff --git a/src/away3d/materials/MaterialBase.as b/src/away3d/materials/MaterialBase.as index e5e4c2265..23aaaf3be 100644 --- a/src/away3d/materials/MaterialBase.as +++ b/src/away3d/materials/MaterialBase.as @@ -432,7 +432,7 @@ package away3d.materials */ arcane function renderPass(index:uint, renderable:IRenderable, stage3DProxy:Stage3DProxy, entityCollector:EntityCollector, viewProjection:Matrix3D):void { - if (_lightPicker) + if (_lightPicker && _lightPicker.enabled) _lightPicker.collectLights(renderable, entityCollector); var pass:MaterialPassBase = _passes[index]; diff --git a/src/away3d/materials/MultiPassMaterialBase.as b/src/away3d/materials/MultiPassMaterialBase.as index 44b1f6a7b..f13fd84c4 100644 --- a/src/away3d/materials/MultiPassMaterialBase.as +++ b/src/away3d/materials/MultiPassMaterialBase.as @@ -731,7 +731,7 @@ */ protected function get numLights():int { - return _lightPicker? _lightPicker.numLightProbes + _lightPicker.numDirectionalLights + _lightPicker.numPointLights + + return _lightPicker && _lightPicker.enabled ? _lightPicker.numLightProbes + _lightPicker.numDirectionalLights + _lightPicker.numPointLights + _lightPicker.numCastingDirectionalLights + _lightPicker.numCastingPointLights : 0; } @@ -740,7 +740,7 @@ */ private function get numNonCasters():int { - return _lightPicker? _lightPicker.numLightProbes + _lightPicker.numDirectionalLights + _lightPicker.numPointLights : 0; + return _lightPicker && _lightPicker.enabled? _lightPicker.numLightProbes + _lightPicker.numDirectionalLights + _lightPicker.numPointLights : 0; } /** diff --git a/src/away3d/materials/lightpickers/LightPickerBase.as b/src/away3d/materials/lightpickers/LightPickerBase.as index 0a04174eb..64b0b0a29 100644 --- a/src/away3d/materials/lightpickers/LightPickerBase.as +++ b/src/away3d/materials/lightpickers/LightPickerBase.as @@ -5,8 +5,9 @@ package away3d.materials.lightpickers import away3d.core.traverse.*; import away3d.library.assets.*; import away3d.lights.*; - - import flash.geom.*; + + import flash.events.Event; + import flash.geom.*; use namespace arcane; @@ -31,6 +32,7 @@ package away3d.materials.lightpickers protected var _castingDirectionalLights:Vector.; protected var _lightProbes:Vector.; protected var _lightProbeWeights:Vector.; + protected var _enabled:Boolean=true; /** * Creates a new LightPickerBase object. @@ -193,6 +195,19 @@ package away3d.materials.lightpickers for (i = 0; i < _numLightProbes; ++i) _lightProbeWeights[i] *= total; } - - } + + /** + * Flag indicating whether to consider this light picker during pass + */ + public function get enabled():Boolean { + return _enabled; + } + + public function set enabled(value:Boolean):void { + if(_enabled!=value) { + _enabled = value; + dispatchEvent(new Event(Event.CHANGE)); + } + } + } } diff --git a/src/away3d/materials/passes/LightingPass.as b/src/away3d/materials/passes/LightingPass.as index b87eeb4da..a9e6f4edc 100644 --- a/src/away3d/materials/passes/LightingPass.as +++ b/src/away3d/materials/passes/LightingPass.as @@ -124,7 +124,7 @@ package away3d.materials.passes var numPointLights:int = _numPointLights; var numLightProbes:int = _numLightProbes; - if (_lightPicker) { + if (_lightPicker && _lightPicker.enabled) { _numDirectionalLights = calculateNumDirectionalLights(_lightPicker.numDirectionalLights); _numPointLights = calculateNumPointLights(_lightPicker.numPointLights); _numLightProbes = calculateNumProbes(_lightPicker.numLightProbes); diff --git a/src/away3d/materials/passes/MaterialPassBase.as b/src/away3d/materials/passes/MaterialPassBase.as index db76a2718..26e05680c 100644 --- a/src/away3d/materials/passes/MaterialPassBase.as +++ b/src/away3d/materials/passes/MaterialPassBase.as @@ -535,7 +535,7 @@ package away3d.materials.passes */ protected function updateLights():void { - + } /** diff --git a/src/away3d/materials/passes/ShadowCasterPass.as b/src/away3d/materials/passes/ShadowCasterPass.as index e853f9498..6433621e7 100644 --- a/src/away3d/materials/passes/ShadowCasterPass.as +++ b/src/away3d/materials/passes/ShadowCasterPass.as @@ -56,7 +56,7 @@ package away3d.materials.passes var numPointLights:int; var numDirectionalLights:int; - if (_lightPicker) { + if (_lightPicker && _lightPicker.enabled) { numPointLights = _lightPicker.numCastingPointLights > 0? 1 : 0; numDirectionalLights = _lightPicker.numCastingDirectionalLights > 0? 1 : 0; } else { diff --git a/src/away3d/materials/passes/SuperShaderPass.as b/src/away3d/materials/passes/SuperShaderPass.as index 50280731a..dc8f4bdf8 100644 --- a/src/away3d/materials/passes/SuperShaderPass.as +++ b/src/away3d/materials/passes/SuperShaderPass.as @@ -164,7 +164,7 @@ package away3d.materials.passes override protected function updateLights():void { // super.updateLights(); - if (_lightPicker && !_ignoreLights) { + if (_lightPicker && _lightPicker.enabled && !_ignoreLights ) { _numPointLights = _lightPicker.numPointLights; _numDirectionalLights = _lightPicker.numDirectionalLights; _numLightProbes = _lightPicker.numLightProbes;