• Главная

Должен ли Direct3D использовать OpenGL в Windows? Что лучше директ или опенгл


Что лучше DirectX или OpenGL?

Форум: "Игры";Поиск по всему сайту: www.delphimaster.net;Текущий архив: 2004.07.11;Скачать: [xml.tar.bz2];

Вниз

Что лучше DirectX или OpenGL? 
Юрий Ж. ©   (2004-03-15 20:29) [0]

Вопрос конечно вечен, но...

Magikan ©   (2004-03-16 02:56) [1]

SDL + OpenGL

TButton ©   (2004-03-16 12:45) [2]

DirectX лучше работает под виндамиOGL одинаково криво работает на любой платформе, выбор за тобой.

hexone ©   (2004-03-16 13:30) [3]

> OGL одинаково криво работает на любой платформе,.. если руки кривые.

WebError   (2004-03-16 17:28) [4]

Смотря, что тебе надо, какие у тебя знания ООП (если никаких, то DX противопоказан!) OGL предполагает хорошее знание платформы на которой пишешь, но заточена под процеДуры, а вот DX - чистейший ООПс! COM - forever! Вообще-то что-то несложное, тогда выбирай OpenGL, подключи GL, GLU, GLAUX и работай себе на здоровье! :)

cyborg ©   (2004-03-16 19:35) [5]

Корректней вопрос звучать должен так: "Что лучше Direct3D или OpenGL?".А в данном случае DirectX естественно лучше, так, как там много чего есть.

Mihey ©   (2004-03-16 20:16) [6]

2 cyborg:

А если корректно?

cyborg ©   (2004-03-16 21:30) [7]

А если корректно, то я не знаю.

Magikan ©   (2004-03-17 05:01) [8]

Кто там что про OGL заливает? Про Quake 3 забыли? После того, как Loki Entertaiment перенесла его на SDL (которая отлично работает совместно с OpenGL) - компилируется на любой платформе (windows, linux, FreeBSD, MacOS classic, MacOS X, BeOS, Solaris и пр.) без изменения кода. Быстродействие ничуть не хуже, чем в оригинале (по крайней мере в версии для Linux). А DirectX - это лишняя головная боль, особенно для начинающих геймеров. Не для игровой библиотеки была придумана COM-архитектура.

wiz   (2004-03-17 15:05) [9]

а если немного перевести вопрос в другую плоскость:

Что работает быстрее Direct3D или OpenGL? (при одинаковых условиях нагрузки, одинаковом железе, одной винде и каких-то стандартных драйверах)

---------------PS: (off-topic) хочу поприветсвовать всех и извиниться за почти годовое отсутствие

hexone ©   (2004-03-17 16:11) [10]

> Что работает быстрее Direct3D или OpenGL? (при одинаковых > условиях нагрузки, одинаковом железе, одной винде и каких-то > стандартных драйверах)На этот вопрос тебе могут ответить только в ATI или nVidia

wiz ©   (2004-03-17 20:34) [11]

hexone: неужели никто не проверял ручками (на своей машине)?

воспрос созник отсюда: я сам разобрался (и продолжаю разбираться) с OpenGL, поэтому использую его. Периодически слышу от обывателей заявления типа: "Зачем ты делаешь под oGL, ведь D3D быстрее и лучше!". Заявления эти при ближайшем рассмотрении оказываются голословными, но некий осадок на душе остаётся.

Magikan ©   (2004-03-18 04:16) [12]

Что быстрее, OpenGL или Direct3D ?Если в OpenGL задать программный рендеринг сцены, а в DirectX - аппаратный, то Direct3D будет работать быстрее. Если наоборот, то и результат будет, очевидно, наоборот (только в последнее время одна мелкомягкая фирмочка отказалась продолжать поддержку программного рендеринга, из-за чего Direct3D выпадет в осадок). Если использовать и в OpenGL аппаратный и в DirectX тоже аппаратный рендеринг, то результат будет примерно одинаковый. Примерно - из-за того, что макрософт сдуру игровую библиотеку написала на COM-технологии, которая на заднем фоне создает шумы в производительности (точнее часть процессорного времени уходит на обработку вызовов интерфейсов, для удостоверения в этом более внимательно ознакомьтесь с самой технологией), что немного медленне OpenGL. Аппаратная поддержка железа что там, что там одинаковая (если драйверы установлены правильно), все новые возможности, которые появились в DirectX9, доступны в OpenGL через расширения. А если нет разницы (ну почти нет), зачем платить больше? Зачем изучать интерфейсы DirectX9, которые в DirectX10 будут другими?

NailMan ©   (2004-03-20 15:43) [13]

Magikan © Примерно - из-за того, что макрософт сдуру игровую библиотеку написала на COM-технологии, которая на заднем фоне создает шумы в производительности (точнее часть процессорного времени уходит на обработку вызовов интерфейсов, для удостоверения в этом более внимательно ознакомьтесь с самой технологией), что немного медленне OpenGL.Что-то не сильно я заметил шума производительности.

COM D3D удобен и эффективен, в отличие от...

Аппаратная поддержка железа что там, что там одинаковая (если драйверы установлены правильно), все новые возможности, которые появились в DirectX9, доступны в OpenGL через расширенияХех...молодой еще, зеленый(C) Кин-дза-дза.

OGL и D3D на одной и той же видеокарте идут по разному из-за того что вендор этой видеокарты отдал предпочтение(заточка дров) одному API.У ATI это D3D, у nVidia это OGL.

С учетом того что игра пишется не под конкретное железо - надо вибирать компромисс.

А если нет разницы (ну почти нет), зачем платить больше?В чем заключается платеж?

Зачем изучать интерфейсы DirectX9, которые в DirectX10 будут другими?Что-то я не заметил особенно сильных отклонений в интерфейсах D3D при переписывании движка с D3D8 на D3D9. Ну изменил некоторые названия и имена структур - это практически все изменения.

Тем более я не думаю что будучи написав игру на D3D9 я буду ее переписывать заново на DX10 когда он появится. Тем более что появится он не раньше Лонгхорна, т.е. не ранее середины 2005г.

Magikan ©   (2004-03-24 03:38) [14]

NailMan ©Насчет заточки драйверов - это ты зря. Производители одинаково поддерживают как OGL так и D3D. Иначе на играх бы писали - что эта игра для ATI Radeon, а эта игра для NVidia GeForce. Ты представляешь, как это было бы глупо. Приходишь в магазин и говоришь: "продайте мне видеокарту, чтобы я мог в Quake3 поиграть" или "мне подарили Warcraft III, а моя видеокарта его не держит" или еще тупее: "мне, пожалуйста, GeForce FX 5200, чтобы я мог в Quake3 погонять и ATI Radeon 9200, чтобы в Warcraft III c друзьями порубиться". Бывают игры заточенными под конкретную видеокарту (как Seriouse Sam или Unreal Turnament 2003), но никак ни дрова под игровой движок.

wiz ©   (2004-03-24 08:49) [15]

2 Magikan

>Производители одинаково поддерживают как OGL так и D3DВот тут ты не совсем прав... Как минимум реализация openGL у каждого производителя своя (через свой набор расширений). А вот D3D (насколько я понимаю) - штука универсальная. Таким образом уже есть расхождения.

>Иначе на играх бы писали - что эта игра для......и зря не пишут. Хотя сейчас ситуация (похоже) выравнивается, но еще совсем недавно (2-3 года назад) игрушки вели себя очень по разному на nV и ATI.

я сам тогда только начинал использовать openGL и сильно удивился (и огорчился) в следующей ситуации:

а) написание и отладка проекта велась на компах с nVidia-картами (TNT2, GeForce-GTS, GeForce-2 MX, GeForce-2)б) показ происходил у заказчика на машине с ATI FireGL 8800 (зверь а не карта, но ATI"шная)в) Хотя различий (по картинке) не было на рабочих машинах, мы увидели совсем не то у заказчика.

Немного по другому работал AlphaBlending. Чуть-чуть по другому работал z-test (такое чувство, что округление по разному реализовано). Немного по другому выглядели материалы.

г) нас (программеров графики) спасло только то, что проект был не особо важный, а кроме того отсыл заказчику произошёл раньше установленного срока, так что у нас было время всё исправить.

suicide   (2004-03-24 09:25) [16]

>Производители одинаково поддерживают как OGL так и D3D

А ты попробуй поиграть в DroneZ на ATI видюхе, я пробовал на Radeon 9800Pro - не идёт. Зато на вшивой TNT абы как. И как после этого понимать этих конкурентов: берите берите ATI, да вы что берите Nvidia они круче. Вообщем одни вытесняют других с рынка любым всевозможным способом.

hexone ©   (2004-03-24 10:40) [17]

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

TButton ©   (2004-03-24 15:02) [18]

>.. если руки кривые.

а че ж у меня контра в OGL глючит? у кого руки корявые?

hexone ©   (2004-03-24 16:03) [19]

> а че ж у меня контра в OGL глючит? у кого руки корявые?Зачем путать конкретную специфику твоей машины с руганью в сторону OpenGL. На OpenGL разрабатываются серьезные программы типа САПР как раз из-за того, что он продуманный и кроссплатформенный. Нужно конечно отметить, что там(GL) не очень удобно реализованы расширения, да они серьезным программам не очень-то и нужны. Игры прежде всего иллюзия реальности. Там(в САПР) не нужна реальность, там реальность не в визуализации а в расчетах и чертежах. А где нужна реальность там используется алгоритмы типа RayTracing, до которых, к сожалению, еще любой реализации DX и GL еще топать и топать. Резюмируя могу сказать: Выбор библиотеки зависит от задач, которые призвана решать твоя программа, а не от "что тебе приглянется на том и пиши". Любой задаче всегда предшествует анализ, в этот анализ и входит выбор библиотеки.

TButton ©   (2004-03-24 17:36) [20]

>Зачем путать конкретную специфику твоей машины с руганью в >сторону OpenGLи что мне теперь удавиться и не жить если у меня машина такая???

3ds MAX R4 тоже глючит, на OGL. viewport"ы постоянно замусориваются, зато на Direct3D все нормально (не то чтоб хорошо, но нормально). что еще раз подтверждает основную идею моего первого поста Direct3D будет работать (пусть не на 5+ и даже не на 4-, но) на любой машине (под виндами)

Magikan ©   (2004-03-25 03:31) [21]

;)Да нравится вам пользоваться макрософтовскими библиотеками - пользуйтесь наздоровье :) Все равно это неудобно ;) и ненадолго B)

GrayFace ©   (2004-03-25 12:49) [22]

[20], 3ds MAX 6 глючит на Direct3D.[21], неудобно - навеное, но ненадолго - это не так.

Форум: "Игры";Поиск по всему сайту: www.delphimaster.net;Текущий архив: 2004.07.11;Скачать: [xml.tar.bz2];

Наверх

Рейтинг@Mail.ru

Память: 0.79 MBВремя: 0.062 c

www.delphimaster.net

OpenGL - то, что заставит забыть о DirectX - Блоги

ПереводЧивчалова Антона, по материалам блога разработчиковblog.wolfire.com.

Когда мы иной раз говорим другим разработчикам игр, что в нашей игре Overgrowth мы использовали OpenGL, нам недоуменно возражают: зачем, разве будущее не за DirectX? Когда мы говорим представителям видеокарт, что используем OpenGL, температура в помещении опускается на 10 градусов.

Это нас озадачивает. Среди веб-разработчиков считается хорошим тоном ругать стандартные технологии, такие как Silverlight,Flash или ActiveX, зато всячески приветствуется кросс-платформенная разработка. Ни один уважающий себя спец не испытывает восторга от работы с закрытыми стандартами типа документов Word или серверов Exchange. И что же произошло с этим миром, что инженеры вдруг принялись не только рукоплескать проприетарному API Microsoft, но ещё и активно ругать его открытого конкурента?

Прежде чем мы объясним, почему мы за OpenGL, немного истории.

Что такое OpenGL

В 1982 году Silicon Graphics начала продажи высокопроизводительных графических терминалов на основе проприетарного API под названием Iris GL (GL - graphics library, графическая библиотека). Через несколько лет Iris GL превратился в монстра, которого стало очень сложно поддерживать. Тогда Silicon Graphics пошла на радикальный шаг - полностью переработала Iris GL и создала на его основе открытый стандарт. Теперь Открытую графическую библиотеку (OpenGL) могли использовать конкуренты, но при этом они должны были её поддерживать и обновлять.

Сегодня поддержкой OpenGL занимается Khronos Group - некоммерческая организация, в которую входят представители самых разных компаний, объединённых общим интересом: иметь высококачественные медийные API.Непосредственной поддержкой занимается Наблюдательная комиссия по архитектуре OpenGL. OpenGL поддерживают все игровые платформы, включая Mac, Windows, Linux, PS3 (через GCM), Wii, iPhone, PSP и DS.То есть все платформы, кроме Xbox. И это плавно приводит нас к следующей теме:

Что такое DirectX

После MS-DOS в Microsoft осознали, что при выборе операционной системы пользователь не в последнюю очередь принимает во внимание игры. Тогда в 1995 году Microsoft создала проприетарный набор библиотек с целью поощрить выход эксклюзивных игр для новой ОС Windows 95. Среди этих библиотек были Direct3D, DirectInput и DirectSound, а весь набор в совокупности получил название DirectX. Когда в 2001 году Microsoft сама вошла в игровой рынок, появилась консоль DirectX Box, она же Xbox. Xbox стала рекордсменом по убыткам, потеряв свыше $4 млрд. Целью проекта было заложить основы для доминирования на игровом рынке, которое предполагалось осуществить только в следующем поколении.

Если судить по сегодняшнему игровому рынку, эта стратегия себя оправдала. Большинство главных игр для PC используют DirectX и работают на Windows и Xbox360. За редкими исключениями они не работают на конкурирующих платформах, таких как PlayStation, Mac OS или Wii. Так Microsoft теряет довольно серьёзные рынки, а мы ставим важный вопрос:

Почему все используют DirectX?

Все используют DirectX потому, что выбор API при разработке игры обладает эффектом обратной связи - своего рода замкнутый круг. Начиная с 2005 года популярность DirectX постоянно растёт: чем больше разработчиков её использует, тем лучше её поддерживают поставщики видеокарт, тем лучше программисты умеют с ней работать и опять-таки тем популярнее она становится - круг замыкается.

Рынок начал смещаться в сторону DirectX под воздействием двух факторов: агрессивная реклама DirectX при запуске Xbox360 и Windows Vista, которая заставила многих усомниться в будущем OpenGL, и оголтелое преувеличение достоинств DirectX. Эти факторы были усилены описанным эффектом обратной связи, и в результате OpenGL почти полностью исчезла из главных игровых новинок.

1. Эффект обратной связи и порочные круги

В среде Windows графические драйверы DirectX поддерживаются лучше, чем OpenGL. Причиной этого является порочный круг под названием «поддержка производителей». Чем больше разработчиков по той или иной причине переходит с OpenGL на DirectX, тем меньше производители видеокарт получают сообщений об ошибках в драйверах OpenGL; следовательно, они становятся хуже, и ещё больше разработчиков уходит с OpenGL на DirectX. Круг замыкается.

Факт и в том, что в DirectX разбирается больше программистов графики, чем в OpenGL; следовательно, создать игру под DirectX дешевле, потому что для этого требуется меньше затрат на обучение. И это ещё один порочный круг: чем больше игр использует DirectX, тем больше программистов должны её изучить. Чем больше программистов изучают DirectX, тем дешевле DirectX обходится игровым проектам в сравнении с OpenGL.

2. Vista и сомнения в отношении OpenGL

При выпуске Vista Microsoft начала активно сеять в пользователях сомнения и неуверенность в отношении OpenGL.В 2003 году Microsoft покинула Наблюдательную комиссию по архитектуре OpenGL, показав тем самым, что её больше не интересует судьба этой библиотеки. На SIGGRAPH (конгресс специалистов по графике) и WinHEC (конференция разработчиков аппаратного обеспечения под эгидой Microsoft) представители корпорации заявили, что в Windows VistaOpenGL будет поддерживаться на самом минимальном уровне, чтобы только обеспечить обратную связь с приложениями XP. OpenGL будет накладываться поверх DirectX, что приведёт к резкому снижению производительности. Это вызвало самую настоящую панику в рядах OpenGL, в результате чего многие профессиональные программисты графики перешли на DirectX.

Когда Vista наконец вышла, оказалось, что эти заявления не соответствовали действительности: поставщики создали быстрые устанавливаемые клиентские драйверы (ICD), вернувшие системе нативную поддержку OpenGL. Комиссия по OpenGL разослала письмо с доказательствами, что OpenGL по-прежнему в строю и ничем не уступает Direct3D на Vista. К сожалению, нужный Microsoft результат уже был достигнут: доверие к OpenGL серьёзно пошатнулось.

3. Лживые рекламные кампании

Выпуск Windows Vista и Windows 7 сопровождался агрессивной рекламой DirectX: Microsoft показывала эффектные картинки «до» и «после» применения различных версий DirectX. Сегодня многие игроки искренне верят, что переход от DirectX 9 к DirectX 10 волшебным образом улучшает яркость картинки, тогда как раньше она была убого затемнённой, а уровень реализма сразу же становится как в Crysis. Игровые журналисты уже доказали, что в том же Crysis на DX9 и DX10 нет никакой разницы, а пресловутые эксклюзивные для DX10 функции работают и под DX9 при соответствующих настройках в конфигурационном файле. Однако рекламная кампания снова сделала своё дело: многие игроки поверили, что установка DX10 - единственный способ получить графику по последней моде.

Далеко не все игры поддерживают этот маркетинговый фарс Microsoft. Многие настоящие профессионалы графики, такие как Джон Кармак (John Carmack), относятся к DX10 скептически. Он однажды сказал: «Лично я не стал бы сейчас переходить на что-то вроде DX10. Я бы подождал, когда всё немного утрясётся и для этого появится действительно объективная необходимость».Так почему же мы используем OpenGL?

Учитывая всё вышесказанное: слабую поддержку производителей, отсутствие в играх, нападения со стороны Microsoft, спорные рыночные перспективы, - почему мы по-прежнему её используем? Не выгоднее ли отказаться от OpenGL и перейти к DirectX, как все остальные? Нет, потому что на самом деле OpenGL мощнее DirectX, поддерживает больше платформ и крайне важна для игровой индустрии.1. OpenGL мощнее DirectX

Общеизвестно, что вызовы отрисовки в OpenGL быстрее, чем в DirectX. Верить нам на слово необязательно: на этот счёт существуют официальные презентации NVIDIA. Благодаря расширениям поставщиков новые функции видеопроцессоров на OpenGL начинают поддерживаться раньше. OpenGL сразу даёт прямой доступ ко всем новым графическим решениям на всех платформах, тогда как DirectX лишь предоставляет выборочные снимки на новых версиях Windows. Та же мозаичная технология (tesselation), которую Microsoft активно продвигает в DirectX 11, уже три года существует для OpenGL в качестве расширения. Я не знаю, какие новые технологии появятся в ближайшие годы, но я точно знаю, что первыми они появятся в OpenGL.

Microsoft хорошо поработала над DirectX 10 и 11, и теперь они почти так же быстры и функциональны, как и OpenGL. Однако остаётся одна большая проблема: они не работают в Windows XP! У половины игроков PC по-прежнему стоит XP, и для них варианта DirectX 10 и 11 просто не существует. Поэтому, если вы действительно хотите добиться наилучших результатов и донести их до максимально возможного числа игроков, вариантов помимо OpenGL просто нет.(Если честно, то Microsoft правильно сделали, что отказались от XP - как-никак, этой ОС уже 9 лет.И вообще, чему тут обижаться? Это обычная практика - ведь отказались от Windows 98, 2000, ME - примечаниеPortalX3 )

2. OpenGL кроссплатформенная

Свыше половины игроков нашей Lugaru играет на Mac или Linux, и мы не удивимся, если так же будет и с новой игрой Overgrowth. В беседах с крупными игровыми разработчиками мы часто слышим, что поддержка Mac и Linux - пустая трата времени. Но мне никогда не встречались доказательства этого утверждения. Blizzard всегда выпускает версию своих игр для Mac одновременно с другими платформами. Если они в чём-то принципиально не сходятся с другими, то я думаю, что правы они, а не другие.

Когда Джона Кармака спросили, работает ли Rage под DirectX, он ответил: «Нет, это OpenGL, хотя мы использовали API в стиле D3D [на Xbox360] и CG для PS3. Вы знаете, технологиям довольно неинтересно, какой вы используете API и какого поколения ваши технологии. API интересуется буквально несколько файлов, а миллионы строк кода совершенно безразличны к вашей платформе». Если можно достичь всех платформ с OpenGL, то зачем себя искусственно ограничивать, привязываясь к DirectX?

Даже если вас не интересует ничего, кроме Windows, позвольте ещё раз напомнить, что половина пользователей Windows работает на XP, и они не смогут играть в вашу игру, если у вас будут последние версии DirectX. Единственный способ дать новейшие графические решения пользователям Windows XP (а это крупнейшая игровая платформа на PC) - использовать OpenGL.

3. У OpenGL больше перспектив на игровом рынке

OpenGL - это некоммерческий открытый стандарт, преследующий цель предоставить графику высочайшего качества пользователям всех платформ. Позиции OpenGL пошатнулись в результате монополистического нападения со стороны одного корпоративного колосса, который решил прибрать к рукам слишком молодую и потому неспособную за себя постоять индустрию. Microsoft держит рынок игр для PC мёртвой хваткой, которая тем сильнее, чем более эксклюзивны позиции Direct3D в Windows.

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

Cможет ли OpenGL вернуть утраченные позиции?

В 1997 году была очень похожая ситуация. Microsoft начала агрессивную рекламную кампанию в пользу Direct3D, и однажды утром все проснулись и узнали, что она и быстрее, и лучше, чем OpenGL. Ситуация стала меняться после того, как Крис Хэкер (Chris Hecker) опубликовал открытое письмо против DirectX. Вскоре после этого Джон Кармак опубликовал свою знаменитую оду OpenGL, которую тут же подкрепил делом: перевёл все игры Id Software на OpenGL. Так он раз и навсегда доказал, что DirectX совершенно необязательна для трёхмерных игр высшей категории.

Однако за последние несколько лет этот урок оказался подзабыт. Большинство игровых разработчиков либо поддались чарам маркетологов Microsoft, либо утонули в порочных кругах рыночной конъюнктуры. Настало время отбросить пустые рекламации и модные тренды и посмотреть в глаза правде. Если вы пишете под DirectX, вам приходится либо брать слабую и раздутую DX9, либо жертвовать значительной частью пользовательской базы с DX10 и 11.

С другой стороны, если вы пишете под OpenGL, вы получаете более быструю и мощную графику, чем в DirectX 11, причём на всех версиях Windows, Mac и Linux, а также PS3, Wii, PSP, DS и iPhone. Кроме того, вы получаете всё это в рамках динамично развивающегося стандарта WebGL, который вполне может стать базовым для браузерных игр следующего поколения.

Если вы - разработчик игр, я прошу вас провести исследование, сравнить цифры и решить для себя, лучше OpenGL или нет. Некоторые программисты привержены стилю DirectX 11, но вы в любом случае перенесёте низкоуровневые API на уровень абстракции, поэтому этот фактор не может быть решающим. Если что-то в OpenGL вам не нравится, просто попросите наблюдательную комиссию это поменять - она для того и существует!

Если вы играете в игры на Windows XP, Mac или Linux, вы должны понять, что DirectX существует только для того, чтобы закрыть вам доступ к новым играм. И у вас есть только один способ повлиять на ситуацию - начать поддерживать игры, использующие OpenGL.

 

www.playground.ru

OpenGL и DirectX: Архитектура, производительность, сравнение

Всем привет. В этой статье (сразу говорю, что статья не для новичков) будет проведено сравнение двух интерфейсов, используемых для разработки графики. Они часто находят применение в компьютерных играх. Это OpenGL и DirectX. Статья раскроет их особенности, архитектуру и производительность. Сначала приступим к обзору OpenGL.

Заметная особенность библиотеки OpenGL – простота ее работы. У данной библиотеки есть ядро, которое управляет обработкой неких треугольников (их называют примитивами).

Процедурная модель лежит в основе передачи данных, а в работе вызываются функции. OpenGL имеет состояние, связанное со значениями переменных, которые и указывают какие параметры обработки должны работать в каждый момент времени. Например, определяется, нужно ли сейчас рисовать текстуру или нет. И в соответствии с текущим состоянием совершается обработка переданных примитивов. В итоге получается простой код и достаточно эффективный механизм работы OpenGL. Также не случаются проблемы с объектно-ориентированными технологиями, несмотря на то, что ядро OpenGL является процедурным.

Пришло время рассмотреть принципы работы второго интерфейса — DirectX. В корне он сильно отличается от OpenGL и имеет основу на модели COM. Многим знакомым с этой структурой станет понятно. А если кто не знаком с принципами COM, то нужно отметить пару моментов. Модель COM предполагает не простые вызовы функций, а определенные действия, которые связаны непосредственно с архитектурой библиотеки DirectX.

Рассмотрим плюсы и минусы данной архитектуры. Вызовы DirectX используются внутри кода, который не отличается легким пониманием. И причем, для того, чтобы нарисовать обычный треугольник, используется очень большой объем кода. Для упрощения работы с таким кодом компания Microsoft разработала DirectX Common Files. Это отдельная библиотека, позволяющая, частично скрыть повторяющиеся куски кода.

OpenGL и DirectX сильно отличаются своей архитектурой и принципами работы. Позже в развитие этих двух разработок стали заметны некоторые сближения. Это связано с движением в сторону эффективного использования «железа» и уменьшением времени на преобразование пользовательских команд в аппаратные. Всегда в работе таких вещей как OpenGL и DirectX, одним из главных вопросов является вопрос производительности. Хотя этот вопрос немного запутан. Постоянно проходят споры о том, кто быстрее — OpenGL или DirectX. А в итоге получается, что скорость у этих библиотек одинакова. Так получается из-за того, что большинство функций и в DirectX и в OpenGL работают с помощью аппаратных ускорителей.

При тестировании аппаратного обеспечения степень оптимизации кода этих двух библиотек различная, вот здесь можно четче заметить разницу скоростей работы. Также производительность может находиться в зависимости от качества работы драйверов оборудования. Все эти моменты планируются заранее и у более качественный игровых движков есть версии и для OpenGL и для DirectX. В итоге разработка усложняется и стоимость игр увеличивается, а ошибок может быть больше. Игровой рынок работает именно так.

Теперь рассмотрим какие еще различия существуют между OpenGL и DirectX. Разница замечается прежде всего в удобстве работы интерфейса, гибкости его функций, области его использования. Часто можно услышать мнение, что OpenGL, в отличии от DirectX9 не поддерживает пиксельные шейдеры. Это не так, хотя в описании OpenGL не указано о шейдерах. Скорость обработки и качество картинки не зависит от используемой библиотеки.

Изначально OpenGL планировался как библиотека, которая будет актуальна еще очень долгий срок. Но комитет, разрабатывающий данную библиотеку, ARB работает медленно и новые возможности в OpenGL появляются редко. Но с помощью специальных расширений OpenGL может вырасти из базовых механизмов, реализуя новые возможности для определенное видеокарты. Как только выходит новая видеокарта, поддерживающая конкретную полезную функцию, обычно в драйвер к видеокарте включают расширенный OpenGL с этой функцией. Для этого программистам нужно специальное разрешение и поэтому имеют место расширение, прошедшие одобрение ARB, причем их применение может быть возможным на видеоадаптерах разных производителей. Эти расширение возможно позже будут включены в новые версии OpenGL. Эта модель не очень удобна. Например, в DirectX, определенная версия либо поддерживает какую-либо конкретную функциональность, либо нет. Но чаще разработчики успевают включать все новые функции, реализованные разработчиками видеокарт. В общих чертах, в разрезе поддержки аппаратных функций OpenGL и DirectX аналогичны, разница в их поставке.

DirectX любим программистами, придерживающимися объектно-ориентированного программирования и модели COM. С помощью COM вносятся изменения в данную библиотеку без редактирования базового кода. А в OpenGL такого подхода нет, но это не такой уж сильный минус. Для написания небольшой программы на DirectX используется код, размеров в 200-800 строк, для OpenGL же для аналогичного решения достаточно 50 строк.

OpenGL очень хорошо подходит для визуализации различных результатов исследований в научных областях.Ну и конечно же большим плюсом OpenGL можно отметить открытость стандарта. Любая организация в праве приобрести лицензию у SGI и начать разрабатывать свою версию OpenGL. DirectX же закрыт, и его разработкой может заниматься только Microsoft. Поэтому путь DirectX определяется более узким кругом специалистов.

Подводя итоги, можно отметить некоторые достоинства. DirectX подходит для профессиональных игр и их разработки, а также различных программ для Windows. В последнее время OpenGL практически не применяется в играх, для разработки их движков. Эта библиотека может найти свое место на мощных компьютерах, используемых для научных исследований, в образовательных мероприятиях и других областях, имеющие необходимость в переносе различных программ на различные платформы.

На этом пожалуй все, спасибо за внимание 🙂

helpsnet.ru

Direct3D vs OpenGL: история противостояния / Хабр

По сей день в Интернете можно встретить споры о том, какой же графический API лучше: Direct3D или OpenGL? Несмотря на свой религиозный характер, такие словесные баталии приносят полезный результат в виде неплохих исторических обзоров развития аппаратно-ускоренной графики.

image

Целью данного поста является перевод одного из таких экскурсов в историю, написанного Джейсоном МакКессоном (Jason L. McKesson) в ответ на вопрос «Почему разработчики игр предпочитают Windows». Этот текст вряд ли отвечает на поставленный вопрос, но историю развития и противостояния двух самых популярных графических API он описывает очень красочно и довольно подробно, поэтому в переводе я сохранил авторскую разметку. Текст написан в середине 2011 года и охватывает промежуток времени, начинающийся незадолго до появления Direct3D и до момента написания. Автор оригинального текста является опытным разработчиком игр, активным участником StackOverflow и создателем обширного учебника о современном программировании 3D-графики. Итак, предоставим слово Джейсону.

Предисловие
Прежде чем мы начнём, я хотел бы сказать, что знаю больше об OpenGL, чем о Direct3D. В своей жизни я не написал ни строчки кода на D3D, но писал руководства по OpenGL. Но то, о чём я хочу рассказать — вопрос не предубеждения, а истории.
Рождение конфликта
Однажды, где-то в начале 90-х, Microsoft огляделись вокруг. Они увидели, что SNES и Sega Genesis — это очень здорово, на них можно поиграть во множество экшн-игр и всего такого. И они увидели ДОС. Разработчики писали досовские игры как консольные: близко к железу. Тем не менее, в отличие от консолей, где разработчик знал, какое железо будет у пользователя, дос-разработчики были вынуждены писать под множество конфигураций. А это намного сложнее, чем кажется.

Но у Microsoft была бо́льшая проблема: Windows. Видите ли, Windows хотела полностью владеть железом в отличие от ДОС, которая позволяла разработчикам делать всё что угодно. Владение железом необходимо для взаимодействия между приложениями. Но такое взаимодействие — это в точности то, что ненавидят разработчики игр, потому что оно потребляет драгоценные ресурсы, которые они могли бы использовать для всяких крутых вещей.

Для продвижения разработки игр на Windows, Microsoft нуждалась в однородном API, который был бы низкоуровневым, работал бы на Windows без потерь производительности, и был бы совместим с различным железом. Единый API для графики, звука и устройств ввода.

Так родился DirectX.

3D ускорители появились несколько месяцев спустя. И Microsoft вляпались в неприятности. Дело в том, что DirectDraw, графический компонент DirectX, работал только с 2D графикой: выделял графическую память и делал быстрые битовые операции между различными секторами памяти.

Поэтому Microsoft купили немного стороннего ПО и превратили его в Direct3D версии 3. Его ругали абсолютно все. И было за что: чтение кода на D3D v3 выглядело как расшифровка письменности исчезнувшей древней цивилизации.

Старик Джон Кармак в Id Software посмотрел на это безобразие, сказал «Да пошло оно...», и решил писать с использованием другого API: OpenGL.

Однако другая сторона этой запутанной истории заключалась в том, что Microsoft совместно с SGI работали над реализацией OpenGL для Windows. Идея была в том, чтобы привлечь разработчиков типичных GL-приложений для рабочих станций: САПР, систем моделирования и тому подобных вещей. Игры были последним, о чём они думали. В основном это касалось Windows NT, но Microsoft решили добавить OpenGL и в Windows 95.

Чтобы сманить разработчиков софта для рабочих станций на Windows, Microsoft решили подкупить их доступом к новомодным 3D-ускорителям. Они реализовали протокол для устанавливаемых клиентских драйверов: графическая карта могла заменить программный OpenGL от Microsoft своей аппаратной реализацией. Код автоматически использовал аппаратный OpenGL, если таковой был доступен.

Однако, в те времена потребительские видеокарты не имели поддержки OpenGL. Это не остановило Кармака от портирования Quake на OpenGL на рабочей станции SGI. В readme-файле GLQuake можно прочитать следующее:

Теоретически, glquake запустится на любой реализации OpenGL, которая поддерживает расширение texture objects. Но пока вы не запустите её на очень мощном железе, которое ускоряет всё, что нужно, работать она будет непростительно медленно. Если игре потребуется работать через какие-либо программные эмуляции, её производительность скорее всего не превысит один кадр в секунду.

В настоящее время (март 1997), единственной полностью совместимой с opengl железкой, способной потянуть glquake на приемлемом уровне, является ОЧЕНЬ дорогая видеокарта intergraph realizm. 3dlabs существенно увеличили её производительность, но с имеющимися драйверами она всё ещё недостаточно подходит для игры. Некоторые из драйверов от 3dlabs для плат glint и permedia ещё и крэшат NT при выходе из полноэкранного режима, поэтому я не рекомендую запускать glquake на железе от 3dlabs.

3dfx предоставляет opengl32.dll, которая реализует все нужное для glquake, но это не полная реализация opengl. Другие opengl-приложения скорее всего с ней не заработают, поэтому рассматривайте её в основном как «драйвер для glquake».

Это было рождением miniGL драйверов. В конечном итоге они эволюционировали в полноценные реализации OpenGL, как только железо стало достаточно мощным для аппаратной поддержки этой функциональности. nVidia стала первой, кто предложил полную реализацию OpenGL. Другие поставщики всё ещё медлили, что стало одной из причин перехода разработчиков на Direct3D, поддерживаемый более широким спектром оборудования. В конце концов остались только nVidia и ATI (которая сейчас AMD), и у обеих имелись хорошие реализации OpenGL.
Рассвет OpenGL
Итак, участники определены: Direct3D против OpenGL. Это поистине удивительная история, учитывая то, как плох был D3D v3.

Совет по архитектуре OpenGL (Architectural Review Board, ARB) — это организация, ответственная за поддержание и развитие OpenGL. Они выпускают множество расширений, содержат репозиторий с расширениями, и создают новые версии API. ARB — это комитет, состоящий из большого количества игроков индустрии компьютерной графики и некоторых производителей ОС. Apple и Microsoft в разное время тоже были членами ARB.

3Dfx выходит на сцену со своей Voodoo2. Это первая видеокарта, позволяющая делать мультитекстурирование, которое не было ранее предусмотрено в OpenGL. В то время как 3Dfx была решительно против OpenGL, nVidia, следующий производитель чипа с мультитекстурированием (TNT1), были без ума от OpenGL. Тогда ARB выпустил расширение GL_ARB_multitexture, которое предоставляло доступ к множественным текстурам.

Тем временем появляется Direct3D v5. Теперь D3D действительно стал API, а не какой-то несуразицей. В чём же проблема? В отсутствии мультитекстурирования.

Упс.

Но это не доставляло таких неудобств, какие могло бы доставить, потому что почти никто не использовал множественное текстурирование. Мультитекстурирование почти не вредит производительности, и во многих случаях разница незаметна на фоне многопроходности. И конечно, разработчики игр очень любят чтобы их игры уверенно работали на старом железе, которое не имело поддержку множественных текстур, поэтому многие игры были выпущены без неё.

D3D вздохнул с облегчением.

Время шло, и nVidia выкатили GeForce 256 (не путать с самым первым GeForce GT-250), прекратив борьбу на рынке графических плат на следующие два года. Главным конкурентным преимуществом этой платы была возможность делать преобразования вершин и освещение (transformation & lighting, T&L) аппаратно. Но это ещё не всё: nVidia любила OpenGL настолько, что их T&L-движок фактически и был OpenGL. Почти буквально! Как я понимаю, некоторые из их регистров получали на вход напрямую численные значения переменных типа GLenum.

Выходит Direct3D v6. Наконец то подоспело множественное текстурирование… но без аппаратного T&L. В OpenGL всегда был T&L-конвейер, хотя до GeForce 256 он был реализован программно. Поэтому для nVidia оказалось довольно просто переделать программную реализацию в аппаратное решение. В D3D аппаратное T&L появилось только к седьмой версии.

Заря эпохи шейдеров, OpenGL во мгле
Затем появилась GeForce 3. В то же самое время произошло много интересных вещей.

В Microsoft решили, что они больше не собираются опаздывать. Поэтому вместо того, чтобы смотреть, что сделает nVidia, и копировать их разработки уже пост-фактум, Microsoft приняли изумительное решение: пойти и поговорить. И они полюбили друг друга, и у них появилась совместная маленькая консоль.

Шумный развод произошёл позже, но это совсем другая история.

Для рынка PC это значило, что GeForce 3 вышла одновременно с D3D v8, и нетрудно видеть, как GeForce 3 повлияла на шейдеры D3D v8. Пиксельные шейдеры Shader Model 1.0 были очень сильно заточены под оборудование nVidia. Не было предпринято ни единой попытки сделать хоть что нибудь для абстрагирования от железа nVidia. Shader Model 1.0 стала тем, для чего предназначена GeForce 3.

Когда ATI ворвалась в гонку производительности видеокарт со своей Radeon 8500, появилась одна проблема. Пиксельный конвейер Radeon 8500 оказался более мощным, чем у nVidia. Поэтому Microsoft выпустила Shader Model 1.1, которая в основном была тем, для чего предназначена 8500.

Это звучит как поражение D3D, но успех и провал — понятия относительные. На самом деле эпический провал поджидал OpenGL.

В nVidia очень любили OpenGL, поэтому после выхода GeForce 3 они выпустили целую пачку расширений для OpenGL. Проприетарных расширений, которые работали только на nVidia. Естественно, когда появилась плата 8500, она не могла использовать ни одно из них.

Итак, на D3D 8 вы могли хотя бы запустить шейдеры SM 1.0. Конечно, чтобы использовать всю крутость 8500, приходилось писать новые шейдеры, но код хотя бы работал.

Чтобы получить любые шейдеры на Radeon 8500 в OpenGL, ATI пришлось разработать несколько расширений для OpenGL. Проприетарных расширений, которые работали только на ATI. В итоге, чтобы разработчики могли заявить, что они прикрутили к своему движку шейдеры, им приходилось писать отдельный код для nVidia и отдельный код для ATI.

Вы возможно спросите: «А где же был комитет ARB, который должен поддерживать OpenGL на плаву?». А были они там, где в конечном итоге оказываются многие комитеты: они сидели и тупили.

Обратите внимание, выше я упомянул ARB_multitexture, потому что это расширение глубоко замешано во всей ситуации. Стороннему наблюдателю казалось, что ARB вообще хочет избежать идеи шейдеров. Они решили, что если они вбухают достаточно конфигурируемости в фиксированный конвейер, то он сравняется по своим возможностям с программируемым шейдерным конвейером.

ARB выпускали расширения одно за другим. Каждое расширение со словами «texture_env» в названии было попыткой залатать этот устаревающий дизайн. Посмотрите на список расширений: таких расширений было выпущено восемь штук, и многие из них были переведены в основную функциональность OpenGL.

В то время Microsoft входила в ARB, и покинула его только к выпуску D3D 9, поэтому возможно, Microsoft саботировали OpenGL некоторым образом. Лично я сомневаюсь в этой теории по двум причинам. Во-первых, они должны были бы заручиться поддержкой других членов Комитета, потому как каждый участник имеет всего один голос. Во-вторых, что более важно, Комитету не нужна была помощью Microsoft чтобы всё запороть, свидетельства чему мы увидим далее.

В итоге ARB, скорее всего под давлением ATI и nVidia (обе являются активными участниками), наконец очнулся и ввёл в стандарт ассемблерные шейдеры.

Хотите ещё более дурацкую историю?

Аппаратное T&L. Это то, что в OpenGL было изначально. Чтобы получить максимально возможную производительность аппаратного T&L, нужно хранить данные вершин на GPU. Все-таки, GPU — это основной потребитель вершинных данных.

В D3D v7 Microsoft ввела концепцию вершинных буферов, которые выделяют куски памяти в GPU и размещают там данные вершин.

Хотите знать когда в OpenGL появилась эквивалентная функциональность? Да, nVidia, как самый большой любитель OpenGL, выпустила своё расширение для хранения массивов вершин на GPU ещё во времена выхода GeForce 256. Но когда же ARB представил такую функциональность?

Два года спустя. Это было после того, как она утвердили вершинные и фрагментные (пиксельные в терминах D3D) шейдеры. Столько времени ушло у ARB чтобы разработать кросс-платформенное решение для хранения вершинных данных в памяти GPU. И это то, что необходимо, чтобы аппаратное T&L достигло максимальной производительности.

Один язык, чтобы убить их всех
Итак, OpenGL был сломан в течение какого-то времени. Отсутствовали кросс-платформенные шейдеры и аппаратно-независимое хранение вершин в GPU, в то время как пользователи D3D наслаждались и тем и другим. Могло ли стать ещё хуже?

Можно сказать, что могло. Встречайте: 3D Labs.

Вы спросите: кто же они? Они — мёртвая компания, которую я считаю истинным убийцей OpenGL. Конечно, общая несостоятельность Комитета сделала OpenGL уязвимым, в то время как он должен был рвать D3D в клочья. Но по-моему, 3D Labs — возможно единственная причина текущего положения OpenGL на рынке. Что они для этого сделали?

Они разработали язык шейдеров для OpenGL.

3D Labs были умирающей компанией. Их дорогостоящие GPU были вытеснены с рынка рабочих станций всё возрастающим давлением nVidia. И в отличие от nVidia, 3D Labs не были представлены на потребительском рынке; победа nVidia означала бы смерть для 3D Labs.

Что в итоге и случилось.

В стремлении оказаться на плаву в мире, которому были не нужны их продукты, 3D Labs заявились на конференцию Game Developer Conference с презентацией того, что они назвали «OpenGL 2.0». Это был OpenGL API, переписанный с нуля. И это имело смысл, ибо в те времена в API OpenGL было полно хлама (который, впрочем, остаётся там и по сей день). Посмотрите хотя бы на то, насколько эзотерически сделаны загрузка и биндинг текстур.

Частью их предложения был язык шейдеров. Да, именно он. Тем не менее, в отличие от имеющихся кросс-платформенных расширений, их язык шейдеров был «высокоуровневым» (C — это высокий уровень для языка шейдеров).

В это же время в Microsoft работали над своим собственным языком шейдеров. Который они, включив всё своё коллективное воображение, назвали… Высокоуровневым Языком Шейдеров (HLSL). Но их подход к языку был фундаментально иным.

Наибольшей проблемой языка от 3D Labs было то, что он был встраиваемым. Microsoft полностью самостоятельно определяла свой язык. Они выпустили компилятор, который генерировал ассемблерный код для шейдеров SM 2.0 (или выше), который, в свою очередь, можно было скармливать D3D. Во времена D3D v9, HLSL никогда не касался D3D напрямую. Он был хорошей, но необязательной абстракцией. У разработчика всегда была возможность взять выхлоп компилятора и подправить его для максимальной производительности.

В языке от 3D Labs ничего этого не было. Вы отдаёте драйверу C-подобный язык, и он создаёт шейдер. На этом всё. Никакого ассемблерного шейдера, ничего, что можно скормить чему-то ещё. Только объект OpenGL, представляющий шейдер.

Для пользователей OpenGL это означало, что они становились подвержены капризам разработчиков OpenGL, которые только научились компилировать ассемблероподобные языки. В компиляторах новорождённого языка шейдеров OpenGL (GLSL) свирепствовали баги. Что ещё хуже, если вам удавалось заставить шейдер корректно компилироваться на различных платформах (что уже само по себе было большим достижением), то он всё ещё был подвержен оптимизаторам тех времён, которые были не так уж оптимальны, как могли бы быть.

Это было большим, но не единственным недостатком GLSL. Далеко не единственным.

В D3D, как и в старых ассемблерных языках OpenGL, можно было смешивать и всячески комбинировать вершинные и фрагментные шейдеры. Можно было использовать любой вершинный шейдер с любым совместимым фрагментным шейдером, если они взаимодействовали через одинаковый интерфейс. Более того, допускалась даже некоторая несовместимость: например, вершинный шейдер мог подать на выход значение, которое не использовалось фрагментным шейдером.

В GLSL ничего такого не было. Вершинный и фрагментный шейдер сплавлялись воедино, образовывая нечто, названное компанией 3D Labs «программным объектом». Поэтому, для совместного использования нескольких вершинных и фрагментных шейдеров в различных комбинациях, приходилось создавать несколько программных объектов. Это стало причиной второй по величине проблемы.

3D Labs думали, что они самые умные. Они взяли C/C++ за основу для модели компиляции GLSL. Это когда вы берёте один c-файл и и компилируете его в объектный файл, а затем берёте несколько объектных файлов и компонуете их в программу. Именно так компилируется GLSL: сначала вы компилируйте вершинный или фрагментный шейдер в шейдерный объект, затем помещаете эти объекты в программный объект и компонуете их воедино чтобы наконец сформировать программу.

В теории это позволяло появиться таким крутым вещам, как «библиотечные» шейдеры, которые содержат код, вызываемый основным шейдером. На практике это приводило к тому, что шейдеры компилировались дважды: один раз на стадии компиляции и второй раз на стадии компоновки. В частности, этим славился компилятор от nVidia. Он не генерировал какой-либо промежуточный объектный код; он компилировал вначале, выбрасывал полученный результат и компилировал заново на стадии компоновки.

Таким образом, чтобы приделать вершинный шейдер к двум разным фрагментным шейдерам, приходилось компилировать намного больше, чем в D3D. Особенно с учётом того, что вся компиляция производится оффлайново, а не перед непосредственным исполнением программы.

У GLSL были и другие проблемы. Возможно, было бы неправильным сваливать всю вину на 3D Labs, ибо в конечном итоге ARB утвердили и включили в OpenGL язык шейдеров (но ничего больше из предложений 3DLabs). Однако, изначальная идея всё равно была за 3D Labs.

И теперь самое печальное: 3D Labs были правы (в основном). GLSL не векторный язык, каким в то время был HLSL. Так случилось потому, что железо 3D Labs было скалярным (как современное железо от nVidia), и они были полностью правы в выборе направления, которому позднее последовали многие производители оборудования.

Они были правы и с выбором модели компиляции для «высокоуровневого» языка. Даже D3D в итоге к этому пришёл.

Проблема в том, что 3D Labs были правы в неправильное время. И в попытках попасть в будущее преждевременно, в попытках быть готовыми к будущему, они отставили в сторону настоящее. Это выглядит как T&L-функциональность в OpenGL, которая была в нём всегда. За исключением того, что T&L-конвейер OpenGL был полезным и до появления аппаратного T&L, а GLSL был обузой до того как остальной мир догнал его.

GLSL — это хороший язык сейчас. Но что было в то время? Он был ужасен. И OpenGL пострадал от этого.

На подходе к апофеозу
Я поддерживаю ту точку зрения, что 3D Labs нанесли OpenGL смертельный удар, но последний гвоздь в крышку гроба забил сам ARB.

Возможно вы слышали эту историю. Во времена OpenGL 2.1, у OpenGL были большие проблемы. Он тащил за собой огромный груз совместимости. API больше не был простым в использовании. Одну вещь можно было сделать пятью разными способами и непонятно какой из них быстрее. Можно было «изучить» OpenGL по простым руководствам, но при этом вы не изучали тот OpenGL, который даёт настоящую графическую мощь и производительность.

ARB решили предпринять ещё одну попытку изобрести OpenGL. Это было как «OpenGL 2.0» от 3D Labs, но лучше, потому что за этой попыткой стоял ARB. Они назвали это «Longs Peak».

Что такого плохого в том, чтобы потратить немного времени на улучшение API? Плохо то, что Microsoft оказалась в довольно шатком положении. Это было время перехода на Vista.

В Vista Microsoft решили внести давно напрашивающиеся изменения в графические драйверы. Они заставили драйверы обращаться к ОС за виртуализацией графической памяти и многим другим.

Можно долго спорить о достоинствах такого подхода, и о том, был ли он вообще возможен, но факт остаётся фактом: Microsoft сделала D3D 10 только для ОС Vista и выше. Даже на поддерживающем D3D железе было невозможно запустить D3D приложение без Висты.

Вы возможно помните, что Виста… скажем так, работала не очень хорошо. Итак, у нас была неторопливая ОС, новый API, который работал только на этой ОС, и новое поколение железа, которое нуждалось в этом API и ОС чтобы делать нечто большее, чем просто превосходить предыдущее поколение в производительности.

Тем не менее, разработчики могли использовать функциональность уровня D3D 10 через OpenGL. То есть могли бы, если бы ARB не был занят работой над Long Peaks.

ARB потратили добрые полтора-два года, работая над улучшением API. Ко времени выхода OpenGL 3.0 переход на Висту закончился, Windows 7 была на подходе, и разработчиков игр больше не заботила функциональность уровня D3D 10. В конце концов, оборудование для D3D 10 прекрасно работало с приложениями на D3D 9. С увеличением темпов портирования с ПК на консоли (или с переходом ПК-разработчиков на консольный рынок), разработчикам всё меньше была нужна функциональность D3D 10.

Если бы разработчики получили доступ к этой функциональности даже на Windows XP, развитие OpenGL могло бы получить живительный заряд бодрости. Но ARB упустили эту возможность. А хотите знать что самое ужасное?

ARB не смогли изобрести API с нуля несмотря на трату двух драгоценных лет на попытки сделать это. Поэтому они вернули статус-кво, добавив лишь механизм для объявления функциональности устаревшей.

В итоге ARB не только упустили ключевые возможности, но и не выполнили ту работу, которая привела их к этому упущению. Это был epic fail по всем направлениям.

Такова история о противостоянии OpenGL и Direct3D. История упущенных возможностей, величайшей глупости, умышленного безрассудства и банальных нелепостей.

habr.com

Что лучше DirectX или OpenGL?

Форум: "Игры";Поиск по всему сайту: www.delphimaster.net;Текущий архив: 2004.07.11;Скачать: [xml.tar.bz2];

Вниз

Что лучше DirectX или OpenGL? 
Юрий Ж. ©   (2004-03-15 20:29) [0]

Вопрос конечно вечен, но...

Magikan ©   (2004-03-16 02:56) [1]

SDL + OpenGL

TButton ©   (2004-03-16 12:45) [2]

DirectX лучше работает под виндамиOGL одинаково криво работает на любой платформе, выбор за тобой.

hexone ©   (2004-03-16 13:30) [3]

> OGL одинаково криво работает на любой платформе,.. если руки кривые.

WebError   (2004-03-16 17:28) [4]

Смотря, что тебе надо, какие у тебя знания ООП (если никаких, то DX противопоказан!) OGL предполагает хорошее знание платформы на которой пишешь, но заточена под процеДуры, а вот DX - чистейший ООПс! COM - forever! Вообще-то что-то несложное, тогда выбирай OpenGL, подключи GL, GLU, GLAUX и работай себе на здоровье! :)

cyborg ©   (2004-03-16 19:35) [5]

Корректней вопрос звучать должен так: "Что лучше Direct3D или OpenGL?".А в данном случае DirectX естественно лучше, так, как там много чего есть.

Mihey ©   (2004-03-16 20:16) [6]

2 cyborg:

А если корректно?

cyborg ©   (2004-03-16 21:30) [7]

А если корректно, то я не знаю.

Magikan ©   (2004-03-17 05:01) [8]

Кто там что про OGL заливает? Про Quake 3 забыли? После того, как Loki Entertaiment перенесла его на SDL (которая отлично работает совместно с OpenGL) - компилируется на любой платформе (windows, linux, FreeBSD, MacOS classic, MacOS X, BeOS, Solaris и пр.) без изменения кода. Быстродействие ничуть не хуже, чем в оригинале (по крайней мере в версии для Linux). А DirectX - это лишняя головная боль, особенно для начинающих геймеров. Не для игровой библиотеки была придумана COM-архитектура.

wiz   (2004-03-17 15:05) [9]

а если немного перевести вопрос в другую плоскость:

Что работает быстрее Direct3D или OpenGL? (при одинаковых условиях нагрузки, одинаковом железе, одной винде и каких-то стандартных драйверах)

---------------PS: (off-topic) хочу поприветсвовать всех и извиниться за почти годовое отсутствие

hexone ©   (2004-03-17 16:11) [10]

> Что работает быстрее Direct3D или OpenGL? (при одинаковых > условиях нагрузки, одинаковом железе, одной винде и каких-то > стандартных драйверах)На этот вопрос тебе могут ответить только в ATI или nVidia

wiz ©   (2004-03-17 20:34) [11]

hexone: неужели никто не проверял ручками (на своей машине)?

воспрос созник отсюда: я сам разобрался (и продолжаю разбираться) с OpenGL, поэтому использую его. Периодически слышу от обывателей заявления типа: "Зачем ты делаешь под oGL, ведь D3D быстрее и лучше!". Заявления эти при ближайшем рассмотрении оказываются голословными, но некий осадок на душе остаётся.

Magikan ©   (2004-03-18 04:16) [12]

Что быстрее, OpenGL или Direct3D ?Если в OpenGL задать программный рендеринг сцены, а в DirectX - аппаратный, то Direct3D будет работать быстрее. Если наоборот, то и результат будет, очевидно, наоборот (только в последнее время одна мелкомягкая фирмочка отказалась продолжать поддержку программного рендеринга, из-за чего Direct3D выпадет в осадок). Если использовать и в OpenGL аппаратный и в DirectX тоже аппаратный рендеринг, то результат будет примерно одинаковый. Примерно - из-за того, что макрософт сдуру игровую библиотеку написала на COM-технологии, которая на заднем фоне создает шумы в производительности (точнее часть процессорного времени уходит на обработку вызовов интерфейсов, для удостоверения в этом более внимательно ознакомьтесь с самой технологией), что немного медленне OpenGL. Аппаратная поддержка железа что там, что там одинаковая (если драйверы установлены правильно), все новые возможности, которые появились в DirectX9, доступны в OpenGL через расширения. А если нет разницы (ну почти нет), зачем платить больше? Зачем изучать интерфейсы DirectX9, которые в DirectX10 будут другими?

NailMan ©   (2004-03-20 15:43) [13]

Magikan © Примерно - из-за того, что макрософт сдуру игровую библиотеку написала на COM-технологии, которая на заднем фоне создает шумы в производительности (точнее часть процессорного времени уходит на обработку вызовов интерфейсов, для удостоверения в этом более внимательно ознакомьтесь с самой технологией), что немного медленне OpenGL.Что-то не сильно я заметил шума производительности.

COM D3D удобен и эффективен, в отличие от...

Аппаратная поддержка железа что там, что там одинаковая (если драйверы установлены правильно), все новые возможности, которые появились в DirectX9, доступны в OpenGL через расширенияХех...молодой еще, зеленый(C) Кин-дза-дза.

OGL и D3D на одной и той же видеокарте идут по разному из-за того что вендор этой видеокарты отдал предпочтение(заточка дров) одному API.У ATI это D3D, у nVidia это OGL.

С учетом того что игра пишется не под конкретное железо - надо вибирать компромисс.

А если нет разницы (ну почти нет), зачем платить больше?В чем заключается платеж?

Зачем изучать интерфейсы DirectX9, которые в DirectX10 будут другими?Что-то я не заметил особенно сильных отклонений в интерфейсах D3D при переписывании движка с D3D8 на D3D9. Ну изменил некоторые названия и имена структур - это практически все изменения.

Тем более я не думаю что будучи написав игру на D3D9 я буду ее переписывать заново на DX10 когда он появится. Тем более что появится он не раньше Лонгхорна, т.е. не ранее середины 2005г.

Magikan ©   (2004-03-24 03:38) [14]

NailMan ©Насчет заточки драйверов - это ты зря. Производители одинаково поддерживают как OGL так и D3D. Иначе на играх бы писали - что эта игра для ATI Radeon, а эта игра для NVidia GeForce. Ты представляешь, как это было бы глупо. Приходишь в магазин и говоришь: "продайте мне видеокарту, чтобы я мог в Quake3 поиграть" или "мне подарили Warcraft III, а моя видеокарта его не держит" или еще тупее: "мне, пожалуйста, GeForce FX 5200, чтобы я мог в Quake3 погонять и ATI Radeon 9200, чтобы в Warcraft III c друзьями порубиться". Бывают игры заточенными под конкретную видеокарту (как Seriouse Sam или Unreal Turnament 2003), но никак ни дрова под игровой движок.

wiz ©   (2004-03-24 08:49) [15]

2 Magikan

>Производители одинаково поддерживают как OGL так и D3DВот тут ты не совсем прав... Как минимум реализация openGL у каждого производителя своя (через свой набор расширений). А вот D3D (насколько я понимаю) - штука универсальная. Таким образом уже есть расхождения.

>Иначе на играх бы писали - что эта игра для......и зря не пишут. Хотя сейчас ситуация (похоже) выравнивается, но еще совсем недавно (2-3 года назад) игрушки вели себя очень по разному на nV и ATI.

я сам тогда только начинал использовать openGL и сильно удивился (и огорчился) в следующей ситуации:

а) написание и отладка проекта велась на компах с nVidia-картами (TNT2, GeForce-GTS, GeForce-2 MX, GeForce-2)б) показ происходил у заказчика на машине с ATI FireGL 8800 (зверь а не карта, но ATI"шная)в) Хотя различий (по картинке) не было на рабочих машинах, мы увидели совсем не то у заказчика.

Немного по другому работал AlphaBlending. Чуть-чуть по другому работал z-test (такое чувство, что округление по разному реализовано). Немного по другому выглядели материалы.

г) нас (программеров графики) спасло только то, что проект был не особо важный, а кроме того отсыл заказчику произошёл раньше установленного срока, так что у нас было время всё исправить.

suicide   (2004-03-24 09:25) [16]

>Производители одинаково поддерживают как OGL так и D3D

А ты попробуй поиграть в DroneZ на ATI видюхе, я пробовал на Radeon 9800Pro - не идёт. Зато на вшивой TNT абы как. И как после этого понимать этих конкурентов: берите берите ATI, да вы что берите Nvidia они круче. Вообщем одни вытесняют других с рынка любым всевозможным способом.

hexone ©   (2004-03-24 10:40) [17]

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

TButton ©   (2004-03-24 15:02) [18]

>.. если руки кривые.

а че ж у меня контра в OGL глючит? у кого руки корявые?

hexone ©   (2004-03-24 16:03) [19]

> а че ж у меня контра в OGL глючит? у кого руки корявые?Зачем путать конкретную специфику твоей машины с руганью в сторону OpenGL. На OpenGL разрабатываются серьезные программы типа САПР как раз из-за того, что он продуманный и кроссплатформенный. Нужно конечно отметить, что там(GL) не очень удобно реализованы расширения, да они серьезным программам не очень-то и нужны. Игры прежде всего иллюзия реальности. Там(в САПР) не нужна реальность, там реальность не в визуализации а в расчетах и чертежах. А где нужна реальность там используется алгоритмы типа RayTracing, до которых, к сожалению, еще любой реализации DX и GL еще топать и топать. Резюмируя могу сказать: Выбор библиотеки зависит от задач, которые призвана решать твоя программа, а не от "что тебе приглянется на том и пиши". Любой задаче всегда предшествует анализ, в этот анализ и входит выбор библиотеки.

TButton ©   (2004-03-24 17:36) [20]

>Зачем путать конкретную специфику твоей машины с руганью в >сторону OpenGLи что мне теперь удавиться и не жить если у меня машина такая???

3ds MAX R4 тоже глючит, на OGL. viewport"ы постоянно замусориваются, зато на Direct3D все нормально (не то чтоб хорошо, но нормально). что еще раз подтверждает основную идею моего первого поста Direct3D будет работать (пусть не на 5+ и даже не на 4-, но) на любой машине (под виндами)

Magikan ©   (2004-03-25 03:31) [21]

;)Да нравится вам пользоваться макрософтовскими библиотеками - пользуйтесь наздоровье :) Все равно это неудобно ;) и ненадолго B)

GrayFace ©   (2004-03-25 12:49) [22]

[20], 3ds MAX 6 глючит на Direct3D.[21], неудобно - навеное, но ненадолго - это не так.

Форум: "Игры";Поиск по всему сайту: www.delphimaster.net;Текущий архив: 2004.07.11;Скачать: [xml.tar.bz2];

Наверх

Рейтинг@Mail.ru

Память: 0.79 MBВремя: 0.071 c

www.delphimaster.net

OpenGL вместо DirectX?

Часто, когда мы видим рассуждения серьезных разработчиков игр на форумах о том, что они использует для своей очередной игрушки OpenGL, мы встречаем эти слова с немым недоверчивым взглядом – почему, мол, именно OpenGL – кто его вообще сейчас использует? DirectX – вот это да, это будущее. Когда же разработчик говорит представителям компании, выпускающей видеокарты, что он использует для своего продукта OpenGL, температура в комнате падает градусов на десять.

Возможно, вы такого же мнения о технологии OpenGL, что с нашей точки зрения не совсем справедливо. Попробуем не то чтобы вас переубедить, а представить вам несколько фактов, которые заставят задуматься…

Но прежде чем мы начнем выкладывать факты, давайте прогуляемся назад во времени и посмотрим, откуда появился OpenGL и как он развивался…

Что такое OpenGL?

В 1982 году компания Silicon Graphics начала продавать высокопроизводительные графические терминалы, использующие закрытое API под именем Iris GL (GL – сокращение для «graphics library», то есть «графическая библиотека»). С годами графическая библиотека Iris GL росла и становилась все мощнее – поддерживать и развивать разбухшую библиотеку стало достаточно накладно, что послужило причиной радикальному шагу Silicon Graphics. Компания переписала и оптимизировала код Iris GL и сделала его открытым стандартом. Теперь конкуренты SG также могли использовать ранее закрытую библиотеку, переименованную с Iris GL в Open Graphics Library (OpenGL), но взамен они должны были помогать дописывать, оптимизировать и обновлять ее.

OpenGL

Сегодня спецификация OpenGL находится под крылом некоммерческой организации Khronos Group, в которую входят представители из множества различных компаний, заинтересованных в создании высококачественного API. На низком уровне библиотека обслуживается OpenGL Architecture Review Board (ARB). OpenGL поддерживается на любой игровой платформе, включая компьютеры от Apple (а также iPhone), операционные системы Windows и Linux, консоли PS3, Wii, PSP и DS. Так что практически любая игровая платформа, исключая XBox, по понятным причинам, поддерживает OpenGL.

Что такое DirectX?

Начиная с операционной системы MS-DOS, компания Microsoft поняла, что игры часто определяют выбор пользователем операционной системы. По этой причине в 1995 году компания создала закрытый набор библиотек, способствующий разработке игрушек для новой операционной системы Windows 95. Набор библиотек включал Direct3D, DirectInput и DirectSound, а вся эта коллекция была названа одним именем – DirectX. Когда Microsoft пришла на игровой рынок в 2001 году, она представила консоль DirectX Box, или коротко «XBox». XBox стал товаром, специально продаваемым себе в убыток (компания Microsoft потеряла на XBox более 4 миллиардов долларов), для того, чтобы вовлечь игровую индустрию в новое поколение, другими словами, Microsoft сыграла с рынком в этакий гамбит, дабы продвинуть DirectX в массы.

OpenGL

Глядя на нынешний игровой рынок, можно с уверенностью сказать, что стратегия оказалась успешной: большинство самых хитовых игр ПК используют библиотеку DirectX, и запускаются как на Windows, так и на XBox 360 без кардинального портирования. Но при этом игры не могут работать на платформах вроде Playstation, Mac OS и Wii. А это довольно емкие рынки, чтобы от них отказываться, здесь и возникает большой вопрос:

Все используют DirectX потому, что выбор API в разработке игр имеет положительную обратную связь, и сдвинута эта связь в сторону DirectX еще с 2005 года.

Положительная обратная связь возникает из-за того, что одна из библиотек становится все популярнее, если она популярнее – ее выбирают разработчики, которые разрабатывают больше игр именно под эту платформу. Потребители видят, что разработчик выбрал DirectX, и у него (потребителя) не остается выбора, кроме как тоже выбрать эту платформу, и так далее – своего рода цепная реакция и замкнутый круг. Популярный API получает поддержку производителей видеокарт, а разработчики в свою очередь выбирают API наиболее хорошо поддерживающийся производителями видеокарт (в расчете на большую аудиторию).

Популярность на рынке графических библиотек была сдвинута в сторону DirectX широкомасштабной кампанией Microsoft, использующей маркетинговый трезубец FUD (fear, uncertainty and doubt – страх, неуверенность и сомнение, касающиеся в данном случае, разумеется, OpenGL), а также дикую гиперболизацию заслуг и свойств DirectX, подталкивающую пользователей к нужному компании выбору. С тех пор, благодаря отличной стратегии Microsoft и так грамотно использованной цепной реакции, OpenGL практически исчез с мейнстримовой сцены компьютерной игровой индустрии.

1. Цепная реакция и замкнутые циклы

Факт, что в операционной системе Windows видеодрайверы DirectX находятся почти всегда в лучшем состоянии, нежели видеодрайверы OpenGL. Это происходит из-за замкнутого цикла с поддержкой производителей видеокарт. Так как производители игр перешли с OpenGL к DirectX (по причинам, озвученным выше), производители видеокарт получают меньше отчетов об ошибках в драйверах OpenGL, расширениях и документации. В результате видеодрайверы OpenGL и расширения становятся «глючными», а документация – запутанной, заставляя переключиться разработчиков игр с OpenGL на DirectX (хотят они того или нет). И цикл повторяется, более того, он начинает лавинообразно нарастать.

OpenGL

Есть еще один побочный фактор – в связи с хорошей документированностью и популярностью DirectX, под эту библиотеку пишут все больше специалистов, то есть специалистов в этой области больше, и ценятся они меньше, делая работу дешевле. Следовательно, под DirectX разработка игр становится дешевле, чем под OpenGL. Возникает еще один цикл – чем больше становится специалистов, тем больше становится документации, информации в интернете, в специализированных форумах и так далее, тем легче научиться писать под DirectX. Итог здесь один – программирование под DirectX дешевле, чем под OpenGL.

2. Кампания против OpenGL и Vista

Microsoft повторила свою FUD-кампанию (страх, неуверенность и сомнения) против OpenGL во время релиза операционной системы Windows Vista. В 2003 году Microsoft покинула OpenGL Architecture Review Board, показывая, что она больше не заинтересована в будущем OpenGL. Затем в 2005 году на конференциях SIGGRAPH и WinHEC компания Microsoft создала такое впечатление, будто она собирается убрать поддержку OpenGL из Windows Vista, и вместо прямой поддержки OpenGL сделать своего рода «нашлепку» поверх DirectX, якобы для совместимости с приложениями WinXP. При этом такой механизм будет удручающе действовать на производительность приложений использующих OpenGL под «вистой». Такая «новость» привела к настоящей панике в лагере OpenGL, многие ведущие программисты покинули сообщество и переметнулись к разработчикам на DirectX.

OpenGL

Когда состоялся релиз Vista, Microsoft дала «задний ход» и забрала свои слова относительно убранной поддержки OpenGL обратно, позволив создать производителям оборудования быстроустанавливаемые клиентские драйверы (ICD), которые включают прямую поддержку операционной системой OpenGL. В сообществе OpenGL появились радостные вести о том, что библиотека все еще в первых рядах, и что производительность OpenGL в ОС Vista не уступает, по крайней мере, производительности Direct3D. К сожалению, удар по OpenGL уже был нанесен – доверие общественности к OpenGL серьезно пошатнулось.

3. Вводящие в заблуждение маркетинговые кампании

OpenGL

Стратегии запуска операционных систем Windows Vista и Windows 7 были связаны также с чрезмерно назойливым «впихиванием» «нового» DirectX, в котором по заявлениям Microsoft, унылая и серая графика магически преображается в супер-высококачественную графику. В сеть были выкинуты различные сравнения «до» и «после», то есть сравнительные изображения одной и той же игры в DirectX 9 и DirectX 10, как в дурацкой рекламе с «дешевым похуданием за неделю». Многие геймеры тогда решили, что переход с DirectX 9 на DirectX 10 волшебным образом превратит графику из «серой» и темной в нормальную (как в сравнении, показанном на изображении выше), или даже Halo 1 превратится в Crysis. Игровые журналы не раз доказали, что между Crysis в DX9 и Crysis в DX10 нет никакой разницы, и что все функции «DX10» прекрасно работают и в DX9 путем простой правки конфигурационного файла. Как бы то ни было, несмотря на эту досадную маркетинговую оплошность, кампания сделала свое «грязное» дело, и большинство публики решило, что нужно переходить на новый DirectX (а следовательно и на новый Windows), если хочешь получить самую крутую графику, и если не хочешь остаться в прошлом веке.

В то время как большинство игр и их производителей участвовали в маркетинговых шарадах Microsoft, некоторые здравомыслящие разработчики (вроде Джона Кармака) отказались участвовать в этом и пошли своим путем.

Так если OpenGL пользуется плохой поддержкой производителей оборудования, не используется больше в играх, был активно атакован со стороны Microsoft, и вообще в последнее время «затих», почему мы все еще должны его использовать? Не будет ли легче и дешевле для всех просто забыть его и перейти полностью на DirectX (как и все другие)? Нет, потому что на самом деле OpenGL значительно мощнее DirectX, поддерживает больше платформ и больше подходит для игр будущего.

1. OpenGL мощнее, чем DirectX

OpenGL

Доподлинно известно, что OpenGL быстрее отрисовывает графику, нежели DirectX (если не верите нам, посмотрите вот эту презентацию NVIDIA), а также быстрее получает доступ к новым функциям новых процессоров через расширения производителей. OpenGL немедленно дает вам прямой доступ ко всем новым графическим функциям и фишкам на всех платформах, в то время, как обновление DirectX происходит крайне редко, либо с выпуском новой Windows, либо просто по настроению Microsoft. Технология тесселяции, которую Microsoft рекламирует и обещает в новейшей версии DirectX 11, была доступна в OpenGL уже три года назад. Также практически все прочие новые фишки DirectX 11 были давным-давно доступны в OpenGL. Мы не знаем, какие еще технологии появятся в следующие годы, однако уверены, что первыми они появятся именно в OpenGL.

Microsoft потратила много ресурсов в работе над DirectX 10 и DirectX 11, и теперь эти библиотеки функционируют почти так же быстро, как OpenGL, и поддерживают почти все фишки OpenGL. Как бы то ни было, здесь имеется одна большая проблема: все эти прелести не работают в Windows XP! Добрая половина геймеров по сей день использует Windows XP, а вот использовать DirectX 10 или DirectX 11 в этой операционной системе не получится. Более того, если вы решите выбрать Linux или Mac, вы потеряете всякую связь со свежими игрушками, о чем речь в следующей главе…

2. OpenGL – многоплатформенная спецификация

OpenGL

Огромное количество пользователей выбрали сегодня Mac или Linux (если не верите — посмотрите статистику на каком-нибудь liveinternet.ru). Когда мы говорим с очередным разработчиком игр, он заявляет, что поддержка Mac или Linux – это пустая трата времени, однако мы не уверенны, что это правильный вывод. К примеру, Blizzard всегда выпускает версии всех своих игр под Mac, и Blizzard – это один из самых успешных производителей игр в мире! Если даже они делают не все точно так же, как другие, значит, в этом есть какой-то смысл, и вряд ли они будут нести материальные затраты для портирования на Mac из альтруистических побуждений.

Джон Кармак в интервью одному изданию, не так давно ответил на волнующий нас вопрос:

– Что, если бы ваша игра Rage была бы на DirectX?

– Она работает на OpenGL, несмотря на это, мы используем трансляцию запросов в D3D [на XBox 360], и CG на PS3. Интересен тот факт, что технологии делают безразличным то, какой API именно вы используете. И какое поколение технологии вы используете. У вас есть небольшая горстка файлов, которые сами решают все проблемы с совместимостью API и миллионы строчек кода, которым вообще безразлична платформа, на которой они работают.

Так зачем же писать изначально под закрытый DirectX, в угоду известному софтверному гиганту, которому может взбрести в голову все, что угодно?

И даже если вы беспокоитесь только за Windows, позвольте напомнить – половина геймеров все еще работает из-под Windows XP, и не сможет насладиться вашей игрой, если вы используете последнюю версию DirectX. Единственный способ принести самую современную графику на Windows XP – это OpenGL.

3. OpenGL – лучший выбор для будущего игр

OpenGL

OpenGL – это некоммерческий открытый стандарт, который позволяет пользователю получить графику высочайшего класса на любой платформе, выжимая из установленного оборудования максимум производительности. Использование этого стандарта было «отменено» благодаря атакам монополиста, одного единственного софтверного гиганта, который пытается (и что самое интересное, у него получается) доминировать в игровой индустрии, которая еще слишком молода, чтобы защищать себя. Так как Direct3D поддерживается только на Windows и XBox, Microsoft получает мертвую хватку на всей компьютерной игровой индустрии.

Наверное, все из нас знают, что такое монополия и чем она кончается для конечного пользователя? Мы получаем большие цены, низкое качество и никакой свободы. Монополия Microsoft очень нехорошо отражается как на геймерах, так и на разработчиках игр.

Тринадцать лет назад, в 1997 году, ситуация была похожей на сегодняшнюю. Microsoft запустила свою массивную маркетинговую кампанию, раскручивающую Direct3D, и скоро все «доподлинно знали», что, оказывается, он лучше и быстрее, чем OpenGL. Дела начали меняться, когда Крис Хекер опубликовал свое открытое письмо, в котором осуждал агрессивную политику гиганта и говорил об истинном положении дел с DirectX. Вскоре после этого Джон Кармак опубликовал свои знаменитые хвалебные речи об OpenGL, и решил вложить свои деньги в открытый стандарт, переведя все игры компании Id Software на OpenGL, и доказав тем самым, что для получения передовой трехмерной графики высочайшего класса DirectX совершенно не нужен.

В последние несколько лет эти уроки были забыты. Многие разработчики игр попали под магию маркетинга MS, в то время как другие стали жертвой образовавшегося замкнутого круга и цепной реакции. Так давайте же отбросим громкие рекламные возгласы, маркетинговые преувеличения, прочее «бла-бла-бла» и посмотрим на вещи трезвым взглядом. Если вы используете DirectX, то должны выбирать между устаревшим DirectX 9 и новым DirectX 11, но при этом значительно сокращать вашу аудиторию (если вы разработчик) или вынужденны покупать/пользоваться новой операционной системой Vista или Windows 7 (если вы пользователь), несмотря на то, что вам и под XP хорошо.

С другой стороны, если вы используете OpenGL, вы получаете графику мощнее и быстрее, чем в DirectX 11, при этом абсолютно свободны в выборе платформы – вы можете играть в любой версии Windows, Mac или Linux, точно так же, как и на консолях PS3, Wii, PSP, DS и iPhone. Нужно не забывать быстроразвивающийся стандарт WebGL, который может стать основанием для следующего поколения браузерных игр.

Если вы – разработчик игр, то проведите интереса ради небольшое исследование, сравните библиотеки, с большой вероятностью вы поймете, что OpenGL – это лучший выбор. Некоторые программисты предпочитают стиль API DirectX 11 стилю OpenGL, однако низкоуровневый API независимо от библиотеки обернут в слой абстракции, так что это не должно быть решающим фактором для выбора. Если вам как разработчику что-то не нравится в OpenGL, вы можете просто попросить ARB поменять этот момент – сообщество было создано именно для этого!

Если вы геймер, который использует Windows XP, Mac или Linux, мы надеемся, вы уже заметили, что один только DirectX препятствует попаданию свежих игрушек на вашу платформу, и все что вы можете сделать – это поддержать игры использующие OpenGL.

modnews.ru

c++ - Должен ли Direct3D использовать OpenGL в Windows?

По производительности, и при условии достойных драйверов графических процессоров, разница в целом отсутствует.

Некоторые операции в OpenGL изначально быстрее, чем в DirectX9, хотя DX10 исправил это.

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

При написании сетевого кода узким местом является сетевой адаптер, и не имеет значения, написан ли ваш код сокета в .NET, простые сокеты Berkeley в C или, возможно, с использованием некоторой библиотеки Python.

При написании кода для использования графического процессора GPU является ограничивающим фактором. Самое большое различие между DirectX и OpenGL заключается в том, что для выполнения определенных задач может потребоваться вызов функции или два других, а стоимость исполнения практически не существует. То, что происходит на графическом процессоре, одинаково в любом случае, потому что это определяется вашим драйвером GPU и потому, что как OpenGL, так и DirectX стараются быть максимально эффективными.

Имеются веские основания предпочесть любой API.

DirectX имеет гораздо лучшую поддержку инструмента. Microsoft делает очень хорошую работу. Отладка и оптимизация кода DirectX намного проще с такими инструментами, как PIX. Кроме того, Microsoft предоставляет вспомогательную библиотеку D3DX, которая обеспечивает эффективные реализации многих часто используемых функций.

OpenGL имеет то преимущество, что он не привязан к конкретной ОС. DirectX9 работает только в Windows. DX10 и выше работают только с Vista и выше.

OpenGL работает на любой ОС, где был написан драйвер OpenGL.

В Windows ситуация иногда бывает немного неудобной. Windows сама по себе поставляется с древними реализациями OpenGL. (XP с v1.1, я полагаю, и Vista/7 с 1.5).

Таким образом, приложения OpenGL в Windows полагаются на поставщика графического процессора, чтобы обеспечить обновленную реализацию драйверами. ATI и NVidia действительно обеспечивают очень хорошие реализации, поэтому это не проблема. Драйверы Intel OpenGL обычно отстают как по качеству, так и по поддерживаемым функциям.

qaru.site


Смотрите также