Go语言中SDL Surface的OpenGL纹理

myss37ts  于 2022-11-04  发布在  Go
关注(0)|答案(1)|浏览(147)

我正在使用go-sdl2go-gl,我试图从sdl表面创建一个gl纹理。在C中,我会通过调用surface->pixels作为最后一个参数来实现这一点。然而,在go-sdl中,pixels是一个私有字段,而Pixels()(我应该用它来访问它)返回[]byte,这与gl.TexImage2D不兼容,后者要求最后一个参数是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())

无法将image.Pixels()(类型[]byte的值)用作类型unsafe。gl.TexImage2D的参数中的指针
那么在go中从sdl表面创建gl纹理的正确方法是什么呢?

yws3nbqq

yws3nbqq1#

事实证明,有一个Surface.data函数返回实际的指针。

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

相关问题