Skip to content

Commit a751933

Browse files
committed
WebGL and Typed Arrays Support
1 parent a92de2f commit a751933

File tree

2 files changed

+913
-0
lines changed

2 files changed

+913
-0
lines changed
Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
/**
2+
* Copyright (C) 2014 Matt Seddon. This source is donated in full to the EPFL scala-js-dom project.
3+
*
4+
* Based on https://www.khronos.org/registry/typedarray/specs/1.0/
5+
*/
6+
package org.scalajs.dom
7+
8+
import scala.scalajs.js
9+
import scala.scalajs.js.annotation._
10+
11+
class ArrayBuffer extends js.Object {
12+
def byteLength: js.Number = ???
13+
def slice(begin: js.Number, end: js.Number): ArrayBufferView = ???
14+
def slice(begin: js.Number): ArrayBufferView = ???
15+
}
16+
17+
object ArrayBuffer {
18+
def isView(value: js.Any): js.Boolean = ???
19+
}
20+
21+
trait ArrayBufferView extends js.Object {
22+
def buffer: ArrayBuffer = ???
23+
def byteOffset: js.Number = ???
24+
def byteLength: js.Number = ???
25+
}
26+
27+
/**
28+
* Defines common functionality across all typed arrays.
29+
* NOTE: This is just a utility and should probably be
30+
* re-jigged so as not to pollute the org.scalajs.dom package somehow.
31+
*/
32+
trait TypedArrayCommon[T] extends js.Object {
33+
@JSBracketAccess
34+
def apply(index: js.Number): js.Number = ???
35+
@JSBracketAccess
36+
def update(index: js.Number, value: js.Number): Unit = ???
37+
38+
def set(array: T, offset: js.Number): Unit = ???
39+
def set(array: T): Unit = ???
40+
def set(array: js.Array[js.Number], offset: js.Number): Unit = ???
41+
def set(array: js.Array[js.Number]): Unit = ???
42+
43+
def subarray(start: js.Number, end: js.Number): T = ???
44+
}
45+
46+
class Int8Array private () extends js.Object
47+
with ArrayBufferView
48+
with TypedArrayCommon[Int8Array] {
49+
def this(length: js.Number) = this()
50+
def this(array: Int8Array) = this()
51+
def this(array: js.Array[js.Number]) = this()
52+
def this(buffer: ArrayBuffer) = this()
53+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
54+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
55+
}
56+
57+
object Int8Array extends js.Object {
58+
val BYTES_PER_ELEMENT: js.Number = 1
59+
}
60+
61+
class Uint8Array private () extends js.Object
62+
with ArrayBufferView
63+
with TypedArrayCommon[Uint8Array] {
64+
def this(length: js.Number) = this()
65+
def this(array: Uint8Array) = this()
66+
def this(array: js.Array[js.Number]) = this()
67+
def this(buffer: ArrayBuffer) = this()
68+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
69+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
70+
}
71+
72+
object Uint8Array extends js.Object {
73+
val BYTES_PER_ELEMENT: js.Number = 1
74+
}
75+
76+
class Uint8ClampedArray private () extends js.Object
77+
with ArrayBufferView
78+
with TypedArrayCommon[Uint8ClampedArray]{
79+
def this(length: js.Number) = this()
80+
def this(array: Uint8ClampedArray) = this()
81+
def this(array: js.Array[js.Number]) = this()
82+
def this(buffer: ArrayBuffer) = this()
83+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
84+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
85+
}
86+
87+
object Uint8ClampedArray extends js.Object {
88+
val BYTES_PER_ELEMENT: js.Number = 1
89+
}
90+
91+
class Int16Array private () extends js.Object
92+
with ArrayBufferView
93+
with TypedArrayCommon[Int16Array] {
94+
def this(length: js.Number) = this()
95+
def this(array: Int16Array) = this()
96+
def this(array: js.Array[js.Number]) = this()
97+
def this(buffer: ArrayBuffer) = this()
98+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
99+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
100+
}
101+
102+
object Int16Array extends js.Object {
103+
val BYTES_PER_ELEMENT: js.Number = 2
104+
}
105+
106+
class Uint16Array private () extends js.Object
107+
with ArrayBufferView
108+
with TypedArrayCommon[Uint16Array] {
109+
def this(length: js.Number) = this()
110+
def this(array: Uint16Array) = this()
111+
def this(array: js.Array[js.Number]) = this()
112+
def this(buffer: ArrayBuffer) = this()
113+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
114+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
115+
}
116+
117+
object Uint16Array extends js.Object {
118+
val BYTES_PER_ELEMENT: js.Number = 2
119+
}
120+
121+
class Uint16ClampedArray private () extends js.Object
122+
with ArrayBufferView
123+
with TypedArrayCommon[Uint16ClampedArray] {
124+
def this(length: js.Number) = this()
125+
def this(array: Uint16ClampedArray) = this()
126+
def this(array: js.Array[js.Number]) = this()
127+
def this(buffer: ArrayBuffer) = this()
128+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
129+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
130+
}
131+
132+
object Uint16ClampedArray extends js.Object {
133+
val BYTES_PER_ELEMENT: js.Number = 2
134+
}
135+
136+
class Int32Array private () extends js.Object
137+
with ArrayBufferView
138+
with TypedArrayCommon[Int32Array] {
139+
def this(length: js.Number) = this()
140+
def this(array: Int32Array) = this()
141+
def this(array: js.Array[js.Number]) = this()
142+
def this(buffer: ArrayBuffer) = this()
143+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
144+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
145+
}
146+
147+
object Int32Array extends js.Object {
148+
val BYTES_PER_ELEMENT: js.Number = 4
149+
}
150+
151+
152+
class Uint32Array private () extends js.Object
153+
with ArrayBufferView
154+
with TypedArrayCommon[Uint32Array] {
155+
def this(length: js.Number) = this()
156+
def this(array: Uint32Array) = this()
157+
def this(array: js.Array[js.Number]) = this()
158+
def this(buffer: ArrayBuffer) = this()
159+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
160+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
161+
}
162+
163+
object Uint32Array extends js.Object {
164+
val BYTES_PER_ELEMENT: js.Number = 4
165+
}
166+
167+
class Uint32ClampedArray private () extends js.Object
168+
with ArrayBufferView
169+
with TypedArrayCommon[Uint32ClampedArray] {
170+
def this(length: js.Number) = this()
171+
def this(array: Uint32ClampedArray) = this()
172+
def this(array: js.Array[js.Number]) = this()
173+
def this(buffer: ArrayBuffer) = this()
174+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
175+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
176+
}
177+
178+
object Uint32ClampedArray extends js.Object {
179+
val BYTES_PER_ELEMENT: js.Number = 4
180+
}
181+
182+
class Float32Array private () extends js.Object
183+
with ArrayBufferView
184+
with TypedArrayCommon[Float32Array] {
185+
186+
def this(length: js.Number) = this()
187+
def this(array: Float32Array) = this()
188+
def this(array: js.Array[js.Number]) = this()
189+
def this(buffer: ArrayBuffer) = this()
190+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
191+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
192+
}
193+
194+
object Float32Array extends js.Object {
195+
val BYTES_PER_ELEMENT: js.Number = 4
196+
}
197+
198+
class Float64Array private () extends js.Object
199+
with ArrayBufferView
200+
with TypedArrayCommon[Float64Array] {
201+
def this(length: js.Number) = this()
202+
def this(array: Float64Array) = this()
203+
def this(array: js.Array[js.Number]) = this()
204+
def this(buffer: ArrayBuffer) = this()
205+
def this(buffer: ArrayBuffer, byteOffset: js.Number) = this()
206+
def this(buffer: ArrayBuffer, byteOffset: js.Number, length: js.Number) = this()
207+
}
208+
209+
object Float64Array extends js.Object {
210+
val BYTES_PER_ELEMENT: js.Number = 8
211+
}
212+
213+
class DataView(buffer: ArrayBuffer, byteOffset: js.Number, byteLength: js.Number) extends js.Object
214+
with ArrayBufferView {
215+
def getInt8(byteOffset: js.Number): js.Number = ???
216+
def getUint8(byteOffset: js.Number): js.Number = ???
217+
def getInt16(byteOffset: js.Number): js.Number = ???
218+
def getInt16(byteOffset: js.Number, littleEndian: js.Boolean): js.Number = ???
219+
def getUint16(byteOffset: js.Number): js.Number = ???
220+
def getUint16(byteOffset: js.Number, littleEndian: js.Boolean): js.Number = ???
221+
def getInt32(byteOffset: js.Number): js.Number = ???
222+
def getInt32(byteOffset: js.Number, littleEndian: js.Boolean): js.Number = ???
223+
def getUint32(byteOffset: js.Number): js.Number = ???
224+
def getUint32(byteOffset: js.Number, littleEndian: js.Boolean): js.Number = ???
225+
def getFloat32(byteOffset: js.Number): js.Number = ???
226+
def getFloat32(byteOffset: js.Number, littleEndian: js.Boolean): js.Number = ???
227+
def getFloat64(byteOffset: js.Number): js.Number = ???
228+
def getFloat64(byteOffset: js.Number, littleEndian: js.Boolean): js.Number = ???
229+
230+
def setInt8(byteOffset: js.Number, value: js.Number): js.Number = ???
231+
def setUint8(byteOffset: js.Number, value: js.Number): js.Number = ???
232+
def setInt16(byteOffset: js.Number, value: js.Number): js.Number = ???
233+
def setInt16(byteOffset: js.Number, value: js.Number, littleEndian: js.Boolean): js.Number = ???
234+
def setUint16(byteOffset: js.Number, value: js.Number): js.Number = ???
235+
def setUint16(byteOffset: js.Number, value: js.Number, littleEndian: js.Boolean): js.Number = ???
236+
def setInt32(byteOffset: js.Number, value: js.Number): js.Number = ???
237+
def setInt32(byteOffset: js.Number, value: js.Number, littleEndian: js.Boolean): js.Number = ???
238+
def setUint32(byteOffset: js.Number, value: js.Number): js.Number = ???
239+
def setUint32(byteOffset: js.Number, value: js.Number, littleEndian: js.Boolean): js.Number = ???
240+
def setFloat32(byteOffset: js.Number, value: js.Number): js.Number = ???
241+
def setFloat32(byteOffset: js.Number, value: js.Number, littleEndian: js.Boolean): js.Number = ???
242+
def setFloat64(byteOffset: js.Number, value: js.Number): js.Number = ???
243+
def setFloat64(byteOffset: js.Number, value: js.Number, littleEndian: js.Boolean): js.Number = ???
244+
}

0 commit comments

Comments
 (0)