OSDev http://osdev.su/ |
|
Вывод пикселя в VESA http://osdev.su/viewtopic.php?f=6&t=1880 |
Страница 1 из 3 |
Автор: | grenders22 [ 09 мар 2018, 12:30 ] |
Заголовок сообщения: | Вывод пикселя в VESA |
Добрый день! Я наконец-то перешел в VESA и снова пришел на форум за помощью. Прошелся по всем темам в osdev про видео режимы и вывод картинки, но не нашел ни одного про вывод пикселя. Как вообще вывести хотя бы один пиксель? |
Автор: | SII [ 09 мар 2018, 12:40 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
Ну, если адрес видеобуфера и его формат известны, то что мешает прямо туда и писать? |
Автор: | grenders22 [ 09 мар 2018, 13:27 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
Действительно, вы правы. Спасибо! Рисую квадрат при 800х600 и на эмуляторе и на железе все хорошо, но при разрешении 1366х768 на железе получаю интересное изображение. Это связано с тем что адрес пикселя отличается от его координаты? Видно конкретное смещение на 2+ пикселя. Код: for(int i = y; i < y + height; i++) { for(int j = x; j < x + width; j++) { framebuffer[screen.witdh*y+x)] = 0xFFFFFFFF; } } PS извините за большое изображение, не знаю как в теге изменить ширину |
Автор: | SII [ 09 мар 2018, 14:45 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
В некоторых режимах длина строки в памяти больше, чем реально необходимо, -- т.е. за последним пикселем строки идут неиспользуемые байты и лишь затем начинается следующая строка. |
Автор: | pavia [ 09 мар 2018, 14:48 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
Формат пикселя разный. 3 байта (24 bpp) а есть 4 байта(32 bpp). |
Автор: | grenders22 [ 09 мар 2018, 14:57 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
SII писал(а): В некоторых режимах длина строки в памяти больше, чем реально необходимо, -- т.е. за последним пикселем строки идут неиспользуемые байты и лишь затем начинается следующая строка. Как узнать длину строки? pavia писал(а): Формат пикселя разный. 3 байта (24 bpp) а есть 4 байта(32 bpp). 32 bpp стоит, значит как изменить вывод? Странно, что при 800х600 все хорошо. |
Автор: | SII [ 09 мар 2018, 15:45 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
grenders22 писал(а): Как узнать длину строки? По идее, должна быть функция, сообщающая формат буфера кадра. Я с VESA никогда дела не имел, так что подробности не подскажу. |
Автор: | pavia [ 09 мар 2018, 15:53 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
BytesPerScanLine в ModeInfoBlock struc |
Автор: | grenders22 [ 09 мар 2018, 18:46 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
pavia писал(а): BytesPerScanLine в ModeInfoBlock struc Спасибо! Определил длину строки из структуры выставленного режима VESA поделил на bpp и теперь на ура работает на всех устройствах с разным разрешением экранов. |
Автор: | grenders22 [ 19 мар 2018, 17:01 ] |
Заголовок сообщения: | Re: Вывод пикселя в VESA |
С выводом картинок и примитовов я разобрался. Но больно уже медленно весь экран обновлять. Прочитал про двойную буферизацию, но опять таки надо обновлять весь экран. Проблемы возникают когда я ввожу текст. Очень медленно каждый символ добавляется. Особенно заметно на реальном железе. Предположим у меня есть окно и как мне обновлять буфер лишь в пределах этого окна? Для примера приведу цифры: -весь экран 1024х768 -координаты окна 200х200 -ширина и длинна окна 500х350 соответственно |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |