Вопрос по gdi, gdi+, graphics, opengl, winapi – GDI, GDI + и OpenGL действительно устарели / устарели? [закрыто]

20

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

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

Legacy Graphics: Technologies that are obsolete and should not be used in new applications.

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

GDI GDI+ OpenGL

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

Ваш Ответ

6   ответов
8

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

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

TL;DR: OpenGL is not only not deprecated, it is cross-platform, standard, and has tremendous momentum in the industry. GDI and GDI+, well, not so much.

EGL - это стандартный способ инициализации OpenGL ES на всех платформах, и ANGLE поддерживает его. WebGL в JavaScript будет поддерживаться IE11. К сожалению, WGL - единственный способ инициализировать Desktop OpenGL в Windows, и, хотя MS больше его не поддерживает, производители графики делают это. Он не так плох, как DOS, как один API для поставщиков графики. Сам WGL, скорее всего, не исчезнет, пока MS не убьет рабочий стол, и в этом случае Desktop OpenGL в любом случае не будет иметь значения. Используйте OpenGL ES 2, если вам не нужны геометрические шейдеры, которых больше всего не хватает по сравнению с настольными OpenGL и DirectX.
Каким будет новый API для инициализации OpenGL в Windows? Если MS отказывается от WGL (FreeGLUT и SDL также зависят от WGL), будет ли процедура инициализации включать специфичные для драйвера интерфейсы через COM? Затем мы вернулись в DOS.
7

значит, вы поддерживаете «устаревшую версию». операционная система и, как таковая, с использованием «устаревшего» Графическая структура является логичным выбором.

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

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

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

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

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

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

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

Теперь, когда вы упомянули об этом, может бытьI'm путать эти ... дай мне перепроверить хаха. :) Кроме того, что касается размытости,see here... это поправимо.
Действительно, полностью согласен. (Глупый я, тыdid увидеть вопрос ... у вас даже был первый комментарий. & gt; _ & lt;) Кстати, похоже, что вы были правы, и я был одним из них:DirectWrite is only since Vista SP2тогда как DirectDraw - тот, что на XP. Это было даже в моем вопросе ... извините за путаницу. : \
@Mehrdad: Да, уже видел это. Поднял вопрос, но не проголосовал за ответ. Это не совсем идеальное решение. Конечно, DirectSomething отлично подходит для игр и текста, который вы хотите повернуть под странными углами. Но я не пишу такие приложения.
Уверен, что DirectWrite старый и полностью подходит для XP, тогда как Direct2D очень новый и определенно не для XP. Они похожи по функциям, но очень разные API внутри.
@ Mehrdad: Вы знаете, вполне возможно, что я путаю DirectWrite и DirectDraw. Этот материал становится слишком сложным для меня ... Не стесняйтесь редактировать, если вы думаете, что я совершил грубую ошибку.
-2

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

Скорость сильно зависит от аппаратного обеспечения, драйверов и того, что вы пытаетесь сделать, и всегда будет аргументом фаната. У Microsoft также есть очень веская причина (кроме привязки к поставщику) не поддерживать OpenGL: NVidia, AMD и Intel уже делают это для них. Наконец, MS использует WebGL с Internet Explorer 11 (признаюсь, никогда не думал, что это произойдет, но это так: D)
Я люблю OpenGL, но производительность иногда низкая по сравнению с DirectX в Windows из-за дрянных или глючных драйверов
7

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

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

What else should be used?

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

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

2

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

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

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

14

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

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

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

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

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

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

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

Обновление после выпуска Windows на ARM (теперь называется Windows RT): просмотр каталога system32 на устройстве Windows RT показывает, что gdiplus, d3d9 и directdraw присутствуют, а opengl - нет. Но доступ к этим библиотекам невозможен, потому что на рабочем столе не запускается ни один exe-файл, не подписанный Microsoft. Единственный способ разработки для Windows RT - через метро (теперь называется Windows 8 Store), который ограничивает использование старого API.

Похожие вопросы