我在玩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
:
这是最容易的,因为无论如何您已经在使用“不安全”的逻辑。否则,您可以为此使用
reflect.Type
的Size
方法,以避免导入不安全的内容:关于opengl - 处理期望内存大小以字节为单位的CGo函数的规范方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18678050/