stringtranslate.com

Общий графический интерфейс

General Graphics Interface (GGI) — проект, целью которого была разработка надежной, стабильной и быстрой компьютерной графической системы, работающей везде. [1] Целью было позволить любой программе, использующей GGI, работать на любой поддерживаемой ею вычислительной платформе , требуя в лучшем случае перекомпиляции . GGI — это бесплатное программное обеспечение с открытым исходным кодом , подпадающее под требования лицензии MIT .

Проект GGI и связанные с ним проекты, такие как KGI, общепризнанно считаются мертвыми. [2]

Цели

Первоначально проект был начат для того, чтобы сделать переключение между виртуальными консолями , svgalib и подсистемами сервера отображения X на Linux более надежным. Цели были следующими:

Фреймворк GGI реализован набором переносимых библиотек пользовательского пространства с массивом различных бэкэндов или целей (например, Linux framebuffer , X11 , Quartz , DirectX ), из которых два наиболее фундаментальных — LibGII (для обработки ввода) и LibGGI (для графического вывода). Все остальные пакеты добавляют функции к этим основным библиотекам и поэтому зависят от одной или обеих из них.

Некоторые цели общаются с другими целями. Они называются псевдоцелями. Псевдоцели могут быть объединены и работать как конвейер.

Один пример: display-palemu, например, эмулирует режим палитры в режимах truecolor. Это позволяет пользователям запускать приложения в режиме палитры даже на машинах, где в противном случае режим палитры был бы недоступен. display-tile разбивает большой виртуальный дисплей на множество более мелких частей. Вы можете распределить их по нескольким мониторам или даже пересылать по сети.

История

Андреас Бек и Штеффен Сигер основали проект GGI в 1994 году после нескольких экспериментальных предшественников, которые назывались «scrdrv». [3]

Разработка scrdrv была мотивирована проблемами, вызванными сосуществующими, но не очень хорошо взаимодействующими графическими средами (в основном X и SVGAlib ) в операционной системе Linux в то время, что часто приводило к зависаниям, требующим перезагрузки. Первый дизайн scrdrv был в значительной степени основан на графической подсистеме расширителя DJ DOS и некоторых концепциях из проекта SANE . Основная проблема, которую решил scrdrv, заключалась в том, что он предоставлял драйвер режима ядра, который знал достаточно о видеооборудовании для настройки режимов, что позволяло перейти в нормальное состояние даже из испорченного или аварийно завершившегося графического приложения.

Первая официальная версия появилась в 1995 году. Около 1996 года GGI 1.0 был выпущен под лицензией LGPL. GGI состоял только из основной библиотеки libggi . Она включала обработку ввода, набор 2D-графических примитивов и некоторые драйверы пользовательского пространства для графических плат вместе с патчем ядра Linux с пользовательским интерфейсом для драйверов. Патч был известен как KGI, Kernel Graphics Interface.

В 1997 году GGI полностью переработали. Множество новых идей и решение Linux сделали GGI тем, чем он стал в GGI 2.0, выпущенном в августе 2001 года под релизом MIT.

В 1998 году в почтовой рассылке ядра Linux разгорелась большая война по поводу включения KGI в ядро. Линус Торвальдс объяснил свои опасения [4] по поводу GGI, заявив: «Я думаю, что X достаточно хорош» и выразив обеспокоенность по поводу общего направления GGI.

В это время еще одна идея дизайна под названием EvStack также внесла свой вклад в флейм. EvStack был практически полной переработкой подсистемы ввода и вывода, которая позволяла событиям (отсюда и «Ev») проходить через «стек» модулей, которые можно настроить для управления ими. EvStack — очень мощная концепция, позволяющая, например, иметь две клавиатуры, подключенные к одной машине, одна из которых будет работать как текстовая консоль на одном графическом адаптере, а другая — как графическая консоль на другом (как было продемонстрировано на Linux-Kongreß ´97 [5] ), и даже позволяет иметь разные раскладки клавиатуры на разных виртуальных консолях или подключать клавиатуры по сети. Однако это стоило огромного патча к подсистеме ввода, что казалось неприемлемым. Современная система событий ввода Linux позволяет программам (например, Xorg) получать события клавиатуры не через консольную клавиатуру, что позволяет работать в многопользовательском режиме .

На LinuxExpo 98 был прочитан ряд докладов о GGI, KGI и EvStack.

Для GGI 2.0 KGI был отделен и стал отдельным проектом под названием The KGI Project . GGI 2.0 состоял из набора библиотек. Во время бета-фазы 2.0 в конце 1998 года лицензия библиотек была изменена с LGPL на лицензию в стиле MIT. Много работы было также проделано над системой сборки для поддержки большего количества операционных систем. Она работала на FreeBSD, там был код для OpenBSD, NetBSD и даже Microsoft Windows , а также некоторая поддержка большего количества аппаратных платформ.

Обработка ввода была перемещена в библиотеку libgii. Общий код GGI находился в libgg, подбиблиотеке внутри libgii. Основная графическая библиотека libggi имеет облегченный набор графических примитивов, который был достаточно распространен для написания любого графического приложения, в то время как API более высокого уровня перешел в другие библиотеки поверх libggi. Они назывались расширениями GGI. libggi поддерживает набор целей, большинство из которых были специфичны для Linux: fbdev, X, aa, vcsa, terminfo и некоторые псевдоцели, такие как tile, multi, palemu и trueemu. Расширения GGI имели API более высокого уровня. libggiwmh предоставляет функциональность только для оконных целей, в то время это был только X. libggimisc предоставлял некоторые базовые вещи, такие как vga splitline.

GGI 2.0.2 был выпущен в декабре 2002 года. Наиболее заметным изменением для пользователя стал полностью переработанный бэкенд X. Другим заметным изменением стало значительное улучшение документации. И последнее, но не менее важное: изменились циклы выпуска. Начиная с этого выпуска, существовало дерево разработки и стабильное дерево. Стабильное дерево открыто только для исправлений ошибок, дерево разработки получило название, следуя схеме BSD, -current.

В ноябре 2004 года последнее исправление ошибок из стабильной версии GGI 2.0.x было выпущено в пользу новой стабильной версии GGI 2.1.x.

GGI 2.1.x работает на многих операционных системах: GNU Hurd , Linux , *BSD , System V , Mac OS X и Microsoft Windows. Добавлена ​​поддержка большего количества аппаратных платформ. NetBSD даже создала бинарный пакет для NetBSD/Vax! Добавлена ​​новая библиотека GGI поверх libgii под названием libgiigic. Она позволяет комбинировать действия пользователя с событиями во время выполнения.

GGI 2.2 был выпущен в декабре 2005 года. Автоматическое определение цели было переработано и больше не было ориентировано на Linux. GGI заменил собственные целочисленные типы данных на типы ANSI C99 для большей переносимости. Была добавлена ​​цель для Quartz. Пользователи Mac OS X больше не зависят от X11, но по-прежнему могут использовать бэкэнд X11. Однако наиболее заметным для пользователей изменением стала поддержка статически связанных целей.

Последняя версия — GGI 2.2.2, исправление ошибок в стабильной серии GGI 2.2.x. Она была выпущена в январе 2007 года.

Принятие

Исходные порты шутеров от первого лица Doom , Heretic , Quake и Descent были перенесены на использование GGI, [6] [7] с Linux Doom Editor, также основанным на нем. [8] Он также поддерживался аркадной игрой Heroes , [9] игрой - змейкой , и Thrust , вдохновленной игрой Thrust для Commodore 64 , [10] а также платформенными играми U.RBAN The Cyborg Project [11] и Dave Gnukem , [12] вдохновленной оригинальной Duke Nukem для MS-DOS . GGI также был доступен в качестве видеодрайвера в Simple DirectMedia Layer до версии 2x. [13]

Состояние на 2006 год

Проект GGI двигался вперед к выпуску GGI 3.0. [ когда? ] libgii был переработан. Обработка ввода была заменена моделью событий реактора , которая более гибка, чем использование select() для файлового дескриптора . Это также упростило драйверы ввода в целом, особенно для тех, кто не использует файловые дескрипторы, такие как input-quartz. libgg был вынесен в отдельную библиотеку.

libggi объединила некоторые цели в одну подбиблиотеку: multi с tile и mono text с palemu. libggi также получила новую цель VNC , которая позволяет запускать любое приложение как VNC-сервер.

В GGI 3.0 механизм расширения был переработан с нуля, чтобы упростить взаимодействие между расширениями и основными библиотеками. Это потребовало небольшого изменения API.

Смотрите также

Ссылки

  1. ^ Loki Software, Inc; Джон Р. Холл (2001). Программирование игр для Linux. No Starch Press. стр. 56. ISBN 978-1-886411-49-4.
  2. ^ Ларабель, Майкл (3 июля 2011 г.). «Графический интерфейс ядра (KGI) фактически мертв — Phoronix». www.phoronix.com . Получено 08.06.2019 .
  3. ^ Бек, Андреас (1996-11-01). "Проект Linux-GGI". Linux Journal . Получено 2023-12-20 .
  4. ^ marc.info
  5. ^ linux-kongress.org
  6. ^ "Программное обеспечение с использованием GGI". ibiblio . Получено 2023-12-20 .
  7. ^ Бек, Андреас (1998-09-01). "LibGGI: Yet Another Graphics API". Linux Journal . Получено 20 декабря 2023 г.
  8. ^ Амштуц, Питер (2002-08-09). "LDE - Linux Doom Editor". Interreality . Получено 2024-01-23 .
  9. ^ Дюре-Лутц, Александр (ноябрь 2000 г.). «Announcing Heroes 0.7». Simple DirectMedia Layer .
  10. ^ Пейн, Деннис (2021-09-19). "Inertia Blast". Идентичное программное обеспечение . Получено 2024-01-21 .
  11. ^ Уилсон, Хэмиш (2024-03-12). «Сборка ретро-игрового компьютера Linux, часть 40: проект Cyborg». GamingOnLinux . Получено 2024-03-13 .
  12. ^ "Объявления о программном обеспечении". Linux Weekly News . 2000-01-06 . Получено 2024-01-21 .
  13. ^ "FAQ: Использование SDL". wiki.libsdl.org .

Внешние ссылки