WebGL + SDL + Emscripten

В итоге я портировал Мику на WebGL, с помощью SDL 1 и Emscripten.

Дальше я опишу что нужно было изменить в коде чтобы сборка в JavaScript завершилась успешно.

  1. Использовать SDL 1 вместо SDL 2. На данный момент существует порт SDL 2 для emscripten, однако использовать встроенный в emscripten SDL 1 я посчитал более целесообразным. Инициализация контекста происходит не в окне, а с помощью SDL_SetVideoMode и флага SDL_OPENGL. Отрисовка буфера производится командой SDL_GL_SwapBuffers()
  2. Из-за особенностей выполения циклов в JavaScript – рендеринг вынесен в отдельную функцию и его периодический вызов проставляется с помощью функции emscripten_set_main_loop
  3. Также сборку нужно осуществлять с ключом “-s FULL_ES2=1
  4. Пришлось отказаться от библиотеки assimp, от загрузки модели из файловой системы, от загрузки текстуры с диска. Все необходимые буферы были прогружены на деcктоп версии, и прокинуты в c-header файл для сборки с помощью emscripten.

Код:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/9-sdl-gles-obj-textured-assimp-miku-webgl/mikuWebGL

Статьи:
http://blog.scottlogic.com/2014/03/12/native-code-emscripten-webgl-simmer-gently.html
https://kripken.github.io/emscripten-site/docs/porting/multimedia_and_graphics/OpenGL-support.html

Модель:
https://sketchfab.com/models/7310aaeb8370428e966bdcff414273e7

Bad Robots на WebGL на базе ThreeJS

Сегодня выходит версия игры Bad Robots на эксперементальном WebGL рендере на базе библиотеки  ThreeJS.
Это первая OpenGL (WebGL) игра на движке Flame Steel Engine.
Вы можете поиграть в нее по ссылке:
http://demensdeum.com/games/BadRobotsGL/

Исходный код IOSystem на базе ThreeJS доступен здесь:
https://github.com/demensdeum/FlameSteelEngineGameToolkitWeb

Bad Robots – HTML 5 Игра

Первая игра на движке Flame Steel Engine.

http://demensdeum.com/games/BadRobots/BadRobots.html

Перестреляй всех роботов на экране!

Авторы:

Анимация робота – http://opengameart.org/content/xeon-ultimate-smash-friends
Музыка – Killers Kevin MacLeod (incompetech.com)

Исходный код:

https://github.com/demensdeum/BadRobots
https://github.com/demensdeum/FlameSteelEngine
https://github.com/demensdeum/FlameSteelEngineGameToolkit