bugfix for an edge case
This commit is contained in:
parent
b7af1ad3a4
commit
075abc4f03
1 changed files with 18 additions and 11 deletions
29
paths.go
29
paths.go
|
@ -438,8 +438,11 @@ func (cv *Canvas) Fill() {
|
||||||
cv.activate()
|
cv.activate()
|
||||||
|
|
||||||
gli.BindBuffer(gl_ARRAY_BUFFER, buf)
|
gli.BindBuffer(gl_ARRAY_BUFFER, buf)
|
||||||
var buf [1000]float32
|
var triBuf [1000]float32
|
||||||
tris := triangulatePath(path, buf[:0])
|
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)
|
gli.BufferData(gl_ARRAY_BUFFER, len(tris)*4, unsafe.Pointer(&tris[0]), gl_STREAM_DRAW)
|
||||||
|
|
||||||
vertex := cv.useShader(&cv.state.fill)
|
vertex := cv.useShader(&cv.state.fill)
|
||||||
|
@ -460,11 +463,21 @@ func (cv *Canvas) Clip() {
|
||||||
func (cv *Canvas) clip(path []pathPoint) {
|
func (cv *Canvas) clip(path []pathPoint) {
|
||||||
cv.activate()
|
cv.activate()
|
||||||
|
|
||||||
gli.BindBuffer(gl_ARRAY_BUFFER, buf)
|
gli.ColorMask(false, false, false, false)
|
||||||
var buf [1000]float32
|
gli.StencilFunc(gl_ALWAYS, 2, 0xFF)
|
||||||
tris := buf[:0]
|
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 = append(tris, 0, 0, cv.fw, 0, cv.fw, cv.fh, 0, 0, cv.fw, cv.fh, 0, cv.fh)
|
||||||
tris = triangulatePath(path, tris)
|
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.BufferData(gl_ARRAY_BUFFER, len(tris)*4, unsafe.Pointer(&tris[0]), gl_STREAM_DRAW)
|
||||||
gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, nil)
|
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.Uniform2f(sr.canvasSize, cv.fw, cv.fh)
|
||||||
gli.EnableVertexAttribArray(sr.vertex)
|
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.DrawArrays(gl_TRIANGLES, 0, 6)
|
||||||
gli.StencilFunc(gl_ALWAYS, 0, 0xFF)
|
gli.StencilFunc(gl_ALWAYS, 0, 0xFF)
|
||||||
gli.DrawArrays(gl_TRIANGLES, 6, int32(len(tris)/2-6))
|
gli.DrawArrays(gl_TRIANGLES, 6, int32(len(tris)/2-6))
|
||||||
|
|
Loading…
Reference in a new issue