emscripten-core / emscripten-core/emscripten

Unhandled WebGL 2 extension (WEBGL_draw_instanced_base_vertex_base_instance)

Open
#13,811 1 comment 0 reactions 0 assignees View on GitHub
wontfix
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

Description

When creating a WebGL 2 context with emscripten_webgl_create_context, with EmscriptenWebGLContextAttributes.majorVersion=2, the following code:

```cpp
auto extEnabled = emscripten_webgl_enable_extension(webglContext, "WEBGL_draw_instanced_base_vertex_base_instance");
printf("%s: %i\n", "enabled", extEnabled ? 1 : 0);
```

prints:

```
enabled: 1
```

, which seems to indicate that the extension is enabled, but adding:

```
auto procAddr0 = emscripten_webgl_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceWEBGL");
auto procAddr1 = emscripten_webgl1_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceWEBGL");
auto procAddr2 = emscripten_webgl2_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceWEBGL");
printf("%s: %i\n", "procAddr0", procAddr0 ? 1 : 0);
printf("%s: %i\n", "procAddr1", procAddr1 ? 1 : 0);
printf("%s: %i\n", "procAddr2", procAddr2 ? 1 : 0);

auto procAddr3 = emscripten_webgl_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceANGLE");
auto procAddr4 = emscripten_webgl1_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceANGLE");
auto procAddr5 = emscripten_webgl2_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceANGLE");
printf("%s: %i\n", "procAddr3", procAddr3 ? 1 : 0);
printf("%s: %i\n", "procAddr4", procAddr4 ? 1 : 0);
printf("%s: %i\n", "procAddr5", procAddr5 ? 1 : 0);

auto procAddr6 = emscripten_webgl_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceOES");
auto procAddr7 = emscripten_webgl1_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceOES");
auto procAddr8 = emscripten_webgl2_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceOES");
printf("%s: %i\n", "procAddr6", procAddr6 ? 1 : 0);
printf("%s: %i\n", "procAddr7", procAddr7 ? 1 : 0);
printf("%s: %i\n", "procAddr8", procAddr8 ? 1 : 0);

auto procAddr9 = emscripten_webgl_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceEXT");
auto procAddr10 = emscripten_webgl1_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceEXT");
auto procAddr11 = emscripten_webgl2_get_proc_address("glDrawElementsInstancedBaseVertexBaseInstanceEXT");
printf("%s: %i\n", "procAddr9", procAddr9 ? 1 : 0);
printf("%s: %i\n", "procAddr10", procAddr10 ? 1 : 0);
printf("%s: %i\n", "procAddr11", procAddr11 ? 1 : 0);
```

prints:

```
main.js:3295 procAddr1: 0
main.js:3295 procAddr2: 0
main.js:3295 procAddr3: 0
main.js:3295 procAddr4: 0
main.js:3295 procAddr5: 0
main.js:3295 procAddr6: 0
main.js:3295 procAddr7: 0
main.js:3295 procAddr8: 0
main.js:3295 procAddr9: 0
main.js:3295 procAddr10: 0
main.js:3295 procAddr11: 0
```

, so I'm unable to get the proc address.

I read in the docs that emscripten_*_get_proc_address should not be called directly, but when adding the following rows:

```
auto procAddr12 = emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL;
printf("%s: %i\n", "procAddr12", procAddr12 ? 1 : 0);
```

I instead get the following error in Chrome:

```
main.html:43 Assertion failed: Missing signature argument to addFunction: function _emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL(mode, count, type, offset, instanceCount, baseVertex, baseinstance) {
GLctx.dibvbi['drawElementsInstancedBaseVertexBaseInstanceWEBGL'](mode, count, type, offset, instanceCount, baseVertex, baseinstance);
}
main.js:1521 Uncaught (in promise) RuntimeError: abort(Assertion failed: Missing signature argument to addFunction: function _emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL(mode, count, type, offset, instanceCount, baseVertex, baseinstance) {
GLctx.dibvbi['drawElementsInstancedBaseVertexBaseInstanceWEBGL'](mode, count, type, offset, instanceCount, baseVertex, baseinstance);
}) at Error
at jsStackTrace (main.js:1859)
at stackTrace (main.js:2360)
at abort (main.js:1515)
at assert (main.js:666)
at addFunctionWasm (main.js:517)
at reportUndefinedSymbols (main.js:2317)
at preloadDylibs (main.js:2329)
at run (main.js:106668)
at runCaller (main.js:106585)
at removeRunDependency (main.js:1494)
at abort (main.js:1521)
at assert (main.js:666)
at addFunctionWasm (main.js:517)
at reportUndefinedSymbols (main.js:2317)
at preloadDylibs (main.js:2329)
at run (main.js:106668)
at runCaller (main.js:106585)
at removeRunDependency (main.js:1494)
at receiveInstance (main.js:1660)
at receiveInstantiatedSource (main.js:1674)
at stackTrace (main.js:2360)
at abort (main.js:1515)
at assert (main.js:666)
at addFunctionWasm (main.js:517)
at reportUndefinedSymbols (main.js:2317)
at preloadDylibs (main.js:2329)
at run (main.js:107197)
at runCaller (main.js:107114)
at removeRunDependency (main.js:1494)
at abort (main.js:1521)
at assert (main.js:666)
at addFunctionWasm (main.js:517)
at reportUndefinedSymbols (main.js:2317)
at preloadDylibs (main.js:2329)
at run (main.js:107197)
at runCaller (main.js:107114)
at removeRunDependency (main.js:1494)
at receiveInstance (main.js:1660)
at receiveInstantiatedSource (main.js:1674)
```

I have these in my link flags if it's relevant:

```
-O2 -s SIDE_MODULE=1 -s EXPORT_ALL=1 -s MIN_WEBGL_VERSION=2 -s MAX_WEBGL_VERSION=2 -s USE_WEBGL2=1 -s WASM=1 -s ASSERTIONS=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1
```

Am I missing something or is it a bug?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.