我想创建一些textures from HTMLVideoElement with WebGL并继续在WebAssembly部分中使用它们。由于emscripten_webgl_create_context,我正在使用某些上下文。
在OpenGL中,我可以使用glGenTextures创建纹理,并具有指向该纹理的指针。
有什么方法可以在Javascript部分(使用WebGL)中创建纹理,并通过有效的指针或其他指向WebAssembly部分的id来标识纹理?
答案 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调用的纹理。由于它将留下刚创建的纹理,因此您可以查询纹理,如上所示。