[fpc-pascal] Next language feature for pas2js...

Michael Van Canneyt michael at freepascal.org
Tue May 1 11:08:33 CEST 2018



On Tue, 1 May 2018, Ryan Joseph wrote:

>
>
>> On May 1, 2018, at 3:17 PM, Mattias Gaertner <nc-gaertnma at netcologne.de> wrote:
>> 
>> JS only knows double for numbers.
>> 
>> At compile time you can use almost all the normal types: byte,
>> word, longint, etc.
>> pas2js has an alias single, but because internally it is a double this
>> gives warnings.
>
> what do we do for records then? We often need to pass arrays of specific types for functions such as glBufferData.
>
> type
>  TVec2f = record
>    x, y: GLfloat;
>  end;
>
> type
>  TVec2b = record
>    x, y: GLubyte;
>  end;
>
> var
>  verts: array[0..2] of TVec2f;
> begin
>  glBufferData(GL_ARRAY_BUFFER, sizeof(TVec2f) * 3, @verts, GL_STATIC_DRAW); // pass an array of TVec2 but how does JS know this?

Arrays are arrays in JS. 'records' in JS are (literal) objects.

Note that the above call does not exist in webGL. But if something like it existed, it would probably be
simply

glBufferData(verts, GL_STATIC_DRAW);

defined as
glBufferData(data : JSValue; aType : int);

The WebGL API would then presumably internally inspect the data, and if it is
an array, convert the Javascript array of objects to something the underlying GL understands.

Michael.



More information about the fpc-pascal mailing list