gpt4 book ai didi

canvas - 如何在emscripten中使用 Canvas

转载 作者:行者123 更新时间:2023-12-03 21:44:16 26 4
gpt4 key购买 nike

我正在开发一个 webassembly 程序。
我可以使用 emscripten_set_canvas_size 设置 Canvas 大小(我一直读到我需要切换到新的 API,因为这个 API 会贬值)...

但我的问题是:如何在所述 Canvas 上设置像素?
我的程序为 Canvas 生成了一个 32 位颜色的数组,我需要将这些位从我的内部存储器传输到 Canvas 。我怎样才能做到这一点?

或者,如果我可以获取指向 Canvas 数据的内存指针,我可以直接在所述内存中写入...

如果可能的话,我想这样做而不必求助于任何其他 API(GL、SDL ......),我所需要的只是尽快将颜色传输到 Canvas 上......仅此而已。

理想情况下,我正在寻找一个简短的示例程序:

#include <...>
uint32_t screen[320*320];
static void main_loop()
{
memset(screen, 0, 320*320*4); // Clear screen
for (int x=0; x<320; x++)
for (int y=0; y<320; y++)
screen[320*(x|y) + (x&y)]= 0xffffff; // set pixel(x or y, x and y) to white... (will draw a serpinsky triangle)
Copy_ToCanvas(screen); // THIS IS THE FUNCTION THAT I AM LOOKING FOR
}

int main()
{
emscripten_set_canvas_size(320, 320);
emscripten_set_main_loop(main_loop, 100, true);
return 0;
}

谢谢,
西里尔

最佳答案

如果没有 SDL,则需要低级代码。

void Copy_ToCanvas(uint32_t* ptr, int w, int h) {
EM_ASM_({
let data = Module.HEAPU8.slice($0, $0 + $1 * $2 * 4);
let context = Module['canvas'].getContext('2d');
let imageData = context.getImageData(0, 0, $1, $2);
imageData.data.set(data);
context.putImageData(imageData, 0, 0);
}, ptr, w, h);
}

static void main_loop()
{
memset(screen, 0, 320*320*4); // Clear screen
for (int x=0; x<320; x++)
for (int y=0; y<320; y++)
screen[320*(x|y) + (x&y)]= 0xffffffff; // set pixel(x or y, x and y) to white... (will draw a serpinsky triangle)
Copy_ToCanvas(screen, 320, 320);
}

关于canvas - 如何在emscripten中使用 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50819974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com