Производительность
От: SanyaVB  
Дата: 26.04.11 07:34
Оценка:
Допустим, что мы рисуем с помощью Visual какую-нибудь “хитрую” графику. А вывод осуществляем одним из способов:
1) Простым способом отображаем в окне WPF
2) Создаем BitmapSource и передаем его на отрисовку графики OpenGL (адрес неуправляемой памяти для картинки задается на этапе инициализации и далее не меняется)
Вот у меня вопрос: Какой из вариантов будет работать быстрее, если не учитывать время выполнения CopyPixels? Будет ли первый вариант быстрее, т.к. он использует ускорение DirectX нежели второй или они оба его используют?
Re: Производительность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.04.11 07:40
Оценка: +1
Здравствуйте, SanyaVB, Вы писали:

Лучше не смешивайте в одном приложении DirectX (который используется неявно WPF) и OpenGL.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Производительность
От: SanyaVB  
Дата: 26.04.11 07:51
Оценка:
Здравствуйте, adontz, Вы писали:

A>Лучше не смешивайте в одном приложении DirectX (который используется неявно WPF) и OpenGL.


Да вот проблема. Вся 3D-графика(куплена) рисуется на OpenGL. Нужно наложить 2D слой, который поддерживает векторную графику. руководство решило использовать WPF. Я решил просто создать окно с прозрачным фоном и положить его по верх всех окон — в результате пошли мигания, т.к. видеопамять делилась на DirectX и OpenGL. Если отправлять картинку, то проблема решиться. Вот меня интересует как отразится на производительность?
Re: Производительность
От: Sinix  
Дата: 26.04.11 07:53
Оценка: +1
Здравствуйте, SanyaVB, Вы писали:

SVB>Вот у меня вопрос: Какой из вариантов будет работать быстрее, если не учитывать время выполнения CopyPixels? Будет ли первый вариант быстрее, т.к. он использует ускорение DirectX нежели второй или они оба его используют?


На машинах с дровами из win update не аппаратного ускорения OpenGL. Если у вас действительно проблемы с производительностью — может, стоит использовать D3DImage?
Re[3]: Производительность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.04.11 07:53
Оценка:
Здравствуйте, SanyaVB, Вы писали:

SVB>Да вот проблема. Вся 3D-графика(куплена) рисуется на OpenGL. Нужно наложить 2D слой, который поддерживает векторную графику. руководство решило использовать WPF. Я решил просто создать окно с прозрачным фоном и положить его по верх всех окон — в результате пошли мигания, т.к. видеопамять делилась на DirectX и OpenGL. Если отправлять картинку, то проблема решиться. Вот меня интересует как отразится на производительность?


Дело не в производительности, от ваших фокусов многие драйвера видеокарт просто заглючат. Либо вам надо иметь просто огромный (десятки) парк физических (виртуалки тут бесполезны) машин для тестирования.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Производительность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.04.11 07:56
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>На машинах с дровами из win update не аппаратного ускорения OpenGL. Если у вас действительно проблемы с производительностью — может, стоит использовать D3DImage?


Да там и DirectX как правило так себе. Хотя да, OpenGL совсем не ускоряется. Кстати видеокарты AMD/ATI обладают существенно худшими (программно ограниченными в функциональности) драйверами OpenGL. То есть одна и та же функция доступна в DirectX и не доступна в OpenGL.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Производительность
От: SanyaVB  
Дата: 26.04.11 07:58
Оценка:
Здравствуйте, adontz, Вы писали:

A>Дело не в производительности, от ваших фокусов многие драйвера видеокарт просто заглючат. Либо вам надо иметь просто огромный (десятки) парк физических (виртуалки тут бесполезны) машин для тестирования.


А это уже интересно. если можно, поподробнее. Я же просто создаю Visul, а далее:

RenderTargetBitmap bitmap = new RenderTargetBitmap(xxx, xx, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(visual);

без отрисовки на окне, контроле, панели. Или в этом случае видеокарта будет напрягаться?
PS: разрешение картинки 800х600
Re[2]: Производительность
От: SanyaVB  
Дата: 26.04.11 08:02
Оценка:
Здравствуйте, Sinix, Вы писали:

S>На машинах с дровами из win update не аппаратного ускорения OpenGL. Если у вас действительно проблемы с производительностью — может, стоит использовать D3DImage?


Я рисую 2D слой и он не накладывается на 3D поверхность. А просто слой выносится на передний план, по типу меню в играх.
Re[5]: Производительность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.04.11 08:06
Оценка:
Здравствуйте, SanyaVB, Вы писали:

SVB>
SVB>RenderTargetBitmap bitmap = new RenderTargetBitmap(xxx, xx, 96, 96, PixelFormats.Pbgra32);
SVB>bitmap.Render(visual);
SVB>

SVB>без отрисовки на окне, контроле, панели. Или в этом случае видеокарта будет напрягаться?
SVB>PS: разрешение картинки 800х600

Дело не в нагрузке, а в том что вы используете сразу два API в рамках одного приложения. Никто не обещал что это будет работать и это таки время от времени не работает. Причём глюки могут быть на конкретной версии драйверов и могут исчезать и появляться с обновлением версии драйвера. Дело ваше, но я бы себе таких приключений не искал.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Производительность
От: SanyaVB  
Дата: 26.04.11 08:08
Оценка:
Здравствуйте, adontz, Вы писали:

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


А что посоветуешь? А если развести это на две машины и передавать через сеть картинку?
Re[7]: Производительность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.04.11 08:10
Оценка:
Здравствуйте, SanyaVB, Вы писали:

SVB>А что посоветуешь? А если развести это на две машины и передавать через сеть картинку?


Сеть это overkill. Достаточно двух отдельных процессов.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[8]: Производительность
От: SanyaVB  
Дата: 26.04.11 08:18
Оценка:
Здравствуйте, adontz, Вы писали:

A>Сеть это overkill. Достаточно двух отдельных процессов.


А отдельный поток сойдет?
И все же. как в этом случае отразиться генерация изображения? ну так на скидку в 2-3 раза?
Re[9]: Производительность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.04.11 08:23
Оценка:
Здравствуйте, SanyaVB, Вы писали:

SVB>А отдельный поток сойдет?


Нет.

SVB>И все же. как в этом случае отразиться генерация изображения? ну так на скидку в 2-3 раза?


Копирование памяти видеокарта умеет делать сама, так что разницы между вариантом с буфером и без вы вообще не должны заметить. Правда буфер должен находится в видеопамяти, это должен быть frame buffer. Для вас это, скорее всего будет выглядеть как рисование напрямую, но с буферизацией OpenGL.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[9]: Производительность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.04.11 08:25
Оценка:
Здравствуйте, SanyaVB, Вы писали:

Да, по поводу обмена данными. Я как-то измерял, по named pipes между двумя процессами на одной машине удалось прогнать 750Мб/сек. Это к вопросу об IPC.

ИМХО проще отказаться от WPF, раз уж OpenGL часть куплена.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[10]: Производительность
От: SanyaVB  
Дата: 26.04.11 09:08
Оценка:
Спасибо!
Re: Производительность
От: Noen  
Дата: 28.04.11 05:46
Оценка:
Здравствуйте, SanyaVB, Вы писали:

SVB>Допустим, что мы рисуем с помощью Visual какую-нибудь “хитрую” графику. А вывод осуществляем одним из способов:

SVB>1) Простым способом отображаем в окне WPF
SVB>2) Создаем BitmapSource и передаем его на отрисовку графики OpenGL (адрес неуправляемой памяти для картинки задается на этапе инициализации и далее не меняется)
SVB>Вот у меня вопрос: Какой из вариантов будет работать быстрее, если не учитывать время выполнения CopyPixels? Будет ли первый вариант быстрее, т.к. он использует ускорение DirectX нежели второй или они оба его используют?
Может попробовать отключить аппаратное ускорение WPF?
http://msdn.microsoft.com/en-us/library/aa970912.aspx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.