X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcc%2Foutput%2Fshader.h;h=0384366feb035de586b88c8d17a6d6fdbaf85159;hb=1afa4dd80ef85af7c90efaea6959db1d92330844;hp=3039c80ef2c790f3506babb6b4f714fd8571280b;hpb=90762837333c13ccf56f2ad88e4481fc71e8d281;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/cc/output/shader.h b/src/cc/output/shader.h index 3039c80..0384366 100644 --- a/src/cc/output/shader.h +++ b/src/cc/output/shader.h @@ -38,6 +38,25 @@ enum SamplerType { NumSamplerTypes = 4 }; +enum BlendMode { + BlendModeNormal, + BlendModeOverlay, + BlendModeDarken, + BlendModeLighten, + BlendModeColorDodge, + BlendModeColorBurn, + BlendModeHardLight, + BlendModeSoftLight, + BlendModeDifference, + BlendModeExclusion, + BlendModeMultiply, + BlendModeHue, + BlendModeSaturation, + BlendModeColor, + BlendModeLuminosity, + NumBlendModes +}; + // Note: The highp_threshold_cache must be provided by the caller to make // the caching multi-thread/context safe in an easy low-overhead manner. // The caller must make sure to clear highp_threshold_cache to 0, so it can be @@ -279,7 +298,32 @@ class VertexShaderVideoTransform { DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform); }; -class FragmentTexAlphaBinding { +class FragmentTexBlendMode { + public: + int backdrop_location() const { return backdrop_location_; } + int backdrop_rect_location() const { return backdrop_rect_location_; } + + BlendMode blend_mode() const { return blend_mode_; } + void set_blend_mode(BlendMode blend_mode) { blend_mode_ = blend_mode; } + bool is_default_blend_mode() const { return blend_mode_ == BlendModeNormal; } + + protected: + FragmentTexBlendMode(); + + std::string SetBlendModeFunctions(std::string shader_string) const; + + int backdrop_location_; + int backdrop_rect_location_; + + private: + BlendMode blend_mode_; + + std::string GetHelperFunctions() const; + std::string GetBlendFunction() const; + std::string GetBlendFunctionBodyForRGB() const; +}; + +class FragmentTexAlphaBinding : public FragmentTexBlendMode { public: FragmentTexAlphaBinding(); @@ -297,7 +341,7 @@ class FragmentTexAlphaBinding { DISALLOW_COPY_AND_ASSIGN(FragmentTexAlphaBinding); }; -class FragmentTexColorMatrixAlphaBinding { +class FragmentTexColorMatrixAlphaBinding : public FragmentTexBlendMode { public: FragmentTexColorMatrixAlphaBinding(); @@ -317,7 +361,7 @@ class FragmentTexColorMatrixAlphaBinding { int color_offset_location_; }; -class FragmentTexOpaqueBinding { +class FragmentTexOpaqueBinding : public FragmentTexBlendMode { public: FragmentTexOpaqueBinding(); @@ -335,7 +379,7 @@ class FragmentTexOpaqueBinding { DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding); }; -class FragmentTexBackgroundBinding { +class FragmentTexBackgroundBinding : public FragmentTexBlendMode { public: FragmentTexBackgroundBinding(); @@ -417,7 +461,7 @@ class FragmentShaderRGBATexSwizzleOpaque : public FragmentTexOpaqueBinding { TexCoordPrecision precision, SamplerType sampler) const; }; -class FragmentShaderRGBATexAlphaAA { +class FragmentShaderRGBATexAlphaAA : public FragmentTexBlendMode { public: FragmentShaderRGBATexAlphaAA(); @@ -437,7 +481,7 @@ class FragmentShaderRGBATexAlphaAA { DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaAA); }; -class FragmentTexClampAlphaAABinding { +class FragmentTexClampAlphaAABinding : public FragmentTexBlendMode { public: FragmentTexClampAlphaAABinding(); @@ -473,7 +517,7 @@ class FragmentShaderRGBATexClampSwizzleAlphaAA TexCoordPrecision precision, SamplerType sampler) const; }; -class FragmentShaderRGBATexAlphaMask { +class FragmentShaderRGBATexAlphaMask : public FragmentTexBlendMode { public: FragmentShaderRGBATexAlphaMask(); std::string GetShaderString( @@ -502,7 +546,7 @@ class FragmentShaderRGBATexAlphaMask { DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask); }; -class FragmentShaderRGBATexAlphaMaskAA { +class FragmentShaderRGBATexAlphaMaskAA : public FragmentTexBlendMode { public: FragmentShaderRGBATexAlphaMaskAA(); std::string GetShaderString( @@ -531,7 +575,8 @@ class FragmentShaderRGBATexAlphaMaskAA { DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA); }; -class FragmentShaderRGBATexAlphaMaskColorMatrixAA { +class FragmentShaderRGBATexAlphaMaskColorMatrixAA + : public FragmentTexBlendMode { public: FragmentShaderRGBATexAlphaMaskColorMatrixAA(); std::string GetShaderString( @@ -562,7 +607,7 @@ class FragmentShaderRGBATexAlphaMaskColorMatrixAA { int color_offset_location_; }; -class FragmentShaderRGBATexAlphaColorMatrixAA { +class FragmentShaderRGBATexAlphaColorMatrixAA : public FragmentTexBlendMode { public: FragmentShaderRGBATexAlphaColorMatrixAA(); std::string GetShaderString( @@ -583,7 +628,7 @@ class FragmentShaderRGBATexAlphaColorMatrixAA { int color_offset_location_; }; -class FragmentShaderRGBATexAlphaMaskColorMatrix { +class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentTexBlendMode { public: FragmentShaderRGBATexAlphaMaskColorMatrix(); std::string GetShaderString( @@ -614,7 +659,7 @@ class FragmentShaderRGBATexAlphaMaskColorMatrix { int color_offset_location_; }; -class FragmentShaderYUVVideo { +class FragmentShaderYUVVideo : public FragmentTexBlendMode { public: FragmentShaderYUVVideo(); std::string GetShaderString( @@ -641,8 +686,7 @@ class FragmentShaderYUVVideo { DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVVideo); }; - -class FragmentShaderYUVAVideo { +class FragmentShaderYUVAVideo : public FragmentTexBlendMode { public: FragmentShaderYUVAVideo(); std::string GetShaderString( @@ -672,7 +716,7 @@ class FragmentShaderYUVAVideo { DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVAVideo); }; -class FragmentShaderColor { +class FragmentShaderColor : public FragmentTexBlendMode { public: FragmentShaderColor(); std::string GetShaderString( @@ -689,7 +733,7 @@ class FragmentShaderColor { DISALLOW_COPY_AND_ASSIGN(FragmentShaderColor); }; -class FragmentShaderColorAA { +class FragmentShaderColorAA : public FragmentTexBlendMode { public: FragmentShaderColorAA(); std::string GetShaderString( @@ -706,7 +750,7 @@ class FragmentShaderColorAA { DISALLOW_COPY_AND_ASSIGN(FragmentShaderColorAA); }; -class FragmentShaderCheckerboard { +class FragmentShaderCheckerboard : public FragmentTexBlendMode { public: FragmentShaderCheckerboard(); std::string GetShaderString(