Direct3D - это API, разработанный Microsoft и предназначенный для помощи разработчикам в рендеринге 3D-графики. OpenGL и Direct3D - это два отдельных API, но оба они должны взаимодействовать с видеокартой, используя драйверы, разработанные компаниями, производящими видеокарты. Оба API (Direct3D и OpenGL) должны оба проходить через драйвер для доступа к видеокарте, и их скорости зависят от их конструкции и их реализации в драйверах видеокарты.
OpenCL - это нечто иное - он разработан, чтобы помочь разработчикам писать программы, которые выполняют вычисления общего назначения на графическом процессоре (не только для графики). OpenCL сравним с CUDA, но последний поддерживается только на картах NVIDIA. Использование CUDA вместо OpenCL может иметь некоторые преимущества в зависимости от вашей целевой системы, поскольку NVIDIA может сделать новые функции доступными для API CUDA, прежде чем они будут приняты в API OpenCL. Однако даже OpenCL и CUDA должны взаимодействовать с драйвером для того, чтобы что-нибудь сделать на графическом процессоре.
Как вы уже знаете, Direct3D работает только в Microsoft и в Wine (по большей части), но его структура как API сильно отличается от структуры OpenGL. Direct3D использует структуры и включает в свой API больше элементов ООП, тогда как OpenGL действует как конечный автомат, не имея каких-либо структур или функций ООП. Direct3D часто может развиваться немного быстрее, чем OpenGL, с точки зрения функций, которые он официально поддерживает в своем API, поскольку он не предназначен для максимальной совместимости с широким спектром устройств; с другой стороны, OpenGL, как правило, проявляет большую инерцию, когда приходит к внедрению новых функций, из-за трудностей, возникающих при добавлении новых функций в его API (на Khronos Group большое влияние оказывает индустрия САПР, а также многие другие, поэтому должен обслуживать широкий спектр потребностей). Время, которое потребовалось Khronos Group для окончательного принятия асинхронных вызовов API в OpenGL, свидетельствует об этом и заставило многих людей потерять веру в OpenGL.
Однако OpenGL кроссплатформенный, одобрен Apple, и работает на всех операционных системах, в которых он реализован. Вы можете легко использовать его со многими популярными оконными инструментами (Qt, SDL, FreeGLUT, JogAmp, gtk и т. Д.) И можете быть уверены, что ваше приложение будет компилироваться в других операционных системах, если вы написали его правильно. OpenGL API, в отличие от Direct3D, является отраслевым стандартом с открытым исходным кодом.
Что касается производительности, то все еще остается спорным, какой из них быстрее: в зависимости от того, как вы структурируете свою программу или группируете свои вызовы, это может измениться. Тем не менее, производительность не должна учитываться в отношении того, какой API вы используете, если только вы не проверили свое приложение и не получили доказательств того, что выбор API является причиной вашего узкого места.