Re[39]: Еще
От: c-smile Канада http://terrainformatica.com
Дата: 18.06.17 17:27
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, c-smile, Вы писали:


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


_>Безусловно его нет. Более того, если бы обмен данными между обычной памятью и видео-памятью происходил с помощью инструкций CPU, то это было бы катастрофически медленно. Однако в CPU (и не только — сейчас это уже даже в копеечных МК присутствует) имеется такой механизм работы с периферией как DMA, который позволяет периферийным устройствам обмениваться с памятью процессора в фоне (без его прямых команд). Соответственно при включение этого механизма запись в определённые разделы оперативной памяти по сути полностью аналогична записи в видео-память. И думаю что большинство участников дискуссии имели в виду именно это, просто не расшифровывая очевидные детали.


Всё верно, только оппоненты в дискуссии имели в виду именно "DDB это video память" и "GDI hardware accelerated".

Я же говорю (и MSDN) что у GDI hardware accelerated только BitBlt (фактически это и есть DMA).
Также я говорю (и Фень Юань) что DDB это область RAM а не video RAM. То есть DDB это и есть твои "определённые разделы оперативной памяти".

Вышеизложенное означает что GDI в принципе не может иметь per primitives hardware accelerated drawing.

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

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