Всем привет!
Нужна помощь в запуске NMETemplate на Witstech A81E.
После выполнения следующей команды:
haxelib run nme test NMETemplate.nmml android
проект полностью собирается, заливается и устанавливается на девайсе, запускается, показывает только один кадр (даже с текстурами) и вылетает :( Я не разбираюсь в отладке под андройдом :( но очень бы хотел запустить NME на девайсе... Вот тут выложил лог того, что пишется в командной строке CMD
РЕШЕНО
Ну что же, отличная новость - я запустил проект после довольно глубокой отладки :)
Проблема была в nme, в частности в файле NME_SOURCE/project/android/AndroidFrame.cpp есть следующая функция (вызываемая в методе onPoll через кучу всяких других методов, который я так и не понял к чему):
{
jclass cls = gEnv->FindClass("org/haxe/nme/MainView");
jmethodID mid = gEnv->GetStaticMethodID(cls, "renderNow", "()V");
if (mid == 0)
return;
gEnv->CallStaticObjectMethod(cls, mid );
}
Тут явное не соответствие искомой функции, которая является static и возвращает void и того, что вызывается через JNI с помощью метода CallStaticObjectMethod, которая в качестве id вызываемого метода должна принимать статический метод, возвращающий java объект. Именно на эту штуку у меня ругался log в виде WARNINGа, но почему то я не придал этому значения, видимо не знал как всё тут устроено. И видимо из-за такого несоответствия типов на моём планшете происходил вылет виртуальной машины :( Решение простое:
{
jclass cls = gEnv->FindClass("org/haxe/nme/MainView");
jmethodID mid = gEnv->GetStaticMethodID(cls, "renderNow", "()V");
if (mid == 0)
return;
gEnv->CallStaticVoidMethod(cls, mid);
}
Т.е. просто заменяем CallStaticObjectMethod на CallStaticVoidMethod, перекомпилируем nme и радуемся невылетающим приложением на Witsteh A81E :)
issues в трекере NME
отлично! спасибо за это исследование, может оказаться полезным.
подумал, что если это действительно причина, то ее стоит запостить в виде патча или хотя-бы просто issue в баг-трекер NME. полез туда посмотреть, нет ли уже чего-то подобного и увидел, что 30 августа некто Mihail Ivanchev уже опубликовал там связанные с этой темой сообщения 132 и 133. Если это ты и есть, то спасибо еще раз.
re
:) нет, это не я... публикация в issues как-то долго рассматривается. Я написал о решении проблемы на форуме, и Joshua уже всё поправил в svn. А вот то, что nme теперь ещё и в эмуляторе можно запустить, поправив некоторые функции в OpenGL, дак это вообще отлично! :)
Да, сейчас со
На сколько я понимаю тему - есть софтварный рендерер opengl, а так как на вашем устройстве стоит Android(основанный на Linux), то за связь с ogl должен отвечать именно он и драйвера под него. Поищите драйвера нормальные или еще что. Это мое мнение, хотя я немного и не в теме моб. устройств. Спецы на англоязычных форумах вам лучше подскажут.
re
Я тоже не особо в теме мобильных устройств :( Спецы пока молчат. И драйвера у устройства в принципе рабочие, т.к. и 3д игры запускаются с opengl и примеры из MoSync без проблем.
opengl java рендерер
nme последней версии ? Нужно смотреть исходники рендерера на яве. Попробуйте их как-то откопать и выложить сюда. Я гляну. У меня нет девайса на андроиде, поэтому только так могу помочь вам. Надо локализировать проблему, для этого сейчас попробуйте просто вывести один фрейм и все, без никаких изменений контента во фрейме, если пройдет без проблем, то попробуйте вывести линию, потом - анимацию их двух фреймов. (программную анимацию). Постепенно вы сможете выявить условия для появления ошибки. Отпишитесь. пожалуйста, о результатах. Это будет всем интересно.
Нашел инфу что
Нашел инфу что это может зависеть от кастомной темы на устройстве, попробуйте проверить на теме по дефолту.
+ в придачу
+ в придачу такое может быть если opengl поддерживается только ограниченно
re
Спасибо :) Постараюсь в ближайшее время поотлаживать приложение... тема дефолтная, насчёт полной поддержки не знаю.... результаты, какие бы они не были, выложу :) Вчера полазил по ява-коду и чуть подебажил, но так пока и не понял откуда вылетает, т.к. дебаггер для меня новый, по сравнению с VC++ показался не совсем удобным, хотя может и мало разобрался ещё. По логу дак вроде вылетает в native коде, который генерит android-ndk, вот с помощью него и надо бы научиться дебажить такие штуки
Мне эта тема
Мне эта тема очень интересна так как я собираюсь писать декстоп приложение на haxe и aswing. Так что жду результатов.
OpenGL
У меня как такового готового проекта сейчас нет, как раз ищу кроссплатформенный движок для его создания, и nme меня полностью устраивает, кроме вот такого поведения на моём девайсе :(
Возможно действительно что-то с OpenGL (хотя вот тут есть инфа о возможностях девайса: http://www.glbenchmark.com/phonedetails.jsp?benchmark=glpro20&D=Witstech... - и там вроде как приличная аппаратная поддержка). Даже все семплы с графикой из MoSync запускаются... При тестировании я ведь всё равно вижу один кадр приложения, значит, возможно, проблема при свопе буферов. Меня напрягла вот эта строчка из лога, которая регулярно повторяется:
E/libEGL ( 1166): eglSetSwapRectangleANDROID:1759 error 3008 (EGL_BAD_DISPLAY)Покопавшись в исходниках nme нашёл папочку SoftwareRender - вот интересно, можно ли его включить как-то ручками?
И вообще, как отлаживать приложения под андройдом, сгенеренные с помощью haxe и nme? там вроде как файла проекта eclipse даже нет.
re: OpenGL
как нет то? всегда есть. только не файл, а папка со стандартной для android-проекта структурой. в случае твоего примера с NMETemplate это ...\Export\android\bin. Из нее создаешь проект в Eclipse, запускаешь и смотришь logcat.
p.s. а под готовым проектом я имел в виду не твой личный проект, а законченный тьютор Граника. у него в zip же только темплейт, а как написать на его основе проект он в видео показывает. ты же писал что какие-то "текстуры" видишь, из чего я предположил, что ты что-то поверх этого темплейта делал.
re
О, отлично, попробую поотлаживать тогда, может накопаю чего :) спасибо :)
ps. понял :) я просто текстуры туда подобавлял чтобы рисовались, при компиляции флэш и cpp они выводятся на экран нормально; на девайсе вижу только один кадр с ними, после чего сразу вылетает... проблема явно не в них, т.к. валится даже на пустом темплейте
openGL?
исходя из того, что вылет похоже происходит вот здесь:
I/dalvikvm( 2379): at org.haxe.nme.MainView$1.run((null):-1)
I/dalvikvm( 2379): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1295)
I/dalvikvm( 2379): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116)
I/dalvikvm( 2379):
E/dalvikvm( 2379): VM aborting
**** ...
можно предположить что на твоем девайсе (никогда ранее, кстати, не слышал даже о производителе таком) что-то с поддержкой openGL (в эмуляторе ее тоже нет, по крамере по умолчанию, как я уже писал ранее). в спецификациях девайса по твоей ссылку ничего про это не сказано, но некоторые места в них усиливают подозрения.
я бы попробовал запустить завершенный проект на своем Acer, если бы он (проект) был в готовом виде (сам темплейт, как уже писал ранее запускается без проблем). на написание по этому тьютору честно говоря нет ни времени, ни особого интереса, я предпочитаю тестить на сэмплах из gm2d либо на своих тестах с его же использованием.
а вот какой вопрос вызывает интерес и я сам не знаю пока на него ответа - как выключить использование OpenGL из NME-проекта? (почти уверен что это можно сделать, как минимум в сгенеренном Android-проекте, но это было бы не гибким решением ). ответ на него, если найдется, возможно поможет и тебе запускать NME-проекты на своем девайсе.
Отправить комментарий