I don’t understand what you mean.

These files were just copied from the flex-sdk.

Huh! The pbj files were not committed. It looks like they were excluded in the 
.gitignore.

I just fixed that.

> On Mar 7, 2017, at 6:02 PM, Alex Harui <aha...@adobe.com> wrote:
> 
> 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 <mailto:ha...@apache.org>" 
> <ha...@apache.org <mailto: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 
>> <http://git-wip-us.apache.org/repos/asf/flex-asjs/repo>
>> Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/281c7786 
>> <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 
>> <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 
>> <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 <mailto:ha...@in-tools.com>>
>> Authored: Tue Mar 7 12:25:26 2017 +0200
>> Committer: Harbs <ha...@in-tools.com <mailto: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/ 
>> <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/ 
>> <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/ 
>> <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 
>> <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/ 
>> <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 
>> <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/ 
>> <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 
>> <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