我在玩OpenGL和Go。它大多非常直观,但存在一些尴尬的界面问题。glBufferData 的第二个参数应该是内存中缓冲区的大小。
C.glBufferData(C.GLenum(target), C.GLsizeiptr(size), ptr(data), C.GLenum(usage))
在缓冲区包含 32 位浮点数的情况下,每个元素将占用 4 个字节,因此对于第二个参数,我可以执行以下操作:
sizeofFloat := 4
size := sizeofFloat * len(buffer)
C.glBufferData(C.GLenum(target), C.GLsizeiptr(size), ptr(data), C.GLenum(usage))
除了硬编码之外,有没有更好的方法来获取内存中类型的大小?
您可以使用
unsafe.Sizeof
:
- http://golang.org/pkg/unsafe#Sizeof
这是最简单的,因为无论如何您已经在使用"不安全"逻辑。否则,您可以使用 reflect.Type
的 Size
方法,以避免导入不安全:
- http://golang.org/pkg/reflect#Type