subagent transcript

session 18e25685 · workflow wf_23df5b1c
delegated task
You are an adversarial verifier for a FreeCAD-wasm code review. A reviewer claims: SEVERITY: high CATEGORY: context-detection FILE: freecad-port/FreeC
▸ Magik
You are an adversarial verifier for a FreeCAD-wasm code review. A reviewer claims: SEVERITY: high CATEGORY: context-detection FILE: freecad-port/FreeCAD/src/3rdParty/coin/src/glue/gl.cpp SUMMARY: Fix Coin's current-context detection on wasm — this is the ROOT of the reported 'cc_glglue_instance: Error setting up GL context' warning. `coin_gl_current_context()` has no __EMSCRIPTEN__ branch and queries EGL/GLX, which are blind to Qt-wasm's emscripten GL context. DETAIL/EVIDENCE: The reported warning is gl.cpp:2374-2385 in `cc_glglue_instance` (postwarning text 'Error when setting up the GL context. This can happen if there is no current context...'), draining `glGetError()` at glue-instance setup, followed by the assert at 2391 on `glGetString(GL_VERSION)`. The underlying cause: `coin_gl_current_context()` (gl.cpp:5281-5314) resolves the current context ONLY via `eglGetCurrentContext()` (HAVE_EGL, gl.cpp:5286) or `glXGetCurrentContext()` — there is no `__EMSCRIPTEN__` case. Qt-wasm's QOpenGLWidget makes its WebGL2 context current through emscripten's GL module (`GL.makeContextCurrent`), NOT via `eglMakeCurrent`, so emscripten's EGL emulation returns EGL_NO_CONTEXT. Consequently `check_egl()` (gl.cpp:2249-2290) mis-detects the backend and the assert at gl.cpp:2346 ('Must have a current GL context') sees NULL. The existing `fcWasmSyncGLContext()` (WasmGLFixedFunc.cpp:213-224, called at QuarterWidget.cpp:1006) only syncs the emscripten `GLctx` global so glGetString/glGetError operate on Qt's context during paint — it does NOT make `coin_gl_current_context()` return non-null. Fix: add an `#ifdef __EMSCRIPTEN__` branch to `coin_gl_current_context()` that returns a non-null token when `GL.currentContext`/`GLctx` is set (reuse the same JS source as ffSyncContext via an EM_JS helper), and short-circuit `check_egl()` on wasm. That removes the warning at its root and makes glue setup deterministic. RECOMMENDATION: Add a wasm branch to coin_gl_current_context() (return non-null when GL.currentContext.GLctx exists) and force COIN_USE_EGL handling in check_egl() on __EMSCRIPTEN__. Verify the 'Error setting up GL context' warning disappears once the context is reported current at glglue-instance time. Independently verify by reading the actual file(s) and running git/grep as needed (repo at /home/magik6k/lcad-wasm/freecad-port/FreeCAD, toolchain at /opt/toolchains, deploy at /home/magik6k/lcad-wasm/freecad-port/deploy-gui). Default to REFUTED if you cannot confirm the evidence. Adjust severity to what the evidence actually supports.
Fable
thinking
I need to examine the actual source files to verify the claims about these functions and trace where the warnings are coming from.
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && sed -n '2240,2400p' src/3rdParty/coin/src/glue/gl.cpp", "description": "Read gl.cpp check_egl and cc_glglue_instance region"}
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && sed -n '5270,5330p' src/3rdParty/coin/src/glue/gl.cpp", "description": "Read coin_gl_current_context region"}
tool result
#ifdef HAVE_CGL
    COIN_USE_AGL = 0;
#else
    COIN_USE_AGL = 1;
#endif
  }
#endif
}

static void check_egl()
{
#if !defined(HAVE_EGL)
  COIN_USE_EGL = 0;
#elif defined(HAVE_EGL) && !defined(HAVE_GLX)
  COIN_USE_EGL = 1;
#else // HAVE_EGL && HAVE_GLX
  if (COIN_USE_EGL == -1) {
    // If COIN_EGL is set use EGL
    const char * env = coin_getenv("COIN_EGL");
    if (env) {
      // Only accept '0' and '1' otherwise auto detect
      if (env[0] == '0' && env[1] == '\0') {
        COIN_USE_EGL =   …[truncated]
tool result
    }

    errs++;
    glerr = glGetError();
  }
  return errs;
}

/* ********************************************************************** */

void *
coin_gl_current_context(void)
{
  void * ctx = NULL;

#ifdef HAVE_EGL
  if (COIN_USE_EGL > 0) {
    ctx = eglGetCurrentContext();
    if (ctx) {
      return ctx;
    }
  } else {
#endif /* HAVE_EGL */

#ifdef HAVE_GLX
  ctx = glXGetCurrentContext();
#endif /* HAVE_GLX */

#ifdef HAVE_EGL
  }
#endif /* HAVE_EGL */

#ifdef HAVE_WGL
  ctx = wglGetC  …[truncated]
Fable
thinking
I need to verify the reviewer's claims about the code structure and line numbers in gl.cpp, then check whether HAVE_EGL is actually defined in the wasm build since that's crucial to understanding if emscripten's implementation would be affected.
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && grep -n \"coin_gl_current_context\\|static void check_egl\\|Must have a current GL context\\|Error when setting up the GL context\\|could not call glGetString\" src/3rdParty/co…
tool result
2249:static void check_egl()
2345:      const void * current_ctx = coin_gl_current_context();
2346:      assert(current_ctx && "Must have a current GL context when instantiating cc_glglue!! (Note: if you are using an old Mesa GL version, set the environment variable COIN_GL_NO_CURRENT_CONTEXT_CHECK to get around what may be a Mesa bug.)");
2377:                                "Error when setting up the GL context. This can happen if "
2391:    assert(gi->versionstr && "could not call glGetString  …[truncated]
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && grep -rn \"HAVE_EGL\\|HAVE_GLX\\|HAVE_WGL\" src/3rdParty/coin/include/Inventor/C/glue/*.h src/3rdParty/coin/*.h 2>/dev/null | head; echo \"---config---\"; find src/3rdParty/coi…
tool result
Exit code 123
---config---
Fable
thinking
The line numbers are checking out across the different functions, so that's a good sign. Now I need to figure out whether HAVE_EGL is actually defined when building for WebAssembly.
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && grep -rn \"HAVE_EGL\\|HAVE_GLX\\|HAVE_WGL\" src/3rdParty/coin/ --include=\"*.h.in\" --include=\"*.h\" --include=\"*.cmake\" --include=\"CMakeLists.txt\" 2>/dev/null | grep -i \…
tool result
src/3rdParty/coin/CMakeLists.txt:236:        set(HAVE_EGL 1)
src/3rdParty/coin/CMakeLists.txt:558:  #set(HAVE_WGL 1)
src/3rdParty/coin/CMakeLists.txt:687:  " HAVE_WGL)
src/3rdParty/coin/CMakeLists.txt:695:    " HAVE_GLX)
src/3rdParty/coin/CMakeLists.txt:735:  " HAVE_GLX)
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && grep -rn \"fcWasmSyncGLContext\\|makeContextCurrent\\|GLctx\\|currentContext\" src/ --include=\"*.cpp\" --include=\"*.h\" 2>/dev/null | grep -i \"wasm\\|sync\\|GLctx\\|makeCont…
tool result
src/Gui/Quarter/QuarterWidget.cpp:71:extern "C" void fcWasmSyncGLContext(void);
src/Gui/Quarter/QuarterWidget.cpp:1003:  // Ensure emscripten's current-context global (GLctx) matches the context Qt
src/Gui/Quarter/QuarterWidget.cpp:1006:  fcWasmSyncGLContext();
src/Gui/WasmGLFixedFunc.cpp:11: * (`Module.ctx`/`GLctx`). We maintain modelview/projection matrix stacks, the
src/Gui/WasmGLFixedFunc.cpp:37:  // (GLctx), the GL module's current context, or Module.ctx. Qt makes its
src/Gui/WasmGLFixedFun  …[truncated]
Fable
thinking
I'm checking the CMakeLists.txt file around line 236 to understand what condition triggers HAVE_EGL and whether it's related to WebAssembly or Emscripten.
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && sed -n '215,245p' src/3rdParty/coin/CMakeLists.txt", "description": "Read HAVE_EGL condition context"}
tool result
    endif()

    find_library(X11_GLU_LIB GLU ${X11_LIB_SEARCH_PATH})
    if(NOT X11_GLU_LIB)
      message(FATAL_ERROR "Could not find libGLU.dylib")
    endif()
    list(APPEND COIN_TARGET_INCLUDE_DIRECTORIES ${X11_INCLUDE_DIR} ${X11_GL_INCLUDE_PATH})
    list(APPEND COIN_TARGET_LINK_LIBRARIES ${X11_LIBRARIES} ${X11_GL_LIB} ${X11_GLU_LIB})
  endif()
else()
  if(UNIX AND NOT APPLE AND COIN_BUILD_GLX)
    find_package(X11 REQUIRED)
    list(APPEND COIN_TARGET_INCLUDE_DIRECTORIES ${X11_INCLUDE_DI  …[truncated]
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && sed -n '200,240p' src/Gui/WasmGLFixedFunc.cpp; echo \"===QuarterWidget 995-1015===\"; sed -n '995,1015p' src/Gui/Quarter/QuarterWidget.cpp", "description": "Read ffSyncContext …
tool result
      g.bufferData(g.ELEMENT_ARRAY_BUFFER, arr, g.STREAM_DRAW);
      g.drawElements(prim, count, idxType===0x1405?g.UNSIGNED_INT:g.UNSIGNED_SHORT, 0);
    }
  } else {
    g.drawArrays(prim, first, count);
  }
});

/* Make emscripten's *current context* global (GLctx, used by emscripten's real
 * GL functions and by Coin's glGetString) point at the context Qt made current.
 * On Qt-wasm QOpenGLWidget, GL.currentContext can be set without the emscripten
 * GLctx global being synced, so Coin's cc  …[truncated]
Fable
thinking
I'm checking whether HAVE_EGL is defined in the wasm build by looking at the conditional logic that sets COIN_USE_EGL based on whether HAVE_EGL and HAVE_GLX are present, and then examining how coin_gl_current_context uses these definitions.

The key insight is that the reviewer claims coin_gl_current_context returns null on wasm because there's no __EMSCRIPTEN__ branch, but if Emscripten provides EGL emulation and HAVE_EGL is defined during the build, then eglGetCurrentContext() would be called instead. I need to find the actual config.h generated for the wasm build to determine which preprocessor flags are set.
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port && find . -name \"config.h\" -path \"*coin*\" 2>/dev/null; find . -name \"setup.h\" -path \"*coin*\" 2>/dev/null; echo \"---search build dirs for HAVE_EGL define---\"; grep -rln \"define …
tool result
---search build dirs for HAVE_EGL define---
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port && ls deploy-gui 2>/dev/null | head; echo \"---build dirs---\"; find . -maxdepth 2 -type d -name \"build*\" 2>/dev/null; find . -maxdepth 3 -name \"*.cmake\" -path \"*coin*\" 2>/dev/null …
tool result
Exit code 1
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port && ls -la; echo \"===deploy-gui===\"; ls deploy-gui 2>/dev/null | head -30", "description": "List project dir and deploy-gui"}
tool result
total 52
drwxr-xr-x 1 agent agent   550 Jul  4 06:46 .
drwxr-xr-x 1 agent agent   840 Jul  4 12:33 ..
-rw-r--r-- 1 agent agent 10238 Jul  3 18:00 00-OVERVIEW.md
drwxr-xr-x 1 agent agent   616 Jul  3 18:27 FreeCAD
-rw-r--r-- 1 agent agent  7241 Jul  4 06:46 STATUS.md
drwxr-xr-x 1 agent agent   300 Jul  4 12:31 deploy-gui
drwxr-xr-x 1 agent agent   134 Jul  4 05:25 deploy-jspi
drwxr-xr-x 1 agent agent   186 Jul  3 19:34 deploy-t1
drwxr-xr-x 1 agent agent   512 Jul  4 06:16 research
-rw-r--r-- 1 ag  …[truncated]
Fable
⚙ Bash {"command": "find . -name \"config.h\" 2>/dev/null | grep -i coin | head; echo \"---all coin config---\"; find . -path \"*coin*\" -name \"*.h\" 2>/dev/null | xargs grep -l \"HAVE_EGL\" 2>/dev/null | head; echo \"---any build tree---\"; find…
tool result
---all coin config---
---any build tree---
Fable
thinking
I need to figure out which graphics APIs are enabled in the emscripten build by examining the CMake configuration and toolchain settings, since there's no preserved build tree with config.h to reference directly.
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && grep -rn \"COIN_BUILD_EGL\\|COIN_BUILD_GLX\\|HAVE_EGL\\|HAVE_GLX\" src/3rdParty/coin/config.h.cmake.in src/3rdParty/coin/*.in 2>/dev/null | head; echo \"===find config template…
tool result
===find config template===
src/3rdParty/coin/Coin.pc.cmake.in
src/3rdParty/coin/Coin.pc.in
src/3rdParty/coin/Info.plist.in
src/3rdParty/coin/coin.cfg.cmake.in
src/3rdParty/coin/coin.cfg.in
src/3rdParty/coin/version.plist.in
src/3rdParty/coin/cpack.d/DMGSetup.scpt.in
src/3rdParty/coin/cpack.d/centos.cmake.in
src/3rdParty/coin/cpack.d/commons.cmake.in
src/3rdParty/coin/cpack.d/darwin-dmg.cmake.in
===grep EMSCRIPTEN in coin CMake===
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port && grep -rn \"COIN_BUILD_EGL\\|COIN_BUILD_GLX\\|EGL\\|GLX\" toolchain/ research/ *.md 2>/dev/null | grep -i \"coin\\|egl\\|glx\" | head -20", "description": "Search docs/toolchain for coi…
tool result
research/R3-graphics-coin-webgl.md:15:(open); EGL context glue landed in 4.0.4 (2025-06); a community
research/R3-graphics-coin-webgl.md:29:| Offscreen renderers | GLX/WGL/CGL/EGL variants (src/rendering) | Compile only a stub/EGL path; thumbnails & offscreen exports deferred |
research/R3-graphics-coin-webgl.md:30:| Context glue backends | `gl_egl.cpp` present | Emscripten speaks EGL; but under Quarter, Qt owns the context anyway |
STATUS.md:48:  (`WasmGLFixedFunc`, ~60 GL1/EGL no-ops = the Sta  …[truncated]
Fable
thinking
I'm seeing that the build configuration explicitly disables both GLX and EGL support, which means the HAVE_EGL flag never gets set during the CMake configuration phase. This is a key constraint that affects what graphics capabilities are available.

Looking at the coin_gl_current_context() function, with all the graphics API flags undefined, it simply returns NULL every time on WebAssembly. There's no attempt to query EGL or GLX at all—the function just hits the final return statement unconditionally.

The check_egl() function then sets COIN_USE_EGL to 0 since HAVE_EGL isn't defined, which is expected. But the critical issue is that assertion at line 2346: it expects a valid GL context to ex  …
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port && cat toolchain/configure-stage2.sh 2>/dev/null | head -60", "description": "Read stage2 configure script"}
tool result
#!/usr/bin/env bash
# Stage 2/3: configure the full FreeCAD GUI (BUILD_GUI=ON) for wasm, linked
# against the asyncify Qt (qt-asyncify) so QEventLoop::exec() works.
set -euo pipefail

TC=/opt/toolchains
SRC="$(cd "$(dirname "$0")/../FreeCAD" && pwd)"
BUILD="${1:-$TC/src/freecad-gui-build}"
PYWASM=$TC/python-wasm
QTDIR=$TC/qt-asyncify/6.11.1/wasm_singlethread   # asyncify-enabled Qt (source-built)
QTHOST=$TC/qt/6.11.1/gcc_64                       # host tools (moc/rcc/uic/lrelease)
SY=$TC/emsdk/u  …[truncated]
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port && grep -rn \"Error setting up\\|Error when setting up\\|Must have a current\\|glglue\\|cc_glglue\\|GL context\" STATUS.md stage-4-webgl-coin-backend.md research/R9*.md 2>/dev/null | head…
tool result
stage-4-webgl-coin-backend.md:18:2. **Glue seam:** `COIN_GLES2` mode in `cc_glglue` routing legacy entries
research/R9-coin-webgl-strategy.md:49:wasm make `cc_glglue_getprocaddress` resolve **everything through
research/R9-coin-webgl-strategy.md:75:`GLctx` wrapper or an emulation entry. Route `cc_glglue_getprocaddress` to it.
Fable
thinking
So the Release build configuration automatically defines NDEBUG, which means those asserts at lines 2346 and 2391 are effectively disabled in the actual compiled binary. This is a critical detail—those assertions won't catch anything at runtime since they're compiled out entirely.

The real source of the warning is the glGetError() loop at lines 2374-2385, not coin_gl_current_context(). The function only feeds into a disabled assert, so adding a wasm-specific branch there wouldn't suppress the warning. The existing fcWasmSyncGLContext call that makes the GL context current is what actually addresses the glGetError and glGetString issues.

Let me search for all the places coin_gl_current_cont  …
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && grep -rn \"coin_gl_current_context\" src/ --include=\"*.cpp\" --include=\"*.h\" --include=\"*.c\"", "description": "Find all callers of coin_gl_current_context"}
tool result
src/3rdParty/coin/src/shaders/SoGeometryShader.cpp:262:  void * ptr = coin_gl_current_context();
src/3rdParty/coin/src/shaders/SoFragmentShader.cpp:110:  void * ptr = coin_gl_current_context();
src/3rdParty/coin/src/shaders/SoVertexShader.cpp:108:  void * ptr = coin_gl_current_context();
src/3rdParty/coin/src/glue/glp.h:896:void * coin_gl_current_context(void);
src/3rdParty/coin/src/glue/gl.cpp:2345:      const void * current_ctx = coin_gl_current_context();
src/3rdParty/coin/src/glue/gl.cpp:528  …[truncated]
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && sed -n '2335,2360p' src/3rdParty/coin/src/glue/gl.cpp", "description": "Re-read assert context at 2345"}
tool result
       even though there really is a current context set up. (Reported
       by kintel.)
    */
    static int chk = -1;
    if (chk == -1) {
      /* Note: don't change envvar name without updating the assert
         text below. */
      chk = coin_getenv("COIN_GL_NO_CURRENT_CONTEXT_CHECK") ? 0 : 1;
    }
    if (chk) {
      const void * current_ctx = coin_gl_current_context();
      assert(current_ctx && "Must have a current GL context when instantiating cc_glglue!! (Note: if you are using   …[truncated]
Fable
thinking
I'm tracing through the callers of coin_gl_current_context to understand how they handle shader support, but this seems tangential to the actual warning. Let me step back and focus on the core issue: the claim is that coin_gl_current_context lacks an __EMSCRIPTEN__ branch, which is supposedly the root cause of the GL context error. I've established some facts about the build, but I need to verify whether this missing branch is actually what's triggering the warning. The reviewer's proposed fix wouldn't actually eliminate the warning since it's driven by glGetError state, not coin_gl_current_context. The real issue is context currency at glglue setup time, which fcWasmSyncGLContext already ad  …
Fable
I have gathered enough evidence. Let me verify one final point about the build's NDEBUG/assert status implied by Release mode.
Fable
⚙ Bash {"command": "cd /home/magik6k/lcad-wasm/freecad-port/FreeCAD && grep -n \"isSupported\\|coin_gl_current_context\" src/3rdParty/coin/src/shaders/SoVertexShader.cpp | head; echo \"---confirm Release flags meaning---\"; grep -rn \"COIN_BUILD_E…
tool result
Exit code 2
102:SoVertexShader::isSupported(SourceType sourceType)
108:  void * ptr = coin_gl_current_context();
115:    return SoGLDriverDatabase::isSupported(glue, SO_GL_ARB_VERTEX_PROGRAM);
118:    return SoGLDriverDatabase::isSupported(glue, SO_GL_ARB_SHADER_OBJECT);
---confirm Release flags meaning---
ugrep: warning: toolchain/*.sh: No such file or directory
Fable
thinking
I've confirmed the key findings: the build configuration disables EGL and GLX support, which means the context-querying functions are compiled out entirely. The `coin_gl_current_context()` function returns NULL unconditionally rather than actually checking the graphics API state as the documentation suggests.

The warning at line 2377 comes from the `glGetError()` loop itself, not from `coin_gl_current_context()`, so fixing that function wouldn't eliminate the warning. There's also an internal inconsistency—if the assert at 2346 were triggered, execution would abort before reaching 2377, so both can't be observed together.

The claim is refuted: while the function does lack WebAssembly suppo  …
Fable
Verification complete. My findings: **Build configuration (confirmed):** `toolchain/configure-stage2.sh` builds with `-DCMAKE_BUILD_TYPE=Release` and `-DCOIN_BUILD_GLX=OFF -DCOIN_BUILD_EGL=OFF`. In `src/3rdParty/coin/CMakeLists.txt` (line ~234), `HAVE_EGL` is only set when `COIN_BUILD_EGL` is on; likewise `HAVE_GLX` requires `COIN_BUILD_GLX`. So in the wasm build **HAVE_EGL, HAVE_GLX, HAVE_WGL, HAVE_AGL/CGL are all undefined.** **Consequence for coin_gl_current_context (gl.cpp:5279-5314):** With every backend `#ifdef` compiled out, `ctx` stays `NULL` and the function returns `NULL` unconditionally. It does **not** call `eglGetCurrentContext()` or `glXGetCurrentContext()` — those lines are dead code in this build. The reviewer's evidence that it "queries EGL/GLX blind to emscripten's context" is factually wrong for the actual build. **The warning is not produced via coin_gl_current_context.** The reported text "Error when setting up the GL context" (gl.cpp:2377) is emitted by the `glGetError()` while-loop at 2374-2385, which never calls `coin_gl_current_context()`. `coin_gl_current_context()` is used only at gl.cpp:2345 (the assert) and in shader `isSupported()` gating (SoVertexShader.cpp:108, etc.). Making it return non-null would **not** touch the glGetError-driven warning path — so the proposed fix would not achieve its stated goal. **The assert path is compiled out.** Release mode defines `NDEBUG`, so the asserts at gl.cpp:2346 and 2391 (the only place the function's null-ness matters for setup) are no-ops. Additionally the claim is internally inconsistent: if the 2346 assert actually fired on NULL, execution would `abort()` there and never reach the postwarning at 2377 — you cannot observe both a "reported warning" and an assert-on-null as the same symptom. **What actually addresses the warning** is context currency via `fcWasmSyncGLContext()`/`ffSyncContext()` (WasmGLFixedFunc.cpp:207-224, called from QuarterWidget.cpp:1006), which makes emscripten's `GLctx` current so `glGetError`/`glGetString` operate on Qt's WebGL2 context — exactly the mechanism the reviewer dismisses. The only true kernel: `coin_gl_current_context()` does return NULL on wasm, which could gate Coin shader support off. But that is unrelated to the reported warning, unverified as an actual problem, and minor. The central causal claim (root of the warning, fix removes it, EGL/GLX misdetection) is contradicted by the code and build config.
Fable
⚙ StructuredOutput {"verdict": "REFUTED", "reason": "The build (toolchain/configure-stage2.sh) is Release with COIN_BUILD_EGL=OFF and COIN_BUILD_GLX=OFF, so HAVE_EGL/HAVE_GLX/HAVE_WGL are all undefined. coin_gl_current_context() (gl.cpp:5279) therefore return…
tool result
Structured output provided successfully