2017-07-07 4 views
1

Ich verwende Go's GO-Paket schon länger. Alles funktionierte 100%, bis ich einige Refactoring tat und jetzt bin ich immer die stranges Fehler:Speicherfehler beim Aufrufen von gl.GenVertexArrays

fatal error: unexpected signal during runtime execution 
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x0] 

runtime stack: 
runtime.throw(0x65d0fe, 0x2a) 
    /usr/lib/go/src/runtime/panic.go:596 +0x95 
runtime.sigpanic() 
    /usr/lib/go/src/runtime/signal_unix.go:274 +0x2db 
runtime.asmcgocall(0x8, 0x97ed40) 
    /usr/lib/go/src/runtime/asm_amd64.s:633 +0x70 

goroutine 1 [syscall, locked to thread]: 
runtime.cgocall(0x5b8ad0, 0xc420049c00, 0xc4200001a0) 
    /usr/lib/go/src/runtime/cgocall.go:131 +0xe2 fp=0xc420049bc0 sp=0xc420049b80 
github.com/go-gl/gl/v4.5-core/gl._Cfunc_glowGenVertexArrays(0x0, 0xc400000001, 0xc42006c7d8) 
    github.com/go-gl/gl/v4.5-core/gl/_obj/_cgo_gotypes.go:4805 +0x45 fp=0xc420049c00 sp=0xc420049bc0 
github.com/go-gl/gl/v4.5-core/gl.GenVertexArrays(0x1, 0xc42006c7d8) 

... 

runtime.main() 
    /usr/lib/go/src/runtime/proc.go:185 +0x20a fp=0xc420049fe0 sp=0xc420049f88 
runtime.goexit() 
    /usr/lib/go/src/runtime/asm_amd64.s:2197 +0x1 fp=0xc420049fe8 sp=0xc420049fe0 

goroutine 17 [syscall, locked to thread]: 
runtime.goexit() 
    /usr/lib/go/src/runtime/asm_amd64.s:2197 +0x1 
exit status 2 

shell returned 1 

Ich habe mich gefragt, ob jemand eine Lösung hat. Ich habe meine Treiber aktualisiert und eine leere OpenGL-Szene funktioniert zu 100%, ohne Vertex-Arrays zu erzeugen.

Hier ist meine go env

GOARCH="amd64" 
GOBIN="" 
GOEXE="" 
GOHOSTARCH="amd64" 
GOHOSTOS="linux" 
GOOS="linux" 
GOPATH="/home/<user>/Projects/<project>" 
GORACE="" 
GOROOT="/usr/lib/go" 
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64" 
GCCGO="gccgo" 
CC="gcc" 
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build983667275=/tmp/go-build -gno-record-gcc-switches" 
CXX="g++" 
CGO_ENABLED="1" 
PKG_CONFIG="pkg-config" 
CGO_CFLAGS="-g -O2" 
CGO_CPPFLAGS="" 
CGO_CXXFLAGS="-g -O2" 
CGO_FFLAGS="-g -O2" 
CGO_LDFLAGS="-g -O2" 

Die Funktion Tätigen eines Anrufs:

var vertexArrayID uint32 

// ERROR ON LINE BELOW. 
gl.GenVertexArrays(1, &vertexArrayID) 

gl.BindVertexArray(vertexArrayID) 

// Vertex buffer 
var vertexBuffer uint32 
gl.GenBuffers(1, &vertexBuffer) 
gl.BindBuffer(gl.ARRAY_BUFFER, vertexBuffer) 
gl.BufferData(gl.ARRAY_BUFFER, len(verticies)*4, gl.Ptr(verticies), gl.STATIC_DRAW) 

Danke

+1

Ohne Ihren Code zu sehen, ist das eine Vermutung: Sie versuchen, nach einem VertexArray zu fragen, dessen Bezeichner in einer leeren Var gespeichert wird. – Ripi2

+0

@ Ripi2 Ich habe meine Frage mit dem Code aktualisiert, der den Fehler verursacht hat. Hoffe es gibt mehr Kontext in Bezug auf das Problem. –

Antwort

1

der Kontext eine OpenGL Stellt sich heraus, nach dem Funktionsaufruf erstellt wurde, statt vor der. Sehr seltsam, dass die leere Szene immer noch funktionierte und erst nach dem Versuch, Puffer zu generieren, abgestürzt ist.

Verwandte Themen