Помогите новичку

Applications development, KoOS API questions
  • Функция 65. Файл kernel.asm
    sys_putimage_palette.

    Code: Select all

           cmp     esi, 32
    
            jnz     @f
    
            mov     ebp, putimage_get32bpp
    
            mov     esi, putimage_init32bpp
    
            jmp     sys_putimage_bpp
    
    32 бита на пиксель - изображение с альфа-каналом. putimage_get и putimage_init занимаются преобразованием картинки в формат, нужный для вывода.

    Вопросы:

    1.Почему

    Code: Select all

    putimage_init32bpp:
    
            shl     eax, 2
    
            ret
    
    но

    Code: Select all

    putimage_init15bpp:
    
    putimage_init16bpp:
    
            add     eax, eax
    
            ret
    
    В одном случае сдвигаем влево один раз, в другом - два?

    2. В ecx и edx по идее должны сохраняться координаты точек, правильно? Можно использовать эти координаты для передачи их функции getpixel? Не порушит ли их getpixel?
  • shl eax,1 = x*2
    shl eax,2 = x*4
    shl eax,3 = x*8
    ....

    Сохранение вновь используемых регистров это задача программиста, используй push и pop для конкретного случая или pusha и popa для сохранения всех основных регистров сразу, если это необходимо.
  • Собственно, понятно, что
    shl eax,1 = x*2
    shl eax,2 = x*4
    shl eax,3 = x*8
    И что add eax,eax - это то же самое, что shl eax, 1.
    Вопрос был в том, почему для 15 и 16 бит - сдвиг один раз, а для 32- два раза. Код сильно раскидан по файлам, чтобы с лету в нем разобраться. Собственно, теперь понятно, что именно мне нужно сделать. Осталось дело за малым. Странно, что до меня никто не сделал поддержку альфа-канала - кода совсем немного добавится.

    Вопрос - делать альфа-канал только в 65й функции, только в 7й или в обоих? С кодом блиттера не разобрался, нужно больше комментариев. Вот в этом большой минус кода на Си. :( Интересно, насколько замедлится вывод графики с альфа-каналом, и не поломает ли это какие-нибудь программы, которые выводили "32 бита, которые на самом деле 24, а байт альфа-канала это 00" потому что "так быстрее".
  • На 7-ю забей, а для 65 с прозрачностью нужно предусмотреть либо флаг, либо вообще сделать другую функцию - не нужно ломать зависимые программы.
  • Не ясно вот только, почему зависимые программы выводят 24bpp функцией для 32bpp. Ладно, сделаю пока что режим "33bbp" для альфа-канала.
  • Потому что картинка в 24 бита занимает меньше места в памяти Оригинальные, а не та часть которая выведена на экран. Когда пытаешься открывать очень больше картинки, то это весьма существенно. Vesa с глубиной 24 бита распространена реже, чем 32 бита.
  • Продолжаю играться с ядром. Пытаюсь сделать вот что:
    Putimage вызывает функции get и init.
    Функция init не ясно что делает, но меня она вроде не сильно должна интересовать, а вот функция get преобразует текущее двойное слово в формат RRGGBBRR. Я хочу сделать вот что: во время выполнения функции get узнать, пиксел с какими координатами я сейчас обрабатываю, взять цвет этого пиксела и смешать с цветом того пиксела, который есть.
    Вот собственно как узнать, пиксел с какими координатами я обрабатываю?
  • Написать код считающий координаты, но это дополнительно снизит скорость вывода. Вообще прозрачность не поддержанная драйвером видеокарты это бяка сжирающая ресурсы системы.
  • Ну здесь можно махнуть одни ресурсы на другие, память на быстродействие. Копия экрана в ОЗУ решает проблемы низкой скорости чтения из видеопамяти. Поэтому линукс в vesa работает очень шустро по сравнению с windows.
  • А можно сделать выбор при загрузке?
  • Сделать можно все что угодно твоей душе (Совсем недавно я ебнул код параметра для vrr в экране загрузки, который сам же прилепил несколько лет назад.
    Он стал ненужным - lcd повсеместно), вопрос встает нужно ли оно?

    А вообще никто не мешает даже во время работы системы переключать режимы.
  • Serge wrote:Поэтому линукс в vesa работает очень шустро по сравнению с windows.
    Видел я это очень шустро. Колибри быстрее отрисовывает.
  • Пока не начнёшь экран грабить.
  • Никто не обещал, что будет легко. :mrgreen:
  • Who is online

    Users browsing this forum: No registered users and 1 guest