opengl - 处理期望内存大小(以字节为单位)的 CGo 函数的规范方法是什么?

标签 opengl go cgo

我正在玩弄 OpenGL 和 Go。它大多非常直观,但存在一些尴尬的界面问题。 glBufferData 的第二个参数应该是内存中缓冲区的大小。

C.glBufferData(C.GLenum(target), C.GLsizeiptr(size), ptr(data), C.GLenum(usage))

在缓冲区包含 32 位 float 的情况下,每个元素将占用 4 个字节,因此对于第二个参数,我可以执行如下操作:

sizeofFloat := 4
size := sizeofFloat * len(buffer)
C.glBufferData(C.GLenum(target), C.GLsizeiptr(size), ptr(data), C.GLenum(usage))

除了硬编码之外,是否有更好的方法来获取内存中类型的大小?

最佳答案

您可以为此使用 unsafe.Sizeof:

这是最简单的,因为无论如何您已经在使用“不安全”逻辑。否则,您可以为此使用 reflect.TypeSize 方法,以避免导入不安全的内容:

关于opengl - 处理期望内存大小(以字节为单位)的 CGo 函数的规范方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678050/

相关文章:

go - 使用 CGO 动态选择正确的操作系统和处理器架构

opengl - float 变量不以任何方式进行比较

java - opengl Canvas 不更新

list - 使用 golang 的列表中最后一个元素的第 Kth

c - 有没有办法在调用 MakeWS2811() 后修改 rpi-ws281x-go 库中 LED 的亮度?

go - 如何将 *_Ctype_char 转换为 *_Ctype_uchar

c++ - OpenGL库的实现

c++ - 无法解析类型 'GLchar'

go - 为什么 Args 在函数初始化之前初始化?

Cgo:如何将双数组从 C 返回到 Go