Как загрузить текстуры с использованием SDL в проект WebAssembly с использованием emscripten?

Я пытаюсь загрузить текстуру в свое приложение, используя 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: ширина или высота вне диапазона

Что имеет смысл, так как разрешение изображения так безумно …

2

Решение

Оказывается, я должен был использовать --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
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]