Я пытаюсь загрузить текстуру в свое приложение, используя SDL. При сборке как нативное приложение работает как надо. Но когда я создаю его с помощью Emscripten, текстура не может быть загружена.
Ширина текстуры изображения 64 пикселей, которые я могу проверить, распечатав w
член экземпляра SDL_Surface. Но когда я пытаюсь распечатать тот же элемент в приложении 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: ширина или высота вне диапазона
Что имеет смысл, так как разрешение изображения так безумно …
Оказывается, я должен был использовать --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
Других решений пока нет …