c++ - 如何使用 SDL 将纹理加载到使用 emscripten 的 WebAssembly 项目中?

标签 c++ emscripten sdl-image webassembly

我正在尝试使用 SDL 将纹理加载到我的应用程序中。当构建为 native 应用程序时,它可以正常工作。但是当我用 Emscripten 构建它时,无法加载纹理。

纹理图像的宽度是64 像素,我可以通过打印SDL_Surface 实例的w 成员来验证这一点。但是当我尝试在 WebAssembly 应用程序中打印出相同的成员时,它会产生 5076...

当用 emscripten 打包时,图像会以某种方式“损坏”吗?

这是加载纹理的代码:

SDL_Surface *image = IMG_Load("resources/binaries/crate.jpg");
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
std::cout << image->w << std::endl;
glTexImage2D(GL_TEXTURE_2D, 0, 3, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, image->pixels);

这是使用 Emscripten 构建网络应用程序的命令

emcc --bind -s USE_SDL=2 -s USE_SDL_IMAGE=2 -o webapp.js src/webapp.cpp --preload-file resources

我在启动网络应用程序时收到浏览器的错误消息是

webapp.js:9533 WebGL: INVALID_VALUE: texImage2D: width or height out of range

这是有道理的,因为图像的分辨率太疯狂了......

最佳答案

原来我必须在执行 emcc 时使用 --use-preload-plugins 来创建预加载文件。最后,命令如下所示:

emcc --bind -s USE_SDL=2 -s USE_SDL_IMAGE=2 -o webapp.js src/webapp.cpp --preload-file resources --use-preload-plugins

关于c++ - 如何使用 SDL 将纹理加载到使用 emscripten 的 WebAssembly 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566846/

相关文章:

c++ - 如何从二进制数据调用函数

c++ - 让 GDC 前端发出中间 C/C++ 代码?

c++ - 为什么在 shell 中运行的可执行文件在崩溃时输出到 stdout 而不是 stderr?

emscripten - 如何在 Wasm 中实现 "malloc"

c++ - const定义疑惑

c++ - Emscripten + Visual Studio + 静态库

python - 将 Python 编译为 WebAssembly

c++ - 如何修复这个执行错误?

sdl - SDL2 中的纹理渐变 - 使用 SDL_image

c++ - SDL 表面像素格式转换