func (r *EffectsRenderer) initFramebuffer(w, h int) (fb uint32, tex uint32, err error) { gl.GenFramebuffers(1, &fb) gl.BindFramebuffer(gl.FRAMEBUFFER, fb) gl.GenTextures(1, &tex) gl.BindTexture(gl.TEXTURE_2D, tex) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST) gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, int32(w), int32(h), 0, gl.RGBA, gl.UNSIGNED_BYTE, nil) gl.FramebufferTexture2D(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0) if err = r.GetError(); err != nil { return } buffers := []uint32{gl.COLOR_ATTACHMENT0} gl.DrawBuffers(1, &buffers[0]) var rb uint32 gl.GenRenderbuffers(1, &rb) gl.BindRenderbuffer(gl.RENDERBUFFER, rb) gl.RenderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, int32(w), int32(h)) gl.FramebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, rb) gl.BindTexture(gl.TEXTURE_2D, 0) gl.BindFramebuffer(gl.FRAMEBUFFER, 0) gl.BindRenderbuffer(gl.RENDERBUFFER, 0) return }
func (r *EffectsRenderer) Delete() error { gl.BindTexture(gl.TEXTURE_2D, 0) gl.BindFramebuffer(gl.FRAMEBUFFER, 0) gl.BindRenderbuffer(gl.RENDERBUFFER, 0) gl.BindBuffer(gl.ARRAY_BUFFER, 0) gl.DeleteFramebuffers(1, &r.framebuffer) gl.DeleteTextures(1, &r.texture) gl.DeleteBuffers(1, &r.coords) return r.GetError() }
func (r *GlowRenderer) Delete() error { gl.BindTexture(gl.TEXTURE_2D, 0) gl.BindFramebuffer(gl.FRAMEBUFFER, 0) gl.BindRenderbuffer(gl.RENDERBUFFER, 0) gl.BindBuffer(gl.ARRAY_BUFFER, 0) gl.DeleteFramebuffers(1, &r.GlowFb) gl.DeleteTextures(1, &r.GlowTex) gl.DeleteFramebuffers(1, &r.BlurFb) gl.DeleteTextures(1, &r.BlurTex) gl.DeleteBuffers(1, &r.coords) return r.GetError() }