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/