1 回答
TA贡献1893条经验 获得超10个赞
问题很可能
gl.ReadPixels(int32(rx), int32(ry), 1, 1, gl.RGB, gl.UNSIGNED_BYTE, gl.Ptr(&data))
具体来说
gl.Ptr(&data)
该功能的文档是:
// Ptr takes a slice or pointer (to a singular scalar value or the first
// element of an array or slice) and returns its GL-compatible address.
您正在将 POINTER 传递给切片。如果您查看实现,这是......有问题。
func Ptr(data interface{}) unsafe.Pointer {
if data == nil {
return unsafe.Pointer(nil)
}
var addr unsafe.Pointer
v := reflect.ValueOf(data)
switch v.Type().Kind() {
case reflect.Ptr:
e := v.Elem()
switch e.Kind() {
case
reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
reflect.Float32, reflect.Float64:
addr = unsafe.Pointer(e.UnsafeAddr())
}
case reflect.Uintptr:
addr = unsafe.Pointer(v.Pointer())
case reflect.Slice:
addr = unsafe.Pointer(v.Index(0).UnsafeAddr())
default:
panic(fmt.Sprintf("Unsupported type %s; must be a pointer, slice, or array", v.Type()))
}
return addr
}
如您所见,如果您传入一个指向除基本 uint/float/int 以外的任何内容的指针,它将静默失败并返回 null,unsafe.Pointer如果它的类型不正确。所以你要么想传入gl.Ptr(&data[0])要么gl.Ptr(data)。这不是段错误,老实说有点令人惊讶。
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报