I am trying to send some data to OpenGl. Sending an array is easy thanks to 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)
I would like to use slices instead of arrays because the size of my 3D models is unknown at compile time.
How to get the size in bytes of the slice content? I thought about this:
size := uintptr(len(slice)) * unsafe.Sizeof(slice[0])
but he is not very general. In fact, I need to know the base type of the slice for this to work, and this assumes that all elements of the array are the same size.
I could also iterate over the whole fragment and add all the sizes of each element. It is not very fast.
I am ready to always keep len (s) == cap (s), can this help me?
Edit: implementing a proposed solution using a run-time display
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}
source share