Directx або opengl блог михаила флёнова

Це черговий халіварний і трохи релігійний суперечка - що крутіше OpenGL або DirectX, а моя позиція як завжди полягає в тому, що вони обидва гарні по своєму.

По можливостях DirectX перевершує OpenGL, тут Microsoft прилаштувала дуже хорошу роботу, але у OpenGL теж є своя перевага - межплатформенному. Написаний один раз код можна адаптувати під різні платформи. Я не кажу, що код буде працювати відразу скрізь, але ось адаптувати цілком реально.

OpenGL доступна як на Windows, так і на набирає популярність MacOS, постійно постійно сопротивляющемся, але як ніколи перспективному Linux. А якщо говорити про мобільних платформах, то він доступний для iOS і Android. А це неймовірно великий плюс.

Якщо ви хочете обмежитися тільки платформою Microsoft, то вибір очевидний - писати треба під DirectX. Ну а якщо є плани завоювати мобільний ринок, то варто подумати про OpenGL, тому що Microsoft на цьому ринку поки результатами похвалитися не може.

Чому я вирішив написати про протистояння DirectX проти OpenGL? Просто побачив у одного програміста висловлювання про те, що OpenGL занадто роздроблений і виробники часто роблять розширення, які не сумісні між собою. Не завжди вдається легко перенести код на іншу платформу.

Ну у випадку з MS взагалі обмежений тільки MS. І навіть якщо писати тільки для Microsoft переходи на нові версії далеко не завжди можливі. Один тільки перенесення коду з версії 9 на 10 був прекрасним. Я пам'ятаю, як у 9-й версії Microsoft просто взяла і змінила метод роботи з шейдерами. Просто черговий реліз SDK (здається він був літній) відрізнявся трохи від попереднього.

У Microsoft навіть всередині платформи з переносами коду на новішу версію можуть виникнути проблеми. Тут я б не виділив переможця, тому що у обох бібліотек були проблеми з сумісністю. Ще раз скажу, що має сенс вибирати DirectX, якщо ви обмежуєтеся платформою Windows. Ну а на платформах Android або iOS бору немає, доводиться вибирати OpenGL.

Ех, було б все так просто з OpenGL. Зараз так чи інакше Існують використовуються 6 малосумісні стандартів (2.1,3.3,4.х, ES 1.0, ES 2.0, ES 3.0), у яких відрізняються мови шейдеров, частково (а іноді майже повністю) різні API. Гірше того, немає референсной реалізації і дуже мало контролю якості. У підсумку на більшій частині PC ринку (Intel і AMD) OpenGL реалізований криво, а на мобільниках, крім часто кривих драйверів (для Adreno (ex-ATI, че тут хотіти), дуже сильно розрізняються підходи до оптимізації

Михайло ви трохи не праві. Вибирати DirectX потрібно тільки в одному єдиному випадку. Якщо ви хочете обмежити свою аудиторію не тільки платформою Віндоус а й однією версією вінди і точним збігом по виробникам і серіям копмлеткующіх компа з використанням для розробки. І хоча ніхто не буде сперечатися що написане з іспользваніем директив буде працювати і на інших комплектуючих і навіть деяких версіях вінди, все ж при будь-якому розбіжності картинка буде відрізнятися в гірший бік так само як і продуктивність. У всіх інших випадках якщо розробник хоче донести своє творіння в тому вигляді як він це робив потрібно просто обов'язково вибирати OpenGL.

OpenGL на PC працює екстремально погано. Шансів, що все буде працювати на AMD мало. Про Intel я взагалі промовчу. У користувача, особливо на хрюшки може не стояти драйверів, що забезпечить йому кльовий софтварний рендер і підтримку аж API 1.1. При цьому є відмінний шанс на те, що D3D гра буде працювати чудово.

crsib. сподіваюся у вас є свої ігрові проекти. мені достатньо того що я надивився скільки коду пишуть що б картинка просто була всюди де є цей D3D9, я не буду сперечатися що велика частина програмістів використовують DirectX Нелінивих люди на відміну від віддають перевагу OpenGL але це не дає додає гідності самому DirectX. Зрештою особисто для мене мірилом явлются витрати розробників а у випадку з Директом вони незрівнянно більше з куди меншим корисним вихлопом в результаті.

У мене-то якраз є. Причому на OpenGL ES. Про трудовитрати взагалі не зрозумів жарту. Стежити за станом конвеєра на OpenGL та ще катування, тому що значна частина його Інкапсульована чомусь в графічні "примітиви". Тримати код перносімим це взагалі жесть. У ES 1 взагалі немає вимог до форматів апаратного стиснення текстур, у ES 2.0 є убогий ETC. У підсумку на той же андроїд доводиться збирати пачку білдів з текстурами в різних форматах. Я вже не кажу про те, що у PowerVR і Mali і у Adreno місцями прямо протіволопожние підходи до оптимізації на рівні OpenGL (при його підході до абстракції "заліза"). Про PC я навіть говорити не хочу. Через те, що доводиться працювати OpenGL в моїх Компьтер завжди буде прискорювач від nVidia. У мене тупо немає вибору. Я можу майже гарантувати, що написаний в відповідність зі стандартом код на Intel GMA / HD працювати тупо не буде, навіть якщо я 10 драйверів поставлю. Ну або буде працювати так, що краще б чесно не заробив. Майже таже історія з ATI / AMD, ситуація лише не набагато краще.

Загалом твої коментарі звучать в дусі початківця розробника, який ще просто не встиг пройти всі кола пекла продакшен розробки на OpenGL

Схожі статті