我使用go-sdl2go-gl,我试图从sdl曲面创建gl纹理.在C语言中,我会调用glTexImage2D,最后一个参数是surface->pixels.然而,在go-sdl中,pixels是一个private fieldPixels()(我应该用它来访问)返回[]byte,这与期望最后一个参数是unsafe.Pointergl.TexImage2D不兼容.

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())

无法使用图像.Pixels()(类型[]byte的值)作为类型不安全.指向gl的参数中的指针.TexImage2D

那么,在go中从sdl曲面创建gl纹理的正确方法是什么?

推荐答案

事实证明,有Surface.Data个函数返回实际指针.

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

Go相关问答推荐

Term~T中的类型不能是类型参数,但可以是引用类型参数的切片

AWS S3 SelectObjectContent在AWS SDK v2 for Go中不返回结果

验证访问令牌(密钥罩)

如何防止程序B存档/删除围棋中程序A当前打开的文件?

可以';t从主机连接到ScyllaDB容器

在 GoLang 中对自定义 struct 体数组进行排序

使用Dockertest进行Golang SQL单元测试的基本设置

在 Go 中解组编号的 XML 标签

git ls-remote 成功而 go get 失败

设置指向空接口的指针

golang 中的可变参数函数

emersion/go-imap - imap.FetchRFC822:无效内存地址或零指针取消引用

如何模仿联合类型

为什么此代码在运行命令 error="exec: not started" 时出现错误?

当有多个同名包时如何在vscode中显示golang包完整路径?

如何在Golang中的差异函数中杀死命令Exec

如何在gorm中处理多个查询

Terraform 自定义提供程序 - 数据源架构

在 Go 中,为什么 exec.Command() 失败但 os.StartProcess() 成功启动winget.exe?

如何使用 fyne 避免 GUI 应用程序中的循环依赖?