OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CC_OUTPUT_SHADER_H_ | 5 #ifndef CC_OUTPUT_SHADER_H_ |
6 #define CC_OUTPUT_SHADER_H_ | 6 #define CC_OUTPUT_SHADER_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 int mask_sampler = -1; | 69 int mask_sampler = -1; |
70 int mask_tex_coord_scale = -1; | 70 int mask_tex_coord_scale = -1; |
71 int mask_tex_coord_offset = -1; | 71 int mask_tex_coord_offset = -1; |
72 int matrix = -1; | 72 int matrix = -1; |
73 int alpha = -1; | 73 int alpha = -1; |
74 int color_matrix = -1; | 74 int color_matrix = -1; |
75 int color_offset = -1; | 75 int color_offset = -1; |
76 int tex_transform = -1; | 76 int tex_transform = -1; |
77 int backdrop = -1; | 77 int backdrop = -1; |
78 int backdrop_rect = -1; | 78 int backdrop_rect = -1; |
| 79 int original_backdrop = -1; |
79 }; | 80 }; |
80 | 81 |
81 // Note: The highp_threshold_cache must be provided by the caller to make | 82 // Note: The highp_threshold_cache must be provided by the caller to make |
82 // the caching multi-thread/context safe in an easy low-overhead manner. | 83 // the caching multi-thread/context safe in an easy low-overhead manner. |
83 // The caller must make sure to clear highp_threshold_cache to 0, so it can be | 84 // The caller must make sure to clear highp_threshold_cache to 0, so it can be |
84 // reinitialized, if a new or different context is used. | 85 // reinitialized, if a new or different context is used. |
85 CC_EXPORT TexCoordPrecision | 86 CC_EXPORT TexCoordPrecision |
86 TexCoordPrecisionRequired(gpu::gles2::GLES2Interface* context, | 87 TexCoordPrecisionRequired(gpu::gles2::GLES2Interface* context, |
87 int* highp_threshold_cache, | 88 int* highp_threshold_cache, |
88 int highp_threshold_min, | 89 int highp_threshold_min, |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 private: | 340 private: |
340 int matrix_location_; | 341 int matrix_location_; |
341 int tex_matrix_location_; | 342 int tex_matrix_location_; |
342 | 343 |
343 DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform); | 344 DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform); |
344 }; | 345 }; |
345 | 346 |
346 class FragmentTexBlendMode { | 347 class FragmentTexBlendMode { |
347 public: | 348 public: |
348 int backdrop_location() const { return backdrop_location_; } | 349 int backdrop_location() const { return backdrop_location_; } |
| 350 int original_backdrop_location() const { return original_backdrop_location_; } |
349 int backdrop_rect_location() const { return backdrop_rect_location_; } | 351 int backdrop_rect_location() const { return backdrop_rect_location_; } |
350 | 352 |
351 BlendMode blend_mode() const { return blend_mode_; } | 353 BlendMode blend_mode() const { return blend_mode_; } |
352 void set_blend_mode(BlendMode blend_mode) { blend_mode_ = blend_mode; } | 354 void set_blend_mode(BlendMode blend_mode) { blend_mode_ = blend_mode; } |
353 bool has_blend_mode() const { return blend_mode_ != BLEND_MODE_NONE; } | 355 bool has_blend_mode() const { return blend_mode_ != BLEND_MODE_NONE; } |
| 356 void set_mask_for_background(bool mask_for_background) { |
| 357 mask_for_background_ = mask_for_background; |
| 358 } |
| 359 bool mask_for_background() const { return mask_for_background_; } |
354 | 360 |
355 protected: | 361 protected: |
356 FragmentTexBlendMode(); | 362 FragmentTexBlendMode(); |
357 | 363 |
358 std::string SetBlendModeFunctions(std::string shader_string) const; | 364 std::string SetBlendModeFunctions(std::string shader_string) const; |
359 | 365 |
360 int backdrop_location_; | 366 int backdrop_location_; |
| 367 int original_backdrop_location_; |
361 int backdrop_rect_location_; | 368 int backdrop_rect_location_; |
362 | 369 |
363 private: | 370 private: |
364 BlendMode blend_mode_; | 371 BlendMode blend_mode_; |
| 372 bool mask_for_background_; |
365 | 373 |
366 std::string GetHelperFunctions() const; | 374 std::string GetHelperFunctions() const; |
367 std::string GetBlendFunction() const; | 375 std::string GetBlendFunction() const; |
368 std::string GetBlendFunctionBodyForRGB() const; | 376 std::string GetBlendFunctionBodyForRGB() const; |
369 }; | 377 }; |
370 | 378 |
371 class FragmentTexAlphaBinding : public FragmentTexBlendMode { | 379 class FragmentTexAlphaBinding : public FragmentTexBlendMode { |
372 public: | 380 public: |
373 FragmentTexAlphaBinding(); | 381 FragmentTexAlphaBinding(); |
374 | 382 |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 static std::string GetShaderHead(); | 598 static std::string GetShaderHead(); |
591 static std::string GetShaderBody(); | 599 static std::string GetShaderBody(); |
592 }; | 600 }; |
593 | 601 |
594 class FragmentShaderRGBATexAlphaMask : public FragmentTexBlendMode { | 602 class FragmentShaderRGBATexAlphaMask : public FragmentTexBlendMode { |
595 public: | 603 public: |
596 FragmentShaderRGBATexAlphaMask(); | 604 FragmentShaderRGBATexAlphaMask(); |
597 std::string GetShaderString( | 605 std::string GetShaderString( |
598 TexCoordPrecision precision, SamplerType sampler) const; | 606 TexCoordPrecision precision, SamplerType sampler) const; |
599 static std::string GetShaderHead(); | 607 static std::string GetShaderHead(); |
600 static std::string GetShaderBody(); | 608 static std::string GetShaderBody(bool mask_for_background); |
601 void FillLocations(ShaderLocations* locations) const; | 609 void FillLocations(ShaderLocations* locations) const; |
602 void Init(gpu::gles2::GLES2Interface* context, | 610 void Init(gpu::gles2::GLES2Interface* context, |
603 unsigned program, | 611 unsigned program, |
604 int* base_uniform_index); | 612 int* base_uniform_index); |
605 int alpha_location() const { return alpha_location_; } | 613 int alpha_location() const { return alpha_location_; } |
606 int sampler_location() const { return sampler_location_; } | 614 int sampler_location() const { return sampler_location_; } |
607 int mask_sampler_location() const { return mask_sampler_location_; } | 615 int mask_sampler_location() const { return mask_sampler_location_; } |
608 int mask_tex_coord_scale_location() const { | 616 int mask_tex_coord_scale_location() const { |
609 return mask_tex_coord_scale_location_; | 617 return mask_tex_coord_scale_location_; |
610 } | 618 } |
(...skipping 10 matching lines...) Expand all Loading... |
621 | 629 |
622 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask); | 630 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask); |
623 }; | 631 }; |
624 | 632 |
625 class FragmentShaderRGBATexAlphaMaskAA : public FragmentTexBlendMode { | 633 class FragmentShaderRGBATexAlphaMaskAA : public FragmentTexBlendMode { |
626 public: | 634 public: |
627 FragmentShaderRGBATexAlphaMaskAA(); | 635 FragmentShaderRGBATexAlphaMaskAA(); |
628 std::string GetShaderString( | 636 std::string GetShaderString( |
629 TexCoordPrecision precision, SamplerType sampler) const; | 637 TexCoordPrecision precision, SamplerType sampler) const; |
630 static std::string GetShaderHead(); | 638 static std::string GetShaderHead(); |
631 static std::string GetShaderBody(); | 639 static std::string GetShaderBody(bool mask_for_background); |
632 void FillLocations(ShaderLocations* locations) const; | 640 void FillLocations(ShaderLocations* locations) const; |
633 void Init(gpu::gles2::GLES2Interface* context, | 641 void Init(gpu::gles2::GLES2Interface* context, |
634 unsigned program, | 642 unsigned program, |
635 int* base_uniform_index); | 643 int* base_uniform_index); |
636 int alpha_location() const { return alpha_location_; } | 644 int alpha_location() const { return alpha_location_; } |
637 int sampler_location() const { return sampler_location_; } | 645 int sampler_location() const { return sampler_location_; } |
638 int mask_sampler_location() const { return mask_sampler_location_; } | 646 int mask_sampler_location() const { return mask_sampler_location_; } |
639 int mask_tex_coord_scale_location() const { | 647 int mask_tex_coord_scale_location() const { |
640 return mask_tex_coord_scale_location_; | 648 return mask_tex_coord_scale_location_; |
641 } | 649 } |
(...skipping 11 matching lines...) Expand all Loading... |
653 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA); | 661 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA); |
654 }; | 662 }; |
655 | 663 |
656 class FragmentShaderRGBATexAlphaMaskColorMatrixAA | 664 class FragmentShaderRGBATexAlphaMaskColorMatrixAA |
657 : public FragmentTexBlendMode { | 665 : public FragmentTexBlendMode { |
658 public: | 666 public: |
659 FragmentShaderRGBATexAlphaMaskColorMatrixAA(); | 667 FragmentShaderRGBATexAlphaMaskColorMatrixAA(); |
660 std::string GetShaderString( | 668 std::string GetShaderString( |
661 TexCoordPrecision precision, SamplerType sampler) const; | 669 TexCoordPrecision precision, SamplerType sampler) const; |
662 static std::string GetShaderHead(); | 670 static std::string GetShaderHead(); |
663 static std::string GetShaderBody(); | 671 static std::string GetShaderBody(bool mask_for_background); |
664 void FillLocations(ShaderLocations* locations) const; | 672 void FillLocations(ShaderLocations* locations) const; |
665 void Init(gpu::gles2::GLES2Interface* context, | 673 void Init(gpu::gles2::GLES2Interface* context, |
666 unsigned program, | 674 unsigned program, |
667 int* base_uniform_index); | 675 int* base_uniform_index); |
668 int alpha_location() const { return alpha_location_; } | 676 int alpha_location() const { return alpha_location_; } |
669 int sampler_location() const { return sampler_location_; } | 677 int sampler_location() const { return sampler_location_; } |
670 int mask_sampler_location() const { return mask_sampler_location_; } | 678 int mask_sampler_location() const { return mask_sampler_location_; } |
671 int mask_tex_coord_scale_location() const { | 679 int mask_tex_coord_scale_location() const { |
672 return mask_tex_coord_scale_location_; | 680 return mask_tex_coord_scale_location_; |
673 } | 681 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
709 int color_matrix_location_; | 717 int color_matrix_location_; |
710 int color_offset_location_; | 718 int color_offset_location_; |
711 }; | 719 }; |
712 | 720 |
713 class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentTexBlendMode { | 721 class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentTexBlendMode { |
714 public: | 722 public: |
715 FragmentShaderRGBATexAlphaMaskColorMatrix(); | 723 FragmentShaderRGBATexAlphaMaskColorMatrix(); |
716 std::string GetShaderString( | 724 std::string GetShaderString( |
717 TexCoordPrecision precision, SamplerType sampler) const; | 725 TexCoordPrecision precision, SamplerType sampler) const; |
718 static std::string GetShaderHead(); | 726 static std::string GetShaderHead(); |
719 static std::string GetShaderBody(); | 727 static std::string GetShaderBody(bool mask_for_background); |
720 void FillLocations(ShaderLocations* locations) const; | 728 void FillLocations(ShaderLocations* locations) const; |
721 void Init(gpu::gles2::GLES2Interface* context, | 729 void Init(gpu::gles2::GLES2Interface* context, |
722 unsigned program, | 730 unsigned program, |
723 int* base_uniform_index); | 731 int* base_uniform_index); |
724 int alpha_location() const { return alpha_location_; } | 732 int alpha_location() const { return alpha_location_; } |
725 int sampler_location() const { return sampler_location_; } | 733 int sampler_location() const { return sampler_location_; } |
726 int mask_sampler_location() const { return mask_sampler_location_; } | 734 int mask_sampler_location() const { return mask_sampler_location_; } |
727 int mask_tex_coord_scale_location() const { | 735 int mask_tex_coord_scale_location() const { |
728 return mask_tex_coord_scale_location_; | 736 return mask_tex_coord_scale_location_; |
729 } | 737 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 int tex_transform_location_; | 875 int tex_transform_location_; |
868 int frequency_location_; | 876 int frequency_location_; |
869 int color_location_; | 877 int color_location_; |
870 | 878 |
871 DISALLOW_COPY_AND_ASSIGN(FragmentShaderCheckerboard); | 879 DISALLOW_COPY_AND_ASSIGN(FragmentShaderCheckerboard); |
872 }; | 880 }; |
873 | 881 |
874 } // namespace cc | 882 } // namespace cc |
875 | 883 |
876 #endif // CC_OUTPUT_SHADER_H_ | 884 #endif // CC_OUTPUT_SHADER_H_ |
OLD | NEW |