我正在尝试向OpenGl发送一些数据。由于Sizeof,发送数组很容易:
array := [...]Whatever {lots of data}
array_ptr := gl.Pointer(&array[0])
array_size := gl.Sizeiptr(unsafe.Sizeof(array))
gl.BufferData(gl.ARRAY_BUFFER, array_size, array_ptr, gl.STATIC_DRAW)
我想使用切片而不是数组,因为3D模型的大小在编译时未知。
如何获取切片内容的大小(以字节为单位)? 我想到了这一点:
size := uintptr(len(slice)) * unsafe.Sizeof(slice[0])
但这不是很笼统。的确,我需要知道切片的基础类型才能使它起作用,并且这假定数组的所有元素都具有相同的大小。
我还可以遍历整个切片,并添加每个元素的所有大小。这不是很快。
我准备随时保持镜头==上限,这对我有帮助吗?
编辑:使用运行时反射实现建议的解决方案
package main
import "fmt"
import "reflect"
func ElemSize(container interface{}) uintptr {
return reflect.TypeOf(container).Elem().Size()
}
func ElemSizeVerbose(container interface{}) uintptr {
t := reflect.TypeOf(container)
e := t.Elem()
s := e.Size()
fmt.Println(t, e, s)
return s
}
func main() {
a := [...]int8{2, 3, 5, 7, 11} // Array
s := []int64{2, 3, 5, 7, 11} // Slice
z := []int32{} // Even empty things
ElemSizeVerbose(a) // [5]int8 int8 1
ElemSizeVerbose(s) // []int64 int64 8
ElemSizeVerbose(z) // []int32 int32 4
}
弑天下
尚方宝剑之说
相关分类