From 075abc4f031fd8573d28942f19433097914ad8d1 Mon Sep 17 00:00:00 2001 From: Thomas Friedel Date: Wed, 14 Mar 2018 15:37:01 +0100 Subject: [PATCH] bugfix for an edge case --- paths.go | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/paths.go b/paths.go index dbec2e1..c8a4f40 100644 --- a/paths.go +++ b/paths.go @@ -438,8 +438,11 @@ func (cv *Canvas) Fill() { cv.activate() gli.BindBuffer(gl_ARRAY_BUFFER, buf) - var buf [1000]float32 - tris := triangulatePath(path, buf[:0]) + var triBuf [1000]float32 + tris := triangulatePath(path, triBuf[:0]) + if len(tris) == 0 { + return + } gli.BufferData(gl_ARRAY_BUFFER, len(tris)*4, unsafe.Pointer(&tris[0]), gl_STREAM_DRAW) vertex := cv.useShader(&cv.state.fill) @@ -460,11 +463,21 @@ func (cv *Canvas) Clip() { func (cv *Canvas) clip(path []pathPoint) { cv.activate() - gli.BindBuffer(gl_ARRAY_BUFFER, buf) - var buf [1000]float32 - tris := buf[:0] + gli.ColorMask(false, false, false, false) + gli.StencilFunc(gl_ALWAYS, 2, 0xFF) + gli.StencilOp(gl_KEEP, gl_KEEP, gl_REPLACE) + gli.StencilMask(0x02) + gli.Clear(gl_STENCIL_BUFFER_BIT) + + var triBuf [1000]float32 + tris := triBuf[:0] tris = append(tris, 0, 0, cv.fw, 0, cv.fw, cv.fh, 0, 0, cv.fw, cv.fh, 0, cv.fh) tris = triangulatePath(path, tris) + if len(tris) > 0 { + return + } + + gli.BindBuffer(gl_ARRAY_BUFFER, buf) gli.BufferData(gl_ARRAY_BUFFER, len(tris)*4, unsafe.Pointer(&tris[0]), gl_STREAM_DRAW) gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, nil) @@ -473,12 +486,6 @@ func (cv *Canvas) clip(path []pathPoint) { gli.Uniform2f(sr.canvasSize, cv.fw, cv.fh) gli.EnableVertexAttribArray(sr.vertex) - gli.ColorMask(false, false, false, false) - gli.StencilFunc(gl_ALWAYS, 2, 0xFF) - gli.StencilOp(gl_KEEP, gl_KEEP, gl_REPLACE) - gli.StencilMask(0x02) - gli.Clear(gl_STENCIL_BUFFER_BIT) - gli.DrawArrays(gl_TRIANGLES, 0, 6) gli.StencilFunc(gl_ALWAYS, 0, 0xFF) gli.DrawArrays(gl_TRIANGLES, 6, int32(len(tris)/2-6))