GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 05:28
Оценка:
Здравствуйте!

У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.

Кто виноват и что делать?
Маньяк Робокряк колесит по городу
Re: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 05:49
Оценка:
Здравствуйте, Marty, Вы писали:

M>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.


M>Кто виноват и что делать?


Для начала отрисовать их без GDI+, просто через RoundRect. Может, дело не в GDI+
With best regards
Pavel Dvorkin
Re[2]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 06:29
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

M>>Кто виноват и что делать?


PD>Для начала отрисовать их без GDI+, просто через RoundRect. Может, дело не в GDI+


На самом деле, у меня там не RoundRect'ы, а пути, которые я потом заполняю. Потому, что у меня фигуры могут быть не обязательно прямоугольники, а произвольные их слияния (буквой Г, например).
Интерфейс у меня написан для GDI и для GDI+, но простой GDI дуги закруглений неряшливо присует. Вот так выглядят тайминги отрисовки:

  С закруглениями
GDI+
DoPaint: 141ms
DoPaint: 172ms
DoPaint: 125ms
DoPaint: 125ms
DoPaint: 140ms
DoPaint: 125ms
DoPaint: 94ms
DoPaint: 125ms
DoPaint: 125ms
DoPaint: 125ms
DoPaint: 141ms
DoPaint: 125ms
DoPaint: 157ms
DoPaint: 140ms
DoPaint: 156ms
DoPaint: 93ms
DoPaint: 125ms
DoPaint: 141ms
DoPaint: 109ms

GDI
DoPaint: 16ms
DoPaint: 15ms
DoPaint: 16ms
DoPaint: 16ms
DoPaint: 16ms
DoPaint: 16ms
DoPaint: 16ms
DoPaint: 0ms
DoPaint: 0ms
DoPaint: 16ms
DoPaint: 15ms
DoPaint: 0ms
DoPaint: 16ms
DoPaint: 0ms
DoPaint: 16ms
DoPaint: 0ms



ЗЫ Хотел еще без закруглений тайминги померять, померял — для GDI — картина точно такая же — что есть дуги, что их нет, а GDI+ — так просто не проверить уже, потому что версия без закруглений всегда через GDI рисуется, надо уже в глубине ковыряться


ЗЫЫ SetSmoothingMode в GDI+ с различными режимами что-то никак не влияет ни на скорость, ни на качество отрисовки
Маньяк Робокряк колесит по городу
Отредактировано 28.10.2022 6:56 Marty . Предыдущая версия . Еще …
Отредактировано 28.10.2022 6:43 Marty . Предыдущая версия .
Отредактировано 28.10.2022 6:38 Marty . Предыдущая версия .
Re[3]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 07:20
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>На самом деле, у меня там не RoundRect'ы, а пути, которые я потом заполняю. Потому, что у меня фигуры могут быть не обязательно прямоугольники, а произвольные их слияния (буквой Г, например).

M>Интерфейс у меня написан для GDI и для GDI+, но простой GDI дуги закруглений неряшливо присует. Вот так выглядят тайминги отрисовки:

Тайминги отрисовки желательно получить более детально, то есть не просто DoPaint, а сколько времени на что внутри него уходит.
With best regards
Pavel Dvorkin
Re[4]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 07:32
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

M>>Интерфейс у меня написан для GDI и для GDI+, но простой GDI дуги закруглений неряшливо присует. Вот так выглядят тайминги отрисовки:


PD>Тайминги отрисовки желательно получить более детально, то есть не просто DoPaint, а сколько времени на что внутри него уходит.



И как же это сделать простыми способами?
Маньяк Робокряк колесит по городу
Re[5]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 07:33
Оценка: +1
Здравствуйте, Marty, Вы писали:

PD>>Тайминги отрисовки желательно получить более детально, то есть не просто DoPaint, а сколько времени на что внутри него уходит.


M>И как же это сделать простыми способами?


DoPaint твой ? Если да — замеряй время каждого обращения к GDI+ внутри него. Только аккуратно — не выводи тут же в файл
With best regards
Pavel Dvorkin
Отредактировано 28.10.2022 7:35 Pavel Dvorkin . Предыдущая версия .
Re[6]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 07:37
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>>>Тайминги отрисовки желательно получить более детально, то есть не просто DoPaint, а сколько времени на что внутри него уходит.


M>>И как же это сделать простыми способами?


PD>DoPaint твой ?


Мой


PD>Если да — замеряй время каждого обращения к GDI+ внутри него. Только аккуратно — не выводи тут же в файл


Я ж спрашивал про простые способы


  Вот так выглядит в студии результат замера
Маньяк Робокряк колесит по городу
Re[7]: GDI+ - супер тормоз?
От: paradok  
Дата: 28.10.22 07:43
Оценка: 1 (1)
Все правильно — gdi+ тормоз
Переделывай на DirectX (OpenGL, Metal)
Re[7]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 07:49
Оценка:
Здравствуйте, Marty, Вы писали:

PD>>Если да — замеряй время каждого обращения к GDI+ внутри него. Только аккуратно — не выводи тут же в файл


M>Я ж спрашивал про простые способы


А расставить в коде QueryPerfomanceCounter и отправлять в некий list так уж сложно ? Не сотни же там вызовов GDI+.

Суть простая — надо найти, какой именно вызов GDI+ тормозит. И нет ли в DoPaint чего-то помимо GDI+, что тормозит. В общем, кто виноват.

Картинка твоя не подходит. Там непонятно от чего % считается, не только рисование входит.
With best regards
Pavel Dvorkin
Отредактировано 28.10.2022 7:51 Pavel Dvorkin . Предыдущая версия .
Re[8]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 08:05
Оценка:
Здравствуйте, paradok, Вы писали:

P>Все правильно — gdi+ тормоз

P>Переделывай на DirectX (OpenGL, Metal)


Тогда уж Direct2D или как его там. Мне помимо рисования буквы надо рисовать, как там с этим?

Изначально я просто на GDI делал, так как он весьма быстрый и неплохо мне знакомый. Но — сразу всё обернул в свой IDeviceContext интерфейс — чтобы потом, при необходимости линупса в кутю переделать только реализацию десятка методов рисования вместо переделки всей проги. Потом заметил, что дуги и сочленения с прямыми в GDI коряво смотряться. Сделать реализацию под GDI+ — было просто, а вот с совсем новыми для меня технологиями — боюсь провожусь долго. Так что пока так оставлю, бо можно обойтись таки простым GDI
Маньяк Робокряк колесит по городу
Re[8]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 08:14
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А расставить в коде QueryPerfomanceCounter и отправлять в некий list так уж сложно ? Не сотни же там вызовов GDI+.


Не то, чтобы так уж сложно, но таки и не слишком просто


PD>Суть простая — надо найти, какой именно вызов GDI+ тормозит. И нет ли в DoPaint чего-то помимо GDI+, что тормозит. В общем, кто виноват.


Да ничего такого — с GDI весь тот же код работает весьма шустро


PD>Картинка твоя не подходит. Там непонятно от чего % считается, не только рисование входит.


Я так понимаю, проценты от всего времени работы. То, что именно функции GDI входят в топчик, намекает, что сколько бы я не расставлял QueryPerfomanceCounter'ы, ничего особо хорошего я не поймаю
Маньяк Робокряк колесит по городу
Re: GDI+ - супер тормоз?
От: Нomunculus Россия  
Дата: 28.10.22 08:16
Оценка:
Здравствуйте, Marty, Вы писали:

M>Кто виноват и что делать?


А у тебя они каждый кадр динамически меняются? если нет, то почему не отрисуешь статику сначала в битмапу, а потом уже битмапу рисовать?
Re[2]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 08:20
Оценка:
Здравствуйте, Нomunculus, Вы писали:

M>>Кто виноват и что делать?


Н>А у тебя они каждый кадр динамически меняются? если нет, то почему не отрисуешь статику сначала в битмапу, а потом уже битмапу рисовать?


Да, не каждый кадр, есть куда оптимизировать, но вот как первоначальное отображение происходит — несколько напрягает. Хотя, конечно, можно и при первоначальном отображение в memDC рисовать и перекидывать по быстрому, но я пока с оптимизациями вообще не заморачивался, руки ещё не дошли. Просто думал, может, можно как-то по-быстрому полечить GDI+
Маньяк Робокряк колесит по городу
Re[9]: GDI+ - супер тормоз?
От: paradok  
Дата: 28.10.22 11:17
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, paradok, Вы писали:


P>>Все правильно — gdi+ тормоз

P>>Переделывай на DirectX (OpenGL, Metal)


M>Тогда уж Direct2D или как его там. Мне помимо рисования буквы надо рисовать, как там с этим?


это надо в гейм-деве поспрашивать, так на первый взгляд в играх со шрифтами нет кризиса, надписи в играх все делают...
еще есть на ява скрипт — babylonjs.com
ТАМ WebGL надписи в демках выглядят прилично
Re[10]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 11:25
Оценка:
Здравствуйте, paradok, Вы писали:

P>это надо в гейм-деве поспрашивать,


Да, это мысль


P>так на первый взгляд в играх со шрифтами нет кризиса, надписи в играх все делают...


Я давно не играл ни во что, кроме танчиков, но, имхо, в играх почти везде шрифты свои рисованные, рисуются как спрайты, и заточены под пару-тройку поддерживаемых языков
Маньяк Робокряк колесит по городу
Re[11]: GDI+ - супер тормоз?
От: paradok  
Дата: 28.10.22 12:04
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, paradok, Вы писали:


P>>это надо в гейм-деве поспрашивать,


M>Да, это мысль



P>>так на первый взгляд в играх со шрифтами нет кризиса, надписи в играх все делают...


M>Я давно не играл ни во что, кроме танчиков, но, имхо, в играх почти везде шрифты свои рисованные, рисуются как спрайты, и заточены под пару-тройку поддерживаемых языков


вроде сейчас проблема решена, можно использовать масштабируемые шрифты из виндов — truetype
вот из хэлпа юнити
Для добавления шрифта в проект, нужно положить файл со шрифтом в папку Assets.
Unity автоматически определит и импортирует этот файл.
Поддерживаются следующие форматы шрифтов: TrueType Fonts (.ttf) и OpenType Fonts (.otf).
Re[12]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 12:48
Оценка:
Здравствуйте, paradok, Вы писали:

P>вроде сейчас проблема решена, можно использовать масштабируемые шрифты из виндов — truetype

P>вот из хэлпа юнити
P>Для добавления шрифта в проект, нужно положить файл со шрифтом в папку Assets.
P>Unity автоматически определит и импортирует этот файл.
P>Поддерживаются следующие форматы шрифтов: TrueType Fonts (.ttf) и OpenType Fonts (.otf).

Мне такой гемор нафик не нужен, я хочу системные шрифты использовать
Маньяк Робокряк колесит по городу
Re[9]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 12:57
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>А расставить в коде QueryPerfomanceCounter и отправлять в некий list так уж сложно ? Не сотни же там вызовов GDI+.


M>Не то, чтобы так уж сложно, но таки и не слишком просто


Сдается мне, что за время, которое ты потратил на переписку здесь, ты вполне бы смог вставить десяток QueryPerfomanceCounter и list.add и один fwrite


PD>>Суть простая — надо найти, какой именно вызов GDI+ тормозит. И нет ли в DoPaint чего-то помимо GDI+, что тормозит. В общем, кто виноват.


M>Да ничего такого — с GDI весь тот же код работает весьма шустро


GDI+ во многом просто настройка над GDI, и в этой части не должен тормозить. Реально код GDI выполняется в kernel mode. Однако есть в GDI+ и свой код, и он выполняется в самом GDI+. Он содержит то, чего в GDI нет и делает что-то сам, ну а потом все же вызывает GDI. Вот что-то из этого, может, и тормозит.


M>Я так понимаю, проценты от всего времени работы. То, что именно функции GDI входят в топчик, намекает, что сколько бы я не расставлял QueryPerfomanceCounter'ы, ничего особо хорошего я не поймаю


Проценты от времени работы сейчас не интересны. Интересно лишь одно — какое было время при входе в DoPaint, потом после первого вызова чего-то из GDI+, потом после второго вызова и т.д. Все остальное пока к делу не относится.
With best regards
Pavel Dvorkin
Re[13]: GDI+ - супер тормоз?
От: paradok  
Дата: 28.10.22 13:05
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, paradok, Вы писали:


P>>вроде сейчас проблема решена, можно использовать масштабируемые шрифты из виндов — truetype

P>>вот из хэлпа юнити
P>>Для добавления шрифта в проект, нужно положить файл со шрифтом в папку Assets.
P>>Unity автоматически определит и импортирует этот файл.
P>>Поддерживаются следующие форматы шрифтов: TrueType Fonts (.ttf) и OpenType Fonts (.otf).

M>Мне такой гемор нафик не нужен, я хочу системные шрифты использовать


так трутайп это и есть системные шрифты в виндах и они в виндах где-то в папке систем и лежат...
я немного програмил в юнити на C# и мне показалось очень комфортно и удобно да и бонус + кросс платформ просто гигантский на все что сейчас вообще есть.
Там не только 3Д но и 2Д есть. Плюс экспорт в один клик в ява-скрипт и запуск в любом браузере проекта на C# — ну то есть автомат перекомпиляции из C# в ява-скрипт,
работает весьма недурственно.

Вот еще сглаживание шрифтов и кривых из коробки — Swift

замечу еще что если много юзеров то системные шрифты не спасут,
всегда попадутся юзеры у которых системный набор отличается от набора на ПК виндовс у разраба (версия шрифта не та, не хватает начертаний, не хватает символов и тд и тп)
и будут очень странные и непонятные траблы (винда вместо сообщения что нет шрифта подставляет самый похожий по ее мнению молча),
так что встроить шрифт в проект не такая уж и плохая идея когда юзеров десятки тысяч из разных стран
Отредактировано 28.10.2022 13:13 paradok . Предыдущая версия .
Re[10]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 13:12
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Сдается мне, что за время, которое ты потратил на переписку здесь, ты вполне бы смог вставить десяток QueryPerfomanceCounter и list.add и один fwrite


Проект компилится, я тут пишу


PD>Проценты от времени работы сейчас не интересны.


Почему?
Для GDI картинка сильно отличается
  Скрытый текст



PD>Интересно лишь одно — какое было время при входе в DoPaint, потом после первого вызова чего-то из GDI+, потом после второго вызова и т.д. Все остальное пока к делу не относится.


Это если сравнить не с чем. А если те же алгоритмы отрисовки через GDI работают в 10 раз быстрее, то как бы становится понятно, кто там тормоз, не?
Маньяк Робокряк колесит по городу
Re[14]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 13:13
Оценка:
Здравствуйте, paradok, Вы писали:

M>>Мне такой гемор нафик не нужен, я хочу системные шрифты использовать


P>так трутайп это и есть системные шрифты в виндах и они в виндах где-то в папке систем и лежат...


Ну вот лежат себе и лежат, и я знать не хочу, где они лежат, пусть система мне хорошо сделает сама, чтобы я ничего никуда не подкладывал


P>я немного програмил в юнити на C# и мне показалось очень комфортно и удобно да и бонус + кросс платформ просто гигантский на все что сейчас вообще есть.

P>Там не только 3Д но и 2Д есть. Плюс экспорт в один клик в ява-скрипт и запуск в любом браузере проекта на C# — ну то есть автомат перекомпиляции из C# в ява-скрипт,
P>работает весьма недурственно.

P>Вот еще сглаживание шрифтов и кривых из коробки — Swift



Ну, менять платформу я пока не собираюсь
Маньяк Робокряк колесит по городу
Re[15]: GDI+ - супер тормоз?
От: paradok  
Дата: 28.10.22 13:15
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, paradok, Вы писали:


M>>>Мне такой гемор нафик не нужен, я хочу системные шрифты использовать


P>>так трутайп это и есть системные шрифты в виндах и они в виндах где-то в папке систем и лежат...


M>Ну вот лежат себе и лежат, и я знать не хочу, где они лежат, пусть система мне хорошо сделает сама, чтобы я ничего никуда не подкладывал



эту проблему при массовой проге избежать не получиться

если много юзеров то системные шрифты не спасут,
всегда попадутся юзеры у которых системный набор отличается от набора на ПК виндовс у разраба (версия шрифта не та, не хватает начертаний, не хватает символов и тд и тп)
и будут очень странные и непонятные траблы (винда вместо сообщения что нет шрифта подставляет самый похожий по ее мнению молча),
так что встроить шрифт в проект не такая уж и плохая идея когда юзеров десятки тысяч из разных стран
Re: GDI+ - супер тормоз?
От: rm2  
Дата: 28.10.22 13:16
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Кто виноват и что делать?


Там же аппаратной акселерации вроде нет, так что да, все на процессоре рисуется, и да, поэтому супер-тормоз.
Re[11]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 13:24
Оценка:
Здравствуйте, Marty, Вы писали:

M>Почему?

M>Для GDI картинка сильно отличается

Потому что ничего не дает. Надо найти того, кто тормозит в DoPaint, а то, что что-то тормозит, было ясно после твоего первого сообщения с таймингами его на GDI и GDI+


PD>>Интересно лишь одно — какое было время при входе в DoPaint, потом после первого вызова чего-то из GDI+, потом после второго вызова и т.д. Все остальное пока к делу не относится.


M>Это если сравнить не с чем. А если те же алгоритмы отрисовки через GDI работают в 10 раз быстрее, то как бы становится понятно, кто там тормоз, не?


Нет. См. мое предыдущее сообщение. Там может тормозить какой-то метод из GDI+, который сам GDI+ и реализует.
With best regards
Pavel Dvorkin
Re[12]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 13:30
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

M>>Почему?

M>>Для GDI картинка сильно отличается

PD>Потому что ничего не дает. Надо найти того, кто тормозит в DoPaint, а то, что что-то тормозит, было ясно после твоего первого сообщения с таймингами его на GDI и GDI+


Ну как же не даёт?
На первой картинке видно, что GdipDrawPath/GdipFillPath как вместе, так и по отдельности жрут CPU больше, чем GetMessageW, а на второй картинке видно, что StrokeAndFillPath жрёт в два раза меньше той же GetMessageW. Хочешь сказать, что это ни о чем?


M>>Это если сравнить не с чем. А если те же алгоритмы отрисовки через GDI работают в 10 раз быстрее, то как бы становится понятно, кто там тормоз, не?


PD>Нет. См. мое предыдущее сообщение. Там может тормозить какой-то метод из GDI+, который сам GDI+ и реализует.


Ну вот тормозят GdipDrawPath/GdipFillPath, и что делать?
Маньяк Робокряк колесит по городу
Re[8]: GDI+ - супер тормоз?
От: Философ Ад http://vk.com/id10256428
Дата: 28.10.22 14:12
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А расставить в коде QueryPerfomanceCounter и отправлять в некий list так уж сложно ? Не сотни же там вызовов GDI+.


Ты застрял в прошлом веке. В 20м веке придумали профайлеры, но ещё мало использовали в 21 веке неумение пользоваться профайлером — или ретроградство или профнепригодность. Посмотри на dotTrace.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[13]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 14:13
Оценка:
Здравствуйте, Marty, Вы писали:

M>Ну как же не даёт?

M>На первой картинке видно, что GdipDrawPath/GdipFillPath как вместе, так и по отдельности жрут CPU больше, чем GetMessageW, а на второй картинке видно, что StrokeAndFillPath жрёт в два раза меньше той же GetMessageW. Хочешь сказать, что это ни о чем?

Конечно, ни о чем. Какое отношение к делу имеют функции, не относящиеся к отрисовке ? Ты бы еще со strcpy сравнил
Троллить ты, что ли, решился — так не тот форум.


M>Ну вот тормозят GdipDrawPath/GdipFillPath, и что делать?


Во-первых, убедиться, что это именно они. Пока что нет уверенности в этом. Они скорее всего просто оболочки для StrokePath/FillPath
With best regards
Pavel Dvorkin
Re[10]: GDI+ - супер тормоз?
От: Философ Ад http://vk.com/id10256428
Дата: 28.10.22 14:19
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>GDI+ во многом просто настройка над GDI, и в этой части не должен тормозить. Реально код GDI выполняется в kernel mode.


Это уже давно не так.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: GDI+ - супер тормоз?
От: qaz77  
Дата: 28.10.22 14:20
Оценка:
Здравствуйте, Marty, Вы писали:
M>Интерфейс у меня написан для GDI и для GDI+, но простой GDI дуги закруглений неряшливо присует.

Вот в этой фразе есть намек, что GDI просто фигачит пиксели одним цветом, без всякого сглаживания и антиалиасинга.
В GDI+ запросто может быть врукопашную какой-то антиалиасинг реализован, а это перемалывание пикселей через CPU.

Я в свое время что-то подобное сам реализовывал, чтобы из иконочных шрифтов генерировать иконки в формате ico с альфа-каналом.
Re[9]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 14:21
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Ты застрял в прошлом веке. В 20м веке придумали профайлеры, но ещё мало использовали в 21 веке неумение пользоваться профайлером — или ретроградство или профнепригодность. Посмотри на dotTrace.


Да, профайлеры придумали в прошлом веке, и я именно тогда их и использовал. . Visual Studio 6.0 profiler. Хорошая была штука.

Но мой опыт говорит, что в ряде случаев лучше просто замерять в коде. Профайлер не может совсем уж не вмешиваться в профилируемый процесс, а кроме того, он все же рассчитан на некий общий универсальный код, а свои замеры я сделаю как хочу.
With best regards
Pavel Dvorkin
Re[4]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 14:24
Оценка:
Здравствуйте, qaz77, Вы писали:

Q>Здравствуйте, Marty, Вы писали:

M>>Интерфейс у меня написан для GDI и для GDI+, но простой GDI дуги закруглений неряшливо присует.

Q>Вот в этой фразе есть намек, что GDI просто фигачит пиксели одним цветом, без всякого сглаживания и антиалиасинга.

Q>В GDI+ запросто может быть врукопашную какой-то антиалиасинг реализован, а это перемалывание пикселей через CPU.

Да, скорее всего именно так дело и обстоит, и похоже, что с этим ничего не сделать
Маньяк Робокряк колесит по городу
Re[14]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 14:27
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Конечно, ни о чем. Какое отношение к делу имеют функции, не относящиеся к отрисовке ? Ты бы еще со strcpy сравнил


Можно и со strcpy сравнить, в чем проблема?


PD>Троллить ты, что ли, решился — так не тот форум.


Нет, не "решился". Я совершенно искренне не понимаю, чем такой приблизительный способ оценки производительности не годится.



M>>Ну вот тормозят GdipDrawPath/GdipFillPath, и что делать?


PD>Во-первых, убедиться, что это именно они. Пока что нет уверенности в этом.


У меня — есть


PD>Они скорее всего просто оболочки для StrokePath/FillPath


И что дальше?
Маньяк Робокряк колесит по городу
Re[10]: GDI+ - супер тормоз?
От: Философ Ад http://vk.com/id10256428
Дата: 28.10.22 14:32
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Но мой опыт говорит, что в ряде случаев лучше просто замерять в коде. Профайлер не может совсем уж не вмешиваться в профилируемый процесс, а кроме того, он все же рассчитан на некий общий универсальный код, а свои замеры я сделаю как хочу.


Вообще-то я тоже профилировал, и отрисовку в том числе. И мой опыт говорит о том, что QPC нужен когда код выполняется У ПОЛЬЗОВАТЕЛЯ, куда ты с профилировщиком и дебаггером не можешь подобраться. В остальных случаях это бесполезная трата времени.
Если что я писал собственные PerformanceCounter'ы. Но я писал их для того чтобы понять причину по которой ПОЛЬЗОВАТЕЛЬ не может данных дождаться, а на своём рабочем месте только профайлер, а QPC только для развлечения и "практики". Не стоит оно того, чтоб время на него тратить.
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 28.10.2022 14:37 Философ . Предыдущая версия .
Re[11]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 14:41
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Вообще-то я тоже профилировал, и отрисовку в том числе. И мой опыт говорит о том, что QPC нужен когда код выполняется У ПОЛЬЗОВАТЕЛЯ, куда ты с профилировщиком и дебаггером не может подобраться. В остальных случаях это бесполезная трата времени.

Ф>Если что я писал собственные PerformanceCounter'ы. Но я писал их для того чтобы понять причину по которой ПОЛЬЗОВАТЕЛЬ не может данных дождаться, а на своём рабочем месте только профайлер, а QPC только для развлечения и "практики". Не стоит оно того, чтоб время на него тратить.

Ну что касается времени, то тратить его практически не придется. Copy/paste несколько вызовов одного метода, а он все сделает, потому что написан давным-давно и изменения в нем не требуются.
Мне было так удобнее. Например, какой-то кусок проходить без тайминга — с ним и так понятно, что тут тормозов быть не может. Где-то детально, каждый кусочек кода, где-то только от-до и т.д. На мой взгляд это все же гибче. Но у каждого свое мнение и свои задачи, и не надо так уж категорично заявлять, что это бесполезная трата времени.
With best regards
Pavel Dvorkin
Re[11]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 14:43
Оценка:
Здравствуйте, Философ, Вы писали:

PD>>GDI+ во многом просто настройка над GDI, и в этой части не должен тормозить. Реально код GDI выполняется в kernel mode.


Ф>Это уже давно не так.


Что именно не так ? Что код GDI выполняется в ядре ?
With best regards
Pavel Dvorkin
Re[12]: GDI+ - супер тормоз?
От: Философ Ад http://vk.com/id10256428
Дата: 28.10.22 14:52
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

Ф>>Это уже давно не так.

PD>Что именно не так ? Что код GDI выполняется в ядре ?

Угу. Его вроде ещё в 7-ке начали переносить. Потом с выходом эксплоитов для шрифтов ускорились (это времена Windows 8).
Всё сказанное выше — личное мнение, если не указано обратное.
Re[13]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 28.10.22 15:00
Оценка:
Здравствуйте, Философ, Вы писали:

PD>>Что именно не так ? Что код GDI выполняется в ядре ?


Ф>Угу. Его вроде ещё в 7-ке начали переносить. Потом с выходом эксплоитов для шрифтов ускорились (это времена Windows 8).


Хм. А можно какой-нибудь пруф ? Может, я и впрямь пропустил это ?

Пока что вижу только вот это. 2021 год, если что.

GDI is the intermediary support between a Microsoft Windows NT-based graphics driver and an application. Applications call Microsoft Win32 GDI functions to make graphics output requests. These requests are routed to kernel-mode GDI. Kernel-mode GDI then sends these requests to the appropriate graphics driver, such as a display driver or printer driver. Kernel-mode GDI is a system-supplied module that cannot be replaced.

https://learn.microsoft.com/en-us/windows-hardware/drivers/display/gdi-from-the-driver-s-perspective
With best regards
Pavel Dvorkin
Re[13]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 15:06
Оценка:
Здравствуйте, Философ, Вы писали:

PD>>Что именно не так ? Что код GDI выполняется в ядре ?


Ф>Угу. Его вроде ещё в 7-ке начали переносить. Потом с выходом эксплоитов для шрифтов ускорились (это времена Windows 8).


По большому счету разве есть разница, в ядре или нет выполняется код?
Маньяк Робокряк колесит по городу
Re[3]: GDI+ - супер тормоз?
От: Aquilaware  
Дата: 28.10.22 15:26
Оценка:
Здравствуйте, Marty, Вы писали:

M>Просто думал, может, можно как-то по-быстрому полечить GDI+


Не полечится. GDI+ писался в спешке в ожидании новой эры почти-3D приложений поэтому об оптимизации тогда никто не думал, она отладывалась на потом, так как нужно было выкатить этот API вовремя.

Потом спустя 6 лет случился DWM, который все операции отрисовки DC делает на процессоре и только потом отсылает готовую сцену соотв. окна на видеокарту. Вышло так, что привычное аппаратное ускорение отрисовки DC не получилось воткнуть в эту новую схему вещей, поэтому аппаратное ускорение было выключено даже для обычного GDI начиная с Vista. За счет продолжающей расти мощности процессоров эти изьяны были не очень заметными, поэтому никто не напрягался. А GDI+ остался таким каким он был, чисто софтовым, не до него было.

Затем новая эпоха Microsoft с их попытками засунуть ОС в другие форм-факторы полностью затмила какие-либо работы по улучшению существуещих статус-кво. А теперь имеем то, что имеем — GDI и GDI+ покрытые пятнадцетилетней пылью, но еще кое-как работающие.

Если хотите преодолеть эти ограничения — нужно Direct 3D surface поднимать и рисовать прямоугольники там, отправляя batch job прямо на видеокарту.
Re: GDI+ - супер тормоз?
От: xma  
Дата: 28.10.22 15:30
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>У меня через GDI+

M>Кто виноват и что делать?

GDI всегда был тормозом
Re[2]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.10.22 15:33
Оценка:
Здравствуйте, xma, Вы писали:

xma>GDI всегда был тормозом


GDI всегда был весьма шустр для тех задач, которые он решает
Маньяк Робокряк колесит по городу
Re[14]: GDI+ - супер тормоз?
От: Философ Ад http://vk.com/id10256428
Дата: 28.10.22 16:20
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>https://learn.microsoft.com/en-us/windows-hardware/drivers/display/gdi-from-the-driver-s-perspective


Посмотри в каком разделе ты это читаешь:

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:

https://learn.microsoft.com/en-us/windows-hardware/drivers/display/user-mode-display-drivers
В общем и целом картина сейчас выглядит так:

Если смотреть что из себя представляет Win32k.sys то обнаруживается, что его функции не так просто найти, но таки можно, и там полностью отсутствует что-либо связанное с регионами, полигонами, брашами, карандашами и тем более шрифтами. Это говорит о том, что всё это теперь за пределами ядра.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[15]: GDI+ - супер тормоз?
От: Pavel Dvorkin Россия  
Дата: 29.10.22 03:35
Оценка: +1
Здравствуйте, Философ, Вы писали:

Ф>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>https://learn.microsoft.com/en-us/windows-hardware/drivers/display/gdi-from-the-driver-s-perspective


Ф>Посмотри в каком разделе ты это читаешь:

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 байт, но есть и иного размера.

Честно говоря, не в курсе, какой из них действующий

Но вот, например

Содержимое папки C:\Windows\WinSxS\amd64_microsoft-windows-win32k_31bf3856ad364e35_10.0.19041.2006_none_2dc8ed424fad4d24

<skipped>
14.09.2022 10:12 596 992 win32k.sys
14.09.2022 10:12 3 813 376 win32kfull.sys
14.09.2022 10:12 133 784 win32u.dll


Получить его экспорты совсем не проблема

dumpbin.exe win32k.sys /EXPORTS >l

Вот кусочки оттуда

371 172 000138E0 __win32kstub_NtGdiBRUSHOBJ_DeleteRbrush
372 173 000138F0 __win32kstub_NtGdiBRUSHOBJ_hGetColorTransform
373 174 00013900 __win32kstub_NtGdiBRUSHOBJ_pvAllocRbrush
374 175 00013910 __win32kstub_NtGdiBRUSHOBJ_pvGetRbrush
375 176 00013920 __win32kstub_NtGdiBRUSHOBJ_ulGetBrushColor

413 19C 000125F0 __win32kstub_NtGdiCreatePen
414 19D 000128A0 __win32kstub_NtGdiCreateRectRgn
415 19E 00013A70 __win32kstub_NtGdiCreateRoundRectRgn
673 2A0 00012AC0 __win32kstub_NtGdiExtCreatePen


732 2DB 00012D30 __win32kstub_NtGdiGetFontData
733 2DC 00014C60 __win32kstub_NtGdiGetFontFileData
734 2DD 00014C70 __win32kstub_NtGdiGetFontFileInfo
735 2DE 00014C80 __win32kstub_NtGdiGetFontResourceInfoInternalW
736 2DF 00014C90 __win32kstub_NtGdiGetFontUnicodeRanges

Да, судя по именам, это стабы какие-то


Но там еще есть win32kfull.sys, и у него , например

1289 508 0014F5C0 NtGdiCreateDIBBrush
1290 509 00022FA0 NtGdiCreateDIBSection
1291 50A 00022B40 NtGdiCreateDIBitmapInternal
1292 50B 0029ED10 NtGdiCreateEllipticRgn
1293 50C 00120270 NtGdiCreateHalftonePalette
1294 50D 002B67C0 NtGdiCreateHatchBrushInternal
1295 50E 001573E0 NtGdiCreateMetafileDC
1296 50F 00116A90 NtGdiCreatePaletteInternal
1297 510 00126EC0 NtGdiCreatePatternBrushInternal
1298 511 000A7770 NtGdiCreatePen
1299 512 0007E440 NtGdiCreateRoundRectRgn


1250 4E1 0027C710 NtGdiAddEmbFontToDC
1251 4E2 002AD7A0 NtGdiAddFontMemResourceEx
1252 4E3 00105620 NtGdiAddFontResourceW
1253 4E4 00088790 NtGdiAddInitialFonts
1254 4E5 00289E40 NtGdiAddRemoteFontToDC

1299 512 0007E440 NtGdiCreateRoundRectRgn
1397 574 000EE8F0 NtGdiGetBoundsRect


Правда, есть там еще 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

https://learn.microsoft.com/en-us/answers/questions/213495/win32udll-vs-user32dll.html

Так что все же GDI работает в ядре.
With best regards
Pavel Dvorkin
Отредактировано 29.10.2022 7:16 Pavel Dvorkin . Предыдущая версия . Еще …
Отредактировано 29.10.2022 4:03 Pavel Dvorkin . Предыдущая версия .
Re: GDI+ - супер тормоз?
От: CEMb  
Дата: 31.10.22 08:46
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!


M>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.


M>Кто виноват и что делать?


У тебя вообще какая задача стоит, что ты взялся такие тесты делать?

btw, уроки по opengl от Neon Hlium: http://pmg.org.ru/nehe/ там есть и про шрифты. Я когда тестовые задания по opengl делал, текст выводил, проблем не было, сделал быстро, даже не помню, как.
Re[2]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.10.22 11:27
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>У тебя вообще какая задача стоит, что ты взялся такие тесты делать?


Я не тесты делаю, я прогу делаю, а тут такое...
Маньяк Робокряк колесит по городу
Re[3]: GDI+ - супер тормоз?
От: CEMb  
Дата: 01.11.22 10:58
Оценка:
Здравствуйте, Marty, Вы писали:

CEM>>У тебя вообще какая задача стоит, что ты взялся такие тесты делать?


M>Я не тесты делаю, я прогу делаю, а тут такое...


Ты там замеры делал, это тесты производительности

Вообще, если ты в GDI рисуешь, с двойной буферизацией, то оно работает довольно быстро, я на этом realtime игры делал.

Я про задачу почему спрашивал: если тебе прям надо плотно с 2D-графикой работать — лучше взять что-то более близкое к железу. SDL, может? Это оконный движок с openGL-ной графикой в основе. MS WPF — тоже на основе DirectX сделано. А GDI+ — медленный всегда был, он больше подходит, когда надо быстро(закодить) что-то небольшое нарисовать и лень разбираться. Я его использовал для закачки каких-то графических форматов, типа jpeg/tiff/png.
Re[4]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.11.22 11:39
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Вообще, если ты в GDI рисуешь, с двойной буферизацией, то оно работает довольно быстро, я на этом realtime игры делал.


Ну да, я как-то так и полагал. Но дуги корявые не понравились, решил попробовать GDI+, благо он весьма похож на GDI, а он тормозит.


CEM>Я про задачу почему спрашивал: если тебе прям надо плотно с 2D-графикой работать — лучше взять что-то более близкое к железу. SDL, может? Это оконный движок с openGL-ной графикой в основе. MS WPF — тоже на основе DirectX сделано. А GDI+ — медленный всегда был, он больше подходит, когда надо быстро(закодить) что-то небольшое нарисовать и лень разбираться. Я его использовал для закачки каких-то графических форматов, типа jpeg/tiff/png.


Плотно возможно потом понадобится, но пока это не в приоритете. Я GDI/GDI+ потому и взял, что оно мне знакомо и можно побыстрому закодить отрисовку. Иначе так бы и застрял на этапе осваивания нового графического API

Потом может переделаю, а пока просто буду замерять скорость отрисовки, и если что, говорить пользователю, что система у него медленная, и надо настройки графики поурезать
Маньяк Робокряк колесит по городу
Re: GDI+ - супер тормоз?
От: uuuser  
Дата: 03.11.22 23:13
Оценка:
Здравствуйте, Marty, Вы писали:

M>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.


GDI начиная с win7 для основных вещей имеет hw acceleration
GDI+ не имеет hw acceleration вообще.
D2D нужно юзать, или D3D

M>Кто виноват


программист.

M> и что делать?


читать доки и использовать правильные api.
Re[2]: GDI+ - супер тормоз?
От: rudzuk  
Дата: 03.11.22 23:46
Оценка:
Здравствуйте, uuuser, Вы писали:

u> GDI начиная с win7 для основных вещей имеет hw acceleration


GDI далеко не с семерки аппаратно ускоренный, а сильно-сильно раньше.
avalon/3.0.1
Re[3]: GDI+ - супер тормоз?
От: uuuser  
Дата: 04.11.22 01:42
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>GDI далеко не с семерки аппаратно ускоренный, а сильно-сильно раньше.


только в висте его убили, а в вин7 частично вернули, поэтому GDI hw acceleration на XP и Win7 как бы отличаются,
так что юзать GDI для отрисовки сложных вещей начиная с висты противопоказано.
Re: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.11.22 13:20
Оценка:
Здравствуйте, Marty, Вы писали:

M>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.


За такое время можно скачать картинку по хттп и нарисовать её жээсом.

M>Кто виноват и что делать?


10 лет назад у меня .net. system.drawing который под капотом GDI+ уверенно рисовал порядка 10..15тыс примитивов в секунду.
Это если без шрифтов. Со шрифтами намного меньше.

Покажи, что именно ты рисуешь.

Проблемы с гди+ возможны, и в странных местах — например, если логические координаты слишком большие или когда часть рендеринга идет мимо видимой области. Лучше отключить всё такое, включая клиппинг, и делать это самому. Тогда сюрпризов меньше будет.

Для примера — если логическую область сделать в логических единицах от -50млн до +50млн, и попытаться нарисовать линию стилем dash от одного края, до другого не прямо, а наискосок, то рисование такой линии занимает секунды и линия может оказаться изогнутой на экране, т.е. пройдет совсем не там, куда бы она попала если стиль solid
Отредактировано 25.11.2022 9:20 Pauel . Предыдущая версия .
Re[2]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.11.22 03:03
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>У меня через GDI+ рисуется порядка сотни прямоугольников с закругленными углами. Вот просто на глаз видно, как они медленно и печально появляются на экране. Произвел замер — время отрисовки колеблется от 50 мс до 250 мс. Это чудовищно долго. И не понятно, почему время отрисовки так скачет.


P>За такое время можно скачать картинку по хттп и нарисовать её жээсом.


Можно


P>10 лет назад у меня .net. system.drawing который под капотом GDI+ уверенно рисовал порядка 10..15тыс примитивов в секунду.

P>Это если без шрифтов. Со шрифтами намного меньше.

P>Покажи, что именно ты рисуешь.


Вот такие штуки:




P>Проблемы с гди+ возможны, и в странных местах — например, если логические координаты слишком большие или когда часть рендеринга идет мимо видимой области. Лучше отключить всё такое, включая клиппинг, и делать это самому. Тогда сюрпризов меньше будет.


Всё только в пределах экрана


P>Для примера — если логическую область сделать в логических единицах от -50млн до +50млн, и попытаться нарисовать линию стилем dash от одного края, до другого не прямо, а наискосок, то рисование такой линии занимает секунды и линия может оказаться изогнутой на экране, т.е. пройдет совсем не там, куда бы она попала если стиль solid



Никаких дашей, и только горизонтальные/вертикальные прямые, дуги и заливка. Правда, рисую не как RoundRect'ы, а как Path'ы
Маньяк Робокряк колесит по городу
Re[3]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.22 12:45
Оценка:
Здравствуйте, Marty, Вы писали:

M>Никаких дашей, и только горизонтальные/вертикальные прямые, дуги и заливка. Правда, рисую не как RoundRect'ы, а как Path'ы


А RoundRect насколько быстрый?
Re[4]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.11.22 12:49
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>Никаких дашей, и только горизонтальные/вертикальные прямые, дуги и заливка. Правда, рисую не как RoundRect'ы, а как Path'ы


P>А RoundRect насколько быстрый?


Я наврал. Просто прямоугольники с закругленными углами я как RoundRect'ы и рисую, посложнее фигуры — через Path'ы. Но таких у меня несколько штук от силы

UPD Опять наврал. Я использую RoundRect своего интерфейса, а он сам тоже через рисование Path работает. Решил переделать, погуглил — а вроде как пишут, что для GDI+ надо самому делать — https://stackoverflow.com/questions/67052759/c-gdi-how-to-draw-rectangle-with-border-radius.

А если про GDI — то оно супер быстро работает
Маньяк Робокряк колесит по городу
Отредактировано 28.11.2022 13:00 Marty . Предыдущая версия .
Re[5]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.11.22 07:46
Оценка:
Здравствуйте, Marty, Вы писали:

M>UPD Опять наврал. Я использую RoundRect своего интерфейса, а он сам тоже через рисование Path работает. Решил переделать, погуглил — а вроде как пишут, что для GDI+ надо самому делать — https://stackoverflow.com/questions/67052759/c-gdi-how-to-draw-rectangle-with-border-radius.


А что именно тормозит — создание path, или его отрисовка в графический контекст?
Re[6]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.22 07:55
Оценка:
Здравствуйте, Pauel, Вы писали:

P>А что именно тормозит — создание path, или его отрисовка в графический контекст?


Отрисовка
Маньяк Робокряк колесит по городу
Re[7]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.11.22 07:57
Оценка:
Здравствуйте, Marty, Вы писали:

P>>А что именно тормозит — создание path, или его отрисовка в графический контекст?


M>Отрисовка


А если все это вручную отрисовать, безо всякого path, как изменится перформанс?
Re[8]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.22 08:02
Оценка:
Здравствуйте, Pauel, Вы писали:

P>>>А что именно тормозит — создание path, или его отрисовка в графический контекст?


M>>Отрисовка


P>А если все это вручную отрисовать, безо всякого path, как изменится перформанс?


А как быть с заливкой? Или ты предлагаешь самому попиксельно вообще все рисовать?
Маньяк Робокряк колесит по городу
Re[9]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.11.22 08:10
Оценка:
Здравствуйте, Marty, Вы писали:

P>>А если все это вручную отрисовать, безо всякого path, как изменится перформанс?


M>А как быть с заливкой? Или ты предлагаешь самому попиксельно вообще все рисовать?


Однако, про заливку я не знал. Кстати говоря, как изменится перформанс если отключить заливку ?

А ты не мог бы фрагмент картинки показать? Есть ли вариант, скажем, нарисовать несколько типовых картинок в битмап и уже потом шпокать этот битмап?
Re[10]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.22 08:11
Оценка:
Здравствуйте, Pauel, Вы писали:


P>Однако, про заливку я не знал. Кстати говоря, как изменится перформанс если отключить заливку ?


P>А ты не мог бы фрагмент картинки показать?


Я ж вроде показывал — http://rsdn.org/forum/winapi/8417035.1
Автор: Marty
Дата: 28.11.22



P>Есть ли вариант, скажем, нарисовать несколько типовых картинок в битмап и уже потом шпокать этот битмап?


Пока — есть. Но потом хочется динамики добавить. И наверное с GDI+ придётся переползать куда-то
Маньяк Робокряк колесит по городу
Отредактировано 29.11.2022 8:12 Marty . Предыдущая версия .
Re[11]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.11.22 08:59
Оценка:
Здравствуйте, Marty, Вы писали:

P>>А ты не мог бы фрагмент картинки показать?


M>Я ж вроде показывал — http://rsdn.org/forum/winapi/8417035.1
Автор: Marty
Дата: 28.11.22


Я имею ввиду весь результ или кусочек его. Одного элемента маловато, что бы суть происходящего понять.
Re[12]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.22 09:03
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>Я ж вроде показывал — http://rsdn.org/forum/winapi/8417035.1
Автор: Marty
Дата: 28.11.22


P>Я имею ввиду весь результ или кусочек его. Одного элемента маловато, что бы суть происходящего понять.


Ну вот как-то так
Маньяк Робокряк колесит по городу
Re[13]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.11.22 11:07
Оценка:
Здравствуйте, Marty, Вы писали:

M>>>Я ж вроде показывал — http://rsdn.org/forum/winapi/8417035.1
Автор: Marty
Дата: 28.11.22

P>>Я имею ввиду весь результ или кусочек его. Одного элемента маловато, что бы суть происходящего понять.
M>Ну вот как-то так
M>Image: 2022_10_02_12_03_20_image.png

А если заливку отключить? Т.е. что по времени отъедает больше всего?
Re[14]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.22 11:15
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>Ну вот как-то так

M>>Image: 2022_10_02_12_03_20_image.png

P>А если заливку отключить? Т.е. что по времени отъедает больше всего?


  Тайминги без заливки
DoPaint: 31ms
DoPaint: 47ms
DoPaint: 47ms
DoPaint: 47ms
DoPaint: 47ms
DoPaint: 31ms
DoPaint: 32ms
DoPaint: 47ms
DoPaint: 63ms
DoPaint: 32ms
DoPaint: 31ms
DoPaint: 47ms
DoPaint: 47ms
DoPaint: 46ms
DoPaint: 47ms
DoPaint: 31ms
DoPaint: 47ms
DoPaint: 47ms
DoPaint: 31ms

Если сравнить тем, что я приводил раньше
Автор: Marty
Дата: 28.10.22
, то где-то раза в два-три побыстрее, но все равно в дцать раз медленнее обычного GDI
Маньяк Робокряк колесит по городу
Re[15]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.11.22 14:41
Оценка:
Здравствуйте, Marty, Вы писали:

M>Если сравнить тем, что я приводил раньше
Автор: Marty
Дата: 28.10.22
, то где-то раза в два-три побыстрее, но все равно в дцать раз медленнее обычного GDI


А если поиграться с настройками сглаживания? У меня шота не складывается пазл, какая то загадка у тебя. Работает как в конце 90х
Re[16]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.22 14:50
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>Если сравнить тем, что я приводил раньше
Автор: Marty
Дата: 28.10.22
, то где-то раза в два-три побыстрее, но все равно в дцать раз медленнее обычного GDI


P>А если поиграться с настройками сглаживания? У меня шота не складывается пазл, какая то загадка у тебя. Работает как в конце 90х


Настройки сглаживания по идее только на границы должны влиять. Куда 2/3 времени при заливке уходят — не понятно. Ну и я пробовал играть — но то ли баг где-то у меня, то ли хз — но всякие антиальясинг опции для GDI+ ничего не меняют
Маньяк Робокряк колесит по городу
Re[16]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.22 14:58
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>Если сравнить тем, что я приводил раньше
Автор: Marty
Дата: 28.10.22
, то где-то раза в два-три побыстрее, но все равно в дцать раз медленнее обычного GDI


P>А если поиграться с настройками сглаживания? У меня шота не складывается пазл, какая то загадка у тебя. Работает как в конце 90х


Ну, если что, у меня видяха хоть если и не из девяностых, то из начала десятых, low profile low power AMD какая-то. Меня устраивает в общем, я её уже в третий комп переставляю. Но если по текущему проекту, мне бы вообще хотелось, чтобы всё работало на любом древнем хламе
Маньяк Робокряк колесит по городу
Re[17]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.11.22 10:39
Оценка:
Здравствуйте, Marty, Вы писали:

M>Ну, если что, у меня видяха хоть если и не из девяностых, то из начала десятых, low profile low power AMD какая-то. Меня устраивает в общем, я её уже в третий комп переставляю. Но если по текущему проекту, мне бы вообще хотелось, чтобы всё работало на любом древнем хламе


А если тож самое отрендерить в битмап, как изменится перформанс? Это чтобы проверить, видяха виновата или нет.
Re[18]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.22 10:41
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>Ну, если что, у меня видяха хоть если и не из девяностых, то из начала десятых, low profile low power AMD какая-то. Меня устраивает в общем, я её уже в третий комп переставляю. Но если по текущему проекту, мне бы вообще хотелось, чтобы всё работало на любом древнем хламе


P>А если тож самое отрендерить в битмап, как изменится перформанс? Это чтобы проверить, видяха виновата или нет.


В битмап — это в MemoryDC? Там видяха не будет участвовать? Или как-то по другому?
Маньяк Робокряк колесит по городу
Re[19]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.11.22 11:17
Оценка:
Здравствуйте, Marty, Вы писали:

P>>А если тож самое отрендерить в битмап, как изменится перформанс? Это чтобы проверить, видяха виновата или нет.


M>В битмап — это в MemoryDC? Там видяха не будет участвовать? Или как-то по другому?


Наверное в меморидц, рисовать должен процессор, насколько я понимаю.
Re[20]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.22 11:34
Оценка:
Здравствуйте, Pauel, Вы писали:

P>>>А если тож самое отрендерить в битмап, как изменится перформанс? Это чтобы проверить, видяха виновата или нет.


M>>В битмап — это в MemoryDC? Там видяха не будет участвовать? Или как-то по другому?


P>Наверное в меморидц, рисовать должен процессор, насколько я понимаю.


Ну, с одной стороны похоже на то, да, но с другой стороны это убивает напрочь идею двойной буферизации — отрисовка в бэк буфер не будет аппаратно ускоряться.

Хотя, почитал — вроде так. Странно. Раньше что-то не задумывался
Маньяк Робокряк колесит по городу
Re[21]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.11.22 12:51
Оценка:
Здравствуйте, Marty, Вы писали:

P>>Наверное в меморидц, рисовать должен процессор, насколько я понимаю.


M>Ну, с одной стороны похоже на то, да, но с другой стороны это убивает напрочь идею двойной буферизации — отрисовка в бэк буфер не будет аппаратно ускоряться.


Не убивает. Просто ты руками это будешь делать. Склеиваешь слои из битмапу и потом плюхаешь это в wm-paint.

Перформанс как изменится, если в через мемори рисовать?
Re[22]: GDI+ - супер тормоз?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.22 13:03
Оценка:
Здравствуйте, Pauel, Вы писали:

M>>Ну, с одной стороны похоже на то, да, но с другой стороны это убивает напрочь идею двойной буферизации — отрисовка в бэк буфер не будет аппаратно ускоряться.


P>Не убивает. Просто ты руками это будешь делать. Склеиваешь слои из битмапу и потом плюхаешь это в wm-paint.


P>Перформанс как изменится, если в через мемори рисовать?



Ну, GDI+ то он вроде и так всё процессором рисует, а вот обычный GDI вроде использует аппаратное ускорение видяхи, когда на экран рисует
Маньяк Робокряк колесит по городу
Re[23]: GDI+ - супер тормоз?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.11.22 13:13
Оценка:
Здравствуйте, Marty, Вы писали:

M>Ну, GDI+ то он вроде и так всё процессором рисует, а вот обычный GDI вроде использует аппаратное ускорение видяхи, когда на экран рисует


Надо выяснить, поменяется ли перформанс. А он может поменяться в обе стороны.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.