nyamadan.github.io

Emscriptenに実装されていないWebGLメソッドを呼ぶ

2020年5月10日

glGetBufferSubDataを使いたかったがEmscriptenに実装がなかった。

Issueが作られてて、 EM_ASM を使えば呼び出せると書かれていたのでこれを使うことにした。

auto size = bufferWidth * bufferHeight * 4;
auto ptr = std::make_unique<uint8_t[]>(size);
EM_ASM({
    Module.ctx.getBufferSubData(
        Module.ctx.PIXEL_PACK_BUFFER,
        0,
        HEAPU8.subarray($0, $0 + $1));
}, ptr.get(), size);

本当はglMapBufferRangeを使いたかったんだけど、これはWebGLでは使えない

やむなくこの部分だけ getBufferSubData で代替することにした。

ときどきふむなぁ、こういうの。