Esempio n. 1
0
// loadVolatile will create the framebuffer and return true if successful
func (canvas *Canvas) loadVolatile() bool {
	canvas.status = gl.FRAMEBUFFER_COMPLETE

	// glTexImage2D is guaranteed to error in this case.
	if canvas.width > maxTextureSize || canvas.height > maxTextureSize {
		canvas.status = gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT
		return false
	}

	canvas.Texture = newTexture(canvas.width, canvas.height, false)
	//NULL means reserve texture memory, but texels are undefined
	gl.TexImage2D(gl.TEXTURE_2D, 0, int(canvas.width), int(canvas.height), gl.RGBA, gl.UNSIGNED_BYTE, nil)
	if gl.GetError() != gl.NO_ERROR {
		canvas.Texture.Release()
		canvas.status = gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT
		return false
	}

	canvas.fbo, canvas.status = newFBO(canvas.getHandle())

	if canvas.status != gl.FRAMEBUFFER_COMPLETE {
		if canvas.fbo.Valid() {
			gl.DeleteFramebuffer(canvas.fbo)
			canvas.fbo = gl.Framebuffer{}
		}
		return false
	}

	return true
}
Esempio n. 2
0
// unLoadVolatile will release the texture, framebuffer and depth buffer
func (canvas *Canvas) unLoadVolatile() {
	if gl_state.currentCanvas == canvas {
		canvas.stopGrab(false)
	}
	gl.DeleteFramebuffer(canvas.fbo)
	gl.DeleteRenderbuffer(canvas.depth_stencil)

	canvas.fbo = gl.Framebuffer{}
	canvas.depth_stencil = gl.Renderbuffer{}

	canvas.attachedCanvases = []*Canvas{}
	canvas.Texture.Release()
}