fckeuspy-go/vendor/github.com/fyne-io/gl-js/gl_webgl_convertions_wasm.go

97 lines
1.9 KiB
Go

//go:build js && wasm
package gl
import (
"fmt"
"runtime"
"syscall/js"
"unsafe"
)
func sliceToBytes[T comparable](s []T) []byte {
size := 0
if len(s) > 0 {
size = int(unsafe.Sizeof(s[0]))
}
return unsafe.Slice((*byte)(unsafe.Pointer(&s[0])), len(s)*size)
}
func sliceToJSArray[T comparable](arrayType string, s []T) js.Value {
a := js.Global().Get(arrayType).New(len(s))
js.CopyBytesToJS(a, sliceToBytes(s))
runtime.KeepAlive(s)
return a
}
func int8ToJSArray(s []int8) js.Value {
return sliceToJSArray("Int8Array", s)
}
func int16ToJSArray(s []int16) js.Value {
return sliceToJSArray("Int16Array", s)
}
func int32ToJSArray(s []int32) js.Value {
return sliceToJSArray("Int32Array", s)
}
func int64ToJSArray(s []int64) js.Value {
return sliceToJSArray("Int64Array", s)
}
func uint8ToJSArray(s []uint8) js.Value {
return sliceToJSArray("Uint8Array", s)
}
func uint16ToJSArray(s []uint16) js.Value {
return sliceToJSArray("Uint16Array", s)
}
func uint32ToJSArray(s []uint32) js.Value {
return sliceToJSArray("Uint32Array", s)
}
func uint64ToJSArray(s []uint64) js.Value {
return sliceToJSArray("Uint64Array", s)
}
func float32ToJSArray(s []float32) js.Value {
return sliceToJSArray("Float32Array", s)
}
func float64ToJSArray(s []float64) js.Value {
return sliceToJSArray("Float64Array", s)
}
func SliceToTypedArray(s any) js.Value {
if s == nil {
return js.Null()
}
switch s := s.(type) {
case []int8:
return int8ToJSArray(s)
case []int16:
return int16ToJSArray(s)
case []int32:
return int32ToJSArray(s)
case []int64:
return int64ToJSArray(s)
case []uint8:
return uint8ToJSArray(s)
case []uint16:
return uint16ToJSArray(s)
case []uint32:
return uint32ToJSArray(s)
case []uint64:
return uint64ToJSArray(s)
case []float32:
return float32ToJSArray(s)
case []float64:
return float64ToJSArray(s)
default:
panic(fmt.Sprintf("jsutil: unexpected value at SliceToTypedArray: %T", s))
}
}