The Windows 2000 Display Driver Model (XDDM) is the legacy display/graphics driver architecture that was used for Windows 2000 through Windows Vista and Windows 7.
Сейчас картина выглядит иначе:
Graphics hardware vendors must write user-mode display drivers for their display adapters. The user-mode display driver is a dynamic-link library (DLL) that is loaded by the Microsoft Direct3D runtime. A user-mode display driver must at least support the Direct3D version 9 DDI. User-mode display drivers can also support the Direct3D version 10 DDI. The user-mode display driver can consist of one DLL that supports both Direct3D version 9 DDI and Direct3D version 10 DDI or it can consist of two separate DLLs, one for version 9 and the other for version 10 of Direct3D DDI. The following topics discuss various aspects of the user-mode display driver:
Если смотреть что из себя представляет Win32k.sys то обнаруживается, что его функции не так просто найти, но таки можно, и там полностью отсутствует что-либо связанное с регионами, полигонами, брашами, карандашами и тем более шрифтами. Это говорит о том, что всё это теперь за пределами ядра.
Всё сказанное выше — личное мнение, если не указано обратное.
The Windows 2000 Display Driver Model (XDDM) is the legacy display/graphics driver architecture that was used for Windows 2000 through Windows Vista and Windows 7.
Да, тут ты прав.
Ф>Сейчас картина выглядит иначе:
А вот это для меня не новость. То, что есть user mode драйверы Direct3D и OpenGL — это я знаю. Но мы не о них говорим, а о GDI.
Ф>Если смотреть что из себя представляет Win32k.sys то обнаруживается, что его функции не так просто найти, но таки можно, и там полностью отсутствует что-либо связанное с регионами, полигонами, брашами, карандашами и тем более шрифтами. Это говорит о том, что всё это теперь за пределами ядра.
Ох, что-то не то.
То, что ты дал по ссылке — это результат какой-то grep для какой-то drsyscall. Естественно, там не все.
Ищем в Windows win32k.sys. У меня их FAR нашел 12 штук , в разных подкаталогах C:\Windows\WinSxS. Некоторые из них имеют размер в 300-400 байт, но есть и иного размера.
Честно говоря, не в курсе, какой из них действующий
Правда, есть там еще win32u.dll, и в ней тоже полно аналогичных экспортов. Увы, непонятно, для какого она режима — user mode или kernel mode — импорты ее dumpbin не показывает.
Но вот здесь сказано
win32u.dll is a link for System calls between User mode (Ring 3) and Kernel mode (Ring 0) : Ring 3 => Ring 0
Здравствуйте, Marty, Вы писали:
M>Здравствуйте!
M>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.
M>Кто виноват и что делать?
У тебя вообще какая задача стоит, что ты взялся такие тесты делать?
btw, уроки по opengl от Neon Hlium: http://pmg.org.ru/nehe/ там есть и про шрифты. Я когда тестовые задания по opengl делал, текст выводил, проблем не было, сделал быстро, даже не помню, как.
Здравствуйте, Marty, Вы писали:
CEM>>У тебя вообще какая задача стоит, что ты взялся такие тесты делать?
M>Я не тесты делаю, я прогу делаю, а тут такое...
Ты там замеры делал, это тесты производительности
Вообще, если ты в GDI рисуешь, с двойной буферизацией, то оно работает довольно быстро, я на этом realtime игры делал.
Я про задачу почему спрашивал: если тебе прям надо плотно с 2D-графикой работать — лучше взять что-то более близкое к железу. SDL, может? Это оконный движок с openGL-ной графикой в основе. MS WPF — тоже на основе DirectX сделано. А GDI+ — медленный всегда был, он больше подходит, когда надо быстро(закодить) что-то небольшое нарисовать и лень разбираться. Я его использовал для закачки каких-то графических форматов, типа jpeg/tiff/png.
Здравствуйте, CEMb, Вы писали:
CEM>Вообще, если ты в GDI рисуешь, с двойной буферизацией, то оно работает довольно быстро, я на этом realtime игры делал.
Ну да, я как-то так и полагал. Но дуги корявые не понравились, решил попробовать GDI+, благо он весьма похож на GDI, а он тормозит.
CEM>Я про задачу почему спрашивал: если тебе прям надо плотно с 2D-графикой работать — лучше взять что-то более близкое к железу. SDL, может? Это оконный движок с openGL-ной графикой в основе. MS WPF — тоже на основе DirectX сделано. А GDI+ — медленный всегда был, он больше подходит, когда надо быстро(закодить) что-то небольшое нарисовать и лень разбираться. Я его использовал для закачки каких-то графических форматов, типа jpeg/tiff/png.
Плотно возможно потом понадобится, но пока это не в приоритете. Я GDI/GDI+ потому и взял, что оно мне знакомо и можно побыстрому закодить отрисовку. Иначе так бы и застрял на этапе осваивания нового графического API
Потом может переделаю, а пока просто буду замерять скорость отрисовки, и если что, говорить пользователю, что система у него медленная, и надо настройки графики поурезать
Здравствуйте, Marty, Вы писали:
M>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.
GDI начиная с win7 для основных вещей имеет hw acceleration
GDI+ не имеет hw acceleration вообще.
D2D нужно юзать, или D3D
M>Кто виноват
Здравствуйте, rudzuk, Вы писали:
R>GDI далеко не с семерки аппаратно ускоренный, а сильно-сильно раньше.
только в висте его убили, а в вин7 частично вернули, поэтому GDI hw acceleration на XP и Win7 как бы отличаются,
так что юзать GDI для отрисовки сложных вещей начиная с висты противопоказано.
Здравствуйте, Marty, Вы писали:
M>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.
За такое время можно скачать картинку по хттп и нарисовать её жээсом.
M>Кто виноват и что делать?
10 лет назад у меня .net. system.drawing который под капотом GDI+ уверенно рисовал порядка 10..15тыс примитивов в секунду.
Это если без шрифтов. Со шрифтами намного меньше.
Покажи, что именно ты рисуешь.
Проблемы с гди+ возможны, и в странных местах — например, если логические координаты слишком большие или когда часть рендеринга идет мимо видимой области. Лучше отключить всё такое, включая клиппинг, и делать это самому. Тогда сюрпризов меньше будет.
Для примера — если логическую область сделать в логических единицах от -50млн до +50млн, и попытаться нарисовать линию стилем dash от одного края, до другого не прямо, а наискосок, то рисование такой линии занимает секунды и линия может оказаться изогнутой на экране, т.е. пройдет совсем не там, куда бы она попала если стиль solid
Здравствуйте, Pauel, Вы писали:
M>>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.
P>За такое время можно скачать картинку по хттп и нарисовать её жээсом.
Можно
P>10 лет назад у меня .net. system.drawing который под капотом GDI+ уверенно рисовал порядка 10..15тыс примитивов в секунду. P>Это если без шрифтов. Со шрифтами намного меньше.
P>Покажи, что именно ты рисуешь.
Вот такие штуки:
P>Проблемы с гди+ возможны, и в странных местах — например, если логические координаты слишком большие или когда часть рендеринга идет мимо видимой области. Лучше отключить всё такое, включая клиппинг, и делать это самому. Тогда сюрпризов меньше будет.
Всё только в пределах экрана
P>Для примера — если логическую область сделать в логических единицах от -50млн до +50млн, и попытаться нарисовать линию стилем dash от одного края, до другого не прямо, а наискосок, то рисование такой линии занимает секунды и линия может оказаться изогнутой на экране, т.е. пройдет совсем не там, куда бы она попала если стиль solid
Никаких дашей, и только горизонтальные/вертикальные прямые, дуги и заливка. Правда, рисую не как RoundRect'ы, а как Path'ы
Здравствуйте, Marty, Вы писали:
M>Никаких дашей, и только горизонтальные/вертикальные прямые, дуги и заливка. Правда, рисую не как RoundRect'ы, а как Path'ы
Здравствуйте, Pauel, Вы писали:
M>>Никаких дашей, и только горизонтальные/вертикальные прямые, дуги и заливка. Правда, рисую не как RoundRect'ы, а как Path'ы
P>А RoundRect насколько быстрый?
Я наврал. Просто прямоугольники с закругленными углами я как RoundRect'ы и рисую, посложнее фигуры — через Path'ы. Но таких у меня несколько штук от силы
Здравствуйте, Pauel, Вы писали:
P>>>А что именно тормозит — создание path, или его отрисовка в графический контекст?
M>>Отрисовка
P>А если все это вручную отрисовать, безо всякого path, как изменится перформанс?
А как быть с заливкой? Или ты предлагаешь самому попиксельно вообще все рисовать?
Здравствуйте, Marty, Вы писали:
P>>А если все это вручную отрисовать, безо всякого path, как изменится перформанс?
M>А как быть с заливкой? Или ты предлагаешь самому попиксельно вообще все рисовать?
Однако, про заливку я не знал. Кстати говоря, как изменится перформанс если отключить заливку ?
А ты не мог бы фрагмент картинки показать? Есть ли вариант, скажем, нарисовать несколько типовых картинок в битмап и уже потом шпокать этот битмап?