Модификая макроса resource в FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем BaGiE, 8 янв 2010.

  1. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Есть вот такой стандартный макрос в FASM resource

    Смысл в том, что у меня в ресурсах будет много картинок и я сделал вот так:
    Код (Text):
    1.      NUMBER_OF_FRAMES equ 48
    2.      START_FRAME equ 0
    3.  
    4.      rept NUMBER_OF_FRAMES num:1 {
    5.           ID_IMAGE#num = ID_BASE_FRAME+num-1
    6.           resdata _img#num
    7.                   file 'images/'#`num#'.jpg'
    8.           endres
    9.      }
    10.  
    11.      resource _images,\  
    12.                ID_IMAGE1,LANG_NEUTRAL,_img1,\
    13.                ID_IMAGE2,LANG_NEUTRAL,_img2,\
    14.                ID_IMAGE3,LANG_NEUTRAL,_img3,\
    15.                ID_IMAGE4,LANG_NEUTRAL,_img4,\
    16.                ID_IMAGE5,LANG_NEUTRAL,_img5,\
    17.                ID_IMAGE6,LANG_NEUTRAL,_img6,\
    18.                ID_IMAGE7,LANG_NEUTRAL,_img7,\
    19.                ID_IMAGE8,LANG_NEUTRAL,_img8,\
    20.                ID_IMAGE9,LANG_NEUTRAL,_img9,\
    21.                ID_IMAGE10,LANG_NEUTRAL,_img10,\
    22.                ID_IMAGE11,LANG_NEUTRAL,_img11,\
    23.                ID_IMAGE12,LANG_NEUTRAL,_img12,\
    24.                ID_IMAGE13,LANG_NEUTRAL,_img13,\
    25.                ID_IMAGE14,LANG_NEUTRAL,_img14,\
    26.                ID_IMAGE15,LANG_NEUTRAL,_img15,\
    27.                ID_IMAGE16,LANG_NEUTRAL,_img16,\
    28.                ID_IMAGE17,LANG_NEUTRAL,_img17,\
    29.                ID_IMAGE18,LANG_NEUTRAL,_img18,\
    30.                ID_IMAGE19,LANG_NEUTRAL,_img19,\
    31.                ID_IMAGE20,LANG_NEUTRAL,_img20,\
    32.                ID_IMAGE21,LANG_NEUTRAL,_img21,\
    33.                ID_IMAGE22,LANG_NEUTRAL,_img22,\
    34.                ID_IMAGE23,LANG_NEUTRAL,_img23,\
    35.                ID_IMAGE24,LANG_NEUTRAL,_img24,\
    36.                ID_IMAGE25,LANG_NEUTRAL,_img25,\
    37.                ID_IMAGE26,LANG_NEUTRAL,_img26,\
    38.                ID_IMAGE27,LANG_NEUTRAL,_img27,\
    39.                ID_IMAGE28,LANG_NEUTRAL,_img28,\
    40.                ID_IMAGE29,LANG_NEUTRAL,_img29,\
    41.                ID_IMAGE30,LANG_NEUTRAL,_img30,\
    42.                ID_IMAGE31,LANG_NEUTRAL,_img31,\
    43.                ID_IMAGE32,LANG_NEUTRAL,_img32,\
    44.                ID_IMAGE33,LANG_NEUTRAL,_img33,\
    45.                ID_IMAGE34,LANG_NEUTRAL,_img34,\
    46.                ID_IMAGE35,LANG_NEUTRAL,_img35,\
    47.                ID_IMAGE36,LANG_NEUTRAL,_img36,\
    48.                ID_IMAGE37,LANG_NEUTRAL,_img37,\
    49.                ID_IMAGE38,LANG_NEUTRAL,_img38,\
    50.                ID_IMAGE39,LANG_NEUTRAL,_img39,\
    51.                ID_IMAGE40,LANG_NEUTRAL,_img40,\
    52.                ID_IMAGE41,LANG_NEUTRAL,_img41,\
    53.                ID_IMAGE42,LANG_NEUTRAL,_img42,\
    54.                ID_IMAGE43,LANG_NEUTRAL,_img43,\
    55.                ID_IMAGE44,LANG_NEUTRAL,_img44,\
    56.                ID_IMAGE45,LANG_NEUTRAL,_img45,\
    57.                ID_IMAGE46,LANG_NEUTRAL,_img46,\
    58.                ID_IMAGE47,LANG_NEUTRAL,_img47,\
    59.                ID_IMAGE48,LANG_NEUTRAL,_img48
    60.  
    61.      directory RT_RCDATA,_images
    Так всё работает, но я никак не могу сократить блок в макросе resource, чтобы не писать руками строки
    Код (Text):
    1. D_IMAGExx,LANG_NEUTRAL,_imgxx
    Пытался сделать так:
    Код (Text):
    1. rept NUMBER_OF_FRAMES num:1 { _img_rsrc#num equ ID_IMAGE#num,LANG_NEUTRAL,_img#num }
    И затем что-то типа
    Код (Text):
    1. resource _images,\
    2.             rept NUMBER_OF_FRAMES num:1 { _img_rsrc#num }
    Но так понятно что не получится. И я решил переписать стандартный макрос resource. чтобы он принимал следующие параметры
    Код (Text):
    1. macro resource2 dir,count,id_prefix,lang,label_prefix {
    2. ...
    3. }
    4.  
    5. resource2 _images,NUMBER_OF_FRAMES,`ID_IMAGE,LANG_NEUTRAL,`_img
    Если кто-нибудь может подсказать как реализовать, то было бы замечательно. Мне это чисто для интереса, а то я в макросах FASM'а я никак не могу толком разобраться.
     
  2. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    В общем так и не сделал я макрос. А надо это было для своего старого примера, который нашел и решил доработать. Вышел из ситуации тем, что тулзу сделал, которая генерит инклуд. Красивая анимация и музыка на фасме в аттаче.

    А еще есть вопрос, может кто знает какой таймер лучше всего использовать для отрисовки изображения. Я решил испробовать CreateTimerQueueTimer, но что лучше в данном случае. И второй вопрос как лучше оптимизировать прогу, чтобы она не грузила процессор (хоть и не сильно). Если загрузить все фреймы заранее, то опять оперативку выжирает.
     
  3. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    аттача не получилось, поэтому кому интересно, то вот сорец
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Тупой совет : подгружаешь только следующую картинку. Таймер прошел , выдаешь готовое и грузишь следующую. Конвеер это называется, правда говорят, что до Форда его изобрели... Если 1 не прокатит, то 2 и т.д.
     
  5. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    хм. можно. готовить данные еще в одном потоке, чтобы время выполнения потока отрисовки не увеличивалось на время, которое необходимо, чтобы подгрузить данные. но походу больше всего тормозится, просто когда данные декодируются из JPEG в BITMAP и помоему конвеер тут ничего не даст... или я чего-то не догоняю? вот для интереса заменил картинки на BMP в этом примере вообще не грузит (~2-3%), а так на моем проце около 15-20% загрузка. а если заранее грузить скажем по 10 фреймов то тоже не вижу решения ибо время на загрузку 10 фремов уйдет прилично а буфер не успеет пополняться. как-то бы видеопамять использовать что-ли :) я в этом вопросе вообще нуб.