16/08/2012, aLynx теперь Open Source! Линк
31/05/2012, начиная с версии 1.02 используются исходники Handy 0.95, перипетии с GPL более не актуальны .
29/04/2012, совсем забыл про скриншоты, добавил.
Два месяца назад администратор форума emu-mobi.com - murrenna предложил мне портировать эмулятор Atari Lynx - Handy/SDL, использующий для ввода-вывода библиотеку SDL. Буквально на следующий день порт был готов. Но из-за того, что эмулятор был ориентирован на запуск из командной строки, не было ни меню, ни настроек, нельзя было выбрать ром (только переименовывать и помещать в нужную папку). Тогда я подумал что неплохо будет сделать версию без SDL, со стандартным GUI, за одно не будет лишним узнать об особенностях программирования под Android, использование в проекте JNI, OpenGL ES.
Подробный отчет о ходе работы можно почитать в теме по эмулятору. Тут лишь расскажу об основных возможностях и своими мыслями об программировании под Android.
Возможности:
- Работает на Android OS версии 2.1 и выше;
- Запуск ромов на полной скорости;
- Вывод звука;
- Возможность редактировать позиции на-экранных падов, позицию и размер выводимого изображения;
- Для ввода поддерживается мультитач, хардварные кнопки;
- Несколько типов рендеринга изображения (Canvas, OpenGL ES, OpenGL ES Native);
- Для улучшения или придание эффектов изображению можно использовать десяток фильтров (только в полной версии);
- Сохранение и загрузка игровых состояний в любое время (только в полной версии);
Когда начинал писать эмулятор ("эмулятор" конечно громко сказано, скорее всего GUI) обладал небольшими знаниями в Java и околонулевыми в программировании под Android (пара quick SDL портов не в счет), но в интернете очень много различной информации, так что с этим освоился достаточно быстро.
Сначала, в качестве рендера использовал OpenGL, но на PowerVR GPU ничего не рисовалось, пришлось перейти на Canvas. Потом я узнал в чем проблема - использование текстур не в степени двойки и добавил выбор рендера - Canvas/OpenGL. Так как при GL рендеринге нужно создавать новую текстуру каждый кадр - работал он не очень быстро и с рандомными подвисаниями (когда срабатывал сборщик мусора). Но картинку, даже не смотря на фильтры, он отрисовывал лучше, чем Canvas, нужно было искать как его ускорить. И вот, после очередного гугления, я наткнулся на интересную статью об нативном GL рендеринге. Это же как раз то, что нужно - нет необходимости передавать RGB565 массив изображения (Си->JNI->Java), размером 38кб, каждый кадр; работа с GL происходит в нативной части, то есть создание текстуры займет чуть меньше времени. Результат на лицо - вместо 15фпс стало 22! (все тестировал исключительно в эмуляторе). Так что в список рендеров вошел еще и нативный GL.
Так же мне хотелось бы высказаться об платной версии. Несмотря на то, что исходный код Handy/SDL открыт и распространяется под лицензией GPL, нигде я не нашел что исходные коды с этой лицензией запрещено включать в состав платных программ. А если не запрещено, то, стало быть, - можно. Чтение различной информации по этому вопросу так же подтвердило, что измененные исходные коды под GPL должны быть выложены на всеобщее обозрение или вручены покупателям приложения, по первому запросу. Я решил, что если кто-нибудь спросит - выложу измененные исходники, которые попадают под это требование. Исходники нативного GL рендеринга, а уж тем более Java части под это требование не попадают, так как написаны мной и уж тем более не под GPL лицензией :)
Скачать:
Так как рисовать я особо не умею - графика убогая, а пады в нативе, после преобразования из RGBA8888 в RGBA4444 становятся вообще неузнаваемые, может быть попозже ко мне придет просветление и я нарисую все на отлично.
А теперь слова благодарности - благодарю всех тех, кто принимал активное участие в обсуждениях о разработке эмулятора, активно тестировал тестовые сборки, выявлял различные ошибки. Вот их имена:
murrenna
PASHA
Ruzel
EXL
А вот и забытые скриншоты:
А вот и забытые скриншоты:
А в чем различия между платной и бесплатной версией?
ОтветитьУдалитьВ платной фильтры и сохранения, а так они полностью идентичны.
Удалитьну если не жалко, я-бы попросил выложить хотя-бы отдельные куски кода, которые ты используешь для рендеринга, если можно, буду благодарен, спасибо!
ОтветитьУдалитьА что конкретно интересует? Создание битмапа в Java части и копирование в него изображение из Си? Или как реализовать нативный GL рендеринг? По последнему постараюсь написать простенькую демку и залить исходники на гуглокод.
Удалитьво, спасибо(по второму пункту), именно рендеринг!!!
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьYou can get now get this app : Weatherback Wallpaper Apk
ОтветитьУдалитьNão está funcionando no Android 10
ОтветитьУдалить