I was struggling with OpenGL ES. It didn't worked well. And I got similar thing working in C.(I just copied Go code and modified(syntax) and removed(non-important function call) some things for C.)
I finally found that Go arrays were not passed to C function.(So, arrays as vertex array, indices couldn't be passed well and did something wrong when I render.)
I tested with this code:
C function part:
void passTest(void *Ptr){
int *test = (GLfloat *)Ptr;
printf("C: test=%p
", test);
printf("C: test[0]=%d
test[1]=%d
test[2]=%d
test[3]=%d
", test[0], test[1], test[2], test[3]);
}
And this is Go part:
test := []int{ 0, 3, 9, 81018 }
var ptr unsafe.Pointer = (unsafe.Pointer)(&test)
fmt.Printf("Go: test=%p
", ptr)
fmt.Printf("Go: test[0]=%d
test[1]=%d
test[2]=%d
test[3]=%d
", test[0], test[1], test[2], test[3])
C.passTest(ptr)
Result is:
Go: test=0x10300010
Go: test[0]=0
test[1]=3
test[2]=9
test[3]=81018
C: test=0x10300010
C: test[0]=271581216
test[1]=4
test[2]=4
test[3]=0
As you can see, pointer value passed well. But, printed value is wrong. Am I doing something wrong with passing arrays to C?