[GDI+] Вопрос о производительности.
И в чем вопрос?
Тебе не кажется, что это СЛИШКОМ медленно? Может, я что-то не так делаю?
Нет, не кажется.
То есть GDI+ была создана не для производительности?
Да.
А что обычно используют для вывода 2D спрайтовой графики в оконном приложении? Обязательно с наличием переноса и поворота.
GDI/GDI+. Лично я использую cairo. Хотя там даже о 20 кадрах в секунду говорить не приходится.
opengl
Извращенец
а хуле, зато проблема быстродействия отпадет начисто
Так ведь GDI без + не умеет поворачивать. А 20 кадров в секунду - это маловато. Можно на OpenGL написать, работает отменно быстро, только качество оставляет желать лучшего. Самый хороший результат получился на Direct3D, но к сожалению не все видеокарты офисных компьютеров поддерживают оконный режим.
Можешь выложить скриншоты на базе opengl/direct3d/software? Интересно сравнить качество...
Так ведь GDI без + не умеет поворачивать.BOOL SetWorldTransform(
HDC hdc, // handle to device context
CONST XFORM *lpXform // transformation data
);
и т.д.
Вьюеры некоторых форматов из AutoCAD используют OpenGL (2Д вывод идет намного быстрее, чем GDI). DWG Direct, например.
Это работает только для ОС линейки NT.
Так там в этих вьюверах внутри все векторное видимо. Поэтому OpenGL оправдан (и работает быстро). А тут говорят про вывод растровой графики.
На это есть серьёзные ограничения. Я пробовал, уже не помню что именно.
OpenGL - 60, ограничено refresh rate монитора
D3D - 400
GDI+ - 20
The common language runtime uses an advanced implementation of the Windows graphics design interface (GDI) called GDI+. GDI+ allows you to create graphics, draw text, and manipulate graphical images as objects. GDI+ is designed to offer performance as well as ease of use.
Слышал, что современные видюхи аппаратно ускоряют GDI+.
*поднимает челюсть с пола* Чо?
Большое количество старых видеокарт не поддерживают Direct3D в оконном режиме. При попытке инициализации возвращают ошибку. В офисных компах сейчас обычно используют встроенные видюхи, в большем случае они всё-таки поддерживают Direct3D, но вот в оконном режиме не могут. Этого и касалась моя фраза.
А пример такой видеокарты можно? Ты имеешь в виду только HAL режим или Software тоже?
Я сейчас не смогу точный пример видеокарты назвать, какая-то от Intel.
Может это все таки исключение, чем правило. Возможно драйвера кривые.
Не знаю, сейчас наверное почти 99% исключение. Но с другой стороны, если ты хочешь сделать 2D проект, то это неразумно писать в требованиях "Direct3D compatible videocard'.
Речь, вроде, шла про DirectX и, в частности, DirectDraw.
Чувааак, забей.
Так не бывает. Ну то есть это единичный пример. Глюкавая карта, левые дрова етс.
S3 Trio с четырьмя метрами вполне держит оконный режим DX, насколько я помню. Riva TNT 2 M64 - тоже. Офис, в котором стоит что-то хуже, не является твоей таргет груп, потому что ничего не купит. И вообще, рассчитывать на офисные компы как-то странно. Ни разу не слышал про организацию, которая покупала сотрудникам игры на рабочее место. Или сотрудники, которые покупают игрушку не на домашний комп, у меня как-то в голову не пролазят.
Определись с таргет груп, короче.
2ДаркГрей - начиная с 8 ДХа ДиректДрав перестало существовать. Закладываться на что-нибудь более раннее - бессмысленно, так как в ХР по дефолту 8.1 (если не позже).
например, методы переключения режимов к какому разделу DirectX сейчас относятся?
типа он имеет в виду что нет развития - IDirectDraw8 отсутствует. А все предыдущие естественно есть и ими можно спокойно пользоваться.
понял, сейчас это называется - DirectX Graphics, но все равно это не совсем Direct3D (совсем не Direct3D)
Я говорю о Direct3D, потому что только он умеет все нужные преобразования со спрайтами делать. А DirectDraw не умеет.
Оставить комментарий
kokoc88
Есть программа, которая создаёт memory device context, на основе которого затем создаётся Graphics. Далее она рисует спрайты из Bitmap/Image с помощью DrawImage с преобразованиями поворота, переноса, и прозрачным фоном. Уже при наличии 20 спрайтов производительность на моём компе (P4 2.4) падает до 20fps. Конечно, CachedBitmap рисуются очень быстро, но смысла в них мало, т.к. там нет поддержки каких-либо преобразований, кроме переноса, и в таком случае выгоднее использовать DirectDraw.