Re[40]: Еще
От: alex_public  
Дата: 18.06.17 23:55
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>>>У CPU вообще нет доступа к видео памяти в том же виде что и основной памяти.

_>>Безусловно его нет. Более того, если бы обмен данными между обычной памятью и видео-памятью происходил с помощью инструкций CPU, то это было бы катастрофически медленно. Однако в CPU (и не только — сейчас это уже даже в копеечных МК присутствует) имеется такой механизм работы с периферией как DMA, который позволяет периферийным устройствам обмениваться с памятью процессора в фоне (без его прямых команд). Соответственно при включение этого механизма запись в определённые разделы оперативной памяти по сути полностью аналогична записи в видео-память. И думаю что большинство участников дискуссии имели в виду именно это, просто не расшифровывая очевидные детали.
CS>Всё верно, только оппоненты в дискуссии имели в виду именно "DDB это video память" и "GDI hardware accelerated".
CS>Я же говорю (и MSDN) что у GDI hardware accelerated только BitBlt (фактически это и есть DMA).
CS>Также я говорю (и Фень Юань) что DDB это область RAM а не video RAM. То есть DDB это и есть твои "определённые разделы оперативной памяти".
CS>Вышеизложенное означает что GDI в принципе не может иметь per primitives hardware accelerated drawing.

Нуу насчёт в принципе не может — это спорный вопрос. ) Но если говорить насчёт GDI в винде, то наверное так и есть. Во всяком случае я не припомню информации насчёт их аппаратного ускорения.

CS>Т.е. DrawLine(hdc, ...) это банальный Брезенхем исполняемый CPU и изменяющий RAM. Т.е. этот механизм есть O(N) где N это количество пикселей на экране. Т.е. sucks on high-dpi monitors.

CS>В Direct2D, DirectX, OpenGL же DrawLine() это (условно) посылка quad (четырех координат) на GPU для отрисовки его процессорами (shaders, etc).
CS>Т.е. этот механизм для CPU есть O(1) complex — на зависит от размера экрана.

С Direct2D я не знаком на практике, но если говорить о рисование через шейдеры, то там вывод линии тоже является далеко не тривиальной операцией типа вызова функции LineTo. )))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.