jsdom, builtin/js: WebGL W.I.P; Added support for casting V arrays to typed arrays (#12551)
* builtin/js: TypedArray support * jsdom: WebGL W.I.Ppull/12549/head weekly.2021.47
parent
e9efed02f0
commit
12ffe04212
|
@ -405,3 +405,204 @@ pub fn (a array) to_js_array() JS.Array {
|
||||||
}
|
}
|
||||||
return tmp
|
return tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EveryFn = fn (JS.Number, JS.Number) JS.Boolean
|
||||||
|
|
||||||
|
type BigEveryFn = fn (JS.BigInt, JS.Number) JS.Boolean
|
||||||
|
|
||||||
|
pub interface JS.TypedArray {
|
||||||
|
mut:
|
||||||
|
byteLength JS.Number
|
||||||
|
byteOffset JS.Number
|
||||||
|
length JS.Number
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Uint8Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Uint16Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Uint32Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.BigUint64Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.BigInt
|
||||||
|
every(JS.BigEveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Int8Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Int16Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Int32Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.BigInt64Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.BigInt
|
||||||
|
every(JS.BigEveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Float32Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.Float64Array {
|
||||||
|
JS.TypedArray
|
||||||
|
at(index JS.Number) JS.Number
|
||||||
|
every(JS.EveryFn) JS.Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn uint8_array(arr []byte) JS.Uint8Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut uint_arr := JS.Uint8Array{}
|
||||||
|
#uint_arr = new Uint8Array(tmp)
|
||||||
|
|
||||||
|
return uint_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn uint16_array(arr []u16) JS.Uint16Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut uint_arr := JS.Uint16Array{}
|
||||||
|
#uint_arr = new Uint16Array(tmp)
|
||||||
|
|
||||||
|
return uint_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn uint32_array(arr []u32) JS.Uint32Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut uint_arr := JS.Uint32Array{}
|
||||||
|
#uint_arr = new Uint32Array(tmp)
|
||||||
|
|
||||||
|
return uint_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn int8_array(arr []i8) JS.Int8Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut int_arr := JS.Int8Array{}
|
||||||
|
#int_arr = new Int8Array(tmp)
|
||||||
|
|
||||||
|
return int_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn int16_array(arr []i16) JS.Int16Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut int_arr := JS.Int16Array{}
|
||||||
|
#int_arr = new Int16Array(tmp)
|
||||||
|
|
||||||
|
return int_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn int32_array(arr []int) JS.Int32Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut int_arr := JS.Int32Array{}
|
||||||
|
#int_arr = new Int32Array(tmp)
|
||||||
|
|
||||||
|
return int_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn int64_array(arr []i64) JS.BigInt64Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut int_arr := JS.BigInt64Array{}
|
||||||
|
#int_arr = new BigInt64Array(tmp)
|
||||||
|
|
||||||
|
return int_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn uint64_array(arr []u64) JS.BigUint64Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut int_arr := JS.BigUint64Array{}
|
||||||
|
#int_arr = new BigUint64Array(tmp)
|
||||||
|
|
||||||
|
return int_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn float32_array(arr []f32) JS.Float32Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut float_arr := JS.Float32Array{}
|
||||||
|
#float_arr = new Float32Array(tmp)
|
||||||
|
|
||||||
|
return float_arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn float64_array(arr []f64) JS.Float64Array {
|
||||||
|
#let tmp = new Array();
|
||||||
|
|
||||||
|
for elem in arr {
|
||||||
|
_ := elem
|
||||||
|
#tmp.push(elem.val)
|
||||||
|
}
|
||||||
|
mut float_arr := JS.Float64Array{}
|
||||||
|
#float_arr = new Float64Array(tmp)
|
||||||
|
|
||||||
|
return float_arr
|
||||||
|
}
|
||||||
|
|
|
@ -327,12 +327,25 @@ pub interface JS.Document {
|
||||||
lastModified JS.String
|
lastModified JS.String
|
||||||
inputEncoding JS.String
|
inputEncoding JS.String
|
||||||
implementation JS.DOMImplementation
|
implementation JS.DOMImplementation
|
||||||
|
doctype JS.DocumentType
|
||||||
|
embeds JS.HTMLCollection
|
||||||
|
forms JS.HTMLCollection
|
||||||
getElementById(id JS.String) ?JS.HTMLElement
|
getElementById(id JS.String) ?JS.HTMLElement
|
||||||
mut:
|
mut:
|
||||||
bgColor JS.String
|
bgColor JS.String
|
||||||
|
fgColor JS.String
|
||||||
body JS.HTMLElement
|
body JS.HTMLElement
|
||||||
cookie JS.String
|
cookie JS.String
|
||||||
domain JS.String
|
domain JS.String
|
||||||
|
designMode JS.String
|
||||||
|
dir JS.String
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn document_url(doc JS.Document) JS.String {
|
||||||
|
mut url := JS.String{}
|
||||||
|
#url = doc.URL;
|
||||||
|
|
||||||
|
return url
|
||||||
}
|
}
|
||||||
|
|
||||||
pub interface JS.PointerEvent {
|
pub interface JS.PointerEvent {
|
||||||
|
@ -539,14 +552,28 @@ pub interface JS.CanvasPattern {
|
||||||
setTransform(transform JS.DOMMatrix)
|
setTransform(transform JS.DOMMatrix)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub interface JS.WebGLRenderingContext {
|
pub type OnDeviceMotion = fn (ev JS.DeviceMotionEvent) JS.Any
|
||||||
canvas JS.HTMLCanvasElement
|
|
||||||
drawingBufferHeight JS.Number
|
pub type OnDeviceOrientation = fn (ev JS.DeviceOrientationEvent) JS.Any
|
||||||
drawingBufferWidth JS.Number
|
|
||||||
|
pub fn on_device_motion(cb fn (win JS.Window, ev JS.DeviceMotionEvent) JS.Any) OnDeviceMotion {
|
||||||
|
clos := fn [cb] (ev JS.DeviceMotionEvent) JS.Any {
|
||||||
|
mut win := JS.Any(voidptr(0))
|
||||||
|
#win = this;
|
||||||
|
|
||||||
|
return cb(win, ev)
|
||||||
|
}
|
||||||
|
return clos
|
||||||
}
|
}
|
||||||
|
|
||||||
pub interface JS.WebGL2RenderingContext {
|
pub fn on_device_orientation(cb fn (win JS.Window, ev JS.DeviceOrientationEvent) JS.Any) OnDeviceOrientation {
|
||||||
JS.WebGLRenderingContext
|
clos := fn [cb] (ev JS.DeviceOrientationEvent) JS.Any {
|
||||||
|
mut win := JS.Any(voidptr(0))
|
||||||
|
#win = this;
|
||||||
|
|
||||||
|
return cb(win, ev)
|
||||||
|
}
|
||||||
|
return clos
|
||||||
}
|
}
|
||||||
|
|
||||||
pub interface JS.Window {
|
pub interface JS.Window {
|
||||||
|
@ -558,6 +585,158 @@ pub interface JS.Window {
|
||||||
innerHeight JS.Number
|
innerHeight JS.Number
|
||||||
innerWidth JS.Number
|
innerWidth JS.Number
|
||||||
length JS.Number
|
length JS.Number
|
||||||
|
outerHeight JS.Number
|
||||||
|
outerWidth JS.Number
|
||||||
|
screenLeft JS.Number
|
||||||
|
screenTop JS.Number
|
||||||
|
screenX JS.Number
|
||||||
|
screenY JS.Number
|
||||||
|
scrollX JS.Number
|
||||||
|
scrollY JS.Number
|
||||||
|
alert(message JS.Any)
|
||||||
|
blur()
|
||||||
|
cancelIdleCallback(handle JS.Number)
|
||||||
|
captureEvents()
|
||||||
|
close()
|
||||||
|
confirm(message JS.String) JS.Boolean
|
||||||
|
focus()
|
||||||
|
moveBy(x JS.Number, y JS.Number)
|
||||||
|
moveTo(x JS.Number, y JS.Number)
|
||||||
|
print()
|
||||||
|
prompt(message JS.String, default_ JS.String) ?JS.String
|
||||||
|
stop()
|
||||||
|
resizeBy(x JS.Number, y JS.Number)
|
||||||
|
resizeTo(width JS.Number, height JS.Number)
|
||||||
|
scroll(x JS.Number, y JS.Number)
|
||||||
|
scrollBy(x JS.Number, y JS.Number)
|
||||||
|
scrollTo(x JS.Number, y JS.Number)
|
||||||
|
mut:
|
||||||
|
name string
|
||||||
|
opener JS.Any
|
||||||
|
ondevicemotion OnDeviceMotion
|
||||||
|
ondeviceorientation OnDeviceOrientation
|
||||||
}
|
}
|
||||||
|
|
||||||
pub interface JS.Path2D {}
|
pub interface JS.Path2D {}
|
||||||
|
|
||||||
|
pub struct JS.DeviceMotionEventAcceleration {
|
||||||
|
x JS.Number
|
||||||
|
y JS.Number
|
||||||
|
z JS.Number
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct JS.DeviceMotionEventRotationRate {
|
||||||
|
alpha JS.Number
|
||||||
|
beta JS.Number
|
||||||
|
gamma JS.Number
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.DeviceMotionEvent {
|
||||||
|
JS.Event
|
||||||
|
interval JS.Number
|
||||||
|
acceleration JS.DeviceMotionEventAcceleration
|
||||||
|
accelerationIncludingGravity JS.DeviceMotionEventAcceleration
|
||||||
|
rotationRate JS.DeviceMotionEventRotationRate
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.DeviceOrientationEvent {
|
||||||
|
JS.Event
|
||||||
|
absolute JS.Boolean
|
||||||
|
alpha JS.Number
|
||||||
|
beta JS.Number
|
||||||
|
gamma JS.Number
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.DocumentType {
|
||||||
|
JS.Node
|
||||||
|
JS.ChildNode
|
||||||
|
name JS.String
|
||||||
|
ownerDocument JS.Document
|
||||||
|
publicId JS.String
|
||||||
|
systemId JS.String
|
||||||
|
}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLProgram {}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLShader {}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLBuffer {}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLFramebuffer {}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLRenderbuffer {}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLTexture {}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLUniformLocation {}
|
||||||
|
|
||||||
|
[single_impl]
|
||||||
|
pub interface JS.WebGLVertexArrayObject {}
|
||||||
|
|
||||||
|
pub interface JS.WebGLRenderingContext {
|
||||||
|
canvas JS.HTMLCanvasElement
|
||||||
|
drawingBufferHeight JS.Number
|
||||||
|
drawingBufferWidth JS.Number
|
||||||
|
activeTexture(texture JS.Number)
|
||||||
|
attachShader(program JS.WebGLProgram, shader JS.WebGLProgram)
|
||||||
|
linkProgram(program JS.WebGLProgram)
|
||||||
|
bindAttribLocation(program JS.WebGLProgram, index JS.Number, name JS.String)
|
||||||
|
bindBuffer(target JS.Number, buffer JS.WebGLBuffer)
|
||||||
|
bindFramebuffer(target JS.Number, buffer JS.WebGLFrameBuffer)
|
||||||
|
bindRenderbuffer(target JS.Number, renderbuffer JS.WebGLRenderbuffer)
|
||||||
|
bindTexture(target JS.Number, texture JS.WebGLTexture)
|
||||||
|
clear(mask JS.Number)
|
||||||
|
clearColor(red JS.Number, green JS.Number, blue JS.Number, alpha JS.Number)
|
||||||
|
clearDepth(depth JS.Number)
|
||||||
|
clearStencil(s JS.Number)
|
||||||
|
colorMask(red JS.Boolean, green JS.Boolean, blue JS.Boolean, alpha JS.Boolean)
|
||||||
|
compileShader(shader JS.WebGLShader)
|
||||||
|
createBuffer() ?JS.WebGLBuffer
|
||||||
|
createFramebuffer() ?JS.WebGLFrameBuffer
|
||||||
|
createProgram() ?JS.WebGLProgram
|
||||||
|
createRenderbuffer() ?JS.WebGLRenderbuffer
|
||||||
|
createShader(typ JS.Number) ?JS.WebGLShader
|
||||||
|
createTexture() ?JS.WebGLTexture
|
||||||
|
cullFace(mode JS.Number)
|
||||||
|
deleteBuffer(buffer JS.WebGLBuffer)
|
||||||
|
deleteFramebuffer(buffer JS.WebGLFrameBuffer)
|
||||||
|
deleteProgram(program JS.WebGLProgram)
|
||||||
|
deleteRenderbuffer(buffer JS.WebGLRenderbuffer)
|
||||||
|
deleteShader(shader JS.WebGLShader)
|
||||||
|
deleteTexture(texture JS.WebGLTexture)
|
||||||
|
depthFunc(func JS.Number)
|
||||||
|
depthMask(flag JS.Boolean)
|
||||||
|
depthRange(zNear JS.Number, zFar JS.Number)
|
||||||
|
detachShader(program JS.WebGLProgram, shader JS.WebGLShader)
|
||||||
|
disable(cap JS.Number)
|
||||||
|
disableVertexAttribArray(index JS.Number)
|
||||||
|
drawArrays(mode JS.Number, first JS.Number, count JS.Number)
|
||||||
|
drawElements(mode JS.Number, count JS.Number, typ JS.Number, offset JS.Number)
|
||||||
|
enable(cap JS.Number)
|
||||||
|
enableVertexAttribArray(index JS.Number)
|
||||||
|
finish()
|
||||||
|
flush()
|
||||||
|
framebufferRenderbuffer(target JS.Number, attachment JS.Number, renderbuffertarget JS.Number, renderbuffer JS.WebGLRenderbuffer)
|
||||||
|
framebufferTexture2D(target JS.Number, attachment JS.Number, textarget JS.Number, texture JS.WebGLTexture, level JS.Number)
|
||||||
|
frontFace(mode JS.Number)
|
||||||
|
generateMipmap(target JS.Number)
|
||||||
|
getError() JS.Number
|
||||||
|
getExtension(name JS.String) JS.Any
|
||||||
|
getParameter(name JS.Number) JS.Any
|
||||||
|
getProgramParameter(program JS.WebGLProgram, pname JS.Number) JS.Any
|
||||||
|
getShaderSource(shader JS.WebGLShader) ?JS.String
|
||||||
|
bufferData(target JS.Number, data JS.TypedArray, usage JS.Number)
|
||||||
|
shaderSource(shader JS.WebGLShader, source JS.String)
|
||||||
|
getShaderParameter(shader JS.WebGLShader, pname JS.Number) JS.Any
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface JS.WebGL2RenderingContext {
|
||||||
|
JS.WebGLRenderingContext
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue