2017-07-07 132 views
1

我已经使用Go的go-gl包了很长一段时间了。一切工作100%,直到我做了一些重构,现在我得到了似有错误:调用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 

我想知道如果任何人有一个解决方案。我更新了我的驱动程序,并且空的OpenGL场景在不生成顶点数组的情况下100%工作

这里是我的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" 

进行调用的函数:

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) 

谢谢

+1

没有看到你的代码,这是一个猜测:你试图要求一个VertexArray的标识符将被存储在一个空的var中。 – Ripi2

+0

@ Ripi2我用导致错误的代码更新了我的问题。希望它能提供更多关于这个问题的背景。 –

回答

1

打开了一个OpenGL上下文是以前的函数调用,而不是之后创建的。非常奇怪的是,空的场景仍然有效,只有在尝试生成缓冲区后才会崩溃。