Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

using twgl in web worker #71

Closed
kaktus40 opened this issue Jan 1, 2018 · 5 comments
Closed

using twgl in web worker #71

kaktus40 opened this issue Jan 1, 2018 · 5 comments

Comments

@kaktus40
Copy link

kaktus40 commented Jan 1, 2018

Hello, with OffscreenCanvas which is experimental technology permits to use webGL2 in a web Worker. Nevertheless in twgl there is references to window object that doesn't exist in web worker, see here, here and here. Is it possible to change it?

@greggman
Copy link
Owner

greggman commented Jan 2, 2018

Try v4.3.0?

@kaktus40
Copy link
Author

kaktus40 commented Jan 2, 2018

Well, for window reference, it's OK now but I'm sorry to say that worker doesn't have document object. I have found 'document' references here, here, here and here. Thanks for your fast corrections!

@kaktus40
Copy link
Author

kaktus40 commented Jan 2, 2018

Hello, I made a pull request to resolve the 'document' issue into a webWorker.

@greggman
Copy link
Owner

greggman commented Jan 2, 2018

Thanks for the PR. Unfortunately we were working in parallel so I made most of the same changes 😅

I threw together a working example

http://twgljs.org/examples/offscreencanvas.html

Some notes: you probably know that OffscreenCanvas is not yet released (it's behind flags)

What I noticed while making this work

  • Chrome supports 2d canvas in a worker.
  • Firefox does NOT support 2d canvas in a worker. Worse, if you try to create one (ie, call someOffscreenCanvas.getContext('2d') instead of returning null and continuing Firefox seems to just stop executing JavaScript so that sucks.
  • Chrome is having no problems loading the textures from images but Firefox is. No idea why. No error messages. They just don't show up.
  • Firefox Nightly on macOS (59.0a1 (2018-01-02)) crashes trying to run the sample. Firefox stable 57.0.3 (64-bit) runs but no textures from images.

The short version of all of that is OffscreenCanvas is not really ready for prime time yet.

As for TWGL the code related to slicing one image into a cubemap or into a 3d texture will have to be reworked at some point. I could make it work in Chrome by using the 2D offscreencanvas that's working but as pointed out above it Firefox just stops running if you even try to make an offscreen canvas. Maybe I could check for OffscreenCanvas2DRenderingContext to see if I should or shouldn't make one.

I could fix the 3D slicing code to not use canvas. Will probably do that since that's WebGL2 only. Fixing the cubemap slicing code is a little problematic because it needs to work in WebGL (so can't use unpack settings) and it needs to use canvas for Safari and Edge so can't just switch the code to ImageBitmap slices. Also ImageBitmap slices are async. That probably doesn't matter but it would be a change to how twgl behaves for twgl.setTextureFromElement

@kaktus40
Copy link
Author

kaktus40 commented Jan 2, 2018

Ok no problem for me, it works. I remove my PR.
Thanks!

@kaktus40 kaktus40 closed this as completed Jan 2, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants