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

Side by Side Diff: gpu/GLES2/extensions/CHROMIUM/CHROMIUM_path_rendering.txt

Issue 477623004: command_buffer: Support instanced path rendering in gpu command buffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-03-path-funcs
Patch Set: rebas Created 5 years, 3 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
OLDNEW
1 Name 1 Name
2 2
3 CHROMIUM_path_rendering 3 CHROMIUM_path_rendering
4 4
5 Name Strings 5 Name Strings
6 6
7 GL_CHROMIUM_path_rendering 7 GL_CHROMIUM_path_rendering
8 8
9 Version 9 Version
10 10
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 PATH_MITER_LIMIT_CHROMIUM 0x907a 47 PATH_MITER_LIMIT_CHROMIUM 0x907a
48 PATH_STROKE_BOUND_CHROMIUM 0x9086 48 PATH_STROKE_BOUND_CHROMIUM 0x9086
49 49
50 Accepted by the <value> parameter of PathParameter{if}CHROMIUM: 50 Accepted by the <value> parameter of PathParameter{if}CHROMIUM:
51 FLAT_CHROMIUM 0x1D00 51 FLAT_CHROMIUM 0x1D00
52 SQUARE_CHROMIUM 0x90a3 52 SQUARE_CHROMIUM 0x90a3
53 ROUND_CHROMIUM 0x90a4 53 ROUND_CHROMIUM 0x90a4
54 BEVEL_CHROMIUM 0x90A6 54 BEVEL_CHROMIUM 0x90A6
55 MITER_REVERT_CHROMIUM 0x90A7 55 MITER_REVERT_CHROMIUM 0x90A7
56 56
57 Accepted by the <fillMode> parameter of StencilFillPathCHROMIUM: 57 Accepted by the <fillMode> parameter of StencilFillPathCHROMIUM
58 StencilFillPathInstancedCHROMIUM and
59 StencilThenCoverFillPathInstancedCHROMIUM:
58 COUNT_UP_CHROMIUM 0x9088 60 COUNT_UP_CHROMIUM 0x9088
59 COUNT_DOWN_CHROMIUM 0x9089 61 COUNT_DOWN_CHROMIUM 0x9089
60 62
61 Accepted by the <coverMode> parameter of CoverFillPathCHROMIUM, 63 Accepted by the <coverMode> parameter of CoverFillPathCHROMIUM,
62 CoverStrokePath, StencilThenCoverFillPathCHROMIUM and 64 CoverStrokePath, StencilThenCoverFillPathCHROMIUM and
63 StencilThenCoverStrokePathCHROMIUM: 65 StencilThenCoverStrokePathCHROMIUM:
64 CONVEX_HULL_CHROMIUM 0x908B 66 CONVEX_HULL_CHROMIUM 0x908B
65 BOUNDING_BOX_CHROMIUM 0x908D 67 BOUNDING_BOX_CHROMIUM 0x908D
66 68
69 Accepted by the <coverMode> parameter of CoverFillPathInstancedCHROMIUM,
70 CoverStrokePathInstanced, StencilThenCoverFillPathInstancedCHROMIUM and
71 StencilThenCoverStrokePathInstancedCHROMIUM:
72 CONVEX_HULL_CHROMIUM see above
73 BOUNDING_BOX_CHROMIUM see above
74 BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM
vmiura 2015/08/28 20:02:32 nit: BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM 0x90
Kimmo Kinnunen 2015/08/31 07:36:53 Done.
75
76 Accepted by the <transformType> parameter of
77 StencilFillPathInstancedCHROMIUM, StencilStrokePathInstancedCHROMIUM,
78 CoverFillPathInstancedCHROMIUM, CoverStrokePathInstancedCHROMIUM,
79 StencilThenCoverFillPathInstancedCHROMIUM and
80 StencilThenCoverStrokePathInstancedCHROMIUM:
81 TRANSLATE_X_CHROMIUM 0x908E
82 TRANSLATE_Y_CHROMIUM 0x908F
83 TRANSLATE_2D_CHROMIUM 0x9090
84 TRANSLATE_3D_CHROMIUM 0x9091
85 AFFINE_2D_CHROMIUM 0x9092
86 AFFINE_3D_CHROMIUM 0x9094
87 TRANSPOSE_AFFINE_2D_CHROMIUM 0x9096
88 TRANSPOSE_AFFINE_3D_CHROMIUM 0x9098
67 89
68 New Procedures and Functions 90 New Procedures and Functions
69 91
70 void MatrixLoadfCHROMIUM(enum matrixMode, float* matrix) 92 void MatrixLoadfCHROMIUM(enum matrixMode, float* matrix)
71 93
72 Takes a pointer to a 4x4 matrix stored in column-major order as 16 94 Takes a pointer to a 4x4 matrix stored in column-major order as 16
73 consecutive floating-point values. The matrixMode specifies which 95 consecutive floating-point values. The matrixMode specifies which
74 matrix, PATH_MODELVIEW_CHROMIUM or PATH_PROJECTION_CHROMIUM is used. 96 matrix, PATH_MODELVIEW_CHROMIUM or PATH_PROJECTION_CHROMIUM is used.
75 97
76 The funcition specifies either modelview or projection matrix 98 The funcition specifies either modelview or projection matrix
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 * Any sample that would fail the scissor test (section 4.1.2) 301 * Any sample that would fail the scissor test (section 4.1.2)
280 if SCISSOR_TEST is enabled. 302 if SCISSOR_TEST is enabled.
281 303
282 And for the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM commands 304 And for the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM commands
283 (so not applicable to the CoverFillPathCHROMIUM and CoverStrokePathCHROMIUM 305 (so not applicable to the CoverFillPathCHROMIUM and CoverStrokePathCHROMIUM
284 commands): 306 commands):
285 * Any sample that would fail the (implicitly enabled) stencil test 307 * Any sample that would fail the (implicitly enabled) stencil test
286 with the stencil function configured based on the path stencil 308 with the stencil function configured based on the path stencil
287 function state configured by PathStencilFuncCHROMIUM. In the case 309 function state configured by PathStencilFuncCHROMIUM. In the case
288 of the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM 310 of the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM
289 commands, the effective stencil read 311 commands and their instanced versions, the effective stencil read
290 mask for the stencil mask is treated as the value of 312 mask for the stencil mask is treated as the value of
291 PATH_STENCIL_VALUE_MASK bit-wise ANDed with the bit-invert of the 313 PATH_STENCIL_VALUE_MASK bit-wise ANDed with the bit-invert of the
292 effective /mask/ parameter value; otherwise, for the cover commands, 314 effective /mask/ parameter value; otherwise, for the cover commands,
293 the stencil test operates normally. In the case the stencil test 315 the stencil test operates normally. In the case the stencil test
294 fails during a path stencil operation, the stencil fail operation is 316 fails during a path stencil operation, the stencil fail operation is
295 ignored and the pixel's stencil value is left undisturbed (as if the 317 ignored and the pixel's stencil value is left undisturbed (as if the
296 stencil operation was KEEP). 318 stencil operation was KEEP).
297 319
298 * The state of the face culling (CULL_FACE) enable is ignored. 320 * The state of the face culling (CULL_FACE) enable is ignored.
299 321
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 void StencilThenCoverStrokePathCHROMIUM(uint path, int reference, uint mask, enum coverMode) 497 void StencilThenCoverStrokePathCHROMIUM(uint path, int reference, uint mask, enum coverMode)
476 498
477 The command is equivalent to the two commands 499 The command is equivalent to the two commands
478 500
479 StencilStrokePathCHROMIUM(path, reference, mask); 501 StencilStrokePathCHROMIUM(path, reference, mask);
480 CoverStrokePathCHROMIUM(path, coverMode); 502 CoverStrokePathCHROMIUM(path, coverMode);
481 503
482 unless either command would generate an error; for any such error 504 unless either command would generate an error; for any such error
483 other than OUT_OF_MEMORY, only that error is generated. 505 other than OUT_OF_MEMORY, only that error is generated.
484 506
507 void StencilFillPathInstancedCHROMIUM(sizei numPaths,
508 enum pathNameType,
509 const void *paths,
510 uint pathBase,
511 enum fillMode, uint mask,
512 enum transformType,
513 const float *transformValues);
514
515 The command stencils a sequence of filled paths.
516
517 The /numPaths/ has to be >= 0. Otherwise INVALID_VALUE error is
518 generated.
519
520 The /numPaths/ has to fit in 32-bit uint. Otherwise
521 INVALID_OPERATION is generated.
522
523 The /pathNameType/ determines the type of elements of the /paths/
524 array and must be one of UNSIGNED_BYTE, BYTE, UNSIGNED_SHORT, SHORT,
525 UNSIGNED_INT or INT. Otherwise INVALID_ENUM error is generated.
526
527 The /pathBase/ is an offset added to the /numPaths/ path names read
528 from the /paths/ array. If any of the results cause 32-bit uint
529 to overflow, INVALID_OPERATION error is generated.
530
531 The /transformType/ must be one of NONE, TRANSLATE_X_CHROMIUM,
532 TRANSLATE_Y_CHROMIUM, TRANSLATE_2D_CHROMIUM, TRANSLATE_3D_CHROMIUM,
533 AFFINE_2D_CHROMIUM, AFFINE_3D_CHROMIUM, TRANSPOSE_AFFINE_2D_CHROMIUM, or
534 TRANSPOSE_AFFINE_3D_CHROMIUM. Otherwise INVALID_ENUM error is generated.
535
536 The /fillMode/ and /mask/ are validated identically to the same-named
537 parameters of StencilFillPathCHROMIUM.
538
539 The /numPaths/ * (size of /pathNameType/ data type) + /numPaths/ *
540 (size of float) * (component count of /transformType/) must fit to
541 32-bit uint. Otherwise INVALID_OPERATION is generated.
542
543 The StencilFillPathInstancedCHROMIUM command is equivalent to:
544
545 float dm[16];
546 GetFloatv(PATH_MODELVIEW_MATRIX, dm);
547 const float *v = transformValues;
548 for (int i = 0; i<numPaths; i++) {
549 if (!applyPathTransform(dm, transformType, &v)) {
550 return;
551 }
552 uint pathName;
553 if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
554 return;
555 }
556 if (IsPathCHROMIUM(pathName)) {
557 StencilFillPathCHROMIUM(pathName, fillMode, mask);
558 }
559 }
560 glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
561
562 assuming these helper functions for applyPathTransform and
563 getPathName:
564
565 bool applyPathTransform(const float dm[], enum transformType, const floa t** v)
566 {
567 float m[16] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
568
569 switch (transformType) {
570 case NONE:
571 break;
572 case TRANSLATE_X_CHROMIUM:
573 m[12] = (*v)[0];
574 *v += 1;
575 break;
576 case TRANSLATE_Y_CHROMIUM:
577 m[13] = (*v)[0];
578 *v += 1;
579 break;
580 case TRANSLATE_2D_CHROMIUM:
581 m[12] = (*v)[0];
582 m[13] = (*v)[1];
583 *v += 2;
584 break;
585 case TRANSLATE_3D_CHROMIUM:
586 m[12] = (*v)[0];
587 m[13] = (*v)[1];
588 m[14] = (*v)[2];
589 *v += 3;
590 break;
591 case AFFINE_2D_CHROMIUM:
592 m[0] =(*v)[0]; m[4] =(*v)[2]; m[8] =0; m[12]=(*v)[4];
593 m[1] =(*v)[1]; m[5] =(*v)[3]; m[9] =0; m[13]=(*v)[5];
594 m[2] =0 ; m[6] =0; m[10]=1; m[14]=0;
595 m[3] =0; m[7] =0; m[11]=0; m[15]=1;
596 *v += 6;
597 break;
598 case TRANSPOSE_AFFINE_2D_CHROMIUM:
599 m[0] =(*v)[0]; m[4] =(*v)[1]; m[8] =0; m[12]=(*v)[2];
600 m[1] =(*v)[3]; m[5] =(*v)[4]; m[9] =0; m[13]=(*v)[5];
601 m[2] =0; m[6] =0; m[10]=1; m[14]=0;
602 m[3] =0; m[7] =0; m[11]=0; m[15]=1;
603 *v += 6;
604 break;
605 case AFFINE_3D_CHROMIUM:
606 m[0] =(*v)[0]; m[4] =(*v)[3]; m[8] =(*v)[6]; m[12]=(*v)[9];
607 m[1] =(*v)[1]; m[5] =(*v)[4]; m[9] =(*v)[7]; m[13]=(*v)[10];
608 m[2] =(*v)[2]; m[6] =(*v)[5]; m[10]=(*v)[8]; m[14]=(*v)[11];
609 m[3] =0; m[7] =0; m[11]=1; m[15]=0;
610 *v += 12;
611 break;
612 case TRANSPOSE_AFFINE_3D_CHROMIUM:
613 m[0] =(*v)[0]; m[4] =(*v)[1]; m[8] =(*v)[2]; m[12]=(*v)[3];
614 m[1] =(*v)[4]; m[5] =(*v)[5]; m[9] =(*v)[6]; m[13]=(*v)[7];
615 m[2] =(*v)[8]; m[6] =(*v)[9]; m[10]=(*v)[10]; m[14]=(*v)[11];
616 m[3] =0; m[7] =0; m[11]=1; m[15]=0;
617 *v += 12;
618 break;
619 default:
620 setError(INVALID_ENUM);
621 return FALSE;
622 }
623 multiplyMatrix(dm, m, m); // Multiplies dm and m and stores result to m.
624 glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, m);
625 return TRUE;
626 }
627
628 bool getPathName(enum pathNameType, const void** paths,
629 uint pathBase, uint* pathName)
630 {
631 switch (pathNameType) {
632 case BYTE:
633 {
634 const byte *p = (const byte*)*paths;
635 *pathName = pathBase + p[0];
636 *paths = p+1;
637 break;
638 }
639 case UNSIGNED_BYTE:
640 {
641 const ubyte *p = (const ubyte*)*paths;
642 *pathName = pathBase + p[0];
643 *paths = p+1;
644 break;
645 }
646 case SHORT:
647 {
648 const short *p = (const short*)*paths;
649 *pathName = pathBase + p[0];
650 *paths = p+1;
651 break;
652 }
653 case UNSIGNED_SHORT:
654 {
655 const ushort *p = (const ushort*)*paths;
656 *pathName = pathBase + p[0];
657 *paths = p+1;
658 break;
659 }
660 case INT:
661 {
662 const int *p = (const int*)*paths;
663 *pathName = pathBase + p[0];
664 *paths = p+1;
665 break;
666 }
667 case UNSIGNED_INT:
668 {
669 const uint *p = (const uint*)*paths;
670 *pathName = pathBase + p[0];
671 *paths = p+1;
672 break;
673 }
674 default:
675 setError(INVALID_ENUM);
676 return FALSE;
677 }
678 return TRUE;
679 }
680
681
682 void StencilStrokePathInstancedCHROMIUM(sizei numPaths,
683 enum pathNameType,
684 const void *paths,
685 uint pathBase,
686 int reference, uint mask,
687 enum transformType,
688 const float *transformValues);
689
690 The command stencils a sequence of stroked paths.
691
692 The command verifies /numPaths/, /pathNameType/ and
693 /transformType/ similarly to StencilFillPathInstancedCHROMIUM.
694
695 The command is equivalent to:
696
697 float dm[16];
698 GetFloatv(PATH_MODELVIEW_MATRIX, dm);
699 const float *v = transformValues;
700 for (int i = 0; i<numPaths; i++) {
701 if (!applyPathTransform(dm, transformType, &v)) {
702 return;
703 }
704 uint pathName;
705 if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
706 return;
707 }
708 if (IsPathCHROMIUM(pathName)) {
709 StencilStrokePathCHROMIUM(pathName, reference, mask);
710 }
711 }
712 glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
713
714 assume the helper functions for applyPathTransform and
715 getPathName defined above.
716
717 void CoverFillPathInstancedCHROMIUM(sizei numPaths,
718 enum pathNameType,
719 const void *paths,
720 uint pathBase,
721 enum coverMode,
722 enum transformType,
723 const float *transformValues);
724
725 The command covers a sequence of filled paths.
726
727 The command verifies /numPaths/, /pathNameType/ and
728 /transformType/ similarly to StencilFillPathInstancedCHROMIUM.
729
730 The command is equivalent to:
731
732 if (coverMode == BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM) {
733 renderBoundingBox(FALSE,
734 numPaths,
735 pathNameType,
736 paths,
737 pathBase,
738 transformType, transformValues);
739 } else if (coverMode == CONVEX_HULL_CHROMIUM || coverMode == BOUNDING_BO X_CHROMIUM) {
740 float dm[16];
741 GetFloatv(PATH_MODELVIEW_MATRIX, dm);
742 const float *v = transformValues;
743 for (int i = 0; i<numPaths; i++) {
744 if (!applyPathTransform(dm, transformType, &v)) {
745 return;
746 }
747 uint pathName;
748 if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
749 return;
750 }
751 if (IsPathCHROMIUM(pathName)) {
752 CoverFillPathCHROMIUM(pathName, coverMode);
753 }
754 }
755 glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
756 } else {
757 setError(INVALID_ENUM);
758 }
759
760
761 assuming these helper functions for applyPathTransform and
762 getPathName defined above as well as:
763
764 void renderBoundingBox(bool shouldRenderStroke,
765 sizei numPaths,
766 enum pathNameType,
767 const uint *paths,
768 uint pathBase,
769 enum transformType,
770 const float *transformValues)
771 {
772 boolean hasBounds = FALSE;
773 float boundsUnion[4], bounds[4];
774
775 const float *v = transformValues;
776 for (int i = 0; i<numPaths; i++) {
777 uint pathName;
778 if (!getPathName(pathNameType, paths, pathBase, &pathName)) {
779 return;
780 }
781 if (IsPathCHROMIUM(pathName)) {
782 GetPathBoundingBox(pathName, shouldRenderStroke, bounds);
783 switch (transformType) {
784 case NONE:
785 break;
786 case TRANSLATE_X_CHROMIUM:
787 bounds[0] += v[0];
788 bounds[2] += v[0];
789 v += 1;
790 break;
791 case TRANSLATE_Y_CHROMIUM:
792 bounds[1] += v[0];
793 bounds[3] += v[0];
794 v += 1;
795 break;
796 case TRANSLATE_2D_CHROMIUM:
797 bounds[0] += v[0];
798 bounds[1] += v[1];
799 bounds[2] += v[0];
800 bounds[3] += v[1];
801 v += 2;
802 break;
803 case TRANSLATE_3D_CHROMIUM: // ignores v[2]
804 bounds[0] += v[0];
805 bounds[1] += v[1];
806 bounds[2] += v[0];
807 bounds[3] += v[1];
808 v += 3;
809 break;
810 case AFFINE_2D_CHROMIUM:
811 bounds[0] = bounds[0]*v[0] + bounds[0]*v[2] + v[4];
812 bounds[1] = bounds[1]*v[1] + bounds[1]*v[3] + v[5];
813 bounds[2] = bounds[2]*v[0] + bounds[2]*v[2] + v[4];
814 bounds[3] = bounds[3]*v[1] + bounds[3]*v[3] + v[5];
815 v += 6;
816 break;
817 case TRANSPOSE_AFFINE_2D_CHROMIUM:
818 bounds[0] = bounds[0]*v[0] + bounds[0]*v[1] + v[2];
819 bounds[1] = bounds[1]*v[3] + bounds[1]*v[4] + v[5];
820 bounds[2] = bounds[2]*v[0] + bounds[2]*v[1] + v[2];
821 bounds[3] = bounds[3]*v[3] + bounds[3]*v[4] + v[5];
822 v += 6;
823 break;
824 case AFFINE_3D_CHROMIUM: // ignores v[2], v[5], v[6..8], v[11]
825 bounds[0] = bounds[0]*v[0] + bounds[0]*v[3] + v[9];
826 bounds[1] = bounds[1]*v[1] + bounds[1]*v[4] + v[10];
827 bounds[2] = bounds[2]*v[0] + bounds[2]*v[3] + v[9];
828 bounds[3] = bounds[3]*v[1] + bounds[3]*v[4] + v[10];
829 v += 12;
830 break;
831 case TRANSPOSE_AFFINE_3D_CHROMIUM: // ignores v[2], v[6], v[8..11 ]
832 bounds[0] = bounds[0]*v[0] + bounds[0]*v[1] + v[3];
833 bounds[1] = bounds[1]*v[4] + bounds[1]*v[5] + v[7];
834 bounds[2] = bounds[2]*v[0] + bounds[2]*v[1] + v[3];
835 bounds[3] = bounds[3]*v[4] + bounds[3]*v[5] + v[7];
836 v += 12;
837 break;
838 default:
839 setError(INVALID_ENUM);
840 return;
841 }
842 if (bounds[0] > bounds[2]) {
843 float t = bounds[2];
844 bounds[2] = bounds[0];
845 bounds[0] = t;
846 }
847 if (bounds[1] > bounds[3]) {
848 float t = bounds[3];
849 bounds[3] = bounds[1];
850 bounds[1] = t;
851 }
852 if (hasBounds) {
853 if (bounds[0] < boundsUnion[0]) {
854 boundsUnion[0] = bounds[0];
855 }
856 if (bounds[1] < boundsUnion[1]) {
857 boundsUnion[1] = bounds[1];
858 }
859 if (bounds[2] > boundsUnion[2]) {
860 boundsUnion[2] = bounds[2];
861 }
862 if (bounds[3] > boundsUnion[3]) {
863 boundsUnion[3] = bounds[3];
864 }
865 } else {
866 for (int i=0; i<4; i++) {
867 boundsUnion[i] = bounds[i];
868 }
869 hasBounds = TRUE;
870 }
871 }
872 }
873 if (hasBounds) {
874 Rectf(boundsUnion[0], boundsUnion[1], boundsUnion[2], boundsUnion[3 ]);
875 }
876 }
877
878 Where helper GetPathBoundingBox returns bounding box for the path with or wi thout
879 stroking, and Rectf renders a rectangle.
880
881 /coverMode/ must be one of CONVEX_HULL_CHROMIUM or BOUNDING_BOX_CHROMIUM or
882 BOUNDING_BOX_OF_BOUNDING_BOXES. Otherwise, INVALID_ENUM error is generated.
883
884 void CoverStrokePathInstancedCHROMIUM(sizei numPaths,
885 enum pathNameType,
886 const void *paths,
887 uint pathBase,
888 enum coverMode,
889 enum transformType,
890 const float *transformValues);
891
892 The command covers a sequence of stroked paths.
893
894 The command verifies /numPaths/, /pathNameType/ and
895 /transformType/ similarly to StencilFillPathInstancedCHROMIUM.
896
897 The command is equivalent to:
898
899 if (coverage == BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM) {
900 renderBoundingBox(TRUE,
901 numPaths,
902 pathNameType, paths,
903 pathBase,
904 transformType, transformValues);
905 } else if (coverMode == CONVEX_HULL_CHROMIUM || coverMode == BOUNDING_BO X_CHROMIUM) {
906 float dm[16];
907 GetFloatv(PATH_MODELVIEW_MATRIX, dm);
908 const float *v = transformValues;
909 for (int i = 0; i<numPaths; i++) {
910 if (!applyPathTransform(dm, transformType, &v)) {
911 return;
912 }
913 uint pathName;
914 if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
915 return;
916 }
917 if (IsPathCHROMIUM(pathName)) {
918 CoverStrokePathCHROMIUM(pathName, coverMode);
919 }
920 }
921 glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
922 } else {
923 setError(INVALID_ENUM);
924 }
925
926 assuming these helper functions defined above.
927
928 /coverMode/ must be one of CONVEX_HULL_CHROMIUM or BOUNDING_BOX_CHROMIUM or
929 BOUNDING_BOX_OF_BOUNDING_BOXES. Otherwise, INVALID_ENUM error is generated.
930
931
932 void StencilThenCoverFillPathInstancedCHROMIUM(sizei numPaths,
933 enum pathNameType,
934 const void *paths,
935 uint pathBase,
936 enum coverMode,
937 enum fillMode,
938 uint mask,
939 enum transformType,
940 const float *transformValues) ;
941
942 The command is equivalent to the two commands
943
944 StencilFillPathInstancedCHROMIUM(numPaths
945 paths,
946 pathBase,
947 fillMode,
948 mask,
949 transformType,
950 transformValues);
951 CoverFillPathInstancedCHROMIUM(numPaths,
952 paths,
953 pathBase,
954 coverMode,
955 fillMode,
956 mask,
957 transformType,
958 transformValues);
959
960 unless either command would generate an error; for any such error
961 other than OUT_OF_MEMORY, only that error is generated.
962
963
964 void StencilThenCoverStrokePathInstancedCHROMIUM(sizei numPaths,
965 enum pathNameType,
966 const void *paths,
967 uint pathBase,
968 enum coverMode,
969 int reference,
970 uint mask,
971 enum transformType,
972 const float *transformValue s);
973
974 The command is equivalent to the two commands
975
976 StencilStrokePathInstancedCHROMIUM(numPaths,
977 pathNameType,
978 paths,
979 pathBase,
980 reference,
981 mask,
982 transformType,
983 transformValues);
984 CoverStrokePathInstancedCHROMIUM(numPaths,
985 pathNameType,
986 paths,
987 pathBase,
988 coverMode,
989 transformType,
990 transformValues);
991
992 unless either command would generate an error; for any such error
993 other than OUT_OF_MEMORY, only that error is generated.
994
485 995
486 PATH COVERING RASTERIZATION DETAILS 996 PATH COVERING RASTERIZATION DETAILS
487 997
488 The GL processes fragments rasterized by path cover commands in 998 The GL processes fragments rasterized by path cover commands in
489 much the same manner as fragments generated by conventional polygon 999 much the same manner as fragments generated by conventional polygon
490 rasterization. However path rendering /ignores/ the following 1000 rasterization. However path rendering /ignores/ the following
491 operations: 1001 operations:
492 1002
493 * Interpolation of per-vertex data (section 3.6.1). Path 1003 * Interpolation of per-vertex data (section 3.6.1). Path
494 primitives have neither conventional vertices nor per-vertex 1004 primitives have neither conventional vertices nor per-vertex
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 * Paths wind by default counterclockwise 1134 * Paths wind by default counterclockwise
625 * Window space transform can reverse this winding 1135 * Window space transform can reverse this winding
626 * GL front face state CW/CCW selects whether the variable is true 1136 * GL front face state CW/CCW selects whether the variable is true
627 or false 1137 or false
628 1138
629 user-defined varyings: constant zeros. 1139 user-defined varyings: constant zeros.
630 1140
631 Revision History 1141 Revision History
632 1142
633 14/8/2014 Documented the extension 1143 14/8/2014 Documented the extension
OLDNEW
« no previous file with comments | « no previous file | gpu/GLES2/gl2chromium_autogen.h » ('j') | gpu/command_buffer/client/gles2_implementation.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698