Home > Enterprise >  OpenGL texture from SDL Surface in Go
OpenGL texture from SDL Surface in Go

Time:07-17

I'm using go-sdl2 and go-gl and I'm trying to create a gl texture from sdl surface. In C I would do that by calling glTexImage2D with surface->pixels as the last argument. In go-sdl, however, pixels is a private field and Pixels() (that I'm supposed to use to access it) returns []byte, which is incompatible with gl.TexImage2D that expects the last argument to be an unsafe.Pointer.

image, err := img.Load("img.png")
if err != nil {
    //...
}
var texture uint32
gl.GenTextures(1, &texture)
gl.BindTexture(gl.TEXTURE_2D, texture)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, image.W, image.H, 0, gl.RGBA, gl.UNSIGNED_BYTE, image.Pixels())

cannot use image.Pixels() (value of type []byte) as type unsafe.Pointer in argument to gl.TexImage2D

So what would be the proper way of creating gl texture from sdl surface in go?

CodePudding user response:

It turns out that there is Surface.Data function that returns the actual pointer.

gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, image.W, image.H, 0, gl.RGBA, gl.UNSIGNED_BYTE, image.Data())
  • Related