1. Насчет наследуемости не уверен. Можно проверить посмотрев какое значение маски возвращается после установки новой маски. Смотри описание функций в SVN.
2. После установки маски событие клавиатуры не будет приходить.
3. Не знаю, не пробовал. Если есть окно, то все равно нужно оставлять событие перерисовки и еще желательно нажатия кнопки или самому отлавливать события мыши, естественно предварительно разрешенные.
Помогите новичку
Функция 65. Файл kernel.asm
sys_putimage_palette.
32 бита на пиксель - изображение с альфа-каналом. putimage_get и putimage_init занимаются преобразованием картинки в формат, нужный для вывода.
Вопросы:
1.Почему
но
В одном случае сдвигаем влево один раз, в другом - два?
2. В ecx и edx по идее должны сохраняться координаты точек, правильно? Можно использовать эти координаты для передачи их функции getpixel? Не порушит ли их getpixel?
sys_putimage_palette.
Code: Select all
cmp esi, 32
jnz @f
mov ebp, putimage_get32bpp
mov esi, putimage_init32bpp
jmp sys_putimage_bpp
Вопросы:
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,2 = x*4
shl eax,3 = x*8
....
Сохранение вновь используемых регистров это задача программиста, используй push и pop для конкретного случая или pusha и popa для сохранения всех основных регистров сразу, если это необходимо.
Собственно, понятно, что
Вопрос был в том, почему для 15 и 16 бит - сдвиг один раз, а для 32- два раза. Код сильно раскидан по файлам, чтобы с лету в нем разобраться. Собственно, теперь понятно, что именно мне нужно сделать. Осталось дело за малым. Странно, что до меня никто не сделал поддержку альфа-канала - кода совсем немного добавится.
Вопрос - делать альфа-канал только в 65й функции, только в 7й или в обоих? С кодом блиттера не разобрался, нужно больше комментариев. Вот в этом большой минус кода на Си. Интересно, насколько замедлится вывод графики с альфа-каналом, и не поломает ли это какие-нибудь программы, которые выводили "32 бита, которые на самом деле 24, а байт альфа-канала это 00" потому что "так быстрее".
И что add eax,eax - это то же самое, что shl eax, 1.shl eax,1 = x*2
shl eax,2 = x*4
shl eax,3 = x*8
Вопрос был в том, почему для 15 и 16 бит - сдвиг один раз, а для 32- два раза. Код сильно раскидан по файлам, чтобы с лету в нем разобраться. Собственно, теперь понятно, что именно мне нужно сделать. Осталось дело за малым. Странно, что до меня никто не сделал поддержку альфа-канала - кода совсем немного добавится.
Вопрос - делать альфа-канал только в 65й функции, только в 7й или в обоих? С кодом блиттера не разобрался, нужно больше комментариев. Вот в этом большой минус кода на Си. Интересно, насколько замедлится вывод графики с альфа-каналом, и не поломает ли это какие-нибудь программы, которые выводили "32 бита, которые на самом деле 24, а байт альфа-канала это 00" потому что "так быстрее".
На 7-ю забей, а для 65 с прозрачностью нужно предусмотреть либо флаг, либо вообще сделать другую функцию - не нужно ломать зависимые программы.
Не ясно вот только, почему зависимые программы выводят 24bpp функцией для 32bpp. Ладно, сделаю пока что режим "33bbp" для альфа-канала.
Потому что картинка в 24 бита занимает меньше места в памяти Оригинальные, а не та часть которая выведена на экран. Когда пытаешься открывать очень больше картинки, то это весьма существенно. Vesa с глубиной 24 бита распространена реже, чем 32 бита.
Продолжаю играться с ядром. Пытаюсь сделать вот что:
Putimage вызывает функции get и init.
Функция init не ясно что делает, но меня она вроде не сильно должна интересовать, а вот функция get преобразует текущее двойное слово в формат RRGGBBRR. Я хочу сделать вот что: во время выполнения функции get узнать, пиксел с какими координатами я сейчас обрабатываю, взять цвет этого пиксела и смешать с цветом того пиксела, который есть.
Вот собственно как узнать, пиксел с какими координатами я обрабатываю?
Putimage вызывает функции get и init.
Функция init не ясно что делает, но меня она вроде не сильно должна интересовать, а вот функция get преобразует текущее двойное слово в формат RRGGBBRR. Я хочу сделать вот что: во время выполнения функции get узнать, пиксел с какими координатами я сейчас обрабатываю, взять цвет этого пиксела и смешать с цветом того пиксела, который есть.
Вот собственно как узнать, пиксел с какими координатами я обрабатываю?
Написать код считающий координаты, но это дополнительно снизит скорость вывода. Вообще прозрачность не поддержанная драйвером видеокарты это бяка сжирающая ресурсы системы.
Ну здесь можно махнуть одни ресурсы на другие, память на быстродействие. Копия экрана в ОЗУ решает проблемы низкой скорости чтения из видеопамяти. Поэтому линукс в vesa работает очень шустро по сравнению с windows.
А можно сделать выбор при загрузке?
Сделать можно все что угодно твоей душе (Совсем недавно я ебнул код параметра для vrr в экране загрузки, который сам же прилепил несколько лет назад.
Он стал ненужным - lcd повсеместно), вопрос встает нужно ли оно?
А вообще никто не мешает даже во время работы системы переключать режимы.
Он стал ненужным - lcd повсеместно), вопрос встает нужно ли оно?
А вообще никто не мешает даже во время работы системы переключать режимы.
Видел я это очень шустро. Колибри быстрее отрисовывает.Serge wrote:Поэтому линукс в vesa работает очень шустро по сравнению с windows.
Пока не начнёшь экран грабить.
Никто не обещал, что будет легко.
Who is online
Users browsing this forum: No registered users and 1 guest