Прежде всего, пнем, по ходу дела, один распространенный миф. А именно -
"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 интерфейса, и имеет
прявязки (возможность вызова), практически из всех распространенных языков
программирования.