2013-05-07 11 views
11

Sto tentando di utilizzare OpenGL da un programma Go. I penso Ho tutti i pezzi sul posto, ma non sono ancora abbastanza in grado di farlo funzionare.Utilizzo di OpenGL da Go

Il mio compilatore C è il 64-bit version of mingw. È nella mia variabile %PATH% e l'ho verificato con l'esempio di numero casuale nella documentazione cgo.

Ho installato il GLEW 1.9.0 a 64 bit copiando le cartelle bin, lib e include gli equivalenti \mingw\x86_64-w64-mingw32 nell'installazione mingw-w64.

Quando provo e faccio funzionare go get github.com/go-gl/gl, andare risponde con il seguente:

In file included from attriblocation.go:7:0: 
gl.h:5:25: error: enumerator value for '__cgo_enum__5' is not an integer constant 
#define GLEW_GET_FUN(x) (*x) 
         ^
d:\programs\mingw64\x86_64-w64-mingw32\include\gl\glew.h:1956:26: note: in expansion of macro 'GLEW_GET_FUN' 
#define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f) 
         ^
gl.h:5:25: error: enumerator value for '__cgo_enum__6' is not an integer constant 
#define GLEW_GET_FUN(x) (*x) 

Questi errori continuano in modo simile per valori fino a __cgo_enum__15. Ottengo anche alcuni errori di corrispondenza provenienti dal lato Go delle cose per ogni voce.

Qualche idea su cosa mi manca per farlo funzionare?

Modifica: Ecco i registri di "corrispondenza" dal lato Go delle cose.

attriblocation.go:42:2: error: initializer element is not constant 
func (indx AttribLocation) Attrib4fv(values *[4]float32) { 
^
attriblocation.go:42:2: error: (near initialization for '__cgodebug_data[5]') 
attriblocation.go:43:2: error: initializer element is not constant 
    C.glVertexAttrib4fv(C.GLuint(indx), (*C.GLfloat)(&values[0])) 
^
attriblocation.go:43:2: error: (near initialization for '__cgodebug_data[6]') 
attriblocation.go:44:2: error: initializer element is not constant 
} 

C'è uno per ogni __cgodebug_data[] 5-15.

Modifica 2: Mi è stato chiesto di allegare alcuni registri. Here is what happens when I compile with GCC 4.8 e Here is what I get with 4.7 and 4.6.

+0

Cosa intendi con errori di corrispondenza? Puoi pubblicare anche loro? – nemo

+0

Ho aggiunto gli errori che sembrano provenire dal lato Go di casa. –

+0

Prova a eseguire 'go build -a -x' in' $ GOROOT/src/pkg/github.com/go-gl/gl' e incolla le righe che non riescono a includere anche i messaggi di errore che hai già postato. Questi possono aiutare. – nemo

risposta

3

Sembra che sia un difetto in Go e in che modo i compilatori C/Go comunicano tra loro. La soluzione alternativa è impostare CGO_CFLAGS=-ftrack-macro-expansion=0 go build. Puoi anche utilizzare go-1.2rc5 o più recente per risolvere il problema. This bug has been closed with the previous workarounds/fixes specified.

+1

Questo è in realtà un difetto in go piuttosto che in go-gl. Non c'è nulla che go-gl possa fare per risolvere il problema poiché è un problema di compilatori che parlano tra loro. – pwaller

+0

Hai ragione! Risposta modificata per chiarezza. –