gpt4 book ai didi

go - 在 SDL Go 程序中复制纹理时运行时崩溃

转载 作者:IT王子 更新时间:2023-10-29 02:17:00 26 4
gpt4 key购买 nike

我有一个 SDL2 go 程序,它试图将像素数组写入屏幕。当我尝试使用新像素更新纹理时,程序因运行时错误而崩溃:

fatal error: unexpected signal during runtime execution

不幸的是,我几乎找不到关于如何在 Go 中传递不安全指针的文档,我不确定我是否正确地处理了这个问题,下面是一些展示问题的示例代码:

func main() {
window := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED,
800, 600, sdl.WINDOW_SHOWN)
renderer := sdl.CreateRenderer(window, -1, 0)
texture := sdl.CreateTexture(renderer, sdl.PIXELFORMAT_ARGB8888,
sdl.TEXTUREACCESS_STATIC, 800, 600)

defer renderer.Destroy()
defer texture.Destroy()
defer window.Destroy()

for {
pixels := make([]uint32, 800*600)

texture.Update(nil, unsafe.Pointer(&pixels), int(800*unsafe.Sizeof(pixels)))
window.UpdateSurface()

renderer.Clear()
renderer.Copy(texture, nil, nil)
renderer.Present()
}

sdl.Delay(1000)
sdl.Quit()
}

这段代码编译时没有错误,但运行时会产生运行时 panic ,但我看不出这段代码会导致什么。

我正在使用这些 SDL2 Go 绑定(bind):https://github.com/veandco/go-sdl2

最佳答案

pitch 参数尽可能地期望表面的宽度 * sizeof(int32),此代码有效并在每个循环中打印随机像素:

func main() {
window, err := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED,
sdl.WINDOWPOS_UNDEFINED, 800, 600, sdl.WINDOW_SHOWN)
if err != nil {
log.Fatal(err)
}
defer window.Destroy()

renderer, err := sdl.CreateRenderer(window, -1, 0)
if err != nil {
log.Fatal(err)
}
defer renderer.Destroy()

texture, err := renderer.CreateTexture(sdl.PIXELFORMAT_ARGB8888,
sdl.TEXTUREACCESS_STATIC, 800, 600)

if err != nil {
log.Fatal(err)
}
defer texture.Destroy()

pixels := make([]uint32, 800*600)
L:
for {
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
if _, ok := event.(*sdl.QuitEvent); ok {
break L
}
}
for i := range pixels {
pixels[i] = 0x00777777 + uint32(rand.Intn(0x00AAAAAA))
}
//4 == sizeof(int32), unsafe.Sizeof(pixels) returns the actual size of
//the slice header which is 24
texture.Update(nil, unsafe.Pointer(&pixels[0]), 800*4)
window.UpdateSurface()

renderer.Clear()
renderer.Copy(texture, nil, nil)
renderer.Present()
}

sdl.Delay(1000)
sdl.Quit()
}

//编辑它应该是 unsafe.Pointer(&pixels[0]) 而不是 unsafe.Pointer(&pixels)

关于go - 在 SDL Go 程序中复制纹理时运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com