2014-09-18 4 views
0

OpenGL отлично подходит для создания пользовательского интерфейса (особенно в играх), и он очень портативен. Необычно, что обычное (не графически интенсивное) приложение использует OpenGL для своего пользовательского интерфейса? А если нет, то почему? Это о производительности или простоте использования?Используется ли OpenGL для создания графических приложений?

Например, разработчик Apple может использовать готовые к использованию кнопки и слайдеры и т. Д., Предоставляемые Apple; он также может создавать пользовательский интерфейс с использованием OpenGL. Второй способ делает код более гибким и портативным. Почему люди этого не делают?

Использование OpenGL имеет смысл, если переносимость является нашей целью?

+0

«Второй способ делает код более гибким и портативным». вид компромисса с использованием существующих колес и изобретательство колеса – starrify

+0

Но вы не можете поставить велосипедное колесо на автомобиле. Аналогичным образом, вы не можете использовать готовый Apple для использования пользовательского интерфейса с программным обеспечением для ПК; но вы можете использовать пользовательский интерфейс, созданный в OpenGL на обеих платформах. – DARKMATTER

+0

@ DARKMATTER: Вот почему существуют платформы для кросс-платформенных приложений с инструментами. Qt, например. – datenwolf

ответ

4

Для UI намного больше, чем графики.

Как один пример шрифтов. Предоставление китайского, японского, корейского, арабского, тайского языков в правильных направлениях с ударами записи и т. Д. Это ТОН работы. Целые команды, посвященные этой теме в Microsoft, Google, Apple, Adobe и других компаниях. Если вы пойдете прямо в GL, вам придется решить эту проблему самостоятельно.

Другой пример, нативный элемент управления. Пользователи iOS ожидают, что определенные элементы управления будут работать определенным образом. Пользователи Android ожидают чего-то другого. Для игры, которая обычно не является проблемой, игры обычно имеют уникальный интерфейс. С другой стороны, приложения, как правило, должны придерживаться конвенций их целевой платформы. Обычно пользователи расстраиваются, когда элементы управления не соответствуют их собственной платформе. Использование GL для вашего пользовательского интерфейса означает, что вы не получите собственные элементы управления.

Точно так же текстовое редактирование является очень специфичной для платформы. Перетаскивается ли он, чтобы выбрать, щелкните правой кнопкой мыши, чтобы выбрать, удерживать, чтобы выбрать? Какие ключи идут, как они работают? Это Ctrl-V или ⌘-V. Все это зависит от платформы. Вы можете использовать собственные средства редактирования текста и решить проблему, или вы можете использовать GL и должны воспроизводить не только весь код для редактирования текста, но и попытаться заставить его работать правильно на каждой платформе в каждой конфигурации. Ваш текстовый редактор GL обрабатывает японские клавиатуры? Немецкие клавиатуры? Он обрабатывает Редакторы метода ввода для CJK и других?

Итак, это скорее вопрос правильного инструмента для правильной работы. На платформе GL есть целые платформы пользовательского интерфейса. До того, как Metal OSX, вероятно, был одним из них (или до сих пор?), Но если вы пропустите это и создадите свой интерфейс непосредственно на GL, вам придется реализовать все эти промежуточные фрагменты.

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

+0

Спасибо за подробный ответ. – DARKMATTER

+0

Пользовательский интерфейс Blender полностью реализован в OpenGL. Только для примера. – datenwolf

2

Да, то, что вы предлагаете, возможно. Просто взгляните на Блендера. Blender реализует собственный пользовательский интерфейс, используя OpenGL, для точных причин переносимости, которые вы дали.

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

Но есть библиотеки рамок для кросс-платформенных приложений, такие как Qt. И весь материал рисунка делает лишь небольшую часть того, что делают эти рамки.

Одна из проблем, с которыми вы сталкиваетесь при использовании OpenGL для рисования графического интерфейса, однако заключается в том, что в профилях OpenGL, поддерживаемых системами, существует огромное изменение. Он может отличаться от простого программного обеспечения OpenGL-1.1 на старой машине под управлением Windows XP поверх OpenGL-1.4 на компьютере с Windows Vista с установленными только установкой Windows драйверами по умолчанию, вплоть до OpenGL-4.5 на том же компьютере, как только пользователь установит правильные драйверы. И то, как вы используете OpenGL-4.5, в значительной степени несовместимо с OpenGL-1.4.

Для инструментария пользовательского интерфейса, написанного с использованием бэкэнда OpenGL, это означает, что вы должны реализовать по крайней мере три кодировки: вариант OpenGL-1.1, который использует конвейер с фиксированной функцией и массивы вершин на стороне клиента. Профиль совместимости OpenGL-3. И основной профиль OpenGL-4.

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

Смежные вопросы