From bec1f51a1973595deed203c14af7fc92e982f73e Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Sun, 26 Oct 2025 23:25:00 +0530 Subject: [PATCH 1/3] fix(webgl): normalize nearly identical vertices before tessellation --- src/webgl/p5.RendererGL.Immediate.js | 31 ++++++++++++++++++ test/unit/webgl/p5.RendererGL.js | 49 ++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/src/webgl/p5.RendererGL.Immediate.js b/src/webgl/p5.RendererGL.Immediate.js index 31ce48f630..8e7e4bfb89 100644 --- a/src/webgl/p5.RendererGL.Immediate.js +++ b/src/webgl/p5.RendererGL.Immediate.js @@ -436,6 +436,37 @@ p5.RendererGL.prototype._tesselateShape = function() { this.immediateMode.geometry.vertexNormals[i].z ); } + + // Normalize nearly identical consecutive vertices to avoid numerical issues in libtess. + // This workaround addresses tessellation artifacts when consecutive vertices have + // coordinates that are almost (but not exactly) equal, which can occur when drawing + // contours automatically sampled from fonts with font.textToContours(). + const epsilon = 1e-6; + for (const contour of contours) { + for ( + let i = p5.RendererGL.prototype.tessyVertexSize; + i < contour.length; + i += p5.RendererGL.prototype.tessyVertexSize + ) { + const prevX = contour[i - p5.RendererGL.prototype.tessyVertexSize]; + const prevY = contour[i - p5.RendererGL.prototype.tessyVertexSize + 1]; + const prevZ = contour[i - p5.RendererGL.prototype.tessyVertexSize + 2]; + const currX = contour[i]; + const currY = contour[i + 1]; + const currZ = contour[i + 2]; + + if (Math.abs(prevX - currX) < epsilon) { + contour[i] = prevX; + } + if (Math.abs(prevY - currY) < epsilon) { + contour[i + 1] = prevY; + } + if (Math.abs(prevZ - currZ) < epsilon) { + contour[i + 2] = prevZ; + } + } + } + const polyTriangles = this._triangulate(contours); const originalVertices = this.immediateMode.geometry.vertices; this.immediateMode.geometry.vertices = []; diff --git a/test/unit/webgl/p5.RendererGL.js b/test/unit/webgl/p5.RendererGL.js index 3c7e3df1a2..33e960c3c1 100644 --- a/test/unit/webgl/p5.RendererGL.js +++ b/test/unit/webgl/p5.RendererGL.js @@ -562,6 +562,55 @@ suite('p5.RendererGL', function() { assert.deepEqual(getColors(myp5.P2D), getColors(myp5.WEBGL)); }); + test('tessellation handles nearly identical consecutive vertices', function() { + myp5.createCanvas(100, 100, myp5.WEBGL); + myp5.pixelDensity(1); + myp5.background(255); + myp5.fill(0); + myp5.noStroke(); + + // Contours with nearly identical consecutive vertices (as can occur with textToContours) + const contours = [ + [ + [-30, -30, 0], + [30, -30, 0], + [30, 30, 0], + [-30, 30, 0] + ], + [ + [-10, -10, 0], + [-10, 10, 0], + // This vertex has x coordinate almost equal to previous + [10.00000001, 10, 0], + [10, -10, 0] + ] + ]; + + myp5.beginShape(); + for (const contour of contours) { + if (contour !== contours[0]) { + myp5.beginContour(); + } + for (const v of contour) { + myp5.vertex(...v); + } + if (contour !== contours[0]) { + myp5.endContour(); + } + } + myp5.endShape(myp5.CLOSE); + + myp5.loadPixels(); + + // Check that center pixels are white (hole cut out properly) + const centerIdx = (myp5.width / 2 + myp5.height / 2 * myp5.width) * 4; + assert.equal(myp5.pixels[centerIdx], 255, 'Center should be white (hole)'); + + // Check that corner pixels are black (fill) + const cornerIdx = (10 + 10 * myp5.width) * 4; + assert.equal(myp5.pixels[cornerIdx], 0, 'Corner should be black (filled)'); + }); + suite('text shader', function() { test('rendering looks the same in WebGL1 and 2', function(done) { myp5.loadFont('manual-test-examples/p5.Font/Inconsolata-Bold.ttf', function(font) { From 8254f05f4bb5c79725f746c388add089e86cff8d Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Fri, 31 Oct 2025 23:02:06 +0530 Subject: [PATCH 2/3] refactor(test): convert tessellation test to visual test Converted pixel-checking unit test to visual test as suggested by maintainer. This makes the test easier to debug when issues arise in the future. --- test/unit/visual/cases/webgl.js | 31 ++++++++++++++++++++ test/unit/webgl/p5.RendererGL.js | 49 -------------------------------- 2 files changed, 31 insertions(+), 49 deletions(-) diff --git a/test/unit/visual/cases/webgl.js b/test/unit/visual/cases/webgl.js index 2f36feb806..0bf2fd7292 100644 --- a/test/unit/visual/cases/webgl.js +++ b/test/unit/visual/cases/webgl.js @@ -141,4 +141,35 @@ visualSuite('WebGL', function() { screenshot(); }); }); + + visualSuite('Tessellation', function() { + visualTest('Handles nearly identical consecutive vertices', function(p5, screenshot) { + p5.createCanvas(100, 100, p5.WEBGL); + p5.pixelDensity(1); + p5.background(255); + p5.fill(0); + p5.noStroke(); + + // Contours with nearly identical consecutive vertices (as can occur with textToContours) + // Outer contour + p5.beginShape(); + p5.vertex(-30, -30, 0); + p5.vertex(30, -30, 0); + p5.vertex(30, 30, 0); + p5.vertex(-30, 30, 0); + + // Inner contour (hole) with nearly identical vertices + p5.beginContour(); + p5.vertex(-10, -10, 0); + p5.vertex(-10, 10, 0); + // This vertex has x coordinate almost equal to previous (10.00000001 vs 10) + p5.vertex(10.00000001, 10, 0); + p5.vertex(10, -10, 0); + p5.endContour(); + + p5.endShape(p5.CLOSE); + + screenshot(); + }); + }); }); diff --git a/test/unit/webgl/p5.RendererGL.js b/test/unit/webgl/p5.RendererGL.js index 33e960c3c1..3c7e3df1a2 100644 --- a/test/unit/webgl/p5.RendererGL.js +++ b/test/unit/webgl/p5.RendererGL.js @@ -562,55 +562,6 @@ suite('p5.RendererGL', function() { assert.deepEqual(getColors(myp5.P2D), getColors(myp5.WEBGL)); }); - test('tessellation handles nearly identical consecutive vertices', function() { - myp5.createCanvas(100, 100, myp5.WEBGL); - myp5.pixelDensity(1); - myp5.background(255); - myp5.fill(0); - myp5.noStroke(); - - // Contours with nearly identical consecutive vertices (as can occur with textToContours) - const contours = [ - [ - [-30, -30, 0], - [30, -30, 0], - [30, 30, 0], - [-30, 30, 0] - ], - [ - [-10, -10, 0], - [-10, 10, 0], - // This vertex has x coordinate almost equal to previous - [10.00000001, 10, 0], - [10, -10, 0] - ] - ]; - - myp5.beginShape(); - for (const contour of contours) { - if (contour !== contours[0]) { - myp5.beginContour(); - } - for (const v of contour) { - myp5.vertex(...v); - } - if (contour !== contours[0]) { - myp5.endContour(); - } - } - myp5.endShape(myp5.CLOSE); - - myp5.loadPixels(); - - // Check that center pixels are white (hole cut out properly) - const centerIdx = (myp5.width / 2 + myp5.height / 2 * myp5.width) * 4; - assert.equal(myp5.pixels[centerIdx], 255, 'Center should be white (hole)'); - - // Check that corner pixels are black (fill) - const cornerIdx = (10 + 10 * myp5.width) * 4; - assert.equal(myp5.pixels[cornerIdx], 0, 'Corner should be black (filled)'); - }); - suite('text shader', function() { test('rendering looks the same in WebGL1 and 2', function(done) { myp5.loadFont('manual-test-examples/p5.Font/Inconsolata-Bold.ttf', function(font) { From 68f1891fa122667f2350b9032518cce45da166b7 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Mon, 24 Nov 2025 13:04:47 +0530 Subject: [PATCH 3/3] fix(webgl): remove z-axis normalization and update tessellation test Removed Z-axis coordinate normalization as testing confirmed it's not needed. Replaced simple test case with actual textToContours() example from issue #8186 that clearly demonstrates the tessellation bug and verifies the fix works. Resolves #8186 --- src/webgl/p5.RendererGL.Immediate.js | 5 --- test/unit/visual/cases/webgl.js | 41 +++++++++--------- .../Negative dimensions/arc/000.png | Bin 0 -> 517 bytes .../Negative dimensions/arc/metadata.json | 3 ++ .../Negative dimensions/ellipse/000.png | Bin 0 -> 557 bytes .../Negative dimensions/ellipse/metadata.json | 3 ++ .../Negative dimensions/rect/000.png | Bin 0 -> 407 bytes .../Negative dimensions/rect/metadata.json | 3 ++ .../Shape Modes/Shape arc/Mode CENTER/000.png | Bin 0 -> 1195 bytes .../Shape arc/Mode CENTER/metadata.json | 3 ++ .../Shape Modes/Shape arc/Mode CORNER/000.png | Bin 0 -> 1195 bytes .../Shape arc/Mode CORNER/metadata.json | 3 ++ .../Shape arc/Mode CORNERS/000.png | Bin 0 -> 1195 bytes .../Shape arc/Mode CORNERS/metadata.json | 3 ++ .../Shape Modes/Shape arc/Mode RADIUS/000.png | Bin 0 -> 1195 bytes .../Shape arc/Mode RADIUS/metadata.json | 3 ++ .../Shape ellipse/Mode CENTER/000.png | Bin 0 -> 1146 bytes .../Shape ellipse/Mode CENTER/metadata.json | 3 ++ .../Shape ellipse/Mode CORNER/000.png | Bin 0 -> 1146 bytes .../Shape ellipse/Mode CORNER/metadata.json | 3 ++ .../Shape ellipse/Mode CORNERS/000.png | Bin 0 -> 1146 bytes .../Shape ellipse/Mode CORNERS/metadata.json | 3 ++ .../Shape ellipse/Mode RADIUS/000.png | Bin 0 -> 1146 bytes .../Shape ellipse/Mode RADIUS/metadata.json | 3 ++ .../Shape rect/Mode CENTER/000.png | Bin 0 -> 552 bytes .../Shape rect/Mode CENTER/metadata.json | 3 ++ .../Shape rect/Mode CORNER/000.png | Bin 0 -> 614 bytes .../Shape rect/Mode CORNER/metadata.json | 3 ++ .../Shape rect/Mode CORNERS/000.png | Bin 0 -> 552 bytes .../Shape rect/Mode CORNERS/metadata.json | 3 ++ .../Shape rect/Mode RADIUS/000.png | Bin 0 -> 552 bytes .../Shape rect/Mode RADIUS/metadata.json | 3 ++ .../With the default font/000.png | Bin 0 -> 786 bytes .../With the default font/metadata.json | 3 ++ .../With the default monospace font/000.png | Bin 0 -> 498 bytes .../metadata.json | 3 ++ 36 files changed, 72 insertions(+), 25 deletions(-) create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/arc/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/arc/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/ellipse/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/ellipse/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/rect/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/rect/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CENTER/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CENTER/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNER/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNER/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNERS/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNERS/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode RADIUS/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode RADIUS/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CENTER/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CENTER/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNER/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNER/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNERS/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNERS/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode RADIUS/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode RADIUS/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CENTER/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CENTER/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNER/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNER/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNERS/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNERS/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode RADIUS/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode RADIUS/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default font/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default font/metadata.json create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default monospace font/000.png create mode 100644 test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default monospace font/metadata.json diff --git a/src/webgl/p5.RendererGL.Immediate.js b/src/webgl/p5.RendererGL.Immediate.js index 8e7e4bfb89..c9fe4db1f0 100644 --- a/src/webgl/p5.RendererGL.Immediate.js +++ b/src/webgl/p5.RendererGL.Immediate.js @@ -450,10 +450,8 @@ p5.RendererGL.prototype._tesselateShape = function() { ) { const prevX = contour[i - p5.RendererGL.prototype.tessyVertexSize]; const prevY = contour[i - p5.RendererGL.prototype.tessyVertexSize + 1]; - const prevZ = contour[i - p5.RendererGL.prototype.tessyVertexSize + 2]; const currX = contour[i]; const currY = contour[i + 1]; - const currZ = contour[i + 2]; if (Math.abs(prevX - currX) < epsilon) { contour[i] = prevX; @@ -461,9 +459,6 @@ p5.RendererGL.prototype._tesselateShape = function() { if (Math.abs(prevY - currY) < epsilon) { contour[i + 1] = prevY; } - if (Math.abs(prevZ - currZ) < epsilon) { - contour[i + 2] = prevZ; - } } } diff --git a/test/unit/visual/cases/webgl.js b/test/unit/visual/cases/webgl.js index 0bf2fd7292..ae6a2f80a7 100644 --- a/test/unit/visual/cases/webgl.js +++ b/test/unit/visual/cases/webgl.js @@ -143,31 +143,32 @@ visualSuite('WebGL', function() { }); visualSuite('Tessellation', function() { - visualTest('Handles nearly identical consecutive vertices', function(p5, screenshot) { - p5.createCanvas(100, 100, p5.WEBGL); - p5.pixelDensity(1); + visualTest('Handles nearly identical consecutive vertices from textToContours', async function(p5, screenshot) { + p5.createCanvas(200, 200, p5.WEBGL); p5.background(255); p5.fill(0); p5.noStroke(); - // Contours with nearly identical consecutive vertices (as can occur with textToContours) - // Outer contour - p5.beginShape(); - p5.vertex(-30, -30, 0); - p5.vertex(30, -30, 0); - p5.vertex(30, 30, 0); - p5.vertex(-30, 30, 0); + const font = await p5.loadFont('unit/assets/Inconsolata-Bold.ttf'); + const contours = font.textToContours('p', 0, 0, 60); - // Inner contour (hole) with nearly identical vertices - p5.beginContour(); - p5.vertex(-10, -10, 0); - p5.vertex(-10, 10, 0); - // This vertex has x coordinate almost equal to previous (10.00000001 vs 10) - p5.vertex(10.00000001, 10, 0); - p5.vertex(10, -10, 0); - p5.endContour(); - - p5.endShape(p5.CLOSE); + if (contours && contours.length > 0) { + p5.translate(-p5.width / 4, -p5.height / 4); + p5.beginShape(); + for (let contourIdx = 0; contourIdx < contours.length; contourIdx++) { + const contour = contours[contourIdx]; + if (contourIdx > 0) { + p5.beginContour(); + } + for (let i = 0; i < contour.length; i++) { + p5.vertex(contour[i].x, contour[i].y, 0); + } + if (contourIdx > 0) { + p5.endContour(); + } + } + p5.endShape(p5.CLOSE); + } screenshot(); }); diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/arc/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Negative dimensions/arc/000.png new file mode 100644 index 0000000000000000000000000000000000000000..b0732e0093e770d0d538f527d5c134e6a58d17c3 GIT binary patch literal 517 zcmV+g0{Z=lP)Px$zez+vRA@u(*0FC+Q5eVZ&$-GQ5{9O#lY|I~i9{?lkp2lsM-q#Hgh68P7l?$R z9jwGIMuQG&=w1mXLdD2N(%vI)UPFWSUMKE(-@G|zexBz%zwh_t<_2SO!kFYxf{dEU zVx$=9h(LK-9f3_ATZ|;5>!`69=?HA{*kU9ZT}O?@NJn6k#}*^W=sIdFMmhqUJhm7~ zM%PheG4h|l-o{BB#sNITwUpVzFtQjz?{bX2J;Dim#We9479Zf|$Oj44{utvV@e0FuV0jiFL;AjSZMnWhaIHto{e=SNF$=m z1;t2a;EmT6BaMhM7Zf9zfj3@Pj5H$3Tu_W;2Htqx*ckZPx$=Sf6CRA@u();()fK^VpH-@UupAYv0%Oso`ad?{@tpaegFmG~935K>xL*(uls zG_C2ZEUYX{M4r;RM$uAS*yytur8@;#wL=wd-x zuKuj5l{M*iCQh`qx*&~%_l#^5o0~xLL=Eo^#d4a2uW~L|}5Izs`u=jc|+m+BR zgqywVcl1A|KJ>2NX^rNQweH&D(4ep1t^3a~e4TQbGZf9QfJcT@$&Uo&d4c-*<4j6-Pxd z%s-&EFs*h?={Z4WZ|>DDwc886GNmf*WXpKLzOlVaoXzmtifiqFSa|J#bKr&2*p^fKwyeuuvsFrE#xj|m4SpB7&Rq#uk)at?&6LLZ&Co2^ z`L9?-tj>y6TAhoE`JT_YF85M;*{$}y*UoPx(Wl2OqRCr$PUC(P1K@@&NN$8hq8IJI zP;ybRXGx)+)uVV+6j~DW;z3$%p@uYvcxa&zDJ!$x#Z72;-elj<)qa7{(9Yz0-}~mx z?wdC|RdmQ+>X7jzF5%-ubg8ee?_4&UJ)g;Bsv8>{x3#kd1_sJIJ3Hg8R_o)|*48H? zdQU`aLXH&2H4#2NIy(9!pUV*EK=Xt9{bS&Cn zVPS!0W@ehTT1|I+Yf0KEZX97foK`*0(?4$o?W9pQh6C1Izy zrXk&CtLJ%Vi0B~^T_d8`!5_oVPnA-iEy=N(OX6A)j#}q=o+eI8si!Qfg&HNrwIUpN z`az)Zn}EaBK<#Ia6&AsbBU~V&??DXT3}RTvSNPg1hIPE^7@iMeSWj#}EX8$-8%Ox^ z(9qD!+1c6L^z?M6&1*_2pZs34bh%vCv-GbI?d&Fw%Oxyi|G|F^2p_x#ZY_Yq z`}kKpO=IdPj%!lbS(;`b>-y*t57I-VhrHlLdMK5aT1{F!anjuigww50a_gWl(nC}a{V{;*VGs(a z9wwhxksc-mx>n7s3T*6HI(%%e()2~r73!!i_|E0e-6i&ZJ$t;Az$^4i8 z-du&n*Or*B5yv$VcDA;JHLbrMzys4APoO7yP}?-5v8EMz0Bc%U)AA2Jz?v50`inI! ztZD5YiPP1C+E$k(#&Ar16A(_lLu&u0Jt002ov JPDHLkV1lNTIFtYY literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CENTER/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CENTER/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CENTER/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNER/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNER/000.png new file mode 100644 index 0000000000000000000000000000000000000000..d624061419aaaacd85af49537aadf960584abb21 GIT binary patch literal 1195 zcmV;c1XTNpP)Px(Wl2OqRCr$PUC(P1K@@&NN$8hq8IJI zP;ybRXGx)+)uVV+6j~DW;z3$%p@uYvcxa&zDJ!$x#Z72;-elj<)qa7{(9Yz0-}~mx z?wdC|RdmQ+>X7jzF5%-ubg8ee?_4&UJ)g;Bsv8>{x3#kd1_sJIJ3Hg8R_o)|*48H? zdQU`aLXH&2H4#2NIy(9!pUV*EK=Xt9{bS&Cn zVPS!0W@ehTT1|I+Yf0KEZX97foK`*0(?4$o?W9pQh6C1Izy zrXk&CtLJ%Vi0B~^T_d8`!5_oVPnA-iEy=N(OX6A)j#}q=o+eI8si!Qfg&HNrwIUpN z`az)Zn}EaBK<#Ia6&AsbBU~V&??DXT3}RTvSNPg1hIPE^7@iMeSWj#}EX8$-8%Ox^ z(9qD!+1c6L^z?M6&1*_2pZs34bh%vCv-GbI?d&Fw%Oxyi|G|F^2p_x#ZY_Yq z`}kKpO=IdPj%!lbS(;`b>-y*t57I-VhrHlLdMK5aT1{F!anjuigww50a_gWl(nC}a{V{;*VGs(a z9wwhxksc-mx>n7s3T*6HI(%%e()2~r73!!i_|E0e-6i&ZJ$t;Az$^4i8 z-du&n*Or*B5yv$VcDA;JHLbrMzys4APoO7yP}?-5v8EMz0Bc%U)AA2Jz?v50`inI! ztZD5YiPP1C+E$k(#&Ar16A(_lLu&u0Jt002ov JPDHLkV1lNTIFtYY literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNER/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNER/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNER/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNERS/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNERS/000.png new file mode 100644 index 0000000000000000000000000000000000000000..d624061419aaaacd85af49537aadf960584abb21 GIT binary patch literal 1195 zcmV;c1XTNpP)Px(Wl2OqRCr$PUC(P1K@@&NN$8hq8IJI zP;ybRXGx)+)uVV+6j~DW;z3$%p@uYvcxa&zDJ!$x#Z72;-elj<)qa7{(9Yz0-}~mx z?wdC|RdmQ+>X7jzF5%-ubg8ee?_4&UJ)g;Bsv8>{x3#kd1_sJIJ3Hg8R_o)|*48H? zdQU`aLXH&2H4#2NIy(9!pUV*EK=Xt9{bS&Cn zVPS!0W@ehTT1|I+Yf0KEZX97foK`*0(?4$o?W9pQh6C1Izy zrXk&CtLJ%Vi0B~^T_d8`!5_oVPnA-iEy=N(OX6A)j#}q=o+eI8si!Qfg&HNrwIUpN z`az)Zn}EaBK<#Ia6&AsbBU~V&??DXT3}RTvSNPg1hIPE^7@iMeSWj#}EX8$-8%Ox^ z(9qD!+1c6L^z?M6&1*_2pZs34bh%vCv-GbI?d&Fw%Oxyi|G|F^2p_x#ZY_Yq z`}kKpO=IdPj%!lbS(;`b>-y*t57I-VhrHlLdMK5aT1{F!anjuigww50a_gWl(nC}a{V{;*VGs(a z9wwhxksc-mx>n7s3T*6HI(%%e()2~r73!!i_|E0e-6i&ZJ$t;Az$^4i8 z-du&n*Or*B5yv$VcDA;JHLbrMzys4APoO7yP}?-5v8EMz0Bc%U)AA2Jz?v50`inI! ztZD5YiPP1C+E$k(#&Ar16A(_lLu&u0Jt002ov JPDHLkV1lNTIFtYY literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNERS/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNERS/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode CORNERS/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode RADIUS/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode RADIUS/000.png new file mode 100644 index 0000000000000000000000000000000000000000..d624061419aaaacd85af49537aadf960584abb21 GIT binary patch literal 1195 zcmV;c1XTNpP)Px(Wl2OqRCr$PUC(P1K@@&NN$8hq8IJI zP;ybRXGx)+)uVV+6j~DW;z3$%p@uYvcxa&zDJ!$x#Z72;-elj<)qa7{(9Yz0-}~mx z?wdC|RdmQ+>X7jzF5%-ubg8ee?_4&UJ)g;Bsv8>{x3#kd1_sJIJ3Hg8R_o)|*48H? zdQU`aLXH&2H4#2NIy(9!pUV*EK=Xt9{bS&Cn zVPS!0W@ehTT1|I+Yf0KEZX97foK`*0(?4$o?W9pQh6C1Izy zrXk&CtLJ%Vi0B~^T_d8`!5_oVPnA-iEy=N(OX6A)j#}q=o+eI8si!Qfg&HNrwIUpN z`az)Zn}EaBK<#Ia6&AsbBU~V&??DXT3}RTvSNPg1hIPE^7@iMeSWj#}EX8$-8%Ox^ z(9qD!+1c6L^z?M6&1*_2pZs34bh%vCv-GbI?d&Fw%Oxyi|G|F^2p_x#ZY_Yq z`}kKpO=IdPj%!lbS(;`b>-y*t57I-VhrHlLdMK5aT1{F!anjuigww50a_gWl(nC}a{V{;*VGs(a z9wwhxksc-mx>n7s3T*6HI(%%e()2~r73!!i_|E0e-6i&ZJ$t;Az$^4i8 z-du&n*Or*B5yv$VcDA;JHLbrMzys4APoO7yP}?-5v8EMz0Bc%U)AA2Jz?v50`inI! ztZD5YiPP1C+E$k(#&Ar16A(_lLu&u0Jt002ov JPDHLkV1lNTIFtYY literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode RADIUS/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode RADIUS/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape arc/Mode RADIUS/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CENTER/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CENTER/000.png new file mode 100644 index 0000000000000000000000000000000000000000..7324222906aa1bc700ef1271d80a8665382c0f78 GIT binary patch literal 1146 zcmV-=1cm#FP)Px(G)Y83RCr$PT+d4zK^XmF!6a&k$tt>7Y>^%WE7DsJ77P+7^pIO>FFh1Il$M^= zQ?WuWEh6{_1nD7Cp-6J=Ur~AyL_`cCi}oVs7fDG_(XyNG)67g#`T~2JnSJx#+nt@a zGaDcMXFuP6#+Rgo2Z-q9*x1;M)6>)Y<#KtjSS&_;K3~o6_d9;S|2P;7?i?H(W$ zqFSwXkBF*FT_d<|gg>NGsgDZ_3lWZtq};ac%F)r$46H-T z>iB#O2ySq!*D-?Y+L5WLsn65X)9=^U*IT-WXJ%$9p-?E9%jLdv!qm%6;Cd?G-{1df ze0==f^73*d9*;}<+o)46mm8z>($Z2f6bilC-Q5+Dy#&yW%UxSjf4xE$dt;p;Q4k&%)3 z`T6;yQmHgpDwPK6_h)x^_i-Q)IPU4`+1cOU-zK8W9Z9-1>sO5{C9IG`drt+z?bTmD zIvn=USb0nndZ`?jb68tUV+d=*MLeu4Zz86-Icx$K@sNm7O&jo>04nu=*|_b}q2 zhFHoyhqc8t<~ghlmm`dLD4Y^@Y&EIF9ZTT09RuOpD)z6{mpZIGrU`{oj>{3&7Sj+9 zFBHJ)q43(jUai@xCE_9C;T
  • rJqF*hE0YL&U?@S1q}T2jXFiV_4gpOC4@|M^$wI zgjFfosppY8tURU(1yPR65k@@ZoWbT&Y%cY@MzFb*yM3CKdu?jP>LFGSvAGnROR>4M zmC;pqTW)Hp8{hc(LD;zDh5_NQVZn{V!C~W)8wP~K9)c@>wxkojSr^r!E`HwjH$NV)Y4QxjNyQ=F{#@GBz0JM zOcU}|j>{27Jmj1~JVZQ1JVZR?#tBI|;^Bo#o{uHn|7+#tl5Sk?Ijrr&W#+QfhRYGY zdLN+rf2}0PT#L&U=y3Mh|hlKT*=heDMQ53eck2U~a{6e@zx=l}o! M07*qoM6N<$g0;jnn*aa+ literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CENTER/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CENTER/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CENTER/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNER/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNER/000.png new file mode 100644 index 0000000000000000000000000000000000000000..7324222906aa1bc700ef1271d80a8665382c0f78 GIT binary patch literal 1146 zcmV-=1cm#FP)Px(G)Y83RCr$PT+d4zK^XmF!6a&k$tt>7Y>^%WE7DsJ77P+7^pIO>FFh1Il$M^= zQ?WuWEh6{_1nD7Cp-6J=Ur~AyL_`cCi}oVs7fDG_(XyNG)67g#`T~2JnSJx#+nt@a zGaDcMXFuP6#+Rgo2Z-q9*x1;M)6>)Y<#KtjSS&_;K3~o6_d9;S|2P;7?i?H(W$ zqFSwXkBF*FT_d<|gg>NGsgDZ_3lWZtq};ac%F)r$46H-T z>iB#O2ySq!*D-?Y+L5WLsn65X)9=^U*IT-WXJ%$9p-?E9%jLdv!qm%6;Cd?G-{1df ze0==f^73*d9*;}<+o)46mm8z>($Z2f6bilC-Q5+Dy#&yW%UxSjf4xE$dt;p;Q4k&%)3 z`T6;yQmHgpDwPK6_h)x^_i-Q)IPU4`+1cOU-zK8W9Z9-1>sO5{C9IG`drt+z?bTmD zIvn=USb0nndZ`?jb68tUV+d=*MLeu4Zz86-Icx$K@sNm7O&jo>04nu=*|_b}q2 zhFHoyhqc8t<~ghlmm`dLD4Y^@Y&EIF9ZTT09RuOpD)z6{mpZIGrU`{oj>{3&7Sj+9 zFBHJ)q43(jUai@xCE_9C;T
  • rJqF*hE0YL&U?@S1q}T2jXFiV_4gpOC4@|M^$wI zgjFfosppY8tURU(1yPR65k@@ZoWbT&Y%cY@MzFb*yM3CKdu?jP>LFGSvAGnROR>4M zmC;pqTW)Hp8{hc(LD;zDh5_NQVZn{V!C~W)8wP~K9)c@>wxkojSr^r!E`HwjH$NV)Y4QxjNyQ=F{#@GBz0JM zOcU}|j>{27Jmj1~JVZQ1JVZR?#tBI|;^Bo#o{uHn|7+#tl5Sk?Ijrr&W#+QfhRYGY zdLN+rf2}0PT#L&U=y3Mh|hlKT*=heDMQ53eck2U~a{6e@zx=l}o! M07*qoM6N<$g0;jnn*aa+ literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNER/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNER/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNER/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNERS/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNERS/000.png new file mode 100644 index 0000000000000000000000000000000000000000..7324222906aa1bc700ef1271d80a8665382c0f78 GIT binary patch literal 1146 zcmV-=1cm#FP)Px(G)Y83RCr$PT+d4zK^XmF!6a&k$tt>7Y>^%WE7DsJ77P+7^pIO>FFh1Il$M^= zQ?WuWEh6{_1nD7Cp-6J=Ur~AyL_`cCi}oVs7fDG_(XyNG)67g#`T~2JnSJx#+nt@a zGaDcMXFuP6#+Rgo2Z-q9*x1;M)6>)Y<#KtjSS&_;K3~o6_d9;S|2P;7?i?H(W$ zqFSwXkBF*FT_d<|gg>NGsgDZ_3lWZtq};ac%F)r$46H-T z>iB#O2ySq!*D-?Y+L5WLsn65X)9=^U*IT-WXJ%$9p-?E9%jLdv!qm%6;Cd?G-{1df ze0==f^73*d9*;}<+o)46mm8z>($Z2f6bilC-Q5+Dy#&yW%UxSjf4xE$dt;p;Q4k&%)3 z`T6;yQmHgpDwPK6_h)x^_i-Q)IPU4`+1cOU-zK8W9Z9-1>sO5{C9IG`drt+z?bTmD zIvn=USb0nndZ`?jb68tUV+d=*MLeu4Zz86-Icx$K@sNm7O&jo>04nu=*|_b}q2 zhFHoyhqc8t<~ghlmm`dLD4Y^@Y&EIF9ZTT09RuOpD)z6{mpZIGrU`{oj>{3&7Sj+9 zFBHJ)q43(jUai@xCE_9C;T
  • rJqF*hE0YL&U?@S1q}T2jXFiV_4gpOC4@|M^$wI zgjFfosppY8tURU(1yPR65k@@ZoWbT&Y%cY@MzFb*yM3CKdu?jP>LFGSvAGnROR>4M zmC;pqTW)Hp8{hc(LD;zDh5_NQVZn{V!C~W)8wP~K9)c@>wxkojSr^r!E`HwjH$NV)Y4QxjNyQ=F{#@GBz0JM zOcU}|j>{27Jmj1~JVZQ1JVZR?#tBI|;^Bo#o{uHn|7+#tl5Sk?Ijrr&W#+QfhRYGY zdLN+rf2}0PT#L&U=y3Mh|hlKT*=heDMQ53eck2U~a{6e@zx=l}o! M07*qoM6N<$g0;jnn*aa+ literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNERS/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNERS/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode CORNERS/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode RADIUS/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode RADIUS/000.png new file mode 100644 index 0000000000000000000000000000000000000000..7324222906aa1bc700ef1271d80a8665382c0f78 GIT binary patch literal 1146 zcmV-=1cm#FP)Px(G)Y83RCr$PT+d4zK^XmF!6a&k$tt>7Y>^%WE7DsJ77P+7^pIO>FFh1Il$M^= zQ?WuWEh6{_1nD7Cp-6J=Ur~AyL_`cCi}oVs7fDG_(XyNG)67g#`T~2JnSJx#+nt@a zGaDcMXFuP6#+Rgo2Z-q9*x1;M)6>)Y<#KtjSS&_;K3~o6_d9;S|2P;7?i?H(W$ zqFSwXkBF*FT_d<|gg>NGsgDZ_3lWZtq};ac%F)r$46H-T z>iB#O2ySq!*D-?Y+L5WLsn65X)9=^U*IT-WXJ%$9p-?E9%jLdv!qm%6;Cd?G-{1df ze0==f^73*d9*;}<+o)46mm8z>($Z2f6bilC-Q5+Dy#&yW%UxSjf4xE$dt;p;Q4k&%)3 z`T6;yQmHgpDwPK6_h)x^_i-Q)IPU4`+1cOU-zK8W9Z9-1>sO5{C9IG`drt+z?bTmD zIvn=USb0nndZ`?jb68tUV+d=*MLeu4Zz86-Icx$K@sNm7O&jo>04nu=*|_b}q2 zhFHoyhqc8t<~ghlmm`dLD4Y^@Y&EIF9ZTT09RuOpD)z6{mpZIGrU`{oj>{3&7Sj+9 zFBHJ)q43(jUai@xCE_9C;T
  • rJqF*hE0YL&U?@S1q}T2jXFiV_4gpOC4@|M^$wI zgjFfosppY8tURU(1yPR65k@@ZoWbT&Y%cY@MzFb*yM3CKdu?jP>LFGSvAGnROR>4M zmC;pqTW)Hp8{hc(LD;zDh5_NQVZn{V!C~W)8wP~K9)c@>wxkojSr^r!E`HwjH$NV)Y4QxjNyQ=F{#@GBz0JM zOcU}|j>{27Jmj1~JVZQ1JVZR?#tBI|;^Bo#o{uHn|7+#tl5Sk?Ijrr&W#+QfhRYGY zdLN+rf2}0PT#L&U=y3Mh|hlKT*=heDMQ53eck2U~a{6e@zx=l}o! M07*qoM6N<$g0;jnn*aa+ literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode RADIUS/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode RADIUS/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape ellipse/Mode RADIUS/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CENTER/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CENTER/000.png new file mode 100644 index 0000000000000000000000000000000000000000..5c096e42bb5f1321193b4c4278f8857a86abfd15 GIT binary patch literal 552 zcmV+@0@wYCP)Px$;z>k7RCr$PoZW51Kn#PKExb;5=s@;7U837~jXop@P~e=z;GMvOzdT3xBT5!2 zE4k@npWDUmtJZ~oBz<>w#FwPsH*1#c+q&?+@B6YWOP4!u+opA0H%aT81xxnj!jein z-9Wo!Ul0ai^U=ja>)3(huoGNIk;OwxQVHW}pjWalT-wQ-8Eip#29%sLA`hXKPW(uM zT0$+K9)L?b*#wt3F>8cpwkE#8}88h=&j$h8+Whk%wk*K`o({P)jq3pqBpz z)9HB7@h~%rvJ_aBkcVbeN0}oYqTm>C7!V%d)TkvvI0}vdhXLUMPK{cUiFnkK8IY)@ zK()jaj}z5|G$Bo2+R31&Eh7(%Jah@9{6$bp`51X81Yt%Vya?j=!!P_-B3gJqOvi&9 zKIZ}SFnSn0d@g4WzI{dyGxE^I(V qhtb1cDoruPgFG}rjxxWTc=!XcufV$U$q~T-0000^M literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CENTER/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CENTER/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CENTER/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNER/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNER/000.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6ecdcd5935f0181d09fd799befbf79834f19e5 GIT binary patch literal 614 zcmV-s0-61ZP)Px%AW1|)RCr$PoXu^7Kn#Uny5K-BQF_QB-7u6BrHM3yXd{QL*vk-z9ddmt?7^~5iI{{{F{ z(#L^Nh~6H;(=<)3wWA;V&e^;yi^g$WB#j3WA$l=bQi!KJXou(pVGur7n|8lN(b{() zIqU@2USv_UDo$EXB&C;yJfw%nJRk^HELtH00OTQvr7?KGmdrK)TY@cZ9ti0U6s?Ly zE964Flgc4_nWfDxlwKT!(?et)5QI$!rWXg{^bnZ`1mTLW@r11Lb|N!GFUzGYmzq_P zcOLc~NDe!}#VY_0?@^^IR%tfko#K&A7V?k{k*m)G!q7uArkJIfr8f^i9-M4~JU||v z@e`6uT;c`&`5=6_;-uwtgY>eHhx8Dc2Lxd@;>{3Zo0e@_wrR~I`W5G8%RlI0$f9-! z#t^+Mh*w+?4+*VIAsw=r-Z3~tFSGO|O)&98KsYftmmIB!a7gjURJ6*qB@A|whYJ8M z0Js2fGH8?K0)PvEXCRepOXVi5ONvI;hm>PWKc26^x*QN;asU7T07*qoM6N<$f=yov AD*ylh literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNER/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNER/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNER/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNERS/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNERS/000.png new file mode 100644 index 0000000000000000000000000000000000000000..5c096e42bb5f1321193b4c4278f8857a86abfd15 GIT binary patch literal 552 zcmV+@0@wYCP)Px$;z>k7RCr$PoZW51Kn#PKExb;5=s@;7U837~jXop@P~e=z;GMvOzdT3xBT5!2 zE4k@npWDUmtJZ~oBz<>w#FwPsH*1#c+q&?+@B6YWOP4!u+opA0H%aT81xxnj!jein z-9Wo!Ul0ai^U=ja>)3(huoGNIk;OwxQVHW}pjWalT-wQ-8Eip#29%sLA`hXKPW(uM zT0$+K9)L?b*#wt3F>8cpwkE#8}88h=&j$h8+Whk%wk*K`o({P)jq3pqBpz z)9HB7@h~%rvJ_aBkcVbeN0}oYqTm>C7!V%d)TkvvI0}vdhXLUMPK{cUiFnkK8IY)@ zK()jaj}z5|G$Bo2+R31&Eh7(%Jah@9{6$bp`51X81Yt%Vya?j=!!P_-B3gJqOvi&9 zKIZ}SFnSn0d@g4WzI{dyGxE^I(V qhtb1cDoruPgFG}rjxxWTc=!XcufV$U$q~T-0000^M literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNERS/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNERS/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode CORNERS/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode RADIUS/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode RADIUS/000.png new file mode 100644 index 0000000000000000000000000000000000000000..5c096e42bb5f1321193b4c4278f8857a86abfd15 GIT binary patch literal 552 zcmV+@0@wYCP)Px$;z>k7RCr$PoZW51Kn#PKExb;5=s@;7U837~jXop@P~e=z;GMvOzdT3xBT5!2 zE4k@npWDUmtJZ~oBz<>w#FwPsH*1#c+q&?+@B6YWOP4!u+opA0H%aT81xxnj!jein z-9Wo!Ul0ai^U=ja>)3(huoGNIk;OwxQVHW}pjWalT-wQ-8Eip#29%sLA`hXKPW(uM zT0$+K9)L?b*#wt3F>8cpwkE#8}88h=&j$h8+Whk%wk*K`o({P)jq3pqBpz z)9HB7@h~%rvJ_aBkcVbeN0}oYqTm>C7!V%d)TkvvI0}vdhXLUMPK{cUiFnkK8IY)@ zK()jaj}z5|G$Bo2+R31&Eh7(%Jah@9{6$bp`51X81Yt%Vya?j=!!P_-B3gJqOvi&9 zKIZ}SFnSn0d@g4WzI{dyGxE^I(V qhtb1cDoruPgFG}rjxxWTc=!XcufV$U$q~T-0000^M literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode RADIUS/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode RADIUS/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Shape Modes/Shape rect/Mode RADIUS/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default font/000.png b/test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default font/000.png new file mode 100644 index 0000000000000000000000000000000000000000..0b90be44dba8381cb335c2a71265b428f6fb2263 GIT binary patch literal 786 zcmV+t1MU2YP)Px%%t=H+RA@u()?Mh%XBY?Y&tFEOMD3U}mN=6Gidqz{*lJ#;abUIOHRLU{D5h<~ zfw$%WEemtNI3PRmmdNHMni@;miA4!%rRdWAtEZ=j^7}vc|6jVFlc%2NzOMUweZSZB zz3vY0$)_XL(E}gjKU~dRTW?IlHQa62T~#5YaSmf}zFo=RkY^^AVH$3?>#kBrCz#Bp z$Xcv#02aMl$sUT0z#>e>2lyRZaRx6N;`(A1W@8lY;WW142KrzNzHW#)i74!0Cy03+ z8bCk7IPAdObZHdxG!?WRm$3)W)5V|Q8~l=r36S4oJa*$x48lD0!*txla7@7$Scg05 z?Emd3ByzMG_QCiWx3Cz`(q%odGJ*L#0UU}$_!0XXK!ut+@e}r@-?O#Wn+k~w1H{A@ zP8I-v#pa|yRmgAH*idvUqPx71n4K?E3;f%J=tIQ+$J2MO)LQfL2q#jZ7xADewo40X zHJGi~jd_T+i`j{o=>IusxmM?+)z;vCceGZRz_)35V=%*k-sLj@Ba<Xur)mM0&3R;1w`0HI{e%smViBh@H*~Ic6X^+gnE?j8ZBk_A! zaJW{04ohB&)!2t)2m=WAW9Niv98ExC*POz4>0Iobw(XGs5<|KQ12F;NIL(_q{)^2X z%QL`M%m>C`{j=1Pp=`KUfRD|7z2OxQFMxP7F2FxY*}prhOr=O?^K^TBDWuyaXaZ0a zDT-ubptM#dVr!=@iqxhqQ(#df6S1|^7DZ}PmnpC)l8M;bX^SGYsml~t6v;$v?X*Ra z+SFwVEQ(|zwszX0NNwse1r|jz5nDTLQKU9?nF5OPx$tVu*cRA@u(mZ44rK@5h!lW5)mgX94Y3=+cwfJ2@_6CglP2ow^Xx_4{WV5et>Ahpp!QzG zEETEUo;>bER`sydTAQm}M{3dc$_x%7q>sot+gZe10gu3UVXoxS%6rW^?9$f<-N3gL zU7H(;brB*%ENzpo(6m|ZlryC*lnRrLmbZ%tNv`VkTw4N?tGS-ix0W8rzPmx+3yF>% z;6&sJcmQ@Xj2D&dmv63oK@{tm>_=luzmM`v5E&bmAQD8J9EjF(GS-|nh?uQ&3JfAn z#+uUx5wmqpfkDK{SaaGSVz$mHFo-xAYfc+P%+@&t1`#J?&1r*(**d4dAmU`KIc*Rz oTjvxQM4XH@rwt-z>zo4r0d_lCGpsK0hyVZp07*qoM6N<$g1)WO@&Et; literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default monospace font/metadata.json b/test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default monospace font/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/Tessellation/Typography/textFont() with default fonts/With the default monospace font/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file