Подтвердить что ты не робот

Являются ли GDI, GDI + и OpenGL устаревшими/устаревшими?

Если вы открываете страницу "Графика и игры (Windows)" на microsoft.com

последняя категория описывается как

Устаревшая графика: устаревшие технологии и не должны использоваться в новых приложения.

В эту категорию входят (помимо прочего) следующие API:

  • GDI
  • GDI +
  • OpenGL

Каково ваше мнение? Если сегодня я хочу выпустить новое программное обеспечение, оно должно поддерживать Windows XP (все еще около 50% всех установленных систем). Direct2D требует Windows 7/Vista. Что еще нужно использовать?

4b9b3361

Ответ 1

Я подозреваю, что определение Microsoft "наследие" имеет мало общего с тем, что должен делать любой разумный разработчик, и вместо этого основывается на некоторой большой перезаписи API Windows.

Начиная с Windows Vista, Microsoft пересматривает многие из своих API. Теперь у нас есть MMDevAPI как One True Sound API, WIC - это один True File File API и т.д. Из того, что я видел/слышал, эти новые API намного лучше старых, а все "устаревшие" системы работают на основе новых. В Windows Vista и более поздних версиях DirectSound полностью основана на MMDevAPI, а компоненты, которые должны читать файлы изображений, делают это через WIC.

В Windows 8 будет версия ARM, которая, как представляется, будет поддерживать только подмножество текущего Windows API. Мы не будем точно знать, пока не будет выпущена Windows на ARM, но на основе библиотек, включенных для платформы ARM в Visual Studio 11 (ref: http://www.winehq.org/pipermail/wine-devel/2012-March/094559.html), он выглядит как GDI + и OpenGL не будет доступен. GDI доступен для связывания, но это не обязательно означает, что он не поврежден.

Этот новый API от Vista и позже примерно соответствует библиотекам в цели VS11 ARM. Я предполагаю, что в этом списке есть что-то, потому что это либо последний, либо самый лучший способ сделать то, что он делает, или слишком технически важно отказаться (пока). Таким образом, "наследие" - это то, что не является последним и самым лучшим способом сделать хотя бы одно.

Я не уверен, что такое One True Graphics API. У нас уже есть Direct2D, Direct3D, DirectComposition (которые, кстати, недоступны до Windows 8), DirectWrite и DXGI. DXGI кажется самым близким, но у меня недостаточно глубокое понимание графического API. Я подозреваю, что gdi32 технически очень сложно избавиться. Как не-устаревшие приложения собираются выяснить, когда часть окна была обнаружена и, следовательно, должна быть нарисована, без использования WM_PAINT, которая включает в себя HDC, и как библиотека может сделать это в имени приложения без замены его оконной процедуры? Как мы планируем делать полупрозрачные окна без использования UpdateLayeredWindow, который принимает HDC? Насколько зависит пользователь32 от gdi32 и могут ли они быть действительно разделены?

С технической точки зрения Windows может легко избавиться от GDI + и OpenGL, но я не уверен, что избавиться от OpenGL будет работать даже на новой платформе, которая не обещает никакой обратной совместимости. Это кажется слишком ценным для разработчиков. GDI + не так важен, но для третьей стороны очень легко обеспечить замену.

Я бы сказал, что использую любой из перечисленных вами API, а худшее, что может случиться, - это переписать свой пользовательский интерфейс, если вы хотите портировать свое приложение в метро или Windows на ARM. GDI - прекрасный выбор, если ваши потребности просты, и вы будете кодировать напрямую для Windows API. Существует не так много ситуаций, когда я бы рекомендовал GDI + по OpenGL в качестве API-интерфейса чертежа. GDI + медленный, ограниченный и доступен только в Windows. API GDI + проще, потому что он 2D, поэтому, может быть, стоит того, если вам нужно сделать что-то очень простое, но с сглаживанием.

Ответ 2

OpenGL не устарел, его реализация Microsoft. Реализация Microsoft застряла в версии 1.1, которая является старой. Текущая версия стандарта находится в прошлом версии 4. Если вы хотите использовать OpenGL, она полностью поддерживается NVidia, ATI и Intel на рабочем столе Windows, но не в Metro приложениях Windows Modern UI, является отраслевым стандартом,, а также работает на Mac и Linux. Если вам нужна резервная реализация программного обеспечения, Mesa вас охватывает, а работает даже в DOS. (Так как Mesa может отображать в буферах памяти, нет причин, по которым он не будет работать в современных приложениях пользовательского интерфейса, но вы, вероятно, не хотите этого делать, потому что это может быть медленным.) Следует отметить, что WGL, API для доступа к функциям OpenGL на рабочем столе Windows, зависит от GDI (который устарел), поэтому вы, вероятно, захотите использовать что-то вроде FreeGLUT или SDL, если вы хотите, чтобы ваше приложение было надежным в будущем, что также обеспечивает независимость платформы.

OpenGL ES - это вариант OpenGL, который работает на Android и Apple iOS. Он также доступен на JavaScript через WebGL, который Internet Explorer 11 будет поддерживать (и почти все другие браузеры уже делают. ANGLE предоставляет аппаратно-ускоренную реализацию GLES для Windows, которая объединяется с DirectX (версия 9 или 11) и, следовательно, должна работать и в приложениях с современным интерфейсом. Еще раз, Mesa получила охват программного обеспечения.

TL; DR: OpenGL не только не устарел, он кросс-платформенный, стандартный и имеет огромный импульс в отрасли. GDI и GDI +, ну, не так много.

Ответ 3

Если вы хотите поддерживать Windows XP, то вы поддерживаете "устаревшую" операционную систему, и, таким образом, использование "устаревшей" графической структуры является логическим выбором.

Даже если это не так, позвольте сказать, что я не согласен с советом, данным связанной статьей MSDN. Статус "устаревшего" здесь больше связан с той технологией, которую команда Windows считает здоровой на этой неделе. Обозначение статуса "устаревшее" означает, что ответственная группа больше не принимает или не выполняет отчеты об ошибках (за исключением критических проблем безопасности). Не слишком большая сделка - эти технологии были достаточно долго, чтобы они были достаточно функциональными и стабильными.

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

Если вам нужно немного больше 2D-возможностей, чем предлагает GDI (например, прозрачность альфа-канала), вы можете рассмотреть возможность использования GDI+. Это почти на порядок медленнее, чем GDI, но это не слишком большая проблема для современных машин с большей мощностью, чем вы могли когда-либо хотеть. Это тоже будет поддерживаться в течение очень долгого времени.

Тем не менее, если бы я писал новое приложение сегодня, я, вероятно, не стал бы беспокоиться о OpenGL. Там очень мало того, что он предлагает преимущества по сравнению с Direct2D и DirectWrite, которые и то, что Microsoft выдвигает в качестве замены для GDI/GDI+. Возможно, будет какая-то польза от использования OpenGL, если вы абсолютно должны ориентироваться на Windows XP, поскольку, насколько я могу судить, Direct2D/DirectWrite поддерживаются только в Vista и позже, но это потому, что (как я уже упоминал ранее), Windows XP попадает прямо в "наследие" или "устаревший" лагерь. В качестве альтернативы, если вы уже хорошо знаете OpenGL и не имеете времени или желания изучить Direct2D/DirectWrite, тогда имеет смысл продолжать использовать его в новом приложении.

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

Изменить: Хм, похоже, что DirectWrite также был объявлен (по крайней мере, некоторыми людьми) "устаревшим", заменив Direct2D. Это смешно, мне даже не было достаточно времени, чтобы я мог изучить его. Я полагаю, что только для поддержки моего предыдущего аргумента, что "устаревший" просто обозначает, что определенная технология не является тем, что в настоящее время считается модным разработчиками Microsoft.

Я лично жду, пока все ошибки не будут обработаны из этого материала (и мы примем решение о полупостоянном стандарте), прежде чем я сделаю переключатель для любого из моих приложений. Все, что я видел, написанное на DirectDraw или Direct2D, имеет серьезные ошибки рендеринга и является кошмаром производительности даже на достаточно компетентных машинах. Конечно, они появляются только иногда, при правильных условиях, но это слишком много для меня. И я клянусь, размытый текст появляется все время. Невозможность прочитать, что на экране - убийца сделок для меня и моих пользователей. GDI не имеет этой проблемы, и он никуда не денется.

Ответ 4

Действительно ли GDI, GDI + и OpenGL устарели или устарели?

Это не относится к OpenGL. OpenGL 4 позволяет использовать шейдеры геометрии на winxp. Это невозможно в DirectX (DirectX 10 и выше не поддерживаются на WInXP). Это также один из трех кроссплатформенных 3D-интерфейсов.

С точки зрения бизнеса MS заинтересована в продвижении DirectX, так как именно их технология блокирует Developer на платформе Windows (они также заинтересованы в том, чтобы DirectX стал более привлекательным для разработчика, но эта другая история). Поэтому имеет смысл, что они не заинтересованы в продвижении OpenGL.

Что еще нужно использовать?

Я бы посоветовал, когда это возможно, прекратить использование специфичных для платформы технологий. Возьмите кросс-платформенную структуру и используйте ее для своего приложения. Там Qt, GTK, wxWidgets и другие инструменты для графических приложений и SDL (и альтернативы) для игр. Таким образом, когда разработчик платформы решит сделать смешное решение (например, не поддерживать DX10 на WinXP), вам не понравится, вы сможете переехать в другое место с минимальными затратами на разработку. Qt также смехотворно мощный, и на данный момент у меня нет причин использовать что-то еще для разработки GUI. Тем не менее, ситуация может измениться в будущем.

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

Ответ 5

Поскольку OpenGL является стандартом, его следует считать столь же устаревшим, как C или С++, так что это вопрос времени перед всем Windows API, который сегодня стал компиляцией, когда-то запускаемой на каждом API-интерфейсе x86 благодаря Wine - - считается устаревшим в пользу .NET и С#.

Я использую GDI для простой графики и OpenGL, когда мне нужен ускоренный 3d.

Еще один аспект заключается в том, что встроенная реализация OpenGL для Microsoft определенно считается устаревшей, поскольку она просто версия 1.1 или что-то в этом роде, но это было давно.

Ответ 6

Да, о OpenGL, он действительно превосходит DirectX во многом как ресурсом, так и дисплеем. Microsoft никогда не будет поощряться, потому что не может владеть OpenGL, не говоря уже о том, что большинство людей не проводят исследования, и Microsoft может утверждать, что она устарела. Truth is opengl является стандартом openource и развивается гораздо быстрее, чем закрыто, потому что это более чем 1 комната разработчиков, которые заплатили за работу над ним. Кроме того, Microsoft заключает контракты со многими компаниями на выпуск с использованием только программного обеспечения Microsoft, это приводит к увеличению бизнеса для Microsoft и, в меньшей степени, к использованию более совершенного стандарта OpenGL. Это интересно, если вы это сделаете, Microsoft создаст эти контракты, чтобы многие программы были написаны в DirectX для ведения бизнеса для Microsoft, и ни одна компания не откажется от нее, потому что у Microsoft около 80% + рынка домашних пользователей.