Hi,

Is it possible to use the upstream release instead?  Even the flex-sdk
uses pbj files from the upstream.  IIRC, we did that because not everyone
wanted to deal with installing the PB compiler.

Thanks,
-Alex

On 3/7/17, 2:25 AM, "ha...@apache.org" <ha...@apache.org> wrote:

>Repository: flex-asjs
>Updated Branches:
>  refs/heads/develop 9657c4e9a -> 281c77860
>
>
>Added Shader files (with compiler argument)
>
>
>Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
>Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/281c7786
>Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/281c7786
>Diff: ttp://git-wip-us.apache.org/repos/asf/flex-asjs/diff/281c7786
>
>Branch: refeads/develop
>Commit: 281c778607522da2aeca24f8212d551687684ce0
>Parents: 9657c4e
>Author: Harbs <ha...@in-tools.com>
>Authored: Tue Mar 7 12:25:26 2017 +0200
>Committer: Harbs <ha...@in-tools.com>
>Committed: Tue Mar 7 12:25:26 2017 +0200
>
>----------------------------------------------------------------------
> frameworks/projects/Graphics/build.xml          |   1 +
> .../Graphics/src/main/flex/GraphicsClasses.as   |   9 +
> .../flex/graphics/utils/shaderClasses/Color.pbk | 101 +++++++++
> .../grahics/utils/shaderClasses/ColorBurn.pbk  | 149 +++++++++++++
> .../utils/shrClasses/ColorBurnShader.as      |  62 ++++++
> .../graphics/utils/shaderClasses/ColorDodge.pbk | 151 +++++++++++++
> .../utils/shaderClasses/ColorDodgeShader.as     |  61 +++++
> .../graphics/utils/shaderClasses/ColorShader.as |  61 +++++
> .../graphics/utils/shaderClasses/Exclusion.pbk  | 105 +++++++++
> .../utils/shaderClasses/ExclusionShader.as      |  61 +++++
> .../flex/graphics/utils/shaderClasses/Hue.pbk   | 216 ++++++++++++++++++
> .../graphics/utils/shaderClasses/HueShader.as   |  61 +++++
> .../graphics/utils/shaderClasses/Luminosity.pbk | 103 +++++++++
> .../shaderClasses/LuminosityMaskFilter.pbk      | 133 +++++++++++
> .../utils/shaderClasses/LuminosityMaskShader.as |  97 ++++++++
> .../utils/shaderClasses/LuminosityShader.as     |  60 +++++
> .../graphics/utils/shaderClasses/Saturation.pbk | 222 +++++++++++++++++++
> .../utils/shaderClasses/SaturationShader.as     |  60 +++++
> .../graphics/utils/shaderClasses/SoftLight.pbk  | 199 +++++++++++++++++
> .../utils/shaderClasses/SoftLightShader.as      |  60 +++++
> 20 files changed, 1972 insertions(+)
>---------------------------------------------------------------------
>
>
>http://git-wip-us.apachrg/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/build.xml
>----------------------------------------------------------------------
>diff --git a/frameworks/projects/Graphics/build.xml
>b/frameworks/projects/Graphics/build.xml
>index b47b813..01cbeb5 100644
>--- a/frameworks/projects/Graphics/build.xml
>+++ b/frameworks/projects/Graphics/build.xml
>@@ -83,6 +83,7 @@
>             <arg value="+env.AIR_HOME=${env.AIR_HOME}" />
>             <arg value="-define=COMPILE::SWF,true" />
>            <arg value="-define=COMPILE::JS,false" />
>+            <arg 
lue="-compiler.byte-array-embed-class=org.apache.flex.core.ByteArrayAsse
>t" />
>         </compc>
>         <copy file="${basedir}/target/${target.name}"
>tofile="${FLEXJS_HOME}/frameworks/libs/${target.name}" />
>     </target>
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/GraphicsClasses.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as
>b/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as
>index 3b87a56..5836c9e 100644
>--- a/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as
>+++ b/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as
>@@ -41,6 +41,15 @@ internal class GraphicsClasses
>       COMPILE::SWF
>       {
>               import org.apache.flex.graphics.utils.PathHelper; PathHelper;
>+              import 
>org.apache.flex.graphics.utils.shaderClasses.ColorBurnShader;
>ColorBurnShader;
>+              import 
>org.apache.flex.graphics.utils.shaderClasses.ColorDodgeShader;
>ColorDodgeShader;
>+              import org.apache.flex.graphics.utils.shaderClasses.ColorShader;
>ColorShader;
>+              import 
>org.apache.flex.graphics.utils.shaderClasses.ExclusionShader;
>ExclusionShader;
>+              import org.apache.flex.graphics.utils.shaderClasses.HueShader;
>HueShader;
>+              import 
>org.apache.flex.graphics.utils.shaderClasses.LuminosityMaskShader;
>LuminosityMaskShader;
>+              import 
>org.apache.flex.graphics.utils.shaderClasses.LuminosityShader;
>LuminosityShader;
>+              import 
>org.apach.flex.graphics.utils.shaderClasses.SaturationShader;
>SaturationShader;
>+              import 
>org.apache.flex.graphics.utils.shaderClasses.SoftLightShader;
>SoftLightShader;
>       }
>       import org.apache.flex.graphics.QuadrticCurve; QuadraticCurve;
>       import org.apache.flex.graphics.ICircle; ICircle;
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/orgapache/flex/graphics/utils/shaderClass
>es/Color.pbk
>---------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Color.pbk
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Color.pbk
>new file mode 100644
>index 0000000..daedc3f
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Color.pbk
>@@-0,0 +1,101 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed uder the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+kernel Color
>+<   namespace : "Flame";
>+    vendor :"Adobe";
>+    version : 1;
>+    description : "Color blend mode";
>+>
>+{
>+    input image4 dst;
>+    input image4 src;
>+    output pixel4 result;
>+
>+    // PB bytecode can't do functions, use macros to define common
>functions
>+    // gets the max number out of the three
>+    #define max3( x, y, z ) ( max((x), max((y), (z))) )
>+    // gets the min number out of the three
>+    #define min3( x, y,z ) ( min((x), min((y), (z))) )
>+
>+    // gets the max number out of th three elements in a vector
>+    #define max3v(C) ( max3((C.x), (C.y) (C.z)) )
>+    // gets the min number out of the three elements in a vectr
>+    #define min3v(C) ( min3((C.x), (C.y), (C.z)) )
>+
>+    // Sat - returns float, takes n a pixel3, or pixel4
>+    #define saturation(C) ( (max3((C.r), (C.g), (C.b) - min3((C.r),
>(C.g), (C.b))) )
>+
>+    // Luminance - returns floattakes in a pixel3, or pixel4
>+    #define luminance(C) ( (((C.r) * 0.3) + ((C.g) * 0.59) + ((C.b) *
>0.11)) )
>+
>+    void
>+    evaluatePixel()
>+    {
>+        pixel4 a = sampleNearest(dst,outCoord()); // cb
>+        pixel4 b = sampleNearest(src,outCoord()); // cs
>+        
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+        pixel3 cb = a.rgb;
>+        pixel3 cs = b.rgb;
>+        if (a. > 0.0) {
>+            cb.rgb = a.rgb / a.a;
>+        }
>+        if (b.a > 0.0) {
>+            cs.rgb = b.rgb / b.a;
>+        }
>+        
>+        // dstA' = (1-srcA)*dstA + srcA
>+        result.a = (1.0-b.a)*a.a + b.a;
>+        
>+        // adjustment -> adjustedcs
>+        float3 adjVec = (cb - cs);
>+        float adjustment = luminance(adjVec);
>+        float3 adjustedcs = cs + adjustment;
>+        
>+        // Blend()
>+        
>+        /* --------------------------------------------------------
>+         * void clipcolor(inout float3 color)
>+         *     clips color.
>+         * nput and output float3 color_cl
>+         * 
>+         * -------------------------------------------------------- */
>+        float3 color_cl = adjustedcs;
>+        float lum_cl = luminance(color_cl);
>+        float3 lumVec = float3(lum_cl, lum_cl, lum_cl);
>+        float mini = min3v(color_cl);
>+        float maxi = max3v(color_cl);
>+        if (mini < 0.0) {
>+            mini = lum_cl - mini;
>+            // max(..., 0.0000001) prevents divide by 0
>+            color_cl = lumVec + (color_cl - lumVec)*lum_cl/max(mini,
>0.0000001);
>+        }
>+        if (maxi > 1.0) {
>+            maxi = maxi - lum_cl;
>+            // max(..., 0.0000001) prevents divide by 0
>+           color_cl = lumVec + (color_cl - lumVec)*(1.0 -
>lum_cl)/max(maxi, 0.0000001);
>+        }
>+        // end clipcolor - result: color_cl ---------------------- //
>+               
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP +
>srcA*dstA*Blend(srcCP/srcA, dstCP/dstA)
>+        result.rgb = ((1.0-b.a)*a.rgb) + ((1.0-a.a)*b.rgb) +
>b.a*a.a*color_cl.rgb;
>+    }
>+}
>\ No newline at end of file
>
>htt://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/ColorBurn.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorBurn.pbk
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorBurn.pbk
>new file mode 100644
>index 0000000..99445c2
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorBurn.pbk
>@@ -0,0 +1,149 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BAIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>implied.
>+//  See the License for the specific language governig permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+
>+kernel ColorBurn
>+
>+<   namespace : "Flame";
>+
>+    vendor : "Adobe";
>+
>+    version : 1;
>+
>+    description : "ColorBurn blend mode";
>+
>+>
>+
>+{
>+
>+    input image4 dst;
>+
>+    input image4 src;
>+
>+    output pixel4 result;
>+
>+
>+
>+    void
>+
>+    evaluatePixel()
>+
>+    {
>+
>+        pixel4 a = sampleNearest(dst,outCoord()); //cb
>+
>+        pixel4 b = sampleNearest(src,outCoord()); //cs
>+
>+        
>+
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+
>+        pixel3 cb = a.rgb;
>+
>+        pixel3 cs = b.rgb;
>+
>+        if (a.a > 0.0) {
>+
>+            cb.rgb = a.rgb / a.a;
>+
>+        }
>+
>+        if (b.a > 0.0) {
>+
>+            cs.rgb = b.rgb / b.a;
>+
>+        }
>+
>+        
>+
>+        // dstA' = (1-srcA)*dstA + srcA
>+
>+        result.a = (1.0-b.a)*a.a + b.a;
>+
>+        
>+
>+        // temp for Blend(srcCP/srcA, dstCP/dstA)
>+
>+        pixel3 blendResult;
>+
>+
>+
>+        // = 1, if cb = 1 (*** this case is AE/PS and AGM only, not PDF
>spec)
>+
>+        // = 0, if (1 ??? cb) >= cs
>+
>+        // = (1 ??? cb) / cs, otherwise
>+
>+        if (cb.r == 1.0) {
>+
>+            blendResult.r = 1.0;
>+
>+        } else if ((1.0 - cb.r) >= cs.r) {
>+
>+            blendResult.r = 0.0;
>+
>+        } else {
>+
>+            blendResult.r = 1.0 - (1.0 - cb.r) / cs.r;
>+
>+        }
>+
>+        
>+
>+        if (cb.g == 1.0) {
>+
>+            blendResult.g = 1.0;
>+
>+        } else f ((1.0 - cb.g) >= cs.g) {
>+
>+            blendResult.g = 0.0;
>+
>+        } else {
>+
>+           blendResult.g = 1.0 - (1.0 - cb.g) / cs.g;
>+
>+        }
>+
>+        
>+
>+        if (cb.b == 1.0) {
>+
>+            blendResult.b = 1.0;
>+
>+        } else if ((1.0 - cb.b) >= cs.b) {
>+
>+            blendResult.b = 0.0;
>+
>+        } else {
>+
>+            blendResult.b = 1.0 - (1.0 - cb.b) / cs.b;
>+
>+        }
>+
>+        
>+
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP +
>srcA*dstA*Blend(srcCP/rcA, dstCP/dstA)
>+
>+        result.rgb = (1.0-b.a)*a.rgb + (1.0-a.a)*b.rgb +
>b.a*a.a*blendResult.rgb;
>+
>+    }
>+
>+}
>+
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/ColorBurnShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorBurnShader.as
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorBurnShader.as
>new file mode 100644
>index 0000000..bb96659
>--- /dev/null
>+++ 
>b/frameworks/proects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorBurnShader.as
>@@ -0,0 +1,62 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownerhip.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on n "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithr express or
>implied.
>+//  See the License for the specific languagegoverning permissions and
>+//  limitations under the License.
>+//
>+////////////////////////////////////////////////////////////////////////
>///////
>+
>+package orapache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+      
>+/**
>+ *  Creas a blend shader that is equivalent to
>+ *  the 'Color Burn' blend mode for RGB premultiplied colors available
>+ *  in Adobe Creative Suite tools. This blend mode is not native to
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe
>Photoshop. 
>+ * 
>+ *  <p>The 'colorburn' blend mode can be set on Flex groups and graphic
>+ *  elements and the visual appearance in tools like Adobe Ilustrator
>and 
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/ColorBurnShaderExample.mxml
>+ */
>+public class ColorBurnShader extends flash.display.Shader
>+{
>+    [Embed(source="ColorBurn.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+      /**
>+       *  Constructor.
>+       *  
>+       *  @langversion 3.0
>+       *  @playerversion Flash 10
>+       *  @playerversion AIR 1.5
>+       *  @productversion Flex 4
>+       */
>+    public function ColorBurnShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+      
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/ColorDodge.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorDodge.pbk
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorDodge.pbk
>new file mode 100644
>index 0000000..11d6ca2
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorDodge.pbk
>@@ -0,0 +1,151 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+
>+kernel ColorDodge
>+
>+<   namespace : "Flame";
>+
>+    vendor : "Adobe";
>+
>+    version : 1;
>+
>+    description : "ColorDodge blend mode";
>+
>+>
>+
>+{
>+
>+    input image4 dst;
>+
>+    input image4 src;
>+
>+    output pixel4 result;
>+
>+
>+
>+    void
>+
>+    evaluatePixel()
>+
>+    {
>+
>+        pixel4 a = sampleNearest(dst,outCoord()); // cb
>+
>+        pixel4 b = sampleNearest(src,outCoord()); // cs
>+
>+        
>+
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+
>+        pixel3 cb = a.rgb;
>+
>+        pixel3 cs = b.rgb;
>+
>+        if (a.a > 0.0) {
>+
>+            cb.rgb = a.rgb / a.a;
>+
>+        }
>+
>+        if (b.a > 0.0) {
>+
>+            cs.rgb = b.rgb / b.a;
>+
>+        }
>+
>+        
>+
>+        // dstA' = (1-srcA)*dstA + srcA
>+
>+        result.a = (1.0-b.a)*a.a + b.a;
>+
>+        
>+
>+        // temp for Blend(srcCP/srcA, dstCP/dstA)
>+
>+        pixel3 blendResult;
>+
>+        
>+
>+        // = 0, if cb = 0 (*** this case is AE/PS and AGM only, not PDF
>spec)
>+
>+        // = 1, if cb >= (1 -cs)
>+
>+        // = cb / (1 -cs), otherwise
>+
>+        
>+
>+        if (cb.r == 0.0) {
>+
>+            blendResult.r = 0.0;
>+
>+        } else if ( cb.r >= (1.0 - cs.r)) {
>+
>+            blendResult.r = 1.0;
>+
>+        } else {
>+
>+            blendResult.r = cb.r / (1.0 - cs.r);
>+
>+        }
>+
>+        
>+
>+        if (cb.g == 0.0) {
>+
>+            blendResult.g = 0.0;
>+
>+        } else if ( cb.g >= (1.0 - cs.g)) {
>+
>+            blendResult.g = 1.0;
>+
>+        } else {
>+
>+            blendResult.g = cb.g / (1.0 - cs.g);
>+
>+        }
>+
>+        
>+
>+        if (cb.b == 0.0) {
>+
>+            blendResult.b = 0.0;
>+
>+        } else if ( cb.b >= (1.0 - cs.b)) {
>+
>+            blendResult.b = 1.0;
>+
>+        } else {
>+
>+            blendResult.b = cb.b / (1.0 - cs.b);
>+
>+        }
>+
>+                
>+
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP +
>srcA*dstA*Blend(srcCP/srcA, dstCP/dstA)
>+
>+        result.rgb = (1.0-b.a)*a.rgb + (1.0-a.a)*b.rgb +
>b.a*a.a*blendResult.rgb;
>+
>+    }
>+
>+}
>+
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/ColorDodgeShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorDodgeShader.as
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorDodgeShader.as
>new file mode 100644
>index 0000000..8d32620
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorDodgeShader.as
>@@ -0,0 +1,61 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+/**
>+ *  Creates a blend shader that is equivalent to
>+ *  the 'Color Dodge' blend mode for RGB premultiplied colors available
>+ *  in Adobe Creative Suite tools. This blend mode is not native to
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe
>Photoshop. 
>+ * 
>+ *  <p>The 'colordodge' blend mode can be set on Flex groups and graphic
> 
>+ *  elements. The visual appearance in tools like Adobe Illustrator and
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/ColorDodgeShaderExample.mxml
>+ */
>+public class ColorDodgeShader extends flash.display.Shader
>+{
>+    [Embed(source="ColorDodge.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+    /**
>+     *  Constructor.
>+     *  
>+     *  @langversion 3.0
>+     *  @playerversion Flash 10
>+     *  @playerversion AIR 1.5
>+     *  @productversion Flex 4
>+     */
>+    public function ColorDodgeShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/ColorShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorShader.as
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorShader.as
>new file mode 100644
>index 0000000..81d0607
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ColorShader.as
>@@ -0,0 +1,61 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+/**
>+ *  The ColorShader class creates a blend shader that is equivalent to
>+ *  the 'Color' blend mode for RGB premultiplied colors available
>+ *  in Adobe Creative Suite tools. This blend mode is not native to
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe
>Photoshop. 
>+ * 
>+ *  The 'color' blend mode can be set on Flex groups and graphic
>+ *  elements and the visual appearance in tools like Adobe Illustrator
>and 
>+ *  Adobe Photoshop will be mimicked through this blend shader.
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/ColorShaderExample.mxml
>+ */
>+public class ColorShader extends flash.display.Shader
>+{
>+    [Embed(source="Color.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+    /**
>+     *  Constructor.
>+     *  
>+     *  @langversion 3.0
>+     *  @playerversion Flash 10
>+     *  @playerversion AIR 1.5
>+     *  @productversion Flex 4
>+     */
>+    public function ColorShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+    
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/Exclusion.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Exclusion.pbk
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Exclusion.pbk
>new file mode 100644
>index 0000000..d7fc369
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Exclusion.pbk
>@@ -0,0 +1,105 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+
>+kernel Exclusion
>+
>+<   namespace : "Flame";
>+
>+    vendor : "Adobe";
>+
>+    version : 1;
>+
>+    description : "Exclusion blend mode";
>+
>+>
>+
>+{
>+
>+    input image4 dst;
>+
>+    input image4 src;
>+
>+    output pixel4 result;
>+
>+
>+
>+    void
>+
>+    evaluatePixel()
>+
>+    {
>+
>+        pixel4 a = sampleNearest(dst,outCoord()); // cb
>+
>+        pixel4 b = sampleNearest(src,outCoord()); // cs
>+
>+        
>+
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+
>+        //pixel3 cb, cs;
>+
>+        pixel3 cb = a.rgb;
>+
>+        pixel3 cs = b.rgb;
>+
>+
>+
>+        if (a.a > 0.0) {
>+
>+            cb.rgb = a.rgb / a.a;
>+
>+        }
>+
>+        if (b.a > 0.0) {
>+
>+            cs.rgb = b.rgb / b.a;
>+
>+        }
>+
>+        
>+
>+        // dstA' = (1-srcA)*dstA + srcA
>+
>+        result.a = (1.0-b.a)*a.a + b.a;
>+
>+        
>+
>+        // temp for Blend(srcCP/srcA, dstCP/dstA)
>+
>+        float3 blendResult;
>+
>+        
>+
>+        // cb + cs ??? 2*cs*cb
>+
>+        blendResult.rgb = cb.rgb + cs.rgb - 2.0*cs.rgb*cb.rgb;
>+
>+        
>+
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP +
>srcA*dstA*Blend(srcCP/srcA, dstCP/dstA)
>+
>+        result.rgb = ((1.0-b.a)*a.rgb) + ((1.0-a.a)*b.rgb) +
>b.a*a.a*blendResult.rgb;
>+
>+    }
>+
>+}
>+
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/ExclusionShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ExclusionShader.as
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ExclusionShader.as
>new file mode 100644
>index 0000000..198a48d
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/ExclusionShader.as
>@@ -0,0 +1,61 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+    
>+/**
>+ *  Creates a blend shader that is equivalent to
>+ *  the 'Exclusion' blend mode for RGB premultiplied colors available
>+ *  in Adobe Creative Suite tools. This blend mode is not native to
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe
>Photoshop. 
>+ * 
>+ *  <p>The 'exclusion' blend mode can be set on Flex groups and graphic
>+ *  elements. The visual appearance in tools like Adobe Illustrator and
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/ExclusionShaderExample.mxml
>+ */
>+public class ExclusionShader extends flash.display.Shader
>+{
>+    [Embed(source="Exclusion.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+    /**
>+     *  Constructor.
>+     *  
>+     *  @langversion 3.0
>+     *  @playerversion Flash 10
>+     *  @playerversion AIR 1.5
>+     *  @productversion Flex 4
>+     */
>+    public function ExclusionShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+    
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/Hue.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Hue.pbk
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Hue.pbk
>new file mode 100644
>index 0000000..5ef71f6
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Hue.pbk
>@@ -0,0 +1,216 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+kernel Hue
>+<   namespace : "Flame";
>+    vendor : "Adobe";
>+    version : 1;
>+    description : "Hue blend mode";
>+>
>+{
>+    input image4 dst;
>+    input image4 src;
>+    output pixel4 result;
>+
>+    // PB bytecode can't do functions, use macros to define common 
>functions
>+    // gets the max number out of the three
>+    #define max3( x, y, z ) ( max((x), max((y), (z))) )
>+    // gets the min number out of the three
>+    #define min3( x, y, z ) ( min((x), min((y), (z))) )
>+
>+    // gets the max number out of the three elements in a vector
>+    #define max3v(C) ( max3((C.x), (C.y), (C.z)) )
>+    // gets the min number out of the three elements in a vector
>+    #define min3v(C) ( min3((C.x), (C.y), (C.z)) )
>+
>+    // Sat - returns float, takes in a pixel3, or pixel4
>+    #define saturation(C) ( (max3((C.r), (C.g), (C.b)) - min3((C.r), 
>(C.g), (C.b))) )
>+
>+    // Luminance - returns float, takes in a pixel3, or pixel4
>+    #define luminance(C) ( (((C.r) * 0.3) + ((C.g) * 0.59) + ((C.b) * 
>0.11)) )
>+
>+    void
>+    evaluatePixel()
>+    {
>+        pixel4 a = sampleNearest(dst,outCoord()); // cb
>+        pixel4 b = sampleNearest(src,outCoord()); // cs
>+        
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+        pixel3 cb, cs;
>+        if (a.a > 0.0) {
>+            cb.rgb = a.rgb / a.a;
>+        }
>+        if (b.a > 0.0) {
>+            cs.rgb = b.rgb / b.a;
>+        }
>+        
>+        // dstA' = (1-srcA)*dstA + srcA
>+        result.a = (1.0-b.a)*a.a + b.a;
>+        
>+        
>+        // setSat(cs, Sat(cb))
>+        
>+        // setSat (setSatColor, sat) -> setSatResult
>+        /* --------------------------------------------------------
>+         * void setsaturation(inout float3 color, in float satVal)
>+         *     makes color have the target saturation.
>+         * input and output of float3 color
>+         * input of the target saturation
>+         *
>+         * --------------------------------------------------------
>+         void setsatcomponents(inout float minComp, inout float midComp, 
>inout float maxComp, in float satVal)
>+         {
>+             midComp -= minComp;
>+             maxComp -= minComp;
>+             minComp = 0.0;
>+             if (maxComp > 0.0) {
>+                 // max(..., 0.0000001) prevents divide by 0
>+                 midComp *= satVal/max(maxComp, 0.0000001);
>+                 maxComp = satVal;
>+             }
>+         }
>+         */
>+
>+        float3 color = cs.rgb;
>+        float satVal = saturation(cb);
>+
>+        if (color.x <= color.y) {
>+            if (color.y <= color.z) {
>+                // x <= y <= z
>+                // setsatcomponents(color.x, color.y, color.z, satVal);
>+                // min, mid, max, val
>+                
>+                color.y -= color.x;
>+                color.z -= color.x;
>+                color.x = 0.0;
>+                if (color.z > 0.0) {
>+                    // max(..., 0.0000001) prevents divide by 0
>+                    color.y *= satVal/max(color.z, 0.0000001);
>+                    color.z = satVal;
>+                }
>+                
>+            } else {
>+                if (color.x <= color.z) {
>+                    // x <= z <= y
>+                    // setsatcomponents(color.x, color.z, color.y, 
>satVal);
>+                    // min, mid, max, value
>+                    
>+                    color.z -= color.x;
>+                    color.y -= color.x;
>+                    color.x = 0.0;
>+                    if (color.y > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.z *= satVal/max(color.y, 0.0000001);
>+                        color.y = satVal;
>+                    }
>+                } else {
>+                    // z <= x <= y
>+                    // setsatcomponents(color.z, color.x, color.y, 
>satVal);
>+                    // min, mid, max, val
>+                    
>+                    color.x -= color.z;
>+                    color.y -= color.z;
>+                    color.z = 0.0;
>+                    if (color.y > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.x *= satVal/max(color.y, 0.0000001);
>+                        color.y = satVal;
>+                    }
>+                }
>+            }
>+        } else {
>+            if (color.x <= color.z) {
>+                // y <= x <= z
>+                // setsatcomponents(color.y, color.x, color.z, satVal);
>+                
>+                color.x -= color.y;
>+                color.z -= color.y;
>+                color.y = 0.0;
>+                if (color.z > 0.0) {
>+                    // max(..., 0.0000001) prevents divide by 0
>+                    color.x *= satVal/max(color.z, 0.0000001);
>+                    color.z = satVal;
>+                }
>+            } else {
>+                if (color.y <= color.z) {
>+                    // y <= z <= x
>+                    // setsatcomponents(color.y, color.z, color.x, 
>satVal);
>+                    // min, mid, max, val
>+                    
>+                    color.z -= color.y;
>+                    color.x -= color.y;
>+                    color.y = 0.0;
>+                    if (color.x > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.z *= satVal/max(color.x, 0.0000001);
>+                        color.x = satVal;
>+                    }
>+                } else {
>+                    // z <= y <= x
>+                    // setsatcomponents(color.z, color.y, color.x, 
>satVal);
>+                    // min, mid, max, val
>+                    
>+                    color.y -= color.z;
>+                    color.x -= color.z;
>+                    color.z = 0.0;
>+                    if (color.x > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.y *= satVal/max(color.x, 0.0000001);
>+                        color.x = satVal;
>+                    }
>+                }
>+            }
>+        }
>+        // end setSaturation - result: color ---------------------- //
>+        
>+        // intermediate adjustment (setSatResult) -> adjustedcs
>+        float3 adjVec = (cb - color);
>+        float adjustment = luminance(adjVec);
>+        float3 adjustedcs = color + adjustment;
>+        
>+        // ClipRGB(adjustedcs) -> blendResult
>+        
>+        /* --------------------------------------------------------
>+         * void clipcolor(inout float3 color)
>+         *     clips color.
>+         * input and output float3 color_cl
>+         * 
>+         * -------------------------------------------------------- */
>+        float3 color_cl = adjustedcs;
>+        float lum_cl = luminance(color_cl);
>+        float3 lumVec = float3(lum_cl, lum_cl, lum_cl);
>+        float mini = min3v(color_cl);
>+        float maxi = max3v(color_cl);
>+        if (mini < 0.0) {
>+            mini = lum_cl - mini;
>+            // max(..., 0.0000001) prevents divide by 0
>+            color_cl = lumVec + (color_cl - lumVec)*lum_cl/max(mini, 
>0.0000001);
>+        }
>+        if (maxi > 1.0) {
>+            maxi = maxi - lum_cl;
>+            // max(..., 0.0000001) prevents divide by 0
>+            color_cl = lumVec + (color_cl - lumVec)*(1.0 - 
>lum_cl)/max(maxi, 0.0000001);
>+        }
>+        // end clipcolor - result: color_cl ---------------------- //
>+        
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP + 
>srcA*dstA*Blend(srcCP/srcA, dstCP/dstA)
>+        result.rgb = ((1.0-b.a)*a.rgb) + ((1.0-a.a)*b.rgb) + 
>b.a*a.a*color_cl.rgb;
>+    }
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/HueShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/HueShader.as 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/HueShader.as
>new file mode 100644
>index 0000000..7c61804
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/HueShader.as
>@@ -0,0 +1,61 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+/**
>+ *  Creates a blend shader that is equivalent to 
>+ *  the 'Hue' blend mode for RGB premultiplied colors available 
>+ *  in Adobe Creative Suite tools. This blend mode is not native to 
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe 
>Photoshop. 
>+ * 
>+ *  <p>The 'hue' blend mode can be set on Flex groups and graphic  
>+ *  elements. The visual appearance in tools like Adobe Illustrator and 
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>  
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/HueShaderExample.mxml
>+ */
>+public class HueShader extends flash.display.Shader
>+{
>+    [Embed(source="Hue.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+    /**
>+     *  Constructor. 
>+     *  
>+     *  @langversion 3.0
>+     *  @playerversion Flash 10
>+     *  @playerversion AIR 1.5
>+     *  @productversion Flex 4
>+     */
>+    public function HueShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+    
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/Luminosity.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Luminosity.pbk 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Luminosity.pbk
>new file mode 100644
>index 0000000..586f35d
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Luminosity.pbk
>@@ -0,0 +1,103 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+kernel Luminosity
>+<   namespace : "Flame";
>+    vendor : "Adobe";
>+    version : 1;
>+    description : "Luminosity blend mode";
>+>
>+{
>+    input image4 dst;
>+    input image4 src;
>+    output pixel4 result;
>+
>+    // PB bytecode can't do functions, use macros to define common 
>functions
>+    // gets the max number out of the three
>+    #define max3( x, y, z ) ( max((x), max((y), (z))) )
>+    // gets the min number out of the three
>+    #define min3( x, y, z ) ( min((x), min((y), (z))) )
>+
>+    // gets the max number out of the three elements in a vector
>+    #define max3v(C) ( max3((C.x), (C.y), (C.z)) )
>+    // gets the min number out of the three elements in a vector
>+    #define min3v(C) ( min3((C.x), (C.y), (C.z)) )
>+
>+    // Sat - returns float, takes in a pixel3, or pixel4
>+    #define saturation(C) ( (max3((C.r), (C.g), (C.b)) - min3((C.r), 
>(C.g), (C.b))) )
>+
>+    // Luminance - returns float, takes in a pixel3, or pixel4
>+    #define luminance(C) ( (((C.r) * 0.3) + ((C.g) * 0.59) + ((C.b) * 
>0.11)) )
>+
>+    void
>+    evaluatePixel()
>+    {
>+        pixel4 a = sampleNearest(dst,outCoord()); // cb
>+        pixel4 b = sampleNearest(src,outCoord()); // cs
>+        
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+        pixel3 cb = a.rgb;
>+        pixel3 cs = b.rgb;
>+        if (a.a > 0.0) {
>+            cb.rgb = a.rgb / a.a;
>+        }
>+        if (b.a > 0.0) {
>+            cs.rgb = b.rgb / b.a;
>+        }
>+        
>+        // dstA' = (1-srcA)*dstA + srcA
>+        result.a = (1.0-b.a)*a.a + b.a;
>+        
>+        // adjustment
>+        // color = color + lum_cb - luminance(color);
>+        // dstColorOld - dstColor
>+        float3 adjVec = cs.rgb - cb.rgb;
>+        float adjustment = luminance(adjVec);
>+        float3 adjustedColor = cb + adjustment;
>+        
>+        // ClipRGB(adjustedColor) -> color_cl
>+        
>+        /* --------------------------------------------------------
>+         * void clipcolor(inout float3 color)
>+         *     clips color.
>+         * input and output float3 color_cl
>+         * 
>+         * -------------------------------------------------------- */
>+        float3 color_cl = adjustedColor;
>+        float lum_cl = luminance(color_cl);
>+        float3 lumVec = float3(lum_cl, lum_cl, lum_cl);
>+        float mini = min3v(color_cl);
>+        float maxi = max3v(color_cl);
>+        if (mini < 0.0) {
>+            mini = lum_cl - mini;
>+            // max(..., 0.0000001) prevents divide by 0
>+            color_cl = lumVec + (color_cl - lumVec)*lum_cl/max(mini, 
>0.0000001);
>+        }
>+        if (maxi > 1.0) {
>+            maxi = maxi - lum_cl;
>+            // max(..., 0.0000001) prevents divide by 0
>+            color_cl = lumVec + (color_cl - lumVec)*(1.0 - 
>lum_cl)/max(maxi, 0.0000001);
>+        }
>+        // end clipcolor - result: color_cl ---------------------- //
>+            
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP + 
>srcA*dstA*Blend(srcCP/srcA, dstCP/dstA)
>+        result.rgb = ((1.0-b.a)*a.rgb) + ((1.0-a.a)*b.rgb) + 
>b.a*a.a*color_cl.rgb;
>+    }
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/LuminosityMaskFilter.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityMaskFilter.pbk 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityMaskFilter.pbk
>new file mode 100644
>index 0000000..10757a6
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityMaskFilter.pbk
>@@ -0,0 +1,133 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+
>+kernel LuminosityMaskFilter
>+
>+<   namespace : "Flame";
>+
>+    vendor : "Adobe";
>+
>+    version : 0;
>+
>+    description : "Luminosity Mask filter - Flex SDK";
>+
>+>
>+
>+{
>+
>+    parameter int mode <
>+
>+        minValue:int(0);
>+
>+        maxValue:int(3);
>+
>+        defaultValue:int(0);
>+
>+    >;
>+
>+
>+
>+    input image4 mask;
>+
>+    output pixel4 result;
>+
>+
>+
>+    void
>+
>+    evaluatePixel()
>+
>+    {
>+
>+        result = sampleNearest(mask, outCoord());
>+
>+
>+
>+        // AI Luminosity mask calculation
>+
>+        // input is artwork mask argb
>+
>+        // Flex will only use alpha channel in an "alpha" mask
>+
>+        // calculate new alpha channel using AI luminosity calculation
>+
>+
>+
>+        // invert option is mode bit 1
>+
>+        // clip option is mode bit 2
>+
>+
>+
>+        // if (clip != invert) background = 0 else background = 1
>+
>+        // luminosity = 0.3*red + 0.59*green + 0.11*blue
>+
>+        // output alpha = alpha*luminosity + (1-alpha)*background;
>+
>+        // if (invert) output alpha = 1 - output alpha
>+
>+
>+
>+        // calculate alpha*luminosity for result argb
>+
>+        // in flash, the mask artwork is premultiplied
>+
>+        // so we use luminosity and not alpha*luminosity
>+
>+        float alphaLum = (0.3 * result.r) + (0.59 * result.g) + (0.11 * 
>result.b);
>+
>+        
>+
>+        // mode 0 - clip 0, invert 0, background 1 = alpha*luminosity + 
>(1-alpha)*1
>+
>+        if (mode == 0)
>+
>+            result.a = 1.0 - result.a + alphaLum;
>+
>+        
>+
>+        // mode 1 - clip 0, invert 1, background 0 = 1 - 
>(alpha*luminosity + (1-alpha)*0)
>+
>+        if (mode == 1)
>+
>+           result.a = 1.0 - alphaLum;
>+
>+        
>+
>+        // mode 2 - clip 1, invert 0, background 0 = alpha*luminosity + 
>(1-alpha)*0
>+
>+        if (mode == 2) 
>+
>+            result.a = alphaLum;
>+
>+        
>+
>+        // mode 3 - clip 1, invert 1, background 1 = 1 - 
>(alpha*luminosity + (1-alpha)*1)
>+
>+        if (mode == 3)
>+
>+           result.a = result.a - alphaLum;
>+
>+    }
>+
>+}
>+
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/LuminosityMaskShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityMaskShader.as 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityMaskShader.as
>new file mode 100644
>index 0000000..dec94ed
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityMaskShader.as
>@@ -0,0 +1,97 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+/**
>+ *  Creates a blend shader that is equivalent 
>+ *  to the luminosity masking option (also known as soft masking) 
>available  
>+ *  in Adobe Creative Suite tools. This mask type is not native to 
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe 
>Photoshop. 
>+ * 
>+ *  <p>A luminosity mask type can be set on Flex groups and graphic  
>+ *  elements. The visual appearance in tools like Adobe Illustrator and 
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>
>+ *  
>+ *  @see spark.primitives.supportClasses.GraphicElement#maskType
>+ *  @see spark.components.supportClasses.GroupBase#maskType 
>+ *  
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/LuminosityMaskShaderExample.mxml
>+ */
>+
>+public class LuminosityMaskShader extends Shader
>+{
>+    [Embed(source="LuminosityMaskFilter.pbj", 
>mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+
>+      /**
>+       *  Constructor. 
>+       *  
>+       *  @langversion 3.0
>+       *  @playerversion Flash 10
>+       *  @playerversion AIR 1.5
>+       *  @productversion Flex 4
>+       */
>+    public function LuminosityMaskShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+
>+    /**
>+     *  A convenience field that takes into account whether 
>luminosityClip and/or
>+     *  luminosityInvert are on or off. 
>+     * 
>+     *  <ul>
>+     *   <li>mode 0 = luminosityClip off, luminosityInvert off</li>
>+     *   <li>mode 1 = luminosityClip off, luminosityInvert on</li>
>+     *   <li>mode 2 = luminosityClip on, luminosityInvert off</li>
>+     *   <li>mode 3 = luminosityClip on, luminosityInvert on </li>
>+     *  </ul>
>+     * 
>+     *  @see 
>spark.primitives.supportClasses.GraphicElement#luminosityClip
>+     *  @see 
>spark.primitives.supportClasses.GraphicElement#luminosityInvert
>+     *  @see spark.components.supportClasses.GroupBase#luminosityClip 
>+     *  @see spark.components.supportClasses.GroupBase#luminosityInvert
>+       * 
>+       *  @langversion 3.0
>+       *  @playerversion Flash 10
>+       *  @playerversion AIR 1.5
>+       *  @productversion Flex 4
>+     */
>+    public function get mode():int
>+    {
>+        return this.data.mode.value;
>+    }
>+
>+    public function set mode(v:int):void
>+    {
>+              if (mode ==-1)
>+                              return; 
>+        this.data.mode.value=[v];
>+    }
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/LuminosityShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityShader.as 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityShader.as
>new file mode 100644
>index 0000000..cdf9a25
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/LuminosityShader.as
>@@ -0,0 +1,60 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+/**
>+ *  Creates a blend shader that is equivalent to 
>+ *  the 'Luminosity' blend mode for RGB premultiplied colors available 
>+ *  in Adobe Creative Suite tools. This blend mode is not native to 
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe 
>Photoshop. 
>+ * 
>+ *  <p>The 'luminosity' blend mode can be set on Flex groups and graphic 
> 
>+ *  elements. The visual appearance in tools like Adobe Illustrator and 
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>  
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/LuminosityShaderExample.mxml
>+ */
>+public class LuminosityShader extends flash.display.Shader
>+{
>+    [Embed(source="Luminosity.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+    /**
>+     *  Constructor. 
>+     *  
>+     *  @langversion 3.0
>+     *  @playerversion Flash 10
>+     *  @playerversion AIR 1.5
>+     *  @productversion Flex 4
>+     */
>+    public function LuminosityShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/Saturation.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Saturation.pbk 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Saturation.pbk
>new file mode 100644
>index 0000000..e9d3866
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/Saturation.pbk
>@@ -0,0 +1,222 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+kernel Saturation
>+<   namespace : "Flame";
>+    vendor : "Adobe";
>+    version : 1;
>+    description : "Saturation blend mode";
>+>
>+{
>+    input image4 dst;
>+    input image4 src;
>+    output pixel4 result;
>+
>+    // PB bytecode can't do functions, use macros to define common 
>functions
>+    // gets the max number out of the three
>+    #define max3( x, y, z ) ( max((x), max((y), (z))) )
>+    // gets the min number out of the three
>+    #define min3( x, y, z ) ( min((x), min((y), (z))) )
>+
>+    // gets the max number out of the three elements in a vector
>+    #define max3v(C) ( max3((C.x), (C.y), (C.z)) )
>+    // gets the min number out of the three elements in a vector
>+    #define min3v(C) ( min3((C.x), (C.y), (C.z)) )
>+
>+    // Sat - returns float, takes in a pixel3, or pixel4
>+    #define saturation(C) ( (max3((C.r), (C.g), (C.b)) - min3((C.r), 
>(C.g), (C.b))) )
>+
>+    // Luminance - returns float, takes in a pixel3, or pixel4
>+    #define luminance(C) ( (((C.r) * 0.3) + ((C.g) * 0.59) + ((C.b) * 
>0.11)) )
>+
>+    void
>+    evaluatePixel()
>+    {
>+        pixel4 a = sampleNearest(dst,outCoord()); // cb
>+        pixel4 b = sampleNearest(src,outCoord()); // cs
>+        
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+        pixel3 cb = a.rgb;
>+        pixel3 cs = b.rgb;
>+        if (a.a > 0.0) {
>+            cb.rgb = a.rgb / a.a;
>+        }
>+        if (b.a > 0.0) {
>+            cs.rgb = b.rgb / b.a;
>+        }
>+        
>+        // dstA' = (1-srcA)*dstA + srcA
>+        result.a = (1.0-b.a)*a.a + b.a;
>+        
>+        // record old version of cb
>+        //float3 old_cb.rgb = cb.rgb;
>+        
>+        // SetSat(cb, Sat(cs))
>+        
>+        // setSat (setSatColor, sat) -> setSatResult
>+        /* --------------------------------------------------------
>+         * void setsaturation(inout float3 color, in float satVal)
>+         *     makes color have the target saturation.
>+         * input and output of float3 color
>+         * input of the target saturation
>+         *
>+         * --------------------------------------------------------
>+         void setsatcomponents(inout float minComp, inout float midComp, 
>inout float maxComp, in float satVal)
>+         {
>+             midComp -= minComp;
>+             maxComp -= minComp;
>+             minComp = 0.0;
>+             if (maxComp > 0.0) {
>+                 // max(..., 0.0000001) prevents divide by 0
>+                 midComp *= satVal/max(maxComp, 0.0000001);
>+                 maxComp = satVal;
>+             }
>+         }
>+         */
>+
>+        float3 color = cb.rgb;
>+        float satVal = saturation(cs);
>+
>+        if (color.x <= color.y) {
>+            if (color.y <= color.z) {
>+                // x <= y <= z
>+                // setsatcomponents(color.x, color.y, color.z, satVal);
>+                // min, mid, max, val
>+                
>+                color.y -= color.x;
>+                color.z -= color.x;
>+                color.x = 0.0;
>+                if (color.z > 0.0) {
>+                    // max(..., 0.0000001) prevents divide by 0
>+                    color.y *= satVal/max(color.z, 0.0000001);
>+                    color.z = satVal;
>+                }
>+                
>+            } else {
>+                if (color.x <= color.z) {
>+                    // x <= z <= y
>+                    // setsatcomponents(color.x, color.z, color.y, 
>satVal);
>+                    // min, mid, max, value
>+                    
>+                    color.z -= color.x;
>+                    color.y -= color.x;
>+                    color.x = 0.0;
>+                    if (color.y > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.z *= satVal/max(color.y, 0.0000001);
>+                        color.y = satVal;
>+                    }
>+                } else {
>+                    // z <= x <= y
>+                    // setsatcomponents(color.z, color.x, color.y, 
>satVal);
>+                    // min, mid, max, val
>+                    
>+                    color.x -= color.z;
>+                    color.y -= color.z;
>+                    color.z = 0.0;
>+                    if (color.y > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.x *= satVal/max(color.y, 0.0000001);
>+                        color.y = satVal;
>+                    }
>+                }
>+            }
>+        } else {
>+            if (color.x <= color.z) {
>+                // y <= x <= z
>+                // setsatcomponents(color.y, color.x, color.z, satVal);
>+                
>+                color.x -= color.y;
>+                color.z -= color.y;
>+                color.y = 0.0;
>+                if (color.z > 0.0) {
>+                    // max(..., 0.0000001) prevents divide by 0
>+                    color.x *= satVal/max(color.z, 0.0000001);
>+                    color.z = satVal;
>+                }
>+            } else {
>+                if (color.y <= color.z) {
>+                    // y <= z <= x
>+                    // setsatcomponents(color.y, color.z, color.x, 
>satVal);
>+                    // min, mid, max, val
>+                    
>+                    color.z -= color.y;
>+                    color.x -= color.y;
>+                    color.y = 0.0;
>+                    if (color.x > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.z *= satVal/max(color.x, 0.0000001);
>+                        color.x = satVal;
>+                    }
>+                } else {
>+                    // z <= y <= x
>+                    // setsatcomponents(color.z, color.y, color.x, 
>satVal);
>+                    // min, mid, max, val
>+                    
>+                    color.y -= color.z;
>+                    color.x -= color.z;
>+                    color.z = 0.0;
>+                    if (color.x > 0.0) {
>+                        // max(..., 0.0000001) prevents divide by 0
>+                        color.y *= satVal/max(color.x, 0.0000001);
>+                        color.x = satVal;
>+                    }
>+                }
>+            }
>+        }
>+        // end setSaturation - result: color ---------------------- //
>+        
>+        // adjustment
>+        //color = color + lum_cb - luminance(color);
>+        //dstColorOld - dstColor
>+        float3 adjVec = cb.rgb - color.rgb;
>+        float adjustment = luminance(adjVec);
>+        float3 adjustedColor = color + adjustment;
>+        
>+        // ClipRGB(adjustedColor) -> color_cl
>+        
>+        /* --------------------------------------------------------
>+         * void clipcolor(inout float3 color)
>+         *     clips color.
>+         * input and output float3 color_cl
>+         * 
>+         * -------------------------------------------------------- */
>+        float3 color_cl = adjustedColor;
>+        float lum_cl = luminance(color_cl);
>+        float3 lumVec = float3(lum_cl, lum_cl, lum_cl);
>+        float mini = min3v(color_cl);
>+        float maxi = max3v(color_cl);
>+        if (mini < 0.0) {
>+            mini = lum_cl - mini;
>+            // max(..., 0.0000001) prevents divide by 0
>+            color_cl = lumVec + (color_cl - lumVec)*lum_cl/max(mini, 
>0.0000001);
>+        }
>+        if (maxi > 1.0) {
>+            maxi = maxi - lum_cl;
>+            // max(..., 0.0000001) prevents divide by 0
>+            color_cl = lumVec + (color_cl - lumVec)*(1.0 - 
>lum_cl)/max(maxi, 0.0000001);
>+        }
>+        // end clipcolor - result: color_cl ---------------------- //
>+        
>+        
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP + 
>srcA*dstA*Blend(srcCP/srcA, dstCP/dstA)
>+        result .rgb = ((1.0-b.a)*a.rgb) + ((1.0-a.a)*b.rgb) + 
>b.a*a.a*color_cl.rgb;
>+    }
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/SaturationShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SaturationShader.as 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SaturationShader.as
>new file mode 100644
>index 0000000..02646ae
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SaturationShader.as
>@@ -0,0 +1,60 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+/**
>+ *  Creates a blend shader that is equivalent to 
>+ *  the 'Saturation' blend mode for RGB premultiplied colors available 
>+ *  in Adobe Creative Suite tools. This blend mode is not native to 
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe 
>Photoshop. 
>+ * 
>+ *  <p>The 'saturation' blend mode can be set on Flex groups and graphic 
> 
>+ *  elements. The visual appearance in tools like Adobe Illustrator and 
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>  
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/SaturationShaderExample.mxml
>+ */
>+public class SaturationShader extends flash.display.Shader
>+{
>+    [Embed(source="Saturation.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+    /**
>+     *  Constructor. 
>+     *  
>+     *  @langversion 3.0
>+     *  @playerversion Flash 10
>+     *  @playerversion AIR 1.5
>+     *  @productversion Flex 4
>+     */
>+    public function SaturationShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+}
>+}
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/SoftLight.pbk
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SoftLight.pbk 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SoftLight.pbk
>new file mode 100644
>index 0000000..e98735a
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SoftLight.pbk
>@@ -0,0 +1,199 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+<languageVersion : 1.0;>
>+
>+kernel SoftLight
>+
>+<   namespace : "Flame";
>+
>+    vendor : "Adobe";
>+
>+    version : 1;
>+
>+    description : "SoftLight blend mode";
>+
>+>
>+
>+{
>+
>+    input image4 dst;
>+
>+    input image4 src;
>+
>+    output pixel4 result;
>+
>+
>+
>+    void
>+
>+    evaluatePixel()
>+
>+    {
>+
>+        pixel4 a = sampleNearest(dst,outCoord()); // cb
>+
>+        pixel4 b = sampleNearest(src,outCoord()); // cs
>+
>+        
>+
>+        // remove premultiplied (srcCP/srcA, dstCP/dstA)
>+
>+        pixel3 cb = a.rgb;
>+
>+        pixel3 cs = b.rgb;
>+
>+        if (a.a > 0.0) {
>+
>+            cb.rgb = a.rgb / a.a;
>+
>+        }
>+
>+        if (b.a > 0.0) {
>+
>+            cs.rgb = b.rgb / b.a;
>+
>+        }
>+
>+        
>+
>+        // dstA' = (1-srcA)*dstA + srcA
>+
>+        result.a = (1.0-b.a)*a.a + b.a;
>+
>+        
>+
>+        // B(cs,cb) = cb ??? (1 ??? 2*cs)*cb*(1-cb), if (cs <= 0.5)
>+
>+        //          = cb + (2*cs ??? 1)*(D(cb) ??? cb), otherwise
>+
>+        
>+
>+        float3 blendResult;
>+
>+
>+
>+        // red
>+
>+        if (cs.r <= 0.5) {
>+
>+            blendResult.r = cb.r - (1.0 - 
>clamp(2.0*cs.r,0.0,1.0))*cb.r*(1.0-cb.r);
>+
>+        } else {
>+
>+            // this could be a helper function, but bytecode doesn't 
>support this
>+
>+            // = ((16*x ??? 12)*x +4)*x, if x <= 0.25
>+
>+            // = x**0.5, otherwise
>+
>+            float dcb;
>+
>+            if (cb.r <= 0.25) {
>+
>+                dcb = ((16.0*cb.r - 12.0) *4.0)*cb.r;
>+
>+            } else {
>+
>+                dcb = sqrt(cb.r);
>+
>+            }
>+
>+            
>+
>+            blendResult.r = cb.r + (2.0*cs.r - 1.0)*(dcb - cb.r);
>+
>+        }
>+
>+
>+
>+        // green
>+
>+        if (cs.g <= 0.5) {
>+
>+            blendResult.g = cb.g - (1.0 - 2.0*cs.g)*cb.g*(1.0-cb.g);
>+
>+        } else {
>+
>+            // = ((16*x ??? 12)*x +4)*x, if x <= 0.25
>+
>+            // = x**0.5, otherwise
>+
>+            float dcb;
>+
>+            if (cb.g <= 0.25) {
>+
>+                dcb = ((16.0*cb.g - 12.0) *4.0)*cb.g;
>+
>+            } else {
>+
>+                dcb = sqrt(cb.g);
>+
>+            }
>+
>+            
>+
>+            blendResult.g = cb.g + (2.0*cs.g - 1.0)*(dcb - cb.g);
>+
>+        }
>+
>+
>+
>+        // blue
>+
>+        if (cs.b <= 0.5) {
>+
>+            blendResult.b = cb.b - (1.0 - 2.0*cs.b)*cb.b*(1.0-cb.b);
>+
>+        } else {
>+
>+            // = ((16*x ??? 12)*x +4)*x, if x <= 0.25
>+
>+            // = x**0.5, otherwise
>+
>+            float dcb;
>+
>+            if (cb.b <= 0.25) {
>+
>+                dcb = ((16.0*cb.b - 12.0) *4.0)*cb.b;
>+
>+            } else {
>+
>+                dcb = sqrt(cb.b);
>+
>+            }
>+
>+            
>+
>+            blendResult.b = cb.b + (2.0*cs.b - 1.0)*(dcb - cb.b);
>+
>+        }
>+
>+        
>+
>+        
>+
>+        // dstCP' = (1-srcA)*dstCP + (1-dstA)*srcCP + 
>srcA*dstA*Blend(srcCP/srcA, dstCP/dstA)
>+
>+        result.rgb = (1.0-b.a)*a.rgb + (1.0-a.a)*b.rgb + 
>b.a*a.a*blendResult.rgb;
>+
>+    }
>+
>+}
>+
>
>http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/281c7786/frameworks/
>projects/Graphics/src/main/flex/org/apache/flex/graphics/utils/shaderClass
>es/SoftLightShader.as
>----------------------------------------------------------------------
>diff --git 
>a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SoftLightShader.as 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SoftLightShader.as
>new file mode 100644
>index 0000000..3958cba
>--- /dev/null
>+++ 
>b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/graphics/util
>s/shaderClasses/SoftLightShader.as
>@@ -0,0 +1,60 @@
>+/////////////////////////////////////////////////////////////////////////
>///////
>+//
>+//  Licensed to the Apache Software Foundation (ASF) under one or more
>+//  contributor license agreements.  See the NOTICE file distributed with
>+//  this work for additional information regarding copyright ownership.
>+//  The ASF licenses this file to You under the Apache License, Version 
>2.0
>+//  (the "License"); you may not use this file except in compliance with
>+//  the License.  You may obtain a copy of the License at
>+//
>+//      http://www.apache.org/licenses/LICENSE-2.0
>+//
>+//  Unless required by applicable law or agreed to in writing, software
>+//  distributed under the License is distributed on an "AS IS" BASIS,
>+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>implied.
>+//  See the License for the specific language governing permissions and
>+//  limitations under the License.
>+//
>+/////////////////////////////////////////////////////////////////////////
>///////
>+
>+package org.apache.flex.graphics.utils.shaderClasses
>+{
>+import flash.display.Shader;
>+import org.apache.flex.core.ByteArrayAsset;
>+
>+/**
>+ *  Creates a blend shader that is equivalent to 
>+ *  the 'Soft Light' blend mode for RGB premultiplied colors available 
>+ *  in Adobe Creative Suite tools. This blend mode is not native to 
>Flash, 
>+ *  but is available in tools like Adobe Illustrator and Adobe 
>Photoshop. 
>+ * 
>+ *  <p>The 'softlight' blend mode can be set on Flex groups and graphic  
>+ *  elements. The visual appearance in tools like Adobe Illustrator and 
>+ *  Adobe Photoshop will be mimicked through this blend shader.</p>  
>+ * 
>+ *  @langversion 3.0
>+ *  @playerversion Flash 10
>+ *  @playerversion AIR 1.5
>+ *  @productversion Flex 4
>+ *  
>+ *  @includeExample examples/SoftLightShaderExample.mxml
>+ */
>+public class SoftLightShader extends flash.display.Shader
>+{
>+    [Embed(source="SoftLight.pbj", mimeType="application/octet-stream")]
>+    private static var ShaderClass:Class;
>+    
>+    /**
>+     *  Constructor. 
>+     *  
>+     *  @langversion 3.0
>+     *  @playerversion Flash 10
>+     *  @playerversion AIR 1.5
>+     *  @productversion Flex 4
>+     */
>+    public function SoftLightShader()
>+    {
>+        super(new ShaderClass());
>+    }
>+}
>+}
>

Reply via email to