Ich schreibe ein einfaches OpenGL-Programm mit go-gl. Während das Programm auf den meisten Rechnern läuft, schlägt es mit einem Segfault fehl, wenn es unter Windows auf meinem Laptop ausgeführt wird (es funktioniert jedoch unter Linux - das ist merkwürdig). Der Schuldige ist mein Anruf an glEnableVertexArrayAttrib
. Ich habe den Stack-Trace und den entsprechenden Code unten angehängt.Segfault generiert von glEnableVertexArrayAttrib
Teil Stack-Trace:
Exception 0xc0000005 0x8 0x0 0x0
PC=0x0
signal arrived during external code execution
github.com/go-gl/gl/v3.3-core/gl._Cfunc_glowEnableVertexArrayAttrib(0x0, 0x1)
github.com/go-gl/gl/v3.3-core/gl/_obj/_cgo_gotypes.go:4141 +0x41
github.com/go-gl/gl/v3.3-core/gl.EnableVertexArrayAttrib(0x1)
C:/Users/mpron/go/src/github.com/go-gl/gl/v3.3-core/gl/package.go:5874 +0x3a
github.com/caseif/cubic-go/graphics.prepareVbo(0x1, 0xc0820086e0, 0xc0820a7e70)
C:/Users/mpron/go/src/github.com/caseif/cubic-go/graphics/block_renderer.go:145 +0x108
Relevante Code:
gl.GenVertexArrays(1, &vaoHandle)
gl.BindVertexArray(vaoHandle)
gl.BindBuffer(gl.ARRAY_BUFFER, handle)
gl.BufferData(gl.ARRAY_BUFFER, len(*vbo) * 4, gl.Ptr(*vbo), gl.STATIC_DRAW)
gl.EnableVertexArrayAttrib(vaoHandle, positionAttrIndex) // line 145
gl.VertexAttribPointer(positionAttrIndex, 3, gl.FLOAT, false, 12, nil)
Ich weiß nichts über gehen, aber '0x0' in Stacktrace schlägt vor, dass Sie diese Funktion auf dem Zielcomputer nicht haben. Was ist die GL-Version auf dem Zielcomputer? Was ist eine Mindest-GL-Version, für die Sie Ihren Code schreiben? – keltar
Ah, es war ein subtiler Fehler. Ich rief 'glEnableVertexArrayAttrib' anstelle von' glEnableVertexAttribArray'. Letzteres ist seit 2.1 verfügbar, ersteres erst seit 4.5. Noch ein bisschen seltsam, dass der Linux-Treiber es unterstützt, während der Windows-Treiber dies nicht tut. – caseif