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

gro*_*190 3 c++ sdl-image emscripten webassembly

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

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

挤满脚本时,图像是否会以某种方式“破裂”?

这是加载纹理的代码:

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);
Run Code Online (Sandbox Code Playgroud)

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

emcc --bind -s USE_SDL=2 -s USE_SDL_IMAGE=2 -o webapp.js src/webapp.cpp --preload-file resources
Run Code Online (Sandbox Code Playgroud)

启动Web应用程序时出现浏览器错误消息是

webapp.js:9533 WebGL:INVALID_VALUE:texImage2D:宽度或高度超出范围

这是有道理的,因为图像的分辨率是如此疯狂。

gro*_*190 5

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

emcc --bind -s USE_SDL=2 -s USE_SDL_IMAGE=2 -o webapp.js src/webapp.cpp --preload-file resources --use-preload-plugins
Run Code Online (Sandbox Code Playgroud)