@@ -33,7 +33,7 @@ class RaylibJs {
33
33
34
34
#reset( ) {
35
35
this . previous = undefined ;
36
- this . wasm = undefined ;
36
+ this . exports = undefined ;
37
37
this . ctx = undefined ;
38
38
this . dt = undefined ;
39
39
this . targetFPS = 60 ;
@@ -54,8 +54,10 @@ class RaylibJs {
54
54
this . quit = true ;
55
55
}
56
56
57
- async start ( { wasmPath, canvasId } ) {
58
- if ( this . wasm !== undefined ) {
57
+ async startExports ( { exports, canvasId } ) {
58
+ console . log ( exports ) ;
59
+
60
+ if ( this . exports !== undefined ) {
59
61
console . error ( "The game is already running. Please stop() it first." ) ;
60
62
return ;
61
63
}
@@ -66,9 +68,7 @@ class RaylibJs {
66
68
throw new Error ( "Could not create 2d canvas context" ) ;
67
69
}
68
70
69
- this . wasm = await WebAssembly . instantiateStreaming ( fetch ( wasmPath ) , {
70
- env : make_environment ( this )
71
- } ) ;
71
+ this . exports = exports ;
72
72
73
73
const keyDown = ( e ) => {
74
74
this . currentPressedKeyState . add ( glfwKeyMapping [ e . code ] ) ;
@@ -87,7 +87,7 @@ class RaylibJs {
87
87
window . addEventListener ( "wheel" , wheelMove ) ;
88
88
window . addEventListener ( "mousemove" , mouseMove ) ;
89
89
90
- this . wasm . instance . exports . main ( ) ;
90
+ this . exports . main ( ) ;
91
91
const next = ( timestamp ) => {
92
92
if ( this . quit ) {
93
93
this . ctx . clearRect ( 0 , 0 , this . ctx . canvas . width , this . ctx . canvas . height ) ;
@@ -106,10 +106,21 @@ class RaylibJs {
106
106
} ) ;
107
107
}
108
108
109
+ async start ( { wasmPath, canvasId } ) {
110
+ let wasm = await WebAssembly . instantiateStreaming ( fetch ( wasmPath ) , {
111
+ env : make_environment ( this )
112
+ } ) ;
113
+
114
+ this . startExports ( {
115
+ exports : wasm . instance . exports ,
116
+ canvasId,
117
+ } )
118
+ }
119
+
109
120
InitWindow ( width , height , title_ptr ) {
110
121
this . ctx . canvas . width = width ;
111
122
this . ctx . canvas . height = height ;
112
- const buffer = this . wasm . instance . exports . memory . buffer ;
123
+ const buffer = this . exports . memory . buffer ;
113
124
document . title = cstr_by_ptr ( buffer , title_ptr ) ;
114
125
}
115
126
@@ -145,7 +156,7 @@ class RaylibJs {
145
156
}
146
157
147
158
DrawCircleV ( center_ptr , radius , color_ptr ) {
148
- const buffer = this . wasm . instance . exports . memory . buffer ;
159
+ const buffer = this . exports . memory . buffer ;
149
160
const [ x , y ] = new Float32Array ( buffer , center_ptr , 2 ) ;
150
161
const [ r , g , b , a ] = new Uint8Array ( buffer , color_ptr , 4 ) ;
151
162
const color = color_hex_unpacked ( r , g , b , a ) ;
@@ -156,13 +167,13 @@ class RaylibJs {
156
167
}
157
168
158
169
ClearBackground ( color_ptr ) {
159
- this . ctx . fillStyle = getColorFromMemory ( this . wasm . instance . exports . memory . buffer , color_ptr ) ;
170
+ this . ctx . fillStyle = getColorFromMemory ( this . exports . memory . buffer , color_ptr ) ;
160
171
this . ctx . fillRect ( 0 , 0 , this . ctx . canvas . width , this . ctx . canvas . height ) ;
161
172
}
162
173
163
174
// RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font)
164
175
DrawText ( text_ptr , posX , posY , fontSize , color_ptr ) {
165
- const buffer = this . wasm . instance . exports . memory . buffer ;
176
+ const buffer = this . exports . memory . buffer ;
166
177
const text = cstr_by_ptr ( buffer , text_ptr ) ;
167
178
const color = getColorFromMemory ( buffer , color_ptr ) ;
168
179
fontSize *= this . #FONT_SCALE_MAGIC;
@@ -178,14 +189,14 @@ class RaylibJs {
178
189
179
190
// RLAPI void DrawRectangle(int posX, int posY, int width, int height, Color color); // Draw a color-filled rectangle
180
191
DrawRectangle ( posX , posY , width , height , color_ptr ) {
181
- const buffer = this . wasm . instance . exports . memory . buffer ;
192
+ const buffer = this . exports . memory . buffer ;
182
193
const color = getColorFromMemory ( buffer , color_ptr ) ;
183
194
this . ctx . fillStyle = color ;
184
195
this . ctx . fillRect ( posX , posY , width , height ) ;
185
196
}
186
197
187
198
DrawRectangleV ( position_ptr , size_ptr , color_ptr ) {
188
- const buffer = this . wasm . instance . exports . memory . buffer ;
199
+ const buffer = this . exports . memory . buffer ;
189
200
const color = getColorFromMemory ( buffer , color_ptr ) ;
190
201
const position = new Float32Array ( buffer , position_ptr , 2 ) ;
191
202
const size = new Float32Array ( buffer , size_ptr , 2 ) ;
@@ -213,7 +224,7 @@ class RaylibJs {
213
224
214
225
TraceLog ( logLevel , text_ptr , ... args ) {
215
226
// TODO: Implement printf style formatting for TraceLog
216
- const buffer = this . wasm . instance . exports . memory . buffer ;
227
+ const buffer = this . exports . memory . buffer ;
217
228
const text = cstr_by_ptr ( buffer , text_ptr ) ;
218
229
switch ( logLevel ) {
219
230
case LOG_ALL : console . log ( `ALL: ${ text } ${ args } ` ) ; break ;
@@ -232,34 +243,34 @@ class RaylibJs {
232
243
const x = this . currentMousePosition . x - bcrect . left ;
233
244
const y = this . currentMousePosition . y - bcrect . top ;
234
245
235
- const buffer = this . wasm . instance . exports . memory . buffer ;
246
+ const buffer = this . exports . memory . buffer ;
236
247
new Float32Array ( buffer , result_ptr , 2 ) . set ( [ x , y ] ) ;
237
248
}
238
249
239
250
CheckCollisionPointRec ( point_ptr , rec_ptr ) {
240
- const buffer = this . wasm . instance . exports . memory . buffer ;
251
+ const buffer = this . exports . memory . buffer ;
241
252
const [ x , y ] = new Float32Array ( buffer , point_ptr , 2 ) ;
242
253
const [ rx , ry , rw , rh ] = new Float32Array ( buffer , rec_ptr , 4 ) ;
243
254
return ( ( x >= rx ) && x <= ( rx + rw ) && ( y >= ry ) && y <= ( ry + rh ) ) ;
244
255
}
245
256
246
257
Fade ( result_ptr , color_ptr , alpha ) {
247
- const buffer = this . wasm . instance . exports . memory . buffer ;
258
+ const buffer = this . exports . memory . buffer ;
248
259
const [ r , g , b , _ ] = new Uint8Array ( buffer , color_ptr , 4 ) ;
249
260
const newA = Math . max ( 0 , Math . min ( 255 , 255.0 * alpha ) ) ;
250
261
new Uint8Array ( buffer , result_ptr , 4 ) . set ( [ r , g , b , newA ] ) ;
251
262
}
252
263
253
264
DrawRectangleRec ( rec_ptr , color_ptr ) {
254
- const buffer = this . wasm . instance . exports . memory . buffer ;
265
+ const buffer = this . exports . memory . buffer ;
255
266
const [ x , y , w , h ] = new Float32Array ( buffer , rec_ptr , 4 ) ;
256
267
const color = getColorFromMemory ( buffer , color_ptr ) ;
257
268
this . ctx . fillStyle = color ;
258
269
this . ctx . fillRect ( x , y , w , h ) ;
259
270
}
260
271
261
272
DrawRectangleLinesEx ( rec_ptr , lineThick , color_ptr ) {
262
- const buffer = this . wasm . instance . exports . memory . buffer ;
273
+ const buffer = this . exports . memory . buffer ;
263
274
const [ x , y , w , h ] = new Float32Array ( buffer , rec_ptr , 4 ) ;
264
275
const color = getColorFromMemory ( buffer , color_ptr ) ;
265
276
this . ctx . strokeStyle = color ;
@@ -268,15 +279,15 @@ class RaylibJs {
268
279
}
269
280
270
281
MeasureText ( text_ptr , fontSize ) {
271
- const buffer = this . wasm . instance . exports . memory . buffer ;
282
+ const buffer = this . exports . memory . buffer ;
272
283
const text = cstr_by_ptr ( buffer , text_ptr ) ;
273
284
fontSize *= this . #FONT_SCALE_MAGIC;
274
285
this . ctx . font = `${ fontSize } px grixel` ;
275
286
return this . ctx . measureText ( text ) . width ;
276
287
}
277
288
278
289
TextSubtext ( text_ptr , position , length ) {
279
- const buffer = this . wasm . instance . exports . memory . buffer ;
290
+ const buffer = this . exports . memory . buffer ;
280
291
const text = cstr_by_ptr ( buffer , text_ptr ) ;
281
292
const subtext = text . substring ( position , length ) ;
282
293
@@ -291,7 +302,7 @@ class RaylibJs {
291
302
292
303
// RLAPI Texture2D LoadTexture(const char *fileName);
293
304
LoadTexture ( result_ptr , filename_ptr ) {
294
- const buffer = this . wasm . instance . exports . memory . buffer ;
305
+ const buffer = this . exports . memory . buffer ;
295
306
const filename = cstr_by_ptr ( buffer , filename_ptr ) ;
296
307
297
308
var result = new Uint32Array ( buffer , result_ptr , 5 )
@@ -311,7 +322,7 @@ class RaylibJs {
311
322
312
323
// RLAPI void DrawTexture(Texture2D texture, int posX, int posY, Color tint);
313
324
DrawTexture ( texture_ptr , posX , posY , color_ptr ) {
314
- const buffer = this . wasm . instance . exports . memory . buffer ;
325
+ const buffer = this . exports . memory . buffer ;
315
326
const [ id , width , height , mipmaps , format ] = new Uint32Array ( buffer , texture_ptr , 5 ) ;
316
327
// // TODO: implement tinting for DrawTexture
317
328
// const tint = getColorFromMemory(buffer, color_ptr);
@@ -321,7 +332,7 @@ class RaylibJs {
321
332
322
333
// TODO: codepoints are not implemented
323
334
LoadFontEx ( result_ptr , fileName_ptr /*, fontSize, codepoints, codepointCount*/ ) {
324
- const buffer = this . wasm . instance . exports . memory . buffer ;
335
+ const buffer = this . exports . memory . buffer ;
325
336
const fileName = cstr_by_ptr ( buffer , fileName_ptr ) ;
326
337
// TODO: dynamically generate the name for the font
327
338
// Support more than one custom font
@@ -334,7 +345,7 @@ class RaylibJs {
334
345
SetTextureFilter ( ) { }
335
346
336
347
MeasureTextEx ( result_ptr , font , text_ptr , fontSize , spacing ) {
337
- const buffer = this . wasm . instance . exports . memory . buffer ;
348
+ const buffer = this . exports . memory . buffer ;
338
349
const text = cstr_by_ptr ( buffer , text_ptr ) ;
339
350
const result = new Float32Array ( buffer , result_ptr , 2 ) ;
340
351
this . ctx . font = fontSize + "px myfont" ;
@@ -344,7 +355,7 @@ class RaylibJs {
344
355
}
345
356
346
357
DrawTextEx ( font , text_ptr , position_ptr , fontSize , spacing , tint_ptr ) {
347
- const buffer = this . wasm . instance . exports . memory . buffer ;
358
+ const buffer = this . exports . memory . buffer ;
348
359
const text = cstr_by_ptr ( buffer , text_ptr ) ;
349
360
const [ posX , posY ] = new Float32Array ( buffer , position_ptr , 2 ) ;
350
361
const tint = getColorFromMemory ( buffer , tint_ptr ) ;
@@ -358,7 +369,7 @@ class RaylibJs {
358
369
}
359
370
360
371
ColorFromHSV ( result_ptr , hue , saturation , value ) {
361
- const buffer = this . wasm . instance . exports . memory . buffer ;
372
+ const buffer = this . exports . memory . buffer ;
362
373
const result = new Uint8Array ( buffer , result_ptr , 4 ) ;
363
374
364
375
// Red channel
@@ -389,7 +400,7 @@ class RaylibJs {
389
400
}
390
401
391
402
raylib_js_set_entry ( entry ) {
392
- this . entryFunction = this . wasm . instance . exports . __indirect_function_table . get ( entry ) ;
403
+ this . entryFunction = this . exports . __indirect_function_table . get ( entry ) ;
393
404
}
394
405
}
395
406
0 commit comments