Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: cc/output/shader.h

Issue 2605343002: The great shader refactor: Delete instances of GetShaderSource (Closed)
Patch Set: Just GetShaderSource Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/output/shader.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/macros.h" 10 #include "base/macros.h"
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 int matrix_location() const { return matrix_location_; } 347 int matrix_location() const { return matrix_location_; }
348 int tex_matrix_location() const { return tex_matrix_location_; } 348 int tex_matrix_location() const { return tex_matrix_location_; }
349 349
350 private: 350 private:
351 int matrix_location_; 351 int matrix_location_;
352 int tex_matrix_location_; 352 int tex_matrix_location_;
353 353
354 DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform); 354 DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform);
355 }; 355 };
356 356
357 class FragmentTexBlendMode { 357 class FragmentShaderBase {
358 public: 358 public:
359 std::string GetShaderString(TexCoordPrecision precision,
360 SamplerType sampler) const;
361
359 int backdrop_location() const { return backdrop_location_; } 362 int backdrop_location() const { return backdrop_location_; }
360 int original_backdrop_location() const { return original_backdrop_location_; } 363 int original_backdrop_location() const { return original_backdrop_location_; }
361 int backdrop_rect_location() const { return backdrop_rect_location_; } 364 int backdrop_rect_location() const { return backdrop_rect_location_; }
362 365
363 BlendMode blend_mode() const { return blend_mode_; } 366 BlendMode blend_mode() const { return blend_mode_; }
364 void set_blend_mode(BlendMode blend_mode) { blend_mode_ = blend_mode; } 367 void set_blend_mode(BlendMode blend_mode) { blend_mode_ = blend_mode; }
365 bool has_blend_mode() const { return blend_mode_ != BLEND_MODE_NONE; } 368 bool has_blend_mode() const { return blend_mode_ != BLEND_MODE_NONE; }
366 void set_mask_for_background(bool mask_for_background) { 369 void set_mask_for_background(bool mask_for_background) {
367 mask_for_background_ = mask_for_background; 370 mask_for_background_ = mask_for_background;
368 } 371 }
369 bool mask_for_background() const { return mask_for_background_; } 372 bool mask_for_background() const { return mask_for_background_; }
370 373
371 protected: 374 protected:
372 FragmentTexBlendMode(); 375 FragmentShaderBase();
376 virtual std::string GetShaderSource() const = 0;
373 377
374 std::string SetBlendModeFunctions(const std::string& shader_string) const; 378 std::string SetBlendModeFunctions(const std::string& shader_string) const;
375 379
376 int backdrop_location_; 380 int backdrop_location_;
377 int original_backdrop_location_; 381 int original_backdrop_location_;
378 int backdrop_rect_location_; 382 int backdrop_rect_location_;
379 383
380 private: 384 private:
381 BlendMode blend_mode_; 385 BlendMode blend_mode_;
382 bool mask_for_background_; 386 bool mask_for_background_;
383 387
384 std::string GetHelperFunctions() const; 388 std::string GetHelperFunctions() const;
385 std::string GetBlendFunction() const; 389 std::string GetBlendFunction() const;
386 std::string GetBlendFunctionBodyForRGB() const; 390 std::string GetBlendFunctionBodyForRGB() const;
387 }; 391 };
388 392
389 class FragmentTexAlphaBinding : public FragmentTexBlendMode { 393 class FragmentTexAlphaBinding : public FragmentShaderBase {
390 public: 394 public:
391 FragmentTexAlphaBinding(); 395 FragmentTexAlphaBinding();
392 396
393 void Init(gpu::gles2::GLES2Interface* context, 397 void Init(gpu::gles2::GLES2Interface* context,
394 unsigned program, 398 unsigned program,
395 int* base_uniform_index); 399 int* base_uniform_index);
396 int alpha_location() const { return alpha_location_; } 400 int alpha_location() const { return alpha_location_; }
397 int fragment_tex_transform_location() const { return -1; } 401 int fragment_tex_transform_location() const { return -1; }
398 int sampler_location() const { return sampler_location_; } 402 int sampler_location() const { return sampler_location_; }
399 403
400 private: 404 private:
401 int sampler_location_; 405 int sampler_location_;
402 int alpha_location_; 406 int alpha_location_;
403 407
404 DISALLOW_COPY_AND_ASSIGN(FragmentTexAlphaBinding); 408 DISALLOW_COPY_AND_ASSIGN(FragmentTexAlphaBinding);
405 }; 409 };
406 410
407 class FragmentTexColorMatrixAlphaBinding : public FragmentTexBlendMode { 411 class FragmentTexColorMatrixAlphaBinding : public FragmentShaderBase {
408 public: 412 public:
409 FragmentTexColorMatrixAlphaBinding(); 413 FragmentTexColorMatrixAlphaBinding();
410 414
411 void Init(gpu::gles2::GLES2Interface* context, 415 void Init(gpu::gles2::GLES2Interface* context,
412 unsigned program, 416 unsigned program,
413 int* base_uniform_index); 417 int* base_uniform_index);
414 int alpha_location() const { return alpha_location_; } 418 int alpha_location() const { return alpha_location_; }
415 int color_matrix_location() const { return color_matrix_location_; } 419 int color_matrix_location() const { return color_matrix_location_; }
416 int color_offset_location() const { return color_offset_location_; } 420 int color_offset_location() const { return color_offset_location_; }
417 int fragment_tex_transform_location() const { return -1; } 421 int fragment_tex_transform_location() const { return -1; }
418 int sampler_location() const { return sampler_location_; } 422 int sampler_location() const { return sampler_location_; }
419 423
420 private: 424 private:
421 int sampler_location_; 425 int sampler_location_;
422 int alpha_location_; 426 int alpha_location_;
423 int color_matrix_location_; 427 int color_matrix_location_;
424 int color_offset_location_; 428 int color_offset_location_;
425 }; 429 };
426 430
427 class FragmentTexOpaqueBinding : public FragmentTexBlendMode { 431 class FragmentTexOpaqueBinding : public FragmentShaderBase {
428 public: 432 public:
429 FragmentTexOpaqueBinding(); 433 FragmentTexOpaqueBinding();
430 434
431 void Init(gpu::gles2::GLES2Interface* context, 435 void Init(gpu::gles2::GLES2Interface* context,
432 unsigned program, 436 unsigned program,
433 int* base_uniform_index); 437 int* base_uniform_index);
434 int alpha_location() const { return -1; } 438 int alpha_location() const { return -1; }
435 int fragment_tex_transform_location() const { return -1; } 439 int fragment_tex_transform_location() const { return -1; }
436 int background_color_location() const { return -1; } 440 int background_color_location() const { return -1; }
437 int sampler_location() const { return sampler_location_; } 441 int sampler_location() const { return sampler_location_; }
438 442
439 private: 443 private:
440 int sampler_location_; 444 int sampler_location_;
441 445
442 DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding); 446 DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding);
443 }; 447 };
444 448
445 class FragmentTexBackgroundBinding : public FragmentTexBlendMode { 449 class FragmentTexBackgroundBinding : public FragmentShaderBase {
446 public: 450 public:
447 FragmentTexBackgroundBinding(); 451 FragmentTexBackgroundBinding();
448 452
449 void Init(gpu::gles2::GLES2Interface* context, 453 void Init(gpu::gles2::GLES2Interface* context,
450 unsigned program, 454 unsigned program,
451 int* base_uniform_index); 455 int* base_uniform_index);
452 int background_color_location() const { return background_color_location_; } 456 int background_color_location() const { return background_color_location_; }
453 int sampler_location() const { return sampler_location_; } 457 int sampler_location() const { return sampler_location_; }
454 458
455 private: 459 private:
456 int background_color_location_; 460 int background_color_location_;
457 int sampler_location_; 461 int sampler_location_;
458 462
459 DISALLOW_COPY_AND_ASSIGN(FragmentTexBackgroundBinding); 463 DISALLOW_COPY_AND_ASSIGN(FragmentTexBackgroundBinding);
460 }; 464 };
461 465
462 class FragmentShaderRGBATexVaryingAlpha : public FragmentTexOpaqueBinding { 466 class FragmentShaderRGBATexVaryingAlpha : public FragmentTexOpaqueBinding {
463 public: 467 private:
464 std::string GetShaderString( 468 std::string GetShaderSource() const override;
465 TexCoordPrecision precision, SamplerType sampler) const;
466 static std::string GetShaderHead();
467 static std::string GetShaderBody();
468 }; 469 };
469 470
470 class FragmentShaderRGBATexPremultiplyAlpha : public FragmentTexOpaqueBinding { 471 class FragmentShaderRGBATexPremultiplyAlpha : public FragmentTexOpaqueBinding {
471 public: 472 private:
472 std::string GetShaderString( 473 std::string GetShaderSource() const override;
473 TexCoordPrecision precision, SamplerType sampler) const;
474 static std::string GetShaderHead();
475 static std::string GetShaderBody();
476 }; 474 };
477 475
478 class FragmentShaderTexBackgroundVaryingAlpha 476 class FragmentShaderTexBackgroundVaryingAlpha
479 : public FragmentTexBackgroundBinding { 477 : public FragmentTexBackgroundBinding {
480 public: 478 private:
481 std::string GetShaderString( 479 std::string GetShaderSource() const override;
482 TexCoordPrecision precision, SamplerType sampler) const;
483 static std::string GetShaderHead();
484 static std::string GetShaderBody();
485 }; 480 };
486 481
487 class FragmentShaderTexBackgroundPremultiplyAlpha 482 class FragmentShaderTexBackgroundPremultiplyAlpha
488 : public FragmentTexBackgroundBinding { 483 : public FragmentTexBackgroundBinding {
489 public: 484 private:
490 std::string GetShaderString( 485 std::string GetShaderSource() const override;
491 TexCoordPrecision precision, SamplerType sampler) const;
492 static std::string GetShaderHead();
493 static std::string GetShaderBody();
494 }; 486 };
495 487
496 class FragmentShaderRGBATexAlpha : public FragmentTexAlphaBinding { 488 class FragmentShaderRGBATexAlpha : public FragmentTexAlphaBinding {
497 public: 489 public:
498 std::string GetShaderString(
499 TexCoordPrecision precision, SamplerType sampler) const;
500 static std::string GetShaderHead();
501 static std::string GetShaderBody();
502 void FillLocations(ShaderLocations* locations) const; 490 void FillLocations(ShaderLocations* locations) const;
491
492 private:
493 std::string GetShaderSource() const override;
503 }; 494 };
504 495
505 class FragmentShaderRGBATexColorMatrixAlpha 496 class FragmentShaderRGBATexColorMatrixAlpha
506 : public FragmentTexColorMatrixAlphaBinding { 497 : public FragmentTexColorMatrixAlphaBinding {
507 public: 498 public:
508 std::string GetShaderString(TexCoordPrecision precision,
509 SamplerType sampler) const;
510 static std::string GetShaderHead();
511 static std::string GetShaderBody();
512 void FillLocations(ShaderLocations* locations) const; 499 void FillLocations(ShaderLocations* locations) const;
500
501 private:
502 std::string GetShaderSource() const override;
513 }; 503 };
514 504
515 class FragmentShaderRGBATexOpaque : public FragmentTexOpaqueBinding { 505 class FragmentShaderRGBATexOpaque : public FragmentTexOpaqueBinding {
516 public: 506 private:
517 std::string GetShaderString( 507 std::string GetShaderSource() const override;
518 TexCoordPrecision precision, SamplerType sampler) const;
519 static std::string GetShaderHead();
520 static std::string GetShaderBody();
521 }; 508 };
522 509
523 class FragmentShaderRGBATex : public FragmentTexOpaqueBinding { 510 class FragmentShaderRGBATex : public FragmentTexOpaqueBinding {
524 public: 511 private:
525 std::string GetShaderString( 512 std::string GetShaderSource() const override;
526 TexCoordPrecision precision, SamplerType sampler) const;
527 static std::string GetShaderHead();
528 static std::string GetShaderBody();
529 }; 513 };
530 514
531 // Swizzles the red and blue component of sampled texel with alpha. 515 // Swizzles the red and blue component of sampled texel with alpha.
532 class FragmentShaderRGBATexSwizzleAlpha : public FragmentTexAlphaBinding { 516 class FragmentShaderRGBATexSwizzleAlpha : public FragmentTexAlphaBinding {
533 public: 517 private:
534 std::string GetShaderString( 518 std::string GetShaderSource() const override;
535 TexCoordPrecision precision, SamplerType sampler) const;
536 static std::string GetShaderHead();
537 static std::string GetShaderBody();
538 }; 519 };
539 520
540 // Swizzles the red and blue component of sampled texel without alpha. 521 // Swizzles the red and blue component of sampled texel without alpha.
541 class FragmentShaderRGBATexSwizzleOpaque : public FragmentTexOpaqueBinding { 522 class FragmentShaderRGBATexSwizzleOpaque : public FragmentTexOpaqueBinding {
542 public: 523 private:
543 std::string GetShaderString( 524 std::string GetShaderSource() const override;
544 TexCoordPrecision precision, SamplerType sampler) const;
545 static std::string GetShaderHead();
546 static std::string GetShaderBody();
547 }; 525 };
548 526
549 class FragmentShaderRGBATexAlphaAA : public FragmentTexBlendMode { 527 class FragmentShaderRGBATexAlphaAA : public FragmentShaderBase {
550 public: 528 public:
551 FragmentShaderRGBATexAlphaAA(); 529 FragmentShaderRGBATexAlphaAA();
552 530
553 void Init(gpu::gles2::GLES2Interface* context, 531 void Init(gpu::gles2::GLES2Interface* context,
554 unsigned program, 532 unsigned program,
555 int* base_uniform_index); 533 int* base_uniform_index);
556 std::string GetShaderString(
557 TexCoordPrecision precision, SamplerType sampler) const;
558 static std::string GetShaderHead();
559 static std::string GetShaderBody();
560 void FillLocations(ShaderLocations* locations) const; 534 void FillLocations(ShaderLocations* locations) const;
561 535
562 int alpha_location() const { return alpha_location_; } 536 int alpha_location() const { return alpha_location_; }
563 int sampler_location() const { return sampler_location_; } 537 int sampler_location() const { return sampler_location_; }
564 538
565 private: 539 private:
540 std::string GetShaderSource() const override;
566 int sampler_location_; 541 int sampler_location_;
567 int alpha_location_; 542 int alpha_location_;
568 543
569 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaAA); 544 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaAA);
570 }; 545 };
571 546
572 class FragmentTexClampAlphaAABinding : public FragmentTexBlendMode { 547 class FragmentTexClampAlphaAABinding : public FragmentShaderBase {
573 public: 548 public:
574 FragmentTexClampAlphaAABinding(); 549 FragmentTexClampAlphaAABinding();
575 550
576 void Init(gpu::gles2::GLES2Interface* context, 551 void Init(gpu::gles2::GLES2Interface* context,
577 unsigned program, 552 unsigned program,
578 int* base_uniform_index); 553 int* base_uniform_index);
579 int alpha_location() const { return alpha_location_; } 554 int alpha_location() const { return alpha_location_; }
580 int sampler_location() const { return sampler_location_; } 555 int sampler_location() const { return sampler_location_; }
581 int fragment_tex_transform_location() const { 556 int fragment_tex_transform_location() const {
582 return fragment_tex_transform_location_; 557 return fragment_tex_transform_location_;
583 } 558 }
584 559
585 private: 560 private:
586 int sampler_location_; 561 int sampler_location_;
587 int alpha_location_; 562 int alpha_location_;
588 int fragment_tex_transform_location_; 563 int fragment_tex_transform_location_;
589 564
590 DISALLOW_COPY_AND_ASSIGN(FragmentTexClampAlphaAABinding); 565 DISALLOW_COPY_AND_ASSIGN(FragmentTexClampAlphaAABinding);
591 }; 566 };
592 567
593 class FragmentShaderRGBATexClampAlphaAA 568 class FragmentShaderRGBATexClampAlphaAA
594 : public FragmentTexClampAlphaAABinding { 569 : public FragmentTexClampAlphaAABinding {
595 public: 570 private:
596 std::string GetShaderString( 571 std::string GetShaderSource() const override;
597 TexCoordPrecision precision, SamplerType sampler) const;
598 static std::string GetShaderHead();
599 static std::string GetShaderBody();
600 }; 572 };
601 573
602 // Swizzles the red and blue component of sampled texel. 574 // Swizzles the red and blue component of sampled texel.
603 class FragmentShaderRGBATexClampSwizzleAlphaAA 575 class FragmentShaderRGBATexClampSwizzleAlphaAA
604 : public FragmentTexClampAlphaAABinding { 576 : public FragmentTexClampAlphaAABinding {
605 public: 577 private:
606 std::string GetShaderString( 578 std::string GetShaderSource() const override;
607 TexCoordPrecision precision, SamplerType sampler) const;
608 static std::string GetShaderHead();
609 static std::string GetShaderBody();
610 }; 579 };
611 580
612 class FragmentShaderRGBATexAlphaMask : public FragmentTexBlendMode { 581 class FragmentShaderRGBATexAlphaMask : public FragmentShaderBase {
613 public: 582 public:
614 FragmentShaderRGBATexAlphaMask(); 583 FragmentShaderRGBATexAlphaMask();
615 std::string GetShaderString(
616 TexCoordPrecision precision, SamplerType sampler) const;
617 static std::string GetShaderHead();
618 static std::string GetShaderBody();
619 void FillLocations(ShaderLocations* locations) const; 584 void FillLocations(ShaderLocations* locations) const;
620 void Init(gpu::gles2::GLES2Interface* context, 585 void Init(gpu::gles2::GLES2Interface* context,
621 unsigned program, 586 unsigned program,
622 int* base_uniform_index); 587 int* base_uniform_index);
623 int alpha_location() const { return alpha_location_; } 588 int alpha_location() const { return alpha_location_; }
624 int sampler_location() const { return sampler_location_; } 589 int sampler_location() const { return sampler_location_; }
625 int mask_sampler_location() const { return mask_sampler_location_; } 590 int mask_sampler_location() const { return mask_sampler_location_; }
626 int mask_tex_coord_scale_location() const { 591 int mask_tex_coord_scale_location() const {
627 return mask_tex_coord_scale_location_; 592 return mask_tex_coord_scale_location_;
628 } 593 }
629 int mask_tex_coord_offset_location() const { 594 int mask_tex_coord_offset_location() const {
630 return mask_tex_coord_offset_location_; 595 return mask_tex_coord_offset_location_;
631 } 596 }
632 597
633 private: 598 private:
599 std::string GetShaderSource() const override;
634 int sampler_location_; 600 int sampler_location_;
635 int mask_sampler_location_; 601 int mask_sampler_location_;
636 int alpha_location_; 602 int alpha_location_;
637 int mask_tex_coord_scale_location_; 603 int mask_tex_coord_scale_location_;
638 int mask_tex_coord_offset_location_; 604 int mask_tex_coord_offset_location_;
639 605
640 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask); 606 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask);
641 }; 607 };
642 608
643 class FragmentShaderRGBATexAlphaMaskAA : public FragmentTexBlendMode { 609 class FragmentShaderRGBATexAlphaMaskAA : public FragmentShaderBase {
644 public: 610 public:
645 FragmentShaderRGBATexAlphaMaskAA(); 611 FragmentShaderRGBATexAlphaMaskAA();
646 std::string GetShaderString(
647 TexCoordPrecision precision, SamplerType sampler) const;
648 static std::string GetShaderHead();
649 static std::string GetShaderBody();
650 void FillLocations(ShaderLocations* locations) const; 612 void FillLocations(ShaderLocations* locations) const;
651 void Init(gpu::gles2::GLES2Interface* context, 613 void Init(gpu::gles2::GLES2Interface* context,
652 unsigned program, 614 unsigned program,
653 int* base_uniform_index); 615 int* base_uniform_index);
654 int alpha_location() const { return alpha_location_; } 616 int alpha_location() const { return alpha_location_; }
655 int sampler_location() const { return sampler_location_; } 617 int sampler_location() const { return sampler_location_; }
656 int mask_sampler_location() const { return mask_sampler_location_; } 618 int mask_sampler_location() const { return mask_sampler_location_; }
657 int mask_tex_coord_scale_location() const { 619 int mask_tex_coord_scale_location() const {
658 return mask_tex_coord_scale_location_; 620 return mask_tex_coord_scale_location_;
659 } 621 }
660 int mask_tex_coord_offset_location() const { 622 int mask_tex_coord_offset_location() const {
661 return mask_tex_coord_offset_location_; 623 return mask_tex_coord_offset_location_;
662 } 624 }
663 625
664 private: 626 private:
627 std::string GetShaderSource() const override;
665 int sampler_location_; 628 int sampler_location_;
666 int mask_sampler_location_; 629 int mask_sampler_location_;
667 int alpha_location_; 630 int alpha_location_;
668 int mask_tex_coord_scale_location_; 631 int mask_tex_coord_scale_location_;
669 int mask_tex_coord_offset_location_; 632 int mask_tex_coord_offset_location_;
670 633
671 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA); 634 DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA);
672 }; 635 };
673 636
674 class FragmentShaderRGBATexAlphaMaskColorMatrixAA 637 class FragmentShaderRGBATexAlphaMaskColorMatrixAA : public FragmentShaderBase {
675 : public FragmentTexBlendMode {
676 public: 638 public:
677 FragmentShaderRGBATexAlphaMaskColorMatrixAA(); 639 FragmentShaderRGBATexAlphaMaskColorMatrixAA();
678 std::string GetShaderString(
679 TexCoordPrecision precision, SamplerType sampler) const;
680 static std::string GetShaderHead();
681 static std::string GetShaderBody();
682 void FillLocations(ShaderLocations* locations) const; 640 void FillLocations(ShaderLocations* locations) const;
683 void Init(gpu::gles2::GLES2Interface* context, 641 void Init(gpu::gles2::GLES2Interface* context,
684 unsigned program, 642 unsigned program,
685 int* base_uniform_index); 643 int* base_uniform_index);
686 int alpha_location() const { return alpha_location_; } 644 int alpha_location() const { return alpha_location_; }
687 int sampler_location() const { return sampler_location_; } 645 int sampler_location() const { return sampler_location_; }
688 int mask_sampler_location() const { return mask_sampler_location_; } 646 int mask_sampler_location() const { return mask_sampler_location_; }
689 int mask_tex_coord_scale_location() const { 647 int mask_tex_coord_scale_location() const {
690 return mask_tex_coord_scale_location_; 648 return mask_tex_coord_scale_location_;
691 } 649 }
692 int mask_tex_coord_offset_location() const { 650 int mask_tex_coord_offset_location() const {
693 return mask_tex_coord_offset_location_; 651 return mask_tex_coord_offset_location_;
694 } 652 }
695 int color_matrix_location() const { return color_matrix_location_; } 653 int color_matrix_location() const { return color_matrix_location_; }
696 int color_offset_location() const { return color_offset_location_; } 654 int color_offset_location() const { return color_offset_location_; }
697 655
698 private: 656 private:
657 std::string GetShaderSource() const override;
699 int sampler_location_; 658 int sampler_location_;
700 int mask_sampler_location_; 659 int mask_sampler_location_;
701 int alpha_location_; 660 int alpha_location_;
702 int mask_tex_coord_scale_location_; 661 int mask_tex_coord_scale_location_;
703 int mask_tex_coord_offset_location_; 662 int mask_tex_coord_offset_location_;
704 int color_matrix_location_; 663 int color_matrix_location_;
705 int color_offset_location_; 664 int color_offset_location_;
706 }; 665 };
707 666
708 class FragmentShaderRGBATexAlphaColorMatrixAA : public FragmentTexBlendMode { 667 class FragmentShaderRGBATexAlphaColorMatrixAA : public FragmentShaderBase {
709 public: 668 public:
710 FragmentShaderRGBATexAlphaColorMatrixAA(); 669 FragmentShaderRGBATexAlphaColorMatrixAA();
711 std::string GetShaderString(
712 TexCoordPrecision precision, SamplerType sampler) const;
713 static std::string GetShaderHead();
714 static std::string GetShaderBody();
715 void FillLocations(ShaderLocations* locations) const; 670 void FillLocations(ShaderLocations* locations) const;
716 void Init(gpu::gles2::GLES2Interface* context, 671 void Init(gpu::gles2::GLES2Interface* context,
717 unsigned program, 672 unsigned program,
718 int* base_uniform_index); 673 int* base_uniform_index);
719 int alpha_location() const { return alpha_location_; } 674 int alpha_location() const { return alpha_location_; }
720 int sampler_location() const { return sampler_location_; } 675 int sampler_location() const { return sampler_location_; }
721 int color_matrix_location() const { return color_matrix_location_; } 676 int color_matrix_location() const { return color_matrix_location_; }
722 int color_offset_location() const { return color_offset_location_; } 677 int color_offset_location() const { return color_offset_location_; }
723 678
724 private: 679 private:
680 std::string GetShaderSource() const override;
725 int sampler_location_; 681 int sampler_location_;
726 int alpha_location_; 682 int alpha_location_;
727 int color_matrix_location_; 683 int color_matrix_location_;
728 int color_offset_location_; 684 int color_offset_location_;
729 }; 685 };
730 686
731 class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentTexBlendMode { 687 class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentShaderBase {
732 public: 688 public:
733 FragmentShaderRGBATexAlphaMaskColorMatrix(); 689 FragmentShaderRGBATexAlphaMaskColorMatrix();
734 std::string GetShaderString(
735 TexCoordPrecision precision, SamplerType sampler) const;
736 static std::string GetShaderHead();
737 static std::string GetShaderBody();
738 void FillLocations(ShaderLocations* locations) const; 690 void FillLocations(ShaderLocations* locations) const;
739 void Init(gpu::gles2::GLES2Interface* context, 691 void Init(gpu::gles2::GLES2Interface* context,
740 unsigned program, 692 unsigned program,
741 int* base_uniform_index); 693 int* base_uniform_index);
742 int alpha_location() const { return alpha_location_; } 694 int alpha_location() const { return alpha_location_; }
743 int sampler_location() const { return sampler_location_; } 695 int sampler_location() const { return sampler_location_; }
744 int mask_sampler_location() const { return mask_sampler_location_; } 696 int mask_sampler_location() const { return mask_sampler_location_; }
745 int mask_tex_coord_scale_location() const { 697 int mask_tex_coord_scale_location() const {
746 return mask_tex_coord_scale_location_; 698 return mask_tex_coord_scale_location_;
747 } 699 }
748 int mask_tex_coord_offset_location() const { 700 int mask_tex_coord_offset_location() const {
749 return mask_tex_coord_offset_location_; 701 return mask_tex_coord_offset_location_;
750 } 702 }
751 int color_matrix_location() const { return color_matrix_location_; } 703 int color_matrix_location() const { return color_matrix_location_; }
752 int color_offset_location() const { return color_offset_location_; } 704 int color_offset_location() const { return color_offset_location_; }
753 705
754 private: 706 private:
707 std::string GetShaderSource() const override;
755 int sampler_location_; 708 int sampler_location_;
756 int mask_sampler_location_; 709 int mask_sampler_location_;
757 int alpha_location_; 710 int alpha_location_;
758 int mask_tex_coord_scale_location_; 711 int mask_tex_coord_scale_location_;
759 int mask_tex_coord_offset_location_; 712 int mask_tex_coord_offset_location_;
760 int color_matrix_location_; 713 int color_matrix_location_;
761 int color_offset_location_; 714 int color_offset_location_;
762 }; 715 };
763 716
764 class FragmentShaderYUVVideo : public FragmentTexBlendMode { 717 class FragmentShaderYUVVideo : public FragmentShaderBase {
765 public: 718 public:
766 FragmentShaderYUVVideo(); 719 FragmentShaderYUVVideo();
767 std::string GetShaderString(
768 TexCoordPrecision precision, SamplerType sampler) const;
769
770 void SetFeatures(bool use_alpha_texture, bool use_nv12, bool use_color_lut); 720 void SetFeatures(bool use_alpha_texture, bool use_nv12, bool use_color_lut);
771 721
772 void Init(gpu::gles2::GLES2Interface* context, 722 void Init(gpu::gles2::GLES2Interface* context,
773 unsigned program, 723 unsigned program,
774 int* base_uniform_index); 724 int* base_uniform_index);
775 int y_texture_location() const { return y_texture_location_; } 725 int y_texture_location() const { return y_texture_location_; }
776 int u_texture_location() const { return u_texture_location_; } 726 int u_texture_location() const { return u_texture_location_; }
777 int v_texture_location() const { return v_texture_location_; } 727 int v_texture_location() const { return v_texture_location_; }
778 int uv_texture_location() const { return uv_texture_location_; } 728 int uv_texture_location() const { return uv_texture_location_; }
779 int a_texture_location() const { return a_texture_location_; } 729 int a_texture_location() const { return a_texture_location_; }
780 int lut_texture_location() const { return lut_texture_location_; } 730 int lut_texture_location() const { return lut_texture_location_; }
781 int alpha_location() const { return alpha_location_; } 731 int alpha_location() const { return alpha_location_; }
782 int yuv_matrix_location() const { return yuv_matrix_location_; } 732 int yuv_matrix_location() const { return yuv_matrix_location_; }
783 int yuv_adj_location() const { return yuv_adj_location_; } 733 int yuv_adj_location() const { return yuv_adj_location_; }
784 int ya_clamp_rect_location() const { return ya_clamp_rect_location_; } 734 int ya_clamp_rect_location() const { return ya_clamp_rect_location_; }
785 int uv_clamp_rect_location() const { return uv_clamp_rect_location_; } 735 int uv_clamp_rect_location() const { return uv_clamp_rect_location_; }
786 int resource_multiplier_location() const { 736 int resource_multiplier_location() const {
787 return resource_multiplier_location_; 737 return resource_multiplier_location_;
788 } 738 }
789 int resource_offset_location() const { return resource_offset_location_; } 739 int resource_offset_location() const { return resource_offset_location_; }
790 740
791 private: 741 private:
742 std::string GetShaderSource() const override;
743
792 bool use_alpha_texture_; 744 bool use_alpha_texture_;
793 bool use_nv12_; 745 bool use_nv12_;
794 bool use_color_lut_; 746 bool use_color_lut_;
795 747
796 int y_texture_location_; 748 int y_texture_location_;
797 int u_texture_location_; 749 int u_texture_location_;
798 int v_texture_location_; 750 int v_texture_location_;
799 int uv_texture_location_; 751 int uv_texture_location_;
800 int a_texture_location_; 752 int a_texture_location_;
801 int lut_texture_location_; 753 int lut_texture_location_;
802 int alpha_location_; 754 int alpha_location_;
803 int yuv_matrix_location_; 755 int yuv_matrix_location_;
804 int yuv_adj_location_; 756 int yuv_adj_location_;
805 int ya_clamp_rect_location_; 757 int ya_clamp_rect_location_;
806 int uv_clamp_rect_location_; 758 int uv_clamp_rect_location_;
807 int resource_multiplier_location_; 759 int resource_multiplier_location_;
808 int resource_offset_location_; 760 int resource_offset_location_;
809 761
810 DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVVideo); 762 DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVVideo);
811 }; 763 };
812 764
813 class FragmentShaderColor : public FragmentTexBlendMode { 765 class FragmentShaderColor : public FragmentShaderBase {
814 public: 766 public:
815 FragmentShaderColor(); 767 FragmentShaderColor();
816 std::string GetShaderString(
817 TexCoordPrecision precision, SamplerType sampler) const;
818 static std::string GetShaderHead();
819 static std::string GetShaderBody();
820 768
821 void Init(gpu::gles2::GLES2Interface* context, 769 void Init(gpu::gles2::GLES2Interface* context,
822 unsigned program, 770 unsigned program,
823 int* base_uniform_index); 771 int* base_uniform_index);
824 int color_location() const { return color_location_; } 772 int color_location() const { return color_location_; }
825 773
826 private: 774 private:
775 std::string GetShaderSource() const override;
827 int color_location_; 776 int color_location_;
828 777
829 DISALLOW_COPY_AND_ASSIGN(FragmentShaderColor); 778 DISALLOW_COPY_AND_ASSIGN(FragmentShaderColor);
830 }; 779 };
831 780
832 class FragmentShaderColorAA : public FragmentTexBlendMode { 781 class FragmentShaderColorAA : public FragmentShaderBase {
833 public: 782 public:
834 FragmentShaderColorAA(); 783 FragmentShaderColorAA();
835 std::string GetShaderString(
836 TexCoordPrecision precision, SamplerType sampler) const;
837 static std::string GetShaderHead();
838 static std::string GetShaderBody();
839 784
840 void Init(gpu::gles2::GLES2Interface* context, 785 void Init(gpu::gles2::GLES2Interface* context,
841 unsigned program, 786 unsigned program,
842 int* base_uniform_index); 787 int* base_uniform_index);
843 int color_location() const { return color_location_; } 788 int color_location() const { return color_location_; }
844 789
845 private: 790 private:
791 std::string GetShaderSource() const override;
846 int color_location_; 792 int color_location_;
847 793
848 DISALLOW_COPY_AND_ASSIGN(FragmentShaderColorAA); 794 DISALLOW_COPY_AND_ASSIGN(FragmentShaderColorAA);
849 }; 795 };
850 796
851 } // namespace cc 797 } // namespace cc
852 798
853 #endif // CC_OUTPUT_SHADER_H_ 799 #endif // CC_OUTPUT_SHADER_H_
OLDNEW
« no previous file with comments | « no previous file | cc/output/shader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698