func (a *Atlas) unbind(release bool) error { if !gl.Object(a.gltex).IsTexture() { return nil } a.gltex.Unbind(gl.TEXTURE_2D) if release { a.gltex.Delete() } a.gltex = gl.Texture(gl.FALSE) return checkGlError() }
// bind the given atlas to the current GL context // // the current implementation is very stupid, since it will // upload the texture every single call. // // later, improve this to upload only if there is a real need for it func (a *Atlas) bind() error { // discard any possible error if err := checkGlError(); err != nil { return err } if gl.Object(a.gltex).IsTexture() { a.gltex = gl.GenTexture() } a.gltex.Bind(gl.TEXTURE_2D) gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, a.data.Bounds().Dx(), a.data.Bounds().Dy(), 0, gl.RGBA, gl.UNSIGNED_BYTE, a.data.Pix) if err := checkGlError(gl.OUT_OF_MEMORY, gl.INVALID_OPERATION); err != nil { return err } gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR) gl.GenerateMipmap(gl.TEXTURE_2D) panicGlError() return nil }