exokitxr / exokit

Native VR/AR/XR engine for JavaScript 🦖
MIT License
997 stars 117 forks source link

GL_EXT_frag_depth reported missing even if enabled #1405

Closed chrismile closed 5 years ago

chrismile commented 5 years ago

Describe the bug When using gl_FragDepthEXT in a WebGL 1 context with exokit, the following error message is printed on the command line even when GL_EXT_frag_depth is enabled (unimportant parts omitted in the text below).

[
  '#extension GL_EXT_frag_depth : enable',
  'precision highp float;',
  'uniform vec3 uAmbient;',
  ...
  'gl_FragDepthEXT = (projPoint.z / projPoint.w + 1.0) / 2.0;',
  ...
]
v {
  message: 'Error compiling shader:\n0(158) : error C7531: global variable ' +
    'gl_FragDepthEXT requires "#extension GL_EXT_frag_depth : enable" ' +
    'before use\n'
}

To Reproduce Open any web page using GL_EXT_frag_depth and gl_FragDepthEXT in exokit.

System information:

avaer commented 5 years ago

Thanks, that looks like a bug.

In Exokit WebGL1 contexts actually have WebGL2 functionality so you should have gl_fragDepth regardless (without the EXT).

However, to fix this for WebGL1 compatibility, I think it might be sufficient to not slice out the extension pragma here: https://github.com/modulesio/webgl-to-opengl/blob/e1db71cddfd7b3023b89bee5dae54502fb35e4c8/index.js#L15

(webgl-to-opengl) should be in node_modules. Does deleting that filter help the WebGL1 case?

chrismile commented 5 years ago

Yes, that fixes the problem. Thanks! Maybe you can also include the fix upstream in webgl-to-opengl then. I'll close this issue.

avaer commented 5 years ago

Yup, will PR that. Thanks for testing!