From 7297427a70a19f6da238ee77197cce68786f9076 Mon Sep 17 00:00:00 2001 From: Thomas Friedel Date: Thu, 1 Nov 2018 17:31:36 +0100 Subject: [PATCH] fixed a bug with offscreen rendering --- canvas.go | 7 ++++++- shadows.go | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/canvas.go b/canvas.go index 6898c18..a5391be 100644 --- a/canvas.go +++ b/canvas.go @@ -232,6 +232,7 @@ type offscreenBuffer struct { h int renderStencilBuf uint32 frameBuf uint32 + alpha bool } type gaussianShader struct { @@ -607,7 +608,11 @@ func (cv *Canvas) enableTextureRenderTarget(offscr *offscreenBuffer) { gli.GenTextures(1, &offscr.tex) gli.BindTexture(gl_TEXTURE_2D, offscr.tex) // todo do non-power-of-two textures work everywhere? - gli.TexImage2D(gl_TEXTURE_2D, 0, gl_RGBA, int32(cv.w), int32(cv.h), 0, gl_RGBA, gl_UNSIGNED_BYTE, nil) + if offscr.alpha { + gli.TexImage2D(gl_TEXTURE_2D, 0, gl_RGBA, int32(cv.w), int32(cv.h), 0, gl_RGBA, gl_UNSIGNED_BYTE, nil) + } else { + gli.TexImage2D(gl_TEXTURE_2D, 0, gl_RGB, int32(cv.w), int32(cv.h), 0, gl_RGB, gl_UNSIGNED_BYTE, nil) + } gli.TexParameteri(gl_TEXTURE_2D, gl_TEXTURE_MAG_FILTER, gl_NEAREST) gli.TexParameteri(gl_TEXTURE_2D, gl_TEXTURE_MIN_FILTER, gl_NEAREST) diff --git a/shadows.go b/shadows.go index 1c3e7cd..eebba96 100644 --- a/shadows.go +++ b/shadows.go @@ -12,6 +12,7 @@ func (cv *Canvas) drawShadow(tris []float32) { } if cv.state.shadowBlur > 0 { + offscr1.alpha = true cv.enableTextureRenderTarget(&offscr1) gli.ClearColor(0, 0, 0, 0) gli.Clear(gl_COLOR_BUFFER_BIT | gl_STENCIL_BUFFER_BIT) @@ -71,6 +72,7 @@ func (cv *Canvas) drawTextShadow(offset image.Point, strWidth, strHeight int, x, y += cv.state.shadowOffsetY if cv.state.shadowBlur > 0 { + offscr1.alpha = true cv.enableTextureRenderTarget(&offscr1) gli.ClearColor(0, 0, 0, 0) gli.Clear(gl_COLOR_BUFFER_BIT | gl_STENCIL_BUFFER_BIT) @@ -134,6 +136,7 @@ func (cv *Canvas) drawBlurredShadow() { gaussianKernel(cv.state.shadowBlur, kernel) + offscr2.alpha = true cv.enableTextureRenderTarget(&offscr2) gli.ClearColor(0, 0, 0, 0) gli.Clear(gl_COLOR_BUFFER_BIT | gl_STENCIL_BUFFER_BIT)