Автор: Qraizer
Дата сообщения: 29.09.2008 20:15
Нет, конечно. Архитектурные принципы её API, возможно и устарели: функциональный и ориентированный на POD типы - это уже даже не вчерашний день. Тут backspace777 (давно, правда) уже упоминал, что многочисленные расширения задалбливают. ИМХО главный её минус следует из её главного плюса - некому оперативно вводить, обкатывать и стандартизировать фичи, постоянно придумываемые производителями железа. Пока кто-нибудь придумает и воплотит соответствующее очередное расширение, пока его рассмотрят, обсудят, подформализуют, обкатают и примут - железо уже новые фичи предлагает. Причём, вполне может оказаться, что очень похожим (или даже этим же) расширением уже занимается кто-то другой, но у него немного другой взгляд на детали его реализации. ИМХО, если бы не DOOM }I{, то и по сей день аппаратные шейдеры в GLе отсутствовали бы. Но считать это недостатком GLя всё-таки не следует. Нужно отдавать себе отчёт, что международные стандарты не только играми и их производителями определяются и диктуются.
Другое дело DirectX. У него один автор, читай, монополист (не собираюсь тут спорить на тему того, хорошо это или плохо, просто констатирую), который может оперативно реагировать на веянья моды в мире железа, выпускать обновления интерфейсов, обкатывать их совместно с группой тестеров из заинтересованных компаний. Много времени на согласоваение, обсуждение итп у него не уходит. Потому в последнее время разработчики и железа, и софта, и уважают DX больше, чем GL. Причём его COM-интерфейс, который имеет ООП/ИОП ориентацию, значительно меньше подвержен проблемам функционального интерфейса. Какие-то новые расширения вышли? В GL для их использования нужно поискать соответствующее расширения, подгрузить библиотеки и наполучать оттуда указателей на функции (если это устаревшие сведения, поправьте, плз). В DX для этого нужно только изменить тип объекта, то бишь переменной, которая является указателем на интерфейс, и передать в его конструктор другой параметр, в результате чего фабрика создаст экземпляр другого класса, реализующего этот интерфейс. Всё. Учитывая, что DX-сервера находятся в DLL, и размещаются в адресном пространстве использущего их процесса, все COM-вызовы являются не более чем обычными вызовами через таблицу виртуальных методов. Если, конечно, не использовать дуальные интерфейсы, но это пусть заботит VB и иже с ним. Так что медленее GLя работа с DX не будет. Тем не менее, DX гораздо меньше общепринятого мнения зациклен на некой конкретной сфере индустрии. Тот факт, что сейчас он зачастую используется именно для игр, отнюдь не ограничивает сферу его применения только играми.
И кстати, Кармак выбрал GL главным образом из-за его переносимости. Даже сейчас они не могут себе позволить писать движок на непереносимом API - они ж далеко не только под PC игры выпускают. А D3D они вообще никогда не использовали, только DDraw, DInput, DPlay и DSound и D3DSound (насчёт последнего не уверен), т.е. всё остальное из DX, актульного для игр, кроме DMusic. Но это и не принципиально, потому что GL этого всё равно предложить не может, так что тут по-любому переносимо писать придётся вручную.