OSDev

для всех
Текущее время: 29 мар 2024, 13:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 12:30 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
Добрый день! Я наконец-то перешел в VESA и снова пришел на форум за помощью. Прошелся по всем темам в osdev про видео режимы и вывод картинки, но не нашел ни одного про вывод пикселя. Как вообще вывести хотя бы один пиксель?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 12:40 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Ну, если адрес видеобуфера и его формат известны, то что мешает прямо туда и писать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 13:27 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
Действительно, вы правы. Спасибо!

Рисую квадрат при 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 извините за большое изображение, не знаю как в теге изменить ширину


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 14:45 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
В некоторых режимах длина строки в памяти больше, чем реально необходимо, -- т.е. за последним пикселем строки идут неиспользуемые байты и лишь затем начинается следующая строка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 14:48 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Формат пикселя разный. 3 байта (24 bpp) а есть 4 байта(32 bpp).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 14:57 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
SII писал(а):
В некоторых режимах длина строки в памяти больше, чем реально необходимо, -- т.е. за последним пикселем строки идут неиспользуемые байты и лишь затем начинается следующая строка.


Как узнать длину строки?

pavia писал(а):
Формат пикселя разный. 3 байта (24 bpp) а есть 4 байта(32 bpp).


32 bpp стоит, значит как изменить вывод? Странно, что при 800х600 все хорошо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 15:45 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
grenders22 писал(а):
Как узнать длину строки?


По идее, должна быть функция, сообщающая формат буфера кадра. Я с VESA никогда дела не имел, так что подробности не подскажу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 15:53 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
BytesPerScanLine в ModeInfoBlock struc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 09 мар 2018, 18:46 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
pavia писал(а):
BytesPerScanLine в ModeInfoBlock struc


Спасибо! Определил длину строки из структуры выставленного режима VESA поделил на bpp и теперь на ура работает на всех устройствах с разным разрешением экранов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод пикселя в VESA
СообщениеДобавлено: 19 мар 2018, 17:01 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
С выводом картинок и примитовов я разобрался. Но больно уже медленно весь экран обновлять. Прочитал про двойную буферизацию, но опять таки надо обновлять весь экран. Проблемы возникают когда я ввожу текст. Очень медленно каждый символ добавляется. Особенно заметно на реальном железе.

Предположим у меня есть окно и как мне обновлять буфер лишь в пределах этого окна?

Для примера приведу цифры:
-весь экран 1024х768
-координаты окна 200х200
-ширина и длинна окна 500х350 соответственно


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB