fixed a bug with offscreen rendering
This commit is contained in:
parent
4debf145d2
commit
7297427a70
2 changed files with 9 additions and 1 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue