immersive-web / webvr-polyfill

Use WebVR today, without requiring a special browser build.
http://immersive-web.github.io/webvr-polyfill/examples/
Apache License 2.0
1.4k stars 325 forks source link

Vertex shader coordinates #306

Open milcktoast opened 6 years ago

milcktoast commented 6 years ago
Description:

I have yet to determine the underlying cause, but I am experiencing issues with using this polyfill alongside programs that perform geometric calculations in the vertex shader. I am using a technique described here to project a set of quads in screen space to appear as a continuous line with uniform width. This works well in an isolated GL context, but fails when used with this polyfill, specifically for mobile Cardboard devices. I tried isolating rendering to a framebuffer, but this also yielded unexpected results.

A demo of this issue can be viewed here, along with the source code.

Following are some screenshots from Safari desktop responsive mode as well as iOS Simulator (note I have also tested on an actual device with same results as Simulator):


no distortion

No distortion (Safari desktop responsive mode) Vertex position calculations correct, renders as expected



distortion

Distortion (Safari iOS Simulator) Vertex position calculations heavily skewed



distortion with FBO

Distortion with scene drawn to FBO (Safari iOS Simulator) Vertex position calculations slightly skewed


Additional Information:


[Edited to add link to demo and source code]

jsantell commented 6 years ago

Thanks for filing! Seems like this could be an iOS only issue, on Android (Firefox, Chrome with WebVR disabled) it appears to be working fine. Native WebVR does not work due to Uncaught (in promise) DOMException: API can only be initiated by a user gesture..

I suspect there's an issue in how the polyfill handles distorting the views: https://github.com/immersive-web/cardboard-vr-display/blob/18251cfcf95e85d3f1e30c807ec5d94a9ec5b702/src/cardboard-distorter.js

I don't have any initial thoughts other than suspecting the issue is in the cardboard distorter, but would be a good place to investigate, perhaps one of the Utils.isIOS conditionals.

milcktoast commented 6 years ago

Thanks for the quick response! I've been digging through cardboard-distorter but haven't found the cause yet; I'll report back if I'm able to resolve it.