[Public WebGL] standalone typed array spec
Vladimir Vukicevic
[email protected]
Tue Jan 26 10:03:19 PST 2010
On 1/26/2010 7:30 AM, Chris Marrin wrote:
>
> On Jan 26, 2010, at 1:13 AM, Vladimir Vukicevic wrote:
>
>> I've got a standalone typed array spec pulled out here:
>> http://people.mozilla.com/~vladimir/jsvec/TypedArray-spec.html
>> <http://people.mozilla.com/%7Evladimir/jsvec/TypedArray-spec.html>
>>
>> It still needs a decent amount of work, but I think it conveys the
>> basic idea. Brendan Eich has suggested that I send this to the
>> es-discuss list (ecmascript group) and to put a strawman proposal up
>> for them to discuss during their meetings this week; I'll do that as
>> well to get their feedback and thoughts. It would be interesting to
>> have this functionality be a core part of ES, or at least as part of
>> a standard library of some kind.
>
> Comments:
>
> 1) I really liked the table in 5.14.3, which BYTES_PER_ELEMENT rather
> than 'Size', or have some other way to relate these two.
It made the table ugly :-) The sentence right above the table stats
that the size is equivalent to the BYTES_PER_ELEMENT constant -- is that
enough?
>
> 2) I'd like to see the WebIDL for everything
Yeah, I wanted to wait until we saw where this would land, though I
guess no matter what we'd have to have some WebIDL to describe the
interface that the types should conform to..
> 3) I think slice() should definitely return a reference to the
> original ArrayBuffer. You show the code you'd use make a copy, which I
> think is sufficient.
My worry is that the semantics are different with this slice and normal
Array.slice() -- Array.slice() will return a copy that you can then
modify without changing the original, whereas this wouldn't.
>
> 4) There is a good way to copy an ArrayBuffer:
>
> var newBuf = (new Int8Array(otherArray.slice(1,10))).buffer;
>
> Isn't that sufficient?
It is, but pretty ugly and convoluted. Adding a slice() method to
ArrayBuffer would work though, what do you think?
> 5) I think endianness will be the biggest issue here. I think we need
> a way to load data into the array in a machine independent way. For
> instance, there should be a way to put an array of bytes into a
> FloatArray, when the bytes are in different orders, like big, little
> endian and network order. I like using the term "network order"
> because I never remember if that's big or little endian. Maybe a
> serialize/deserialize semantic could be used? For instance:
>
> var bytes; // data from the network
> var floats = new FloatArray(bytes, NetworkOrder);
> var outBytes = new ByteArray(floats, NetworkOrder);
>
> Some or all of the Array classes would have a new ctor which would
> take a ByteArray (or UnsignedByteArray?) and an enum saying it's byte
> order. Likewise ByteArray would have a ctor which would take any of
> the other types and an enum. Would that be enough?
I was actually thinking about methods like fromLittleEndian(),
fromBigEndian(), fromNetworkEndian(), and the opposite toLittleEndian
etc. That would convert the data based on intent ("I have big endian
data and I want it in the platform endian"). Though I'd once again fall
back on a generic byteSwap(), since from/to don't give you a way to just
say "I want data in opposite-endian to what it is now".
fromOtherEndian/toOtherEndian? :-)
I don't really like having a constructor for it, because it would mean
that the constructor actually does work -- all the other constructors
just create a view and don't touch the actual data. Something like:
var ints1 = new Int32Array(bytes, NetworkOrder);
var ints2 = new Int32Array(bytes, NetworkOrder);
Would end up swapping the array twice, which seems unexpected to me.
Hmm, or are you suggesting that the byte swapping be done at access
time? Now that I think about it, that might be required -- otherwise
you couldn't access a complex data structure (e.g. packed ints, shorts,
etc.) because you wouldn't be able to easily say "byte swap all the
ints" or somesuch.
> My biggest concern about this is getting it out the door quickly. Is
> ECMA the way to do that? Would it be better as a W3C recommendation?
That's my concern as well -- Brendan and Arun suggested that we try ECMA
first, and if it doesn't look like they're interested and/or if they
can't move quickly, then look at alternatives. The problem was that it
didn't really seem to fit into any of the W3C groups; the WebApps group
is probably the closest as a catch-all, but I don't think its charter
would encompass something like this. A new group could certainly be
started, but that's even more time..
- Vlad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://khronos.org/pipermail/public_webgl_khronos.org/attachments/20100126/5a3a50ec/attachment.html>
More information about the public_webgl
mailing list