2013-09-07 3 views
1

Я играю с OpenGL и Go. Это в основном довольно интуитивно понятное, но есть несколько неудобных проблем интерфейса. Второй аргумент glBufferData должен быть размером буфера в памяти.Что такое канонический способ работы с функциями CGo, которые ожидают размер в памяти в байтах?

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)) 

Есть ли лучший способ получить размер типа в памяти, кроме просто жесткого кодирования?

ответ

2

Вы можете использовать unsafe.Sizeof для этого:

Это самый простой, так как вы уже используете "небезопасный" логика в любом случае. В противном случае, вы можете использовать reflect.TypeSize метод «S для того, чтобы избежать импорта небезопасным: