@@ -755,6 +755,200 @@ suite('p5.RendererGL', function() {
755755 assert . equal ( renderer . immediateMode . geometry . edges . length , 10 ) ;
756756 done ( ) ;
757757 } ) ;
758+
759+ test ( 'TESS preserves vertex data' , function ( done ) {
760+ var renderer = myp5 . createCanvas ( 10 , 10 , myp5 . WEBGL ) ;
761+
762+ myp5 . textureMode ( myp5 . NORMAL ) ;
763+ renderer . beginShape ( myp5 . TESS ) ;
764+ renderer . fill ( 255 , 255 , 255 ) ;
765+ renderer . normal ( - 1 , - 1 , 1 ) ;
766+ renderer . vertex ( - 10 , - 10 , 0 , 0 ) ;
767+ renderer . fill ( 255 , 0 , 0 ) ;
768+ renderer . normal ( 1 , - 1 , 1 ) ;
769+ renderer . vertex ( 10 , - 10 , 1 , 0 ) ;
770+ renderer . fill ( 0 , 255 , 0 ) ;
771+ renderer . normal ( 1 , 1 , 1 ) ;
772+ renderer . vertex ( 10 , 10 , 1 , 1 ) ;
773+ renderer . fill ( 0 , 0 , 255 ) ;
774+ renderer . normal ( - 1 , 1 , 1 ) ;
775+ renderer . vertex ( - 10 , 10 , 0 , 1 ) ;
776+ renderer . endShape ( myp5 . CLOSE ) ;
777+
778+ assert . equal ( renderer . immediateMode . geometry . vertices . length , 6 ) ;
779+ assert . deepEqual (
780+ renderer . immediateMode . geometry . vertices [ 0 ] . array ( ) ,
781+ [ 10 , - 10 , 0 ]
782+ ) ;
783+ assert . deepEqual (
784+ renderer . immediateMode . geometry . vertices [ 1 ] . array ( ) ,
785+ [ - 10 , 10 , 0 ]
786+ ) ;
787+ assert . deepEqual (
788+ renderer . immediateMode . geometry . vertices [ 2 ] . array ( ) ,
789+ [ - 10 , - 10 , 0 ]
790+ ) ;
791+ assert . deepEqual (
792+ renderer . immediateMode . geometry . vertices [ 3 ] . array ( ) ,
793+ [ - 10 , 10 , 0 ]
794+ ) ;
795+ assert . deepEqual (
796+ renderer . immediateMode . geometry . vertices [ 4 ] . array ( ) ,
797+ [ 10 , - 10 , 0 ]
798+ ) ;
799+ assert . deepEqual (
800+ renderer . immediateMode . geometry . vertices [ 5 ] . array ( ) ,
801+ [ 10 , 10 , 0 ]
802+ ) ;
803+
804+ assert . equal ( renderer . immediateMode . geometry . vertexNormals . length , 6 ) ;
805+ assert . deepEqual (
806+ renderer . immediateMode . geometry . vertexNormals [ 0 ] . array ( ) ,
807+ [ 1 , - 1 , 1 ]
808+ ) ;
809+ assert . deepEqual (
810+ renderer . immediateMode . geometry . vertexNormals [ 1 ] . array ( ) ,
811+ [ - 1 , 1 , 1 ]
812+ ) ;
813+ assert . deepEqual (
814+ renderer . immediateMode . geometry . vertexNormals [ 2 ] . array ( ) ,
815+ [ - 1 , - 1 , 1 ]
816+ ) ;
817+ assert . deepEqual (
818+ renderer . immediateMode . geometry . vertexNormals [ 3 ] . array ( ) ,
819+ [ - 1 , 1 , 1 ]
820+ ) ;
821+ assert . deepEqual (
822+ renderer . immediateMode . geometry . vertexNormals [ 4 ] . array ( ) ,
823+ [ 1 , - 1 , 1 ]
824+ ) ;
825+ assert . deepEqual (
826+ renderer . immediateMode . geometry . vertexNormals [ 5 ] . array ( ) ,
827+ [ 1 , 1 , 1 ]
828+ ) ;
829+
830+ assert . deepEqual ( renderer . immediateMode . geometry . vertexColors , [
831+ 1 , 0 , 0 , 1 ,
832+ 0 , 0 , 1 , 1 ,
833+ 1 , 1 , 1 , 1 ,
834+ 0 , 0 , 1 , 1 ,
835+ 1 , 0 , 0 , 1 ,
836+ 0 , 1 , 0 , 1
837+ ] ) ;
838+
839+ assert . deepEqual ( renderer . immediateMode . geometry . uvs , [
840+ 1 , 0 ,
841+ 0 , 1 ,
842+ 0 , 0 ,
843+ 0 , 1 ,
844+ 1 , 0 ,
845+ 1 , 1
846+ ] ) ;
847+
848+ done ( ) ;
849+ } ) ;
850+
851+ test ( 'TESS interpolates vertex data at intersections' , function ( done ) {
852+ var renderer = myp5 . createCanvas ( 10 , 10 , myp5 . WEBGL ) ;
853+
854+ // Hourglass shape:
855+ //
856+ // 1 3
857+ // o o
858+ // | \ / |
859+ // | / \ |
860+ // o o
861+ // 4 2
862+ //
863+ // Tessy will add a vertex in the middle
864+ myp5 . textureMode ( myp5 . NORMAL ) ;
865+ renderer . beginShape ( myp5 . TESS ) ;
866+ renderer . fill ( 255 , 255 , 255 ) ;
867+ renderer . normal ( - 1 , - 1 , 1 ) ;
868+ renderer . vertex ( - 10 , - 10 , 0 , 0 ) ;
869+ renderer . fill ( 0 , 255 , 0 ) ;
870+ renderer . normal ( 1 , 1 , 1 ) ;
871+ renderer . vertex ( 10 , 10 , 1 , 1 ) ;
872+ renderer . fill ( 255 , 0 , 0 ) ;
873+ renderer . normal ( 1 , - 1 , 1 ) ;
874+ renderer . vertex ( 10 , - 10 , 1 , 0 ) ;
875+ renderer . fill ( 0 , 0 , 255 ) ;
876+ renderer . normal ( - 1 , 1 , 1 ) ;
877+ renderer . vertex ( - 10 , 10 , 0 , 1 ) ;
878+ renderer . endShape ( myp5 . CLOSE ) ;
879+
880+ assert . equal ( renderer . immediateMode . geometry . vertices . length , 6 ) ;
881+ assert . deepEqual (
882+ renderer . immediateMode . geometry . vertices [ 0 ] . array ( ) ,
883+ [ 0 , 0 , 0 ]
884+ ) ;
885+ assert . deepEqual (
886+ renderer . immediateMode . geometry . vertices [ 1 ] . array ( ) ,
887+ [ - 10 , 10 , 0 ]
888+ ) ;
889+ assert . deepEqual (
890+ renderer . immediateMode . geometry . vertices [ 2 ] . array ( ) ,
891+ [ - 10 , - 10 , 0 ]
892+ ) ;
893+ assert . deepEqual (
894+ renderer . immediateMode . geometry . vertices [ 3 ] . array ( ) ,
895+ [ 10 , 10 , 0 ]
896+ ) ;
897+ assert . deepEqual (
898+ renderer . immediateMode . geometry . vertices [ 4 ] . array ( ) ,
899+ [ 0 , 0 , 0 ]
900+ ) ;
901+ assert . deepEqual (
902+ renderer . immediateMode . geometry . vertices [ 5 ] . array ( ) ,
903+ [ 10 , - 10 , 0 ]
904+ ) ;
905+
906+ assert . equal ( renderer . immediateMode . geometry . vertexNormals . length , 6 ) ;
907+ assert . deepEqual (
908+ renderer . immediateMode . geometry . vertexNormals [ 0 ] . array ( ) ,
909+ [ 0 , 0 , 1 ]
910+ ) ;
911+ assert . deepEqual (
912+ renderer . immediateMode . geometry . vertexNormals [ 1 ] . array ( ) ,
913+ [ - 1 , 1 , 1 ]
914+ ) ;
915+ assert . deepEqual (
916+ renderer . immediateMode . geometry . vertexNormals [ 2 ] . array ( ) ,
917+ [ - 1 , - 1 , 1 ]
918+ ) ;
919+ assert . deepEqual (
920+ renderer . immediateMode . geometry . vertexNormals [ 3 ] . array ( ) ,
921+ [ 1 , 1 , 1 ]
922+ ) ;
923+ assert . deepEqual (
924+ renderer . immediateMode . geometry . vertexNormals [ 4 ] . array ( ) ,
925+ [ 0 , 0 , 1 ]
926+ ) ;
927+ assert . deepEqual (
928+ renderer . immediateMode . geometry . vertexNormals [ 5 ] . array ( ) ,
929+ [ 1 , - 1 , 1 ]
930+ ) ;
931+
932+ assert . deepEqual ( renderer . immediateMode . geometry . vertexColors , [
933+ 0.5 , 0.5 , 0.5 , 1 ,
934+ 0 , 0 , 1 , 1 ,
935+ 1 , 1 , 1 , 1 ,
936+ 0 , 1 , 0 , 1 ,
937+ 0.5 , 0.5 , 0.5 , 1 ,
938+ 1 , 0 , 0 , 1
939+ ] ) ;
940+
941+ assert . deepEqual ( renderer . immediateMode . geometry . uvs , [
942+ 0.5 , 0.5 ,
943+ 0 , 1 ,
944+ 0 , 0 ,
945+ 1 , 1 ,
946+ 0.5 , 0.5 ,
947+ 1 , 0
948+ ] ) ;
949+
950+ done ( ) ;
951+ } ) ;
758952 } ) ;
759953
760954 suite ( 'setAttributes' , function ( ) {
0 commit comments