fixed a bug with offscreen rendering

This commit is contained in:
Thomas Friedel 2018-11-01 17:31:36 +01:00
parent 4debf145d2
commit 7297427a70
2 changed files with 9 additions and 1 deletions

View file

@ -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?
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)

View file

@ -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)