PDA

Просмотр полной версии : Полезная информация для разработчиков игр под Brew



Xenocid
09.12.2002, 17:27
Tips for games and graphics in BREW on T720
I just spent a few days at the BREW labs at Qualcomm, and I learned several things (the hard way) about games and graphics in BREW. Here are the key points:
1. NEVER use any of the IGRAPHICS_xxx methods inside a game loop. One would expect that IDISPLAY_ClearScreen() and IGRAPHICS_ClearRect would operate at roughly the same speed, but it turns out that IGRAPHICS_ClearRect takes a whopping 150 msec to clear the screen! Poof, there goes your frame rate right there. IDISPLAY_ClearScreen() takes almost zero time by comparison.
2. Avoid image transparency at (almost) all cost. If you have any large transparent images, they will take forever to draw. It is much better to break up an image like this into several non-transparent images. Also note that BREW is not smart enough to figure out by itself whether the image is transparent. If you set the raster operation for IIMAGE_Draw() as IPARM_ROP=AEE_RO_TRANSPARENT, BREW will draw the image by checking each pixel for transparency, regardless of whether the image actually has transparent pixels. So only use this raster op for images that actually do have transparency.
In my game I have some transparent images representing game sprites, so transparency here could not be avoided. Typically it takes 10-30 msec to do transparent drawing of each sprite on the T720.
3. The timer implementation on the T720 is really screwed up. Just because you asked for a timer event 100 msec from now does not mean you will get one. In my original code that worked fine on the emulator, I would wait until the end of the timer callback to call SetTimer to ask for another timer callback for the next game frame. I asked for an amount of time equal to the frame rate (100 msec) minus the amount of time already spent executing the current game loop. This logic should give me a constant 100 msec frame rate, and in fact does just that in the emulator. But on the T720 device, this didn't work at all. I had to restructure my code so that I always called SetTimer again at the very begining of my timer callback. For some strange reason I still have not figured out (and the BREW labs engineers haven't figure out either), you cannot wait until the end of a timer callback to call SetTimer again. This works fine for animations without user input, but any user input ends up firing a whole bunch of EVT_KEY and EVT_KEY_HELD events that somehow block timer execution until the events are handled. This means that when you press a key, the game loop won't fire again until you release the key, ie the whole game freezes! I spent a good deal of time discussing this with the BREW lab people, who discussed it with Motorola who agreed that this was an issue with their (Motorola's) implementation of BREW on the T720. The timer issue was a nightmare to debug and to work around. What seemed to help get around the problem (in addition to moving SetTimer to the beginning of the timer callback rather than the end) was to check each EVT_KEY_HELD event and fire the timer callback anyway if 100 msec has passed since the last time the game timer callback was called. In other words, you can't always rely on the timer itself - sometimes you need to take advantage of a user event (like EVT_KEY_HELD) to check independently of the timer to see if it is now time to execute the callback.
4. As a general rule of thumb, the speed of running one game loop in the emulator running on a standard PC seems to be approximately twice the speed that you get on a real device. So if the emulator looks like it slow, the app on the phone (the T720) will run twice as slow as that. So a game loop on the emulator should only take 40-60msec worst case - otherwise the frame rate you get on the real phone will not be acceptable.

After working through all these issues in a series of nightmarish debugging sessions, I was finally able to get my game working on the T720. I could only get about 8 frames per second - specifically a frame rate of 120 msec was the best I could do. As a point of comparison, the J2ME game runs just fine on a Cingular (GSM) T720 at 10 frames per second (100 msec frame rate). J2ME of course was much easier to use to create the game, and unlike BREW all the J2ME APIs worked as advertised.

Hopefully this advice is useful to other game developers and will help you avoid BREW's undocumented pitfalls that result in many hours or days of wasted debugging. If anyone has any additional tips, I would certainly be interested in hearing about them.

dva
01.08.2003, 02:45
и что ?
и зачем это тут ?
пост взят с форума brew-ого !

хотите что-нить узнать про BREW спрашивайте -
скажем

HUGE
05.08.2003, 07:31
dva
а вот хотим :)

можешь в нескольких словах сказать, на что этот brew похож?
я, конечно сорри за такой дурацкий вопрос... просто времени нет внимательно читать, искать спецификации и пр... то, что глянул мельком на qualcomme - общие фразы "круто, переносимо, гибко" и прочая лажа.

Просто Т720ц есть, охота побаловаться. Баловацца Явой после установления факта "йопрст, работает" :) как-то неинтересно.

Вообще как оно работает... в итоге получается native-код процессора и некие стандаризированные интерфейсы должны быть предоставлены платформой телефона? (ну, этот вывод напрашивается из фразы "вообще мы ориентируемся на С/С++, но могем и с виртуальными машинами работать). Или все-таки как-то иначе?

HUGE
05.08.2003, 07:36
dva
да, вот еще вопрос... эти brew-приложения получается не заработают на девайсе без реальной сети да с передачей данных? будет грустно... есть у нас в конторе девайс для симуляции СДМА-ячейки, но, блин разбираться с ним...

dva
06.08.2003, 02:34
HUGE
работают ещё как !
заливаешь прогу по кабелю -
только где её возмешь ?
распр. они только через операторов -
если ты конечно не програмер ;)

dva
06.08.2003, 02:40
Сложно сказать на что похож -
на Symbian не похож,
на яву( мидлеты ) тем более.

Похож на прог-ние для виндовс немного -
обработчики событий -
большой switch =)
callback-и.

Програмировать не сложно -
куча станд-ых интерфейсов -
проблема только с глюками

BREW всё таки 1.1 а не 10.1 -
только вторая эволюция.

В общем есть спецификация например
T720 - где написано что поддерживается
что нет. взять её можно на brew extranet
( регистрация 400уёв ).

Сложно так что-то сказать - давай что нить
конкретнее.

HUGE
06.08.2003, 02:49
dva
да я-то как раз программер, иначе бы не задавал таких вопросов :)
а вот что я так и не понял, так это чем BREW тогда лучше Явы для разработчиков в плане (как где-то рядом было сказано) - гарантий оплаты? ИМХО, так же появятся варезные сайты, как они появились с краденными Ява-приложениями.

а вот вопрос "на что похож" действительно глуп получился :) Но любопытство вчера так раскорячило, что накачал вяких док, сэмплов. Прикольно. Моё впечатление - смесь Виндоуз 3.1 и СОМ :)

Попробую чё-нить простенькое наваять, просто для удовлетворения любопытства. А спецификации реализации BREW в Т720с я уж и за бесплатно... с моторолы стащу :)

Спасибо!

dva
06.08.2003, 22:10
не появятся таки сайты ?
во первых где ты возмёшь BREW приложения ?
они распространяются только через оператора -
и при загрузки будут работать только на твоём
теле ( id по ECN ).
вот и всё - единственный вариает получить
приложение "на халяву" - это любезно попросить
у разработчика - и если он согласится вам всё
равно придётся создавать sig файл что апп
пошёл на вашем теле( по ECN и набору файлов )
в тестовом режиме.

Замечу создать sig файл дело долгое и многоступенчатое.
Вывод: фиг вам - хотите - платите.

На счёт спецификаций - врядли ты найдёшь бесплатную
доку где укажут какие интерфейсы поддерживаются -
known issues - и т.п. Хотя может я и не прав.

Прикольного на самом деле в програмировании для BREW -
больше проблем с багами

HUGE
07.08.2003, 02:44
dva
Как откуда я возьму BREW приложения? А откуда берутся ломанные программы на ПК? Кто-то купил, кто-то сломал, кто-то выложил (блин, зачем людям этот головняк нужен? не пойму).
BREW приложение читается с телефона элементарно; не думаю, что защиты ставят супер-пупер, скорей всего просто надеются, что пока этим никто не станет заниматься (ну да, ломать игрушку за 3 бакса - кому это надо? для самоутверждения только что). А что такое sig файл, я еще не знаю :)

На счёт спецификаций - врядли ты найдёшь бесплатную
доку где укажут какие интерфейсы поддерживаются -
known issues - и т.п. Хотя может я и не прав.

Ну, я же не сказал, что в открытых источниках :) По реализации BREW в Т720с я уже нарыл кучку, просто пока продерусь через завалы... блин, еще в понедельник про BREW знал только что он есть, а тут чё-то любопытство раскорячило :)

Прикольного на самом деле в програмировании для BREW -
больше проблем с багами
Это по опыту или "чиста-теоретически"? И в чем по сути проблем больше? В отсутствии полноценной отладки на реальном дивайсе?

dva
07.08.2003, 12:09
опять же что б посмотреть на сколько там крута защита
нужно быть как минимум в США.
Так что тут бесмыслено говорить.

про завалы...
советую самый завальный... brewforum.quaclomm.com

по опыту. проблем хватает во всём - как правило в кривой
реализайии BREW на телефоне - например на t720.
кстати есть прикольный девайс стоимостью в 4500уёв -
апаратный debug - коробочка такая - позволяет смотреть
перем. останавливать прогу - то есть дебагать.
Что касается дебуга для народа - это Logger - то что
ты делаешь DBGPRINT - выводится туда - оч удобно -
особых проблем с тестингом нет.

про SIG почитай - ничего нет сложно.
предвижу вопрос про ECN - он под батарейкой
или в меню телефона

dva
07.08.2003, 12:12
почитай пост первый - там как раз о кривой реализации и вообще о траблах.
Похоже из brew програмеров на весь ussr тока ты-я-xenoid
и всё. Где остальные то ?

HUGE
11.08.2003, 07:01
dva
нужно быть как минимум в США.
да енто-то не проблемы.... от моей конторы несколько человек программеров сейчас в штатах сидят...

а про логгер и ECN я в курсе - первый все же не очень удобен, а второй и поменять не долго :)

А еще ГСМ-версию у нас симулировать умеют, да с нормальным дебаггером, вот только медленно. Может и ЦДМА сумеют - все дешевле "коробочки", правда это и софт закрытый.

Похоже из brew програмеров на весь ussr тока ты-я-xenoid
и всё. Где остальные то ?
Ну дык у нас о операторов соответствующих нет, вы бы не написали, и я бы не заинтересовался :)

dva
18.08.2003, 11:23
всё CDMA-450 операторы будут осваивать BREW в недалёком будущем, SkyLink например,
и будет спрос на BREW програмеров.

Crash
03.09.2003, 11:01
DVA
Вы смогли напрямую научиться писать в видеопамять?

dva
04.09.2003, 00:37
не скажу

Crash
07.09.2003, 12:28
Мне неинтересно было, как это сделано ;)), с приведением строчек асма для конкретных "железок".
"Сквозит" детским садом в твоих словах ;).

Было просто интересно - Да или Нет ;)


P.S.: кстати, ты не один разработчик под Brew на пространствах eX-USSR. Можешь поинтересоваться у Xenocid'a, сколько их примерно. Он один из немногих, обладающих тайным знанием Дао в этих областях :)

masta-smooky
08.11.2006, 00:35
Люди может кто подскажет какую нибудь статейку о том как программировать на BREW желательно на русском, а то задание на роботе дали научиться а я по SDK никак не могу понять ничего