LINUX.ORG.RU
ФорумTalks

OpenGL рулит! =)


0

0

Прежде всего, пнем, по ходу дела, один распространенный миф. А именно -
"Direct3D изначально быстрее, чем OpenGL". Дело именно в слове "изначально",
отображающее маркетинговые происки M$, о том, что, мол, OpenGL изначально
делался для High-End графических станций, а, мол, Direct3D делался специально
для задач написания игр, и потому, как-бы OpenGL не тянулся - до Direct3D ему
не достать.

Миф. И очень вредный, кстати говоря.

Да, никто не будет отрицать, что современные Direct3D драйвера, как правило,
несколько быстрее, чем их OpenGL собратья, и более стабильны... Но это не
результат "изначальной" лучшей проектировки D3D, или его "специальной" заточки
под 3D игры. Это результат постоянного шантажа и выкручивания рук
производетелям драйверов и железа, со стороны M$, разумеется.

Изначально, то есть с точки зрения проектирования, дизайна API, его удобства
для разработчиков игр и драйверов, его целостности, его красоты, в конце концов
- изначально OpenGL намного впереди D3D.

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

1. Написание программ состоит из нескольких этапов - поектирование, реализация
предварительного варианта, и затем - отладка, оптимизация и сопровождение.

2. По всем - совершенно по всем и каждому пункту OpenGL предоставляет больше
возможностей программисту.
2.1 Проектирование. Ну, если говорить о 3D части игр, то OpenGL значительно
лучше документирован, его интерфейс намного более удобен и прозрачен, по
сравнению с Direct3D, вы можете найти тонны примеров, как реализовать то или
иное.
2.2 Предварительный вариант. Тут OpenGL опять вне конкуренции. Объем
написанного кода (в смысле - количество строк исходного текста) в разы меньше,
необходимого для D3D. OpenGL не требует хранить и передавать драйверу данные в
определенном формате, практически каждая функция имеет варианты для разных
типов аргументов - короткое и длинное целое, короткое и длинное число с
плавающей запятой.
Вы можете разместить различные данные в одной структуре, и формат этой
структуры никак не диктуется OpenGL API, в отличие от, так сказать. Опять-же,
OpenGL не привязан к различным proprietary вещам типа COM интерфейса, и имеет
прявязки (возможность вызова), практически из всех распространенных языков
программирования.

anonymous

2.3 Отладка. Тут OpenGL тоже на высоте. В любом месте программы вы можете
полностью проверить состояние драйвера и текущие настройки. Каждый вызов
системной функции предполагает (и располагает!) полную проверку правильности
всех аргументов, а ошибки не приводят к фатальным последствиям и легко
находятся. Кстати, именно это и заставило меня перейти от Glide API на OpenGL -
потому что, начиная с некоторого порогового уровня сложности, я оказался просто
не в состоянии отследить работу Glide.
К сожалению (а скорее - к счастью), я не имел чести отлаживать программу,
написанную на D3D. Но вынужненное знакомство с "родственными" API - DirectSound
и DirectInput оставили у меня (как и вообще весь стиль MS) тягостное
впечатление.
2.4 Оптимизация. Пожалуй, самая интересная, с точки зрения конечного
пользователя, возможность. Тут Direct3D и рядом не стоял. Вообще. Начнем все с
того-же - OpenGL не диктует формат данных. Ни программисту, пишущему игру, ни
писателю драйверов. Соответсвенно, те, кто пишут драйвер, могут сохранять
данные, переданные программой - где угодно и как угодно. Например, после
предварительной обработки (T&L) - в той-же видео-памяти, которая значительно
быстрее, чем обычная. Да и формат хранения они, естественно, выбирают наиболее
близкий к необходимому для передачи в железо. Кроме того, для "статических"
объектов, то есть не меняющих свою геометрию и пр. свойства во времени - есть
возможность скомпилировать их в display list. Опять-же, поскольку эти данные не
изменяются во времени, уровень возможной оптимизации значительно выше, чем у
ближайшего аналога из D3D. Есть и форматы хранения и передачи данных,
позволяющие модифицировать объект в течении времени, к тому-же, предполагающие
более удобный и компактный вид, чем D3D - DrawArrays и DrawElements.

anonymous
()
Ответ на: комментарий от anonymous

2.5 Сопровождение. Сопровождение предполагает исправление ошибок (то есть
постоянный процесс отладки) и постоянное обновление программы, для поспевания
за быстротекущим временем - это включает в себя поддержку нового железа, и
переносимость на другие платформы. Вы уже догадались - D3D не может даже
претендовать на равность в этих впоросах. О переносимости (а следовательно - и
освоении смежных сегментов рынка) D3D говорить просто не приходится. Он и в
Windows-то не успевает - скажем, последняя официальная версия для NT - это
DirectX 3.0, а для Windows 95/98 - 7.0. А ведь NT - это стандартная платформа
разработчиков программ Win32. Как вы догадываетесь - о Mac, Linux, OS/2, BeOS и
других - говорить просто не приходится - а ведь за ними тоже стоит немало
людей, и для бизнеса - это тоже деньги!

В плане поддержки новых технологий... Ну как закрытый и контролируемый только
одной корпорацией API может соперничать с открытым стандартом? OpenGL
официально поддерживает механизм расширений - и каждый производитель 3D
акселераторов может добавить в него именно те возможности, которые есть только
у него, и нет у других производителей. Кроме того - расширения - это и
эффективный механизм развития API. Наиболее часто используемые программистами
расширения постепенно и естественным образом переходят в разряд стандарта, к
тому-же, все производители имеют время для доработки и улучшения как нового
стандарта, так и своего железа - в течении времени "обкатки" расширения.
Опять-же, отсутсвие жесткого формата данных позволяет вносить и совершенно
радикальные изменения - например, мультитектурирование, которое, при
фиксированном формате данных, может потребовать переработки всего API типа D3D.
И под конец, почему-же все-таки Direct3D быстрее OpenGL? Да по политическим
причинам. Только. Именно по политическим причинам программная реализация OpenGL
"от Microsoft" была значительно медленнее, чем Direct3D реализация. Больше
того, существовала реализация OpenGL для Windows "от SGI" - значительно более
быстрая. Но после того, как M$ и SGI "помирились", договорившись не вести войн
стандартов, а совместно начать работать над проектом Fahrengeht (кажется
так...) - мелкосфот потребовал убрать из интеренета все ссылки на SGI
реализацию OpenGL, и прекратить его дальнейшую поддержку... Что, увы, и было
сделано. Мелкософт же, как обычно, попытался всех "кинуть" - и реализовать
Фаренгейт только через Direct3D. Впрочем, за OpenGL часть проекта отвечал SGI,
но ему стало как-то скучно на этом рынке, лучшие специалисты перебрались в
NVidia, и так-бы OpenGL и скончался, тихо и незаметно... не получи он мощную
поддержку со стороны Кармака. За что, как я писал, программисты ему ежедневно
свечку должны ставить и молиться за здравие ;-)

anonymous
()
Ответ на: комментарий от anonymous

ReLOL

Понятно!Вот сейчас все как-то более определилось.Вот только одно не ясно, почему лоси в период осенних случек предпочитают лосих-крикуниц?

mukaltin_aspirinski
()
Ответ на: ReLOL от mukaltin_aspirinski

Красиво оформить в цельную статью, положить в документацию на этом сайте.

anonymous
()
Ответ на: комментарий от anonymous

ReLOL

>Красиво оформить в цельную статью, положить в документацию на этом сайте

Конечно!Да!Именно в цельную статью!Представляю себе суровое лицо линуксоида,уставшего от борьбы с Х-ми и установкой дров NVIDIA,который открыл вашу красиво-оформленную и цельную статью!

mukaltin_aspirinski
()
Ответ на: ReLOL от mukaltin_aspirinski

Покажите человека, у которго проблемы с дровами nVidia. Я ему руки оторву

anonymous
()
Ответ на: комментарий от anonymous

> мелкосфот потребовал убрать из интеренета все ссылки на SGI реализацию OpenGL

я не вкурил, это как?

anonymous
()
Ответ на: комментарий от anonymous

>О переносимости (а следовательно - и освоении смежных сегментов рынка) D3D говорить просто не приходится. Он и в Windows-то не успевает - скажем, последняя официальная версия для NT - это DirectX 3.0, а для Windows 95/98 - 7.0. А ведь NT - это стандартная платформа разработчиков программ Win32. Как вы догадываетесь - о Mac, Linux, OS/2, BeOS и других - говорить просто не приходится - а ведь за ними тоже стоит немало людей, и для бизнеса - это тоже деньги!

Ты в каком веке живешь и сколько тебе лет??? 15? Все игры несут нужный директ на своем диске, а NT уже года три никто на десктопе не искользует. Что касается других платформ, то портировать надо не только графику, а и все остальное... Да и винда стоит более чем на 95% десктоп-систем. Так что не так уж и много этих "остальных" и часто оно того не стоит. "To say OpenGL is great 'cause it works on all platforms is like saying that anal sex is great 'cause it works on all genders."

anonymous
()
Ответ на: комментарий от anonymous

это похоже на какую-то статью года 2000, или когда там 7.0 был??? текущая версия DX для win 9x, 200x, xp - 9.0c, а не 7.0 http://www.microsoft.com/downloads/details.aspx?FamilyId=9226A611-62FE-4F61-A...

кстати такой вопрос - почему такой нелюбитель DX как Джон Кармак для Doom 3 использовал DX, а не OpenGL?

длительная задержка выхода спецификаций OpenGL 2.0 привели к смерти OpenGL как API для 3D игр.

Reset ★★★★★
()
Ответ на: комментарий от Reset

>кстати такой вопрос - почему такой нелюбитель DX как Джон Кармак для Doom 3 использовал DX, а не OpenGL?

Вроде все-таки OpenGL. DX там используется не для графики. Вроде так.

WFrag ★★★★
()
Ответ на: комментарий от WFrag

к сожалению официальный сайт молчит о требованиях, но в инет магазине на который есть ссылка на оффсайте написано

"Video Card: 3D hardware Accelerator Card Required - 100% DirectXR 9.0b compatible 64MB Hardware Accelerated video card and the latest drivers"

http://www.gamestop.com/product.asp?product%5Fid=644930&Section=SYSTEMREQ...

OpenGL тут и не пахнет, кстати и версии под Linux почему-то пока нет

Reset ★★★★★
()
Ответ на: комментарий от Reset

Re: OpenGL рулит! =)

А тебя не смущает тот факт, что Дум3 работает на GF2MX400, который ну никак не является DX-9 совместимым, там даже DX8 нету. И кажись эта строчка из конфига полностью снимает какие-либо вопросы:
seta image_filter "GL_LINEAR_MIPMAP_LINEAR"

Zak ★★
()
Ответ на: Re: OpenGL рулит! =) от Zak

никак не смущает. это сейчас мода такая пошла в требованиях писать DX9 карточка с 64M памяти. в том же fcry так же написано, хотя он отлично работает на неDX9 карточке с 32M. главное там про OpenGL ничего не сказано, а должно было быть если игра через него работает.

Reset ★★★★★
()
Ответ на: комментарий от Reset

> там я думаю точно ничего кроме D3D нету

А что в хбохе стоит? Нвидия? И что, поддержку GL из неё выдирали насильно? :-)

AngryElf ★★★★★
()
Ответ на: комментарий от Reset

>никак не смущает. это сейчас мода такая пошла в требованиях писать DX9 карточка с 64M памяти. в том же fcry так же написано, хотя он отлично работает на неDX9 карточке с 32M.

Правильно, farcry у меня и на mx400 бегал, на после замены mx'а на dx9 карточку, картинка просто преобразилась, поэтому там и написано что нужна dx9 карточка. А в doom'е картинка примерно одинаковая что на старых, что на новых видяхах (см. скриншоты из инета). А dx9 написано потому, что с их точки зрения более старые видяхи не способны обеспечить необходимое число fps.

>главное там про OpenGL ничего не сказано, а должно было быть если игра через него работает.

Игру покупают не всегда технически продвинутые люди. Зачем писать про OpenGL, если он есть на любой видяхе??? (ну разве-что на 2-х мегабайтной s3 его нету). А написав про dx9, они сразу отсекли старенькие видяшки, неспособные вытянуть в игре минимально необходимый FPS. Естественно в этом списке есть исключения (типа не dx9 FG4 Ti 4600 потянет) или (dx9 Radeon 9600se загнётся).

Zak ★★
()
Ответ на: комментарий от AngryElf

>И что, поддержку GL из неё выдирали насильно? :-)

за это отвечает драйвер, а не карточка. ничто не мешало MS из драйвера выкинуть dll'ку с OpenGL.

Reset ★★★★★
()
Ответ на: комментарий от Reset

> кстати такой вопрос - почему такой нелюбитель DX как Джон Кармак для Doom 3 использовал DX, а не OpenGL?

Бред-с... Дум рендерит все через OpenGL, DirectX используется только для звука и мыши/клавы, как и все последние игры Кармака. Причем об этом было известно с самого начала работ над игрой.

В качестве доказательства, идем, например, сюда:

http://www.techimo.com/newsapp/i11618.html

и читаем:

"This release is intended primarily for those playing Doom 3 as it includes various OpenGL optimizations."

Можешь еще погуглить на предмет doom+3+opengl.

Кстати имхо вот как раз новый дум вполне наглядно продемонстрировал, насколько надуманы все преимущества D3D перед OGL. При всей моей нелюбви к самой игре, движок у нее действительно очень продвинутый.

int19h ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.