【问题标题】:WebGLBuffer object and OpenGL buffer handle interop between JavaScript and C++WebGLBuffer 对象和 OpenGL 缓冲区句柄 JavaScript 和 C++ 之间的互操作
【发布时间】:2020-03-03 12:13:55
【问题描述】:

我想使用 spector.js metadata API 来简化使用 emscripten 从 C++ 编译的 WebGL 应用程序的调试。 Spector.js API 需要通过 WebGL API 创建的 JavaScript WebGLBuffer 对象。问题是如何从使用原始 OpenGL 句柄操作的 C++ 端获取它们。 我看到两个选项:

  1. 通过 emscripten C++JS API 为 js 提供 gl 缓冲区句柄,并以某种方式从它们创建 WebGL 对象
  2. 在 js 端创建 WebGLBufers 并通过 C++JS API 为 C++ 提供句柄

第一个选项的问题是我找不到从原始 OpenGL 缓冲区句柄创建 WebGLBuffer 的方法。 第二个选项的问题是我看不到任何方法可以从 js WebGLBuffer 对象获取原始 gl 缓冲区句柄以将其转发到 C++ 代码。

也许还有其他选择?

【问题讨论】:

    标签: javascript c++ webgl emscripten


    【解决方案1】:

    增强 emscripten 库。 WebGLObjects 在这里被跟踪

    https://github.com/emscripten-core/emscripten/blob/46df50cfd170521d91a31e0a74f2dfdeb4522968/src/library_webgl.js#L112

    例如

      javascriptWebGLBuffer = $GL.buffers[openGLBufferId];
    
      openglBufferId = $GL.buffers.indexOf(javascriptWebGLBuffer);
    

    另请参阅 _glGenObjectits usage,了解如何为 JavaScript 和 C++ 生成新的 WebGLBuffer

    您可以在该文件中插入spector。

    您可以使用--js-library path-to-file来使用您修改后的库来使用它

    【讨论】:

    • 感谢您的回复!我试过了会尽快报告的。
    • 好的,我看看如何在那里注入spector。但是我不太明白如何从我添加的 js 库中访问 $GL。
    • 无需深入研究,在库中的某处添加一行 window.gl = $GL 将是一种解决方案
    • 所以修改emscripten js库是一种方法。不完美,但可以解决问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多