2016-06-14 3 views
0

Используя Emscripten, я пытаюсь скомпилировать ImpulseEngine project by Randy Gaul (C++) в программу JavaScript. Как только я запустил Emscripten, я последовал за учебником, описанным here. Я выполнил все шаги: Связывание .cpp-файлов с файлами .bc, а затем их компиляцию в .js.Компиляция C++ ImpulseEngine для JavaScript с Emscripten

Вот список команд, я побежал:

.cpp -> .bc:

emcc ImpulseEngine-master/main.cpp -o main.bc 
emcc ImpulseEngine-master/Scene.cpp -o Scene.bc 
emcc ImpulseEngine-master/Render.cpp -o Render.bc 
emcc ImpulseEngine-master/Precompiled.cpp -o Precompiled.bc 
emcc ImpulseEngine-master/Manifold.cpp -o Manifold.bc 
emcc ImpulseEngine-master/Collision.cpp -o Collision.bc 
emcc ImpulseEngine-master/Clock.cpp -o Clock.bc 
emcc ImpulseEngine-master/Body.cpp -o Body.bc 

.bc -> .js

emcc main.bc Scene.bc Render.bc Precompiled.bc Manifold.bc Collision.bc Clock.bc Body.bc -s LEGACY_GL_EMULATION=1 -o github/khanfusiion3.github.io/index.html 

Примечание опция -s LEGACY_GL_EMULATION=1: Это для включения функций OpenGL. Конечно, когда я выполнил команду, я все-таки получил несколько предупреждений о ненайденных символах, как показано здесь:

warning: unresolved symbol: glPointSize 
warning: unresolved symbol: glRasterPos2i 
warning: unresolved symbol: glutBitmapCharacter 
warning: unresolved symbol: glutBitmap9By15 

Теоретически программа потерпит неудачу в настоящее время, независимо от того, что произойдет дальше, но я пытался так или иначе. Он сразу же выбросил ошибку и вышел. Вот список каждой ошибки записываются в консоли:

WARNING: using emscripten GL emulation. This is a collection of limited workarounds, do not expect it to work.Module.printErr @ khanfusiion3.github.io/:1249 
khanfusiion3.github.io/:1249 WARNING: using emscripten GL emulation unsafe opts. If weirdness happens, try -s GL_UNSAFE_OPTS=0Module.printErr @ khanfusiion3.github.io/:1249 
khanfusiion3.github.io/:1249 pre-main prep time: 12 msModule.printErr @ khanfusiion3.github.io/:1249 
khanfusiion3.github.io/:1249 WARNING: using emscripten GL immediate mode emulation. This is very limited in what it supportsModule.printErr @ khanfusiion3.github.io/:1249 
khanfusiion3.github.io/:1249 missing function: glRasterPos2iModule.printErr @ khanfusiion3.github.io/:1249 
khanfusiion3.github.io/:1237 -1 
khanfusiion3.github.io/:1249 -1Module.printErr @ khanfusiion3.github.io/:1249 
khanfusiion3.github.io/:1249 warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demanglingModule.printErr @ khanfusiion3.github.io/:1249 
/index.js:1879 Uncaught abort(-1) at Error 
    at jsStackTrace (http://khanfusiion3.github.io/index.js:1060:13) 
    at stackTrace (http://khanfusiion3.github.io/index.js:1077:22) 
    at abort (http://khanfusiion3.github.io/index.js:25065:44) 
    at _glRasterPos2i (http://khanfusiion3.github.io/index.js:8051:58) 
    at __Z12RenderStringiiPKc (http://khanfusiion3.github.io/index.js:13374:2) 
    at Array.__Z11PhysicsLoopv (http://khanfusiion3.github.io/index.js:9462:2) 
    at dynCall_v (http://khanfusiion3.github.io/index.js:24605:30) 
    at Object.Runtime.dynCall (http://khanfusiion3.github.io/index.js:331:39) 
    at http://khanfusiion3.github.io/index.js:8107:21 
    at Object.Browser.mainLoop.runIter (http://khanfusiion3.github.io/index.js:1873:13) 

Я также попытался запустить его с опцией -s DEMANGLE_SUPPORT=1 но другие ошибки не остановить, так что до сих пор не удалось.

Любая помощь в том, что вызывает ошибки и как их исправить?

+0

Похоже, что символы glPointSize, glRasterPos2i, glutBitmapCharacter и glutBitmap9By15 не были решены. Как вы уже видели. – immibis

ответ

1

ImpulseEngine использует OpenGL, который представляет собой очень сложную программу API, предназначенную для доступа к графическому оборудованию через специальные драйверы. Драйверы и связанный с ними API недоступны в пределах окружения emscripten браузера; вы не собираетесь заставить его работать.

Если бы вы могли найти аналогичную библиотеку, предназначенную для SDL - широко используемой библиотеки, которая обеспечивает инкапсуляцию графических API более высокого уровня - вы можете перенести ее в emscripten, поскольку emscripten утверждает, что поддерживает SDL. В этом случае emscripten будет предоставлять более низкую реализацию графических вызовов SDL, переводя их в соответствующие API, совместимые с javascript.

+0

Хорошо, поэтому, если бы я отредактировал сам ImpulseEngine, все, что мне нужно было бы сделать, это изменить бит рендеринга, правильно? – Raiden

+0

@ Raiden Правильно - вы можете попробовать портировать его на SDL. – antlersoft

+0

Хорошо, не должно быть слишком сложно. В конце концов, это просто основные круги и линии. – Raiden