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 關注
- 167 瀏覽
添加回答
舉報