1.Если без прямого доступа к видеопамяти не обойтись и очень хочется избежать артефактов на экране, то нужна синхронизация.
Обойтись можно, только потребуется дополнительная память под буферы. Получается, что в общем нужно памяти размером с 2 экрана. На компьютерах, где мало памяти - это значимо. Тогда уже не запустить Kolibri на компьютере с 8Mb RAM при 24/32 битном цвете. К тому же в случае VESA драйвера скорость копирования битмапа упадёт в 2 раза(первый раз копируется в экранный буфер, второй раз непосредственно на экран).
2. Никаких аппаратных примитивов, только блиттер. Конвертация YUV->RGB (тоже блиттер).
А можно копировать битмап с прозрачностью и как это выглядит(в смысле операций с памятью)? Просто мне нужен некоторый универсальный интерфейс для работы с любым драйвером(как с аппаратным, так и нет), поэтому пытаюсь понять, что и как умеют делать современный видео карты.
SII
Тут речь идёт о взаимодействия драйвера с оконной подсистемой. Просто двойной буферизацией тут не обойдёшься(скорость упадёт и памяти много израсходует).
andrew_programmer wrote:Тут речь идёт о взаимодействия драйвера с оконной подсистемой. Просто двойной буферизацией тут не обойдёшься(скорость упадёт и памяти много израсходует).
Гм... А с чего бы это скорости падать? Да и расход -- только видеопамяти, а не ОЗУ. Оба буфера находятся в видеопамяти, переключение поэтому можно считать мгновенным, поскольку ничего копировать не приходится, надо лишь дать команду отображать информацию из другого буфера.
нужен некоторый универсальный интерфейс для работы с любым драйвером(как с аппаратным, так и нет)
К тому же в случае VESA драйвера скорость копирования битмапа упадёт в 2 раза(первый раз копируется в экранный буфер, второй раз непосредственно на экран).
Прозрачность поддерживают все карты. Это colorkey, альфа-канал или битовая карта прозрачности (как и в Колибри определяет форму окна). В pixlib были функции для работы с прозрачностью TransparentBlit и BlitAlpha.
SII wrote:
Гм... А с чего бы это скорости падать? Да и расход -- только видеопамяти, а не ОЗУ. Оба буфера находятся в видеопамяти, переключение поэтому можно считать мгновенным, поскольку ничего копировать не приходится, надо лишь дать команду отображать информацию из другого буфера.
Системные фреймбуферы должны находиться в системной памяти, иначе скорость обмена (особенно чтения) упадет в десятки раз.
Serge,
а что, у этих крутых радеонов кроме тайлов и курсора вообще нет никакой 2D-акселерации?
Всем нужны аппаратный скроллинг, встроенные шрифты, рисование полиномов...
Это ведь по сути примитивненькие операции, не рендеринг какой-нибудь и не 3D-поворот.
Нет 2D WinGDI акселерации. Её полностью выпилили начиная с R600. В NV G80 акселератор остался но в Fermi вряд ли.
Аппаратный скроллинг - это блиттер. Шрифтов не было и раньше. То есть команд "загрузить шрифт", вывести букву "ф" в позиции "x,y" цветом "color". Были специальные команды для рисования глифов, эллипсов, полигонов горизонтальными отрезками. Не забываем о ClearType(tm) и прочих технологиях сглаживания шрифтов. Всё это делается цпу. Плюс шестиядерные монстры о двенадцати логических головах. Каждая голова может независимо от других рисовать себе в системную память без конкуренции за гпу и не тратя время на вызовы драйвера и перекачку данных в гпу и обратно.
Была иформация что MS тоже отказалась от старой GDI акселерации. Сейчас проще и быстрее нарисовать картинку цпу.
И последний вопрос.
Те функции блиттера, что есть в Pixlib будут в драйвере? То есть так же можно будет перебросить на экран не весь битмап, а его часть начиная с некоторой позиции (x,y) и шириной (width,height)?