Есть вот такой стандартный макрос в FASM resource Смысл в том, что у меня в ресурсах будет много картинок и я сделал вот так: Код (Text): NUMBER_OF_FRAMES equ 48 START_FRAME equ 0 rept NUMBER_OF_FRAMES num:1 { ID_IMAGE#num = ID_BASE_FRAME+num-1 resdata _img#num file 'images/'#`num#'.jpg' endres } resource _images,\ ID_IMAGE1,LANG_NEUTRAL,_img1,\ ID_IMAGE2,LANG_NEUTRAL,_img2,\ ID_IMAGE3,LANG_NEUTRAL,_img3,\ ID_IMAGE4,LANG_NEUTRAL,_img4,\ ID_IMAGE5,LANG_NEUTRAL,_img5,\ ID_IMAGE6,LANG_NEUTRAL,_img6,\ ID_IMAGE7,LANG_NEUTRAL,_img7,\ ID_IMAGE8,LANG_NEUTRAL,_img8,\ ID_IMAGE9,LANG_NEUTRAL,_img9,\ ID_IMAGE10,LANG_NEUTRAL,_img10,\ ID_IMAGE11,LANG_NEUTRAL,_img11,\ ID_IMAGE12,LANG_NEUTRAL,_img12,\ ID_IMAGE13,LANG_NEUTRAL,_img13,\ ID_IMAGE14,LANG_NEUTRAL,_img14,\ ID_IMAGE15,LANG_NEUTRAL,_img15,\ ID_IMAGE16,LANG_NEUTRAL,_img16,\ ID_IMAGE17,LANG_NEUTRAL,_img17,\ ID_IMAGE18,LANG_NEUTRAL,_img18,\ ID_IMAGE19,LANG_NEUTRAL,_img19,\ ID_IMAGE20,LANG_NEUTRAL,_img20,\ ID_IMAGE21,LANG_NEUTRAL,_img21,\ ID_IMAGE22,LANG_NEUTRAL,_img22,\ ID_IMAGE23,LANG_NEUTRAL,_img23,\ ID_IMAGE24,LANG_NEUTRAL,_img24,\ ID_IMAGE25,LANG_NEUTRAL,_img25,\ ID_IMAGE26,LANG_NEUTRAL,_img26,\ ID_IMAGE27,LANG_NEUTRAL,_img27,\ ID_IMAGE28,LANG_NEUTRAL,_img28,\ ID_IMAGE29,LANG_NEUTRAL,_img29,\ ID_IMAGE30,LANG_NEUTRAL,_img30,\ ID_IMAGE31,LANG_NEUTRAL,_img31,\ ID_IMAGE32,LANG_NEUTRAL,_img32,\ ID_IMAGE33,LANG_NEUTRAL,_img33,\ ID_IMAGE34,LANG_NEUTRAL,_img34,\ ID_IMAGE35,LANG_NEUTRAL,_img35,\ ID_IMAGE36,LANG_NEUTRAL,_img36,\ ID_IMAGE37,LANG_NEUTRAL,_img37,\ ID_IMAGE38,LANG_NEUTRAL,_img38,\ ID_IMAGE39,LANG_NEUTRAL,_img39,\ ID_IMAGE40,LANG_NEUTRAL,_img40,\ ID_IMAGE41,LANG_NEUTRAL,_img41,\ ID_IMAGE42,LANG_NEUTRAL,_img42,\ ID_IMAGE43,LANG_NEUTRAL,_img43,\ ID_IMAGE44,LANG_NEUTRAL,_img44,\ ID_IMAGE45,LANG_NEUTRAL,_img45,\ ID_IMAGE46,LANG_NEUTRAL,_img46,\ ID_IMAGE47,LANG_NEUTRAL,_img47,\ ID_IMAGE48,LANG_NEUTRAL,_img48 directory RT_RCDATA,_images Так всё работает, но я никак не могу сократить блок в макросе resource, чтобы не писать руками строки Код (Text): D_IMAGExx,LANG_NEUTRAL,_imgxx Пытался сделать так: Код (Text): rept NUMBER_OF_FRAMES num:1 { _img_rsrc#num equ ID_IMAGE#num,LANG_NEUTRAL,_img#num } И затем что-то типа Код (Text): resource _images,\ rept NUMBER_OF_FRAMES num:1 { _img_rsrc#num } Но так понятно что не получится. И я решил переписать стандартный макрос resource. чтобы он принимал следующие параметры Код (Text): macro resource2 dir,count,id_prefix,lang,label_prefix { ... } resource2 _images,NUMBER_OF_FRAMES,`ID_IMAGE,LANG_NEUTRAL,`_img Если кто-нибудь может подсказать как реализовать, то было бы замечательно. Мне это чисто для интереса, а то я в макросах FASM'а я никак не могу толком разобраться.
В общем так и не сделал я макрос. А надо это было для своего старого примера, который нашел и решил доработать. Вышел из ситуации тем, что тулзу сделал, которая генерит инклуд. Красивая анимация и музыка на фасме в аттаче. А еще есть вопрос, может кто знает какой таймер лучше всего использовать для отрисовки изображения. Я решил испробовать CreateTimerQueueTimer, но что лучше в данном случае. И второй вопрос как лучше оптимизировать прогу, чтобы она не грузила процессор (хоть и не сильно). Если загрузить все фреймы заранее, то опять оперативку выжирает.
Тупой совет : подгружаешь только следующую картинку. Таймер прошел , выдаешь готовое и грузишь следующую. Конвеер это называется, правда говорят, что до Форда его изобрели... Если 1 не прокатит, то 2 и т.д.
хм. можно. готовить данные еще в одном потоке, чтобы время выполнения потока отрисовки не увеличивалось на время, которое необходимо, чтобы подгрузить данные. но походу больше всего тормозится, просто когда данные декодируются из JPEG в BITMAP и помоему конвеер тут ничего не даст... или я чего-то не догоняю? вот для интереса заменил картинки на BMP в этом примере вообще не грузит (~2-3%), а так на моем проце около 15-20% загрузка. а если заранее грузить скажем по 10 фреймов то тоже не вижу решения ибо время на загрузку 10 фремов уйдет прилично а буфер не успеет пополняться. как-то бы видеопамять использовать что-ли я в этом вопросе вообще нуб.