Page 24 of 77

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

Posted: Wed Nov 09, 2011 3:33 pm
by Mario
1. Насчет наследуемости не уверен. Можно проверить посмотрев какое значение маски возвращается после установки новой маски. Смотри описание функций в SVN.
2. После установки маски событие клавиатуры не будет приходить.
3. Не знаю, не пробовал. Если есть окно, то все равно нужно оставлять событие перерисовки и еще желательно нажатия кнопки или самому отлавливать события мыши, естественно предварительно разрешенные.

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

Posted: Fri Dec 16, 2011 11:11 am
by SoUrcerer
Функция 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?

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

Posted: Fri Dec 16, 2011 2:59 pm
by Mario
shl eax,1 = x*2
shl eax,2 = x*4
shl eax,3 = x*8
....

Сохранение вновь используемых регистров это задача программиста, используй push и pop для конкретного случая или pusha и popa для сохранения всех основных регистров сразу, если это необходимо.

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

Posted: Fri Dec 16, 2011 3:54 pm
by SoUrcerer
Собственно, понятно, что
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" потому что "так быстрее".

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

Posted: Fri Dec 16, 2011 4:06 pm
by Mario
На 7-ю забей, а для 65 с прозрачностью нужно предусмотреть либо флаг, либо вообще сделать другую функцию - не нужно ломать зависимые программы.

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

Posted: Fri Dec 16, 2011 4:21 pm
by SoUrcerer
Не ясно вот только, почему зависимые программы выводят 24bpp функцией для 32bpp. Ладно, сделаю пока что режим "33bbp" для альфа-канала.

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

Posted: Fri Dec 16, 2011 4:55 pm
by Mario
Потому что картинка в 24 бита занимает меньше места в памяти Оригинальные, а не та часть которая выведена на экран. Когда пытаешься открывать очень больше картинки, то это весьма существенно. Vesa с глубиной 24 бита распространена реже, чем 32 бита.

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

Posted: Mon Dec 19, 2011 10:13 am
by SoUrcerer
Продолжаю играться с ядром. Пытаюсь сделать вот что:
Putimage вызывает функции get и init.
Функция init не ясно что делает, но меня она вроде не сильно должна интересовать, а вот функция get преобразует текущее двойное слово в формат RRGGBBRR. Я хочу сделать вот что: во время выполнения функции get узнать, пиксел с какими координатами я сейчас обрабатываю, взять цвет этого пиксела и смешать с цветом того пиксела, который есть.
Вот собственно как узнать, пиксел с какими координатами я обрабатываю?

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

Posted: Mon Dec 19, 2011 1:57 pm
by Mario
Написать код считающий координаты, но это дополнительно снизит скорость вывода. Вообще прозрачность не поддержанная драйвером видеокарты это бяка сжирающая ресурсы системы.

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

Posted: Mon Dec 19, 2011 4:13 pm
by Serge
Ну здесь можно махнуть одни ресурсы на другие, память на быстродействие. Копия экрана в ОЗУ решает проблемы низкой скорости чтения из видеопамяти. Поэтому линукс в vesa работает очень шустро по сравнению с windows.

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

Posted: Mon Dec 19, 2011 5:22 pm
by SoUrcerer
А можно сделать выбор при загрузке?

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

Posted: Mon Dec 19, 2011 6:22 pm
by Mario
Сделать можно все что угодно твоей душе (Совсем недавно я ебнул код параметра для vrr в экране загрузки, который сам же прилепил несколько лет назад.
Он стал ненужным - lcd повсеместно), вопрос встает нужно ли оно?

А вообще никто не мешает даже во время работы системы переключать режимы.

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

Posted: Mon Dec 19, 2011 6:24 pm
by Mario
Serge wrote:Поэтому линукс в vesa работает очень шустро по сравнению с windows.
Видел я это очень шустро. Колибри быстрее отрисовывает.

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

Posted: Mon Dec 19, 2011 6:25 pm
by Serge
Пока не начнёшь экран грабить.

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

Posted: Mon Dec 19, 2011 6:34 pm
by Mario
Никто не обещал, что будет легко. :mrgreen: