func getGLTexture(img image.Image, smoothing TextureSmoothing) (t uint32, err error) { var ( data *bytes.Buffer bounds image.Rectangle width int height int ) if data, err = imageBytes(img); err != nil { return } bounds = img.Bounds() width = bounds.Max.X - bounds.Min.X height = bounds.Max.Y - bounds.Min.Y gl.GenTextures(1, &t) gl.BindTexture(gl.TEXTURE_2D, t) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, int32(smoothing)) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, int32(smoothing)) gl.TexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, int32(width), int32(height), 0, gl.RGBA, gl.UNSIGNED_INT_8_8_8_8, gl.Ptr(data.Bytes()), ) gl.GenerateMipmap(gl.TEXTURE_2D) gl.BindTexture(gl.TEXTURE_2D, 0) return }
func GetGLTexture(img image.Image, smoothing TextureSmoothing) (t uint32, err error) { var ( data *bytes.Buffer bounds image.Rectangle width int height int ) if data, err = imageBytes(img); err != nil { return } bounds = img.Bounds() width = bounds.Max.X - bounds.Min.X height = bounds.Max.Y - bounds.Min.Y gl.GenTextures(1, &t) if e := gl.GetError(); e != 0 { fmt.Printf("ggt1 ERROR: %s\n", e) } gl.BindTexture(gl.TEXTURE_2D, t) if e := gl.GetError(); e != 0 { fmt.Printf("ggt2 ERROR: %s\n", e) } gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, int32(smoothing)) if e := gl.GetError(); e != 0 { fmt.Printf("ggt3 ERROR: %s\n", e) } gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, int32(smoothing)) if e := gl.GetError(); e != 0 { fmt.Printf("ggt4 ERROR: %s\n", e) } gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, int32(width), int32(height), 0, gl.RGBA, gl.UNSIGNED_INT_8_8_8_8, gl.Ptr(data.Bytes())) if e := gl.GetError(); e != 0 { fmt.Printf("ggt5 ERROR: %s\n", e) } gl.GenerateMipmap(gl.TEXTURE_2D) if e := gl.GetError(); e != 0 { fmt.Printf("ggt6 ERROR: %s\n", e) } gl.BindTexture(gl.TEXTURE_2D, 0) if e := gl.GetError(); e != 0 { fmt.Printf("ggt7 ERROR: %s\n", e) } return }
func LoadImageToTexture(filePath string) (glTex uint32, e error) { gl.GenTextures(1, &glTex) gl.ActiveTexture(gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, glTex) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR_MIPMAP_LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT) rgba_flipped, err := loadFile(filePath) if err != nil { return glTex, err } imageSize := int32(rgba_flipped.Bounds().Max.X) gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, imageSize, imageSize, 0, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(rgba_flipped.Pix)) gl.GenerateMipmap(gl.TEXTURE_2D) return glTex, nil }
func bindAggregateImage(img image.Image, idx int) uint32 { newIdx := idx if rgba, ok := img.(*image.RGBA); ok { gl.GenTextures(1, &textures[newIdx]) gl.ActiveTexture(gl.TEXTURE0 + uint32(newIdx)) gl.BindTexture(gl.TEXTURE_2D, textures[newIdx]) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE) gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, int32(rgba.Rect.Size().X), int32(rgba.Rect.Size().Y), 0, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(rgba.Pix)) gl.GenerateMipmap(gl.TEXTURE_2D) idxS := strconv.Itoa(newIdx) fmt.Println("idx: ", int32(newIdx), "myTextureSampler["+idxS+"]\x00") gl.Uniform1i(gl.GetUniformLocation(program, gl.Str("myTextureSampler["+idxS+"]\x00")), int32(newIdx)) if ok := gl.GetError(); ok != gl.NO_ERROR { fmt.Println("1- Cannot load Image in location: ./: ", ok) os.Exit(-1) } return textures[newIdx] } else { fmt.Println("Image not RGBA at location: ./") os.Exit(-1) } return 0 }