HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > OpenGL vs Direct3D
Тема не для холивара!
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


OpenGL vs Direct3D

Т.к. ни для кого уже не секрет, что я занимаюсь мультирендером в волатиле, решил создать тему, где буду делиться впечатлениями от обоих API (OpenGL, D3D9) при решении одних и тех же задач.
Если у вас есть собственные наблюдения - пожалуйста, давайте делиться ими в этой теме.

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

1) Сглаживание (multisample)
Для включения MSAA в OpenGL под виндой требуется пересоздавать окно программы! Почему? Оч. просто. Сначала нужно создать контекст и получить кои-какие функции WGL, т.к. в винде имеются только функции GL 1.1, и остальные надо получать через расширения. Без контекста их получить нельзя. А заодно надо проверить, поддерживается ли MSAA драйвером. Но чтобы создать контекст, надо установить пиксельформат. А изменить его для одного и того же окна уже никак нельзя.
В D3D есть функция CheckDeviceMultisampleType, её можно вызвать до создания девайса. Ничего пересоздавать не требуется.
Справедливости ради отметим, что в Linux окно тоже пересоздавать не нужно, GLX реализован грамотнее, чем WGL.

2) Многопоточный рендеринг
Контекст OpenGL может быть current только для одного потока в каждый момент времени. Поэтому, если мы желаем рисовать в отдельном потоке, надо вызывать в нём wglMakeCurrent. Но что если нам надо, вернувшись в основной поток, тоже выполнить какую-нибудь GL-команду, да хотя бы glReadPixels для скриншута? Мы должны вызвать wglMakeCurrent в основном потоке. Но он уже вызван в потоке рисования! Значит, после рендеринга надо освободить контекст в потоке рисования. Т.е. мы вызываем wglMakeCurrent( hdc, hglrc ) два раза за кадр - в потоке рисования и в основном, а также wglMakeCurrent( hdc, NULL ) тоже два раза. Можно, конечно, слегка оптимизировать, вызывая wglMakeCurrent в основном потоке только тогда, когда мы собираемся выполнять команды OpenGL. Но это сильно усложняет логику - ведь команда снятия скриншута может поступить, вообще говоря, на любом кадре, или, скажем, игрок захочет подгрузить доп. текстурку (скин модели игрока). Но в любом случае как минимум один раз пара вызовов wglMakeCurrent будет вызвана. А эта команда, вообще говоря, довольно затратная - это мы знаем ещё по использованию pbuffer (одна из причин его замены на FBO - именно этот wglMakeCurrent).
В D3D, согласно документации, есть "внутренние механизмы синхронизации", поэтому никакие функции вызывать не надо, можно смело дёргать команды отрисовки из любого потока. В итоге выигрыш от многопоточности становится ощутимее.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 137718

Старое сообщение 16-05-2014 19:52
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Первый пункт... Ну, в общем-то мне плевать на сглаживание. А если учесть разрешения современных дисплеев, то без него вполне можно обойтись при 1920х1080 и даже при более низком кол-ве пикселей. А вот второй... Если D3D менее затратен, это даёт ему хорошее преимущество. Как человек, ничего толком не смыслящий в кодинге графики, в очередной раз напишу: D3D рано или поздно изломается с новой версией винды. А OpenGL будет соместим. Ну или по-любому будет враппер OpenGL-D3D, исправляющий несовместимость. А вот обратно навряд ли. Уж больно они говённые, врапперы из D3D в OpenGL.

Добавлено 17-05-2014 в 03:33:

Цитата:
XaeroX писал:
GLX реализован грамотнее, чем WGL.

Потому что мелкомягкие стараются продвигать свою собственную технологию. Вот ещё бы старые версии в новых операционках без проблем работали, было бы круто.

Сообщить модератору | | IP: Записан
Сообщение: 137721

Старое сообщение 16-05-2014 20:33
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12882
Возраст: 32

Рейтинг



У проектов на d3d есть одно маленькое но довольно интересное преимущество (по моим наблюдениям) - они не так капризны к драйверам. Ну т.е. таже халфа спойкойно работает на любом офисном древнющем компутере в д3д, а огл не робит и всё тут - иди ищи дрова .

Сообщить модератору | | IP: Записан
Сообщение: 137724

Старое сообщение 16-05-2014 22:01
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
FiEctro писал:
а огл не робит и всё тут - иди ищи дрова

Дык это проблема чисто операционки, то есть винды. Такие уж дефолтные дрова от мелкософта. В линуксе вон тоже без драйверов от производителя железа ничего в 3Д не работает. А со свободными драйверами, как их там, Nouveau кажется, будут аццкие тормоза, либо половина фич не будет поддерживаться. Так что это вполне нормальная ситуация, когда в винде D3D приложения могут работать искаропки. Опять же зависит от видеокарточки и версии WDM. То же самое и в линуксе: со старыми видеокартами Nouveau показывает хорошие результаты.

Отредактировано Ku2zoff 17-05-2014 в 11:01

Сообщить модератору | | IP: Записан
Сообщение: 137727

Старое сообщение 17-05-2014 10:53
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Ku2zoff писал:
Вот ещё бы старые версии в новых операционках без проблем работали, было бы круто.

Не понял. Какие старые версии не работают в новых операционках?
В WinXP работает даже DX6 (тот, что в первом Half-Life используется).
Да и в новых должно работать.
Цитата:
Ku2zoff писал:
в винде D3D приложения могут работать искаропки.

К сожалению, это не так. Без установки драйверов не будут работать ни D3D, ни OGL приложения. Проверить легко - удалите драйвера, установите дефолтовые и запустите DxDiag. Вы увидите, что поддерживается только DirectDraw, но не Direct3D.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 137728

Старое сообщение 17-05-2014 11:48
-
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: ㅤ
Сообщений: 5125

Рейтинг



Тема интересная, жаль что её опять свели к драйверам и осям.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 137730

Старое сообщение 17-05-2014 12:51
- За что?
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


XaeroX про мантл расскажи что-нибудь. Мне интересно, за ним ли будущее?

Вообще преимущества Д3Д очень сомнительные. Т.е. скорее для программера, чем для юзера (т.к. последнему важнее что его игра запускается везде где надо).

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]

Сообщить модератору | | IP: Записан
Сообщение: 137736

Старое сообщение 17-05-2014 13:43
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
Для включения MSAA в OpenGL под виндой требуется пересоздавать окно программы!

Сглаживание можно включить в дровах видеокарты, большинство так и делает. Ведь далеко не во всех играх есть такая опция. Да я больше скажу - сам алгоритм сглаживания - невыносимо идиотский. Ну что это такое - отрендерить здоровую картинку, а потом слерпить в маленькую. Нам единственное чего надо - это провода сглаживать, а больше ничего.
Провада и решетки.
Цитата:
XaeroX писал:
Многопоточный рендеринг

Когда всё на GPU пункт полностью теряет смысл - быстрее уже точно не будет, любая видеокарта уделывает CPU как бог черепаху.
Это возможно имело бы смысл только для таких древних рендереров как в ку3. Сейчас во втором потоке логичнее пустить физику и симулятор AI.
Честно говоря для меня эти преимущества таковыми не являются.
Ждём новых.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 137737

Старое сообщение 17-05-2014 13:46
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Да я больше скажу - сам алгоритм сглаживания - невыносимо идиотский. Ну что это такое - отрендерить здоровую картинку, а потом слерпить в маленькую.

Я вообще-то про MSAA пишу, а не про SSAA.
Цитата:
Дядя Миша писал:
Честно говоря для меня эти преимущества таковыми не являются.

А у меня не было цели назвать преимущества конкретно для тебя.
Я называю преимущества как таковые. Если ты не понимаешь, как организовать многопоточный рендеринг, эффективный даже тогда, когда "всё на GPU" - это ведь не мои проблемы, правда? И не проблемы D3D?
Цитата:
~ X ~ писал:
про мантл расскажи что-нибудь. Мне интересно, за ним ли будущее?

Я с ним не работал, увы.
Цитата:
~ X ~ писал:
Т.е. скорее для программера, чем для юзера

Да, эта тема исключительно для программеров.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 137740

Старое сообщение 17-05-2014 14:34
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Дядя Миша
Ещё раз повторю. Если ты не понимаешь, как что-то можно сделать, это не означает, что это сделать нельзя. И незачем пытаться сводить всё к абсурду, все давно в курсе про твоё искромъотное чувство юмора.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 137745

Старое сообщение 17-05-2014 14:57
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Я не про то, что нельзя. Я про то, что смысла не имеет.
Даже с мультипоточным рендерером маленькая комнатка с мягкими партиклами выдаёт 30 фпс на 9800GT. Я полагаю в однопоточном рендере будет даже быстрее, из-за отсутствия потерь времени на синхронизацию потоков.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 137747

Старое сообщение 17-05-2014 15:09
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Забавно

Тестирую волатилу, карта с кучей полигонов (арканос), оптимизации нет, все сурфасы рисуются скопом, даже без сортировки. Вертексный буфер, но в системной памяти.
OpenGL: 400 fps
Direct3D9: 800 fps
SMP, 4xFSAA, 16xAA.
Крутил и так, и эдак - D3D9 упорно выдаёт более высокий фпс.
Такие дела...

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 140163

Старое сообщение 17-08-2014 19:13
-
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 29

Рейтинг



XaeroX Это GTX275? Если что-то слабее взять, то как с FPS дела?

__________________
Base Defense on Steam, ModDB

Сообщить модератору | | IP: Записан
Сообщение: 140164

Старое сообщение 17-08-2014 19:23
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 140165

Старое сообщение 17-08-2014 21:02
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
XaeroX писал:
OpenGL: 400 fps
Direct3D9: 800 fps

Цитата:
XaeroX писал:
На других пока не тестировал. Это, так сказать, первичные замеры.

А если с другими драйверами или на другой видеокарте будет одинаковая производительность? Мне стало интересно. Я хотел бы на своей машине замерить

Сообщить модератору | | IP: Записан
Сообщение: 140168

Старое сообщение 18-08-2014 05:45
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 08:30. Новая тема    Ответить
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > OpenGL vs Direct3D
Тема не для холивара!
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024