在javascript和WebGL中创建纹理并在WebAssembly中标识它们

时间:2019-03-10 09:49:20

标签: javascript webgl webassembly

我想创建一些textures from HTMLVideoElement with WebGL并继续在WebAssembly部分中使用它们。由于emscripten_webgl_create_context,我正在使用某些上下文。

在OpenGL中,我可以使用glGenTextures创建纹理,并具有指向该纹理的指针。

有什么方法可以在Javascript部分(使用WebGL)中创建纹理,并通过有效的指针或其他指向WebAssembly部分的id来标识纹理?

1 个答案:

答案 0 :(得分:1)

只是个猜测,但我认为您需要修改Emscripten OpenGL源代码。如果看上去,您会看到WebGL对象与ID here相关联。您将需要添加一个函数以能够在此处注册外部JavaScript WebGL对象,或者需要添加一个函数以让C ++生成ID,然后从JavaScript中获取对象。

注意:您可以执行第二种操作(在C ++中创建对象,将其传递给JavaSCript)而无需更改脚本源的一种方法是在C ++中创建id,将其绑定,然后调用JavaScript并让JavaScript查询它。换句话说

 GLuint tex;
 glGenTextures(1, tex);
 glBindTexture(GL_TEXTURE_2D, tex);

..现在call some javascript function是您创建的。.

 function someJSFunction() {
   // look up the currently bound TEXTURE_2D
   const tex = gl.getParameter(gl.TEXTURE_BINDING_2D);
   ...

C ++中使用的ID被empscripten的OpenGL库锁定到WebGLTexture对象上,因此

 const id = tex.name

现在,您随时可以在引用纹理时将id传递回C ++

此外,使用上面的代码,您可以构建一个c ++函数,该函数在C ++中分配一个可以从JavaScript调用的纹理。由于它将留下刚创建的纹理,因此您可以查询纹理,如上所示。