Что не является графическим API

API – графические интерфейсы программ.

API – графические интерфейсы программ.

API Direct 3D. API OpenGL. API Microsoft DirectX.

API (Application Programming Interface) – графический интерфейс программ — предоставляeт разработчикам аппаратного и про­граммного обеспечения средства создания драйверов и программ, работающих быстрее на боль­шом числе платформ.

3D API позволяет программисту создавать трехмерное программное обеспечение, использующее все возможности 3D-ускорителей не прибегая к низкоуровнему программированию. 3D API делятся на стандартные (универсальные: OpenGL, Direct 3D и др.) и собственные (специализированные: Glide, Rredline и др.). Стандартные API поддерживают широкий спектр 3D-ускорителей и освобождает программистов от низкоуровнего программирования. Собственный 3D API предназначен для одного семейства 3D-ускорителей и ограждает программистов от низкоуровнего программирования. Использование 3D API требует применения драйверов для этого 3D API. Наличие драйверов для Direct 3D и OpenGL для Win­dows является обязательным требованием ко всем 3D-ускорителям. В настоящее время существует несколько API — OpenGL (фирма SGI), Direct 3D (фирма Microsoft) и Glide (фирма 3Dfx). Glide поддерживается только набо­ром микросхем, выпускаемым фирмой 3Dfx. Остальные API поддерживаются большинством со­временных видеоадаптеров.

API Direct 3D. Direct 3D является частью API, называемого DirectX. Современное программ­ное обеспечение широко использует графические интерфейсы Х Win­dows и OpenGL. Этот API предназначен для облегчения программирования игровых программ. Direct 3D имеет два режима: RM (Retained mode) – абстрактный и IM (Immediale) – непосредственный. IM состоит из тонкого уровня, который взаимодействует с аппаратурой и обеспечивает самое высокое быстродействие. RM является высокоуровневым интерфейсом, обеспечивающим для программиста множество графических операций, включая инициализацию и трансформацию. Большинство 3D-игр используют режим IM. В Windows Vista реализована поддержка тех же интерфейсов Direct3D и DirectDraw, как в Windows XP, начиная с DirectX 3 (за исключением режима Retained Mode в Direct3D). Существует и еще одно ограничение для полноценных 64-битных приложений Windows XP Professional x64 Edition, поддержка функций которых под Windows Vista ограничена Direct3D9, DirectDraw7 и более новыми версиями интерфейсов.

API OpenGL. API OpenGL является открытым 3D API, который поддерживается ассоциацией крупнейших фирм таких как DEC, E&S, IBM, INTEL, INTERGRAPH, Microsoft , SGI. Этот API реализует широкий диапазон функций от вывода точки, линии, полигона до рендеринга кривых поверхностей NURBS, покрытых текстурой. OpenGL-драйвер может быть реализован в трех вариантах: ICD, MCD и мини порт. ICD (Installable Client Driver) полностью включает все стадии конвейера OpenGL, что обеспечивает максимальное быстродействие, но разработка такого драйвера очень трудоемкий и сложный процесс. MCD (Mini Client Driver) разработан для внесения абстракции в конвейер OpenGL, и поэтому написание драйвера менее трудоемко (MCD работает только в Win­dows NT). Драйвер мини-порт предназначен для одной конкретной игры, обычно для GLQuake и Quake 2. Мини-порт может работать по принципу ICD(Rage Pro), через собственый API (например, Voodoo 2) или через Direct3D (например, Intel 740). В последнем случае он называется враппером.

API Microsoft DirectX. Этот программный интерфейс был разработан еще для операционных систем Windows 95, Windows 98 и Windows NT/2000 и др. С помощью этого API увеличивается быстродействие игр, деловой графики, трехмерного звука и т. д. Несмотря на то, что DirectX был предназначен для игр, он также используется в программах NetMeeting, ActiveMovie и NetShow. Поскольку DirectX относится к уровню аппаратных абстракций (Hardware Abstraction Layer — HAL), разработчикам программного обеспечения необходимо использовать функции DirectX, а не обращаться напрямую к видеоадаптеру, звуковой карте, джойстику и другому ап­паратному обеспечению.

DirectX также относится к уровню аппаратной эмуляции (Hardware Emulation Layer — HEL), что позволяет разработчику программно эмулировать те функции, ко­торые не реализованы аппаратным обеспечением. Уровень HEL «медленнее», чем HAL, но луч­ше иметь нереализованную аппаратно функцию (пусть даже медленную), чем не иметь ничего.

Отношения между аппаратным, программным обеспечением и DirectX можно продемон­стрировать следующей схемой:

(Аппаратное обеспечение) > (Direc+X) > (Програм­мное обеспечение).

Обновление DirectX можно выполнять независимо от операционной системы. DirectX состоит из «основного» слоя, который обеспечивает доступ к звуковым устройст­вам, устройствам двухмерной и трехмерной графики, уст­ройствам ввода и процедурам установки. Программный интерфейс DirectX содержит слой Media, который состоит из API.

Слой Media DirectX пре­доставляет сервис для разработ­чиков игр, Web и интерактивных медиа-программ. Самая последняя версия DirectX доступна для бесплатной загрузки с Web-узла фирмы Mi­crosoft. Кроме того, DirectX является частью таких продуктов, как Internet Explorer, Win­dows 2000. Некоторые производители аппаратного обес­печения поставляют вместе со своими продуктами последнюю версию DirectX. Перед инсталляцией некоторые программы проверяют номер версии установленного про­граммного интерфейса. Если установленная версия устарела, то пользователю будет предло­жено установить последнюю версию. Программный интерфейс DirectX обратно совместим, т.е. последняя версия поддерживает функции всех предыдущих. Для корректной работы всех программ необходимо использовать последнюю версию программного интерфейса DirectX.

Что не является графическим API

API (application programming interface) — это набор готовых классов, функций, процедур, структур и констант. Вся эта информация предоставляется самим приложением (или операционной системой). При этом пользователю не обязательно понимать, что это API технология обеспечивает взаимодействие модулей. Цель предоставленной информации – использование этих данных при взаимодействии с внешними программами.

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

В общем случае данный механизм применяется с целью объединения работы различных приложений в единую систему. Это достаточно удобно для исполнителей. Ведь в таком случае к другому приложению можно обращаться как к «черному ящику». При этом не имеет значения его внутренний механизм – программист может вообще не знать, что такое API.

Функции API

В процессе работы элементы механизма API организуют многоуровневую иерархию. При этом подчиненные компоненты также получают подобную структуру. Внутри стандартной сетевой модели OSI выделяют как минимум 7 внутренних уровней. Они классифицируются от физического уровня трансляции бит до приложений, таких как протоколы HTTP и IMAP. Таким образом API верхнего использует функциональность нижнего.

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

В этом случае сигнатура выступает как часть общего объявления функции. С ее помощью выполняется идентификация элемента. В различных языках написания программ она представлена разным способом. Тем самым определяется возможностями ее перезагрузки.

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

Эти компоненты дают возможность компилятору опознать функцию в языке C++. В тех случаях, когда она является методом определенного класса, ее сигнатура включается в имя этого класса.

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

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

В отдельные группы выделяют интерфейсы управления графическими компонентами программных модулей (API графических интерфейсов wxWidgets, Qt, GTK и т. п.), операционными системами (Amiga ROM Kernel, Cocoa, Linux Kernel APIruen, OS/2 API, POSIX, Windows API), звуковые (DirectMusic/DirectSound, OpenAL), оконные интерфейсы и так далее. Здесь их разделение определяется уровнем приложения в иерархии и функциональностью. Пользователи компьютерных игр обычно не подозревают, что это графический API обеспечивает им такую быструю отрисовку картинки и поразительную яркость изображений.

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

Проблемы, возникающие при работе интерфейсов многоуровневых систем, разделяются на две большие группы:

  1. Трудности портирования кода программы при переходе от одной API к другой. Они часто появляются при переносе модулей в другие операционные системы.
  2. Снижения объема функциональности интерфейса при переходе к управлению с более низкого уровня на высокий. В этом случае облегчается выполнение строго определенного класса задач. При этом возможности доступа к элементам управления другими регуляторами теряются. Ведь более низкий уровень позволяет легко управлять базовыми компонентами программы.

API вебмастеров / поисковых систем

Для вебмастеров и программистов особенно важны Web API. Такие системы управления включают в себя комплект HTTP-запросов. В результате получения таких запросов модуль генерирует строго определенную структуру HTTP-ответов. Для транспортировки информации между ними принято использовать форматы XML или JSON.

Читать еще:  AMD CPU C1E support что это

Фактически в этом случае название Web API будет синонимом обозначения веб-службы. Иными словами, это определенные программные системы со своими интерфейсами. Для получения конкретного доступа к ним используется идентификация в сети по веб-адресу. Например, при передаче данный на сервер применяется серверный API.

В случае построения программных систем на основе сервис-ориентированной архитектуры именно веб-служба является уровнем формирования модулей.

Для обычных пользователей такие службы являются синонимами абсолютно обычных решений в Интернете. Это может быть почта, поисковая система, сервис хранения файлов, социальных закладок и так далее. В случае необходимости тестирования веб-службы на больших объемах разнообразных данных соответствующий API testing предоставляет механизм для такой объемной работы.

При правильной организации любой клиент может использовать такие службы вне зависимости от типа компьютера, вида браузера и места своего нахождения в сети.

Примером использования в рекламе является API Яндекс.Директа. На его базе разработчики создают модули для управления рекламными кампаниями. При обращении к системам продвижения сайтов для повышения параметров SEO API предоставляет механизмы информационного взаимодействия.

Обычно порядок работы интерфейса стараются передать в его названии. Мы можем не найти в поиске, что такое syngestureapisampleapp application. Но из названия понятно, что это пример работы интерфейса для единичного пользователя.

При этом нужно учитывать изменения в интерфейсах, произошедшие после массового внедрения стандартов Web 2.0. В результате был выполнен переход протокола обмена структурированными данными в распределенной вычислительной среде SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) к архитектурному стилю взаимодействия компонентов распределенного приложения в сети REST (сокр. от англ. Representational State Transfer — «передача состояния представления»). Для многих веб-служб, в число которых входят поисковые системы и интернет-магазины, данный переход привел к упрощению архитектуры и ускорению выполнения задач. Правильная организация информационных потоков приводит к тому, что API сайта предоставляет широкие возможности автоматизации последнего.

При этом отдельные компоненты REST функционируют примерно таким же образом, как взаимодействуют между собой серверы и клиенты в Интернете. Хотя работа систем на архитектуре REST до сих пор не имеет единого стандарта, большинство RESTful-реализаций используют конкретные стандарты, такие как HTTP, URL, JSON и XML. Здесь особенно важно, что открытый API – это возможность дополнения и расширения системы взаимодействия.

Что такое собственный графический интерфейс API для Linux?

Надеюсь, это не глупый вопрос, но я всегда удивляюсь этому. И Windows (Win32 API), и OS X (Какао) имеют свои собственные API для обработки окон, событий и других вещей ОС. Я никогда не получал четкого ответа относительно эквивалента Linux.

Я слышал, что некоторые люди говорят GTK +, но GTK + кроссплатформенный, как это может быть нативным?

В Linux графический интерфейс пользователя не является частью операционной системы. Графический интерфейс пользователя, встречающийся на большинстве настольных систем Linux, предоставляется программным обеспечением, называемым X Window System , который определяет независимый от устройства способ работы с экранами, клавиатурами и указательными устройствами.

X Window определяет сетевой протокол для связи, и любая программа, которая знает, как «говорить» по этому протоколу, может использовать его. Существует библиотека C под названием Xlib это облегчает использование этого протокола, поэтому Xlib является своего рода родной интерфейс API. Xlib — не единственный способ получить доступ к серверу X Window; существует также XCB .

Библиотеки инструментария, такие как GTK + (использован ГНОМ ) а также Qt (использован KDE ), построенные поверх Xlib, используются потому, что с ними проще программировать. Например, они обеспечивают единообразный внешний вид приложений, упрощают использование перетаскивания, предоставляют компоненты, стандартные для современной среды рабочего стола, и т. Д.

То, как X рисует на экране, зависит от реализации. X.org имеет независимую от устройства часть и зависимую от устройства часть. Первый управляет ресурсами экрана, такими как Windows, а второй связывается с драйвером графической карты, обычно с модулем ядра. Общение может произойти более прямой доступ к памяти или через системные вызовы в ядро. Драйвер переводит команды в форму, понятную аппаратному обеспечению на карте.

С 2013 года новая оконная система под названием Wayland начинает использоваться, и многие дистрибутивы заявили, что в какой-то момент перейдут на него, хотя четкого графика пока нет. Эта система основана на OpenGL / ES API, что означает, что в будущем OpenGL будет «родным GUI API» в Linux. Ведется работа по переносу GTK + и QT на Wayland, поэтому современные популярные приложения и настольные системы потребуют минимальных изменений. Приложения, которые нельзя перенести, будут поддерживаться через сервер X11, так же как OS X поддерживает приложения X11 через Xquartz. Порт GTK + ожидается, будет завершено в течение года , в то время как Qt 5 уже имеет полную поддержку Wayland.

Чтобы еще больше усложнить ситуацию, Ubuntu объявила, что разрабатывает новую систему под названием Мир из-за проблем, которые они воспринимают с Wayland. Эта оконная система также основана на API OpenGL / ES.

Другие решения

Linux — это ядро, а не полноценная операционная система. Существуют разные оконные системы и графические интерфейсы, которые работают поверх Linux для обеспечения оконного управления. типично X11 система управления окнами, используемая дистрибутивами Linux

Wayland Стоит также упомянуть, поскольку его называют «будущий убийца X11».

Также обратите внимание, что Android и некоторые другие мобильные операционные системы не включают X11, хотя они имеют ядро ​​Linux, поэтому в этом смысле X11 не является родным для всех систем Linux.

Кроссплатформенность не имеет ничего общего с тем, чтобы быть нативным. Какао также было портировано на другие платформы через GNUStep но он все еще является родным для OS X / macOS.

Строго говоря, API Linux состоит из системные вызовы. Это все функции ядра, которые могут вызываться программой пользовательского режима (не ядра). Это очень низкоуровневый интерфейс, который позволяет программам делать такие вещи, как открывать и читать файлы. Увидеть http://en.wikipedia.org/wiki/System_call для общего ознакомления.

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

Чтобы помочь в том, что уже было упомянуто, в этом блоге очень хороший обзор графического стека Linux: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

Это объясняет X11 / Wayland и т. Д. И как все это сочетается. В дополнение к тому, что уже было упомянуто, я думаю, что стоит добавить немного о следующих API, которые вы можете использовать для графики в Linux:

столовая гора — «Mesa — это много вещей, но одной из основных вещей, которые она обеспечивает, является самой известной ее реализация OpenGL. Это реализация OpenGL API с открытым исходным кодом».

Каир — «cairo — это библиотека для рисования, используемая приложениями, такими как Firefox, напрямую или через библиотеки, такие как GTK +, для рисования векторных фигур».

DRM (Менеджер прямого рендеринга) — Я понимаю это меньше всего, но в основном это драйверы ядра, которые позволяют писать графику непосредственно в фреймбуфер, не проходя через X

Я полагаю, что вопрос больше похож на «Что такое родной API-интерфейс linux».

В большинстве случаев X (он же X11) будет использоваться для этого: http://en.wikipedia.org/wiki/X_Window_System .

Вы можете найти документацию по API Вот

XWindows, вероятно, ближе всего к тому, что можно назвать «нативным»

Ближайшая вещь к Win32 в Linux — это libc, так как вы упоминаете не только пользовательский интерфейс, но и другие события и прочее.

Application Programming Interface (API)

Интерфе́йс программи́рования приложе́ний (Application Programming Interface, API [эй‐пи‐ай]; по-русски чаще произносят [апи́]) — набор методов (функций), который программист может использовать для доступа к функциональности программного компонента (программы, модуля, библиотеки). API является важной абстракцией, описывающей функциональность «в чистом виде», безотносительно того, как реализована эта функциональность.

Содержание

API как средство интеграции приложений

API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована.

Если программу (модуль, библиотеку) рассматривать как чёрный ящик, то API — это множество «ручек», которые доступны пользователю данного ящика, которые он может вертеть и дёргать.

Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию — высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов.

По такому принципу построены протоколы передачи данных по Internet. Стандартный протокол Internet (сетевая модель OSI) содержит 7 уровней (от физического уровня передачи пакетов бит до уровня протоколов приложений, подобных протоколам HTTP и IMAP). Каждый уровень пользуется функциональностью предыдущего уровня передачи данных и, в свою очередь, предоставляет нужную функциональность следующему уровню.

Читать еще:  AM3b что за сокет

Важно заметить, что понятие протокола близко по смыслу к понятию API. И то и другое является абстракцией функциональности, только в первом случае речь идёт о передаче данных, а во втором — о построении компьютерных приложений.

API библиотеки функций и классов включает в себя описание сигнатур и семантики функций.

Application Programming Interface (API) программный интерфейс взаимодействия между системами, позволяющий:

  • Получать доступ к бизнес-сервисам предприятия
  • Обмениваться информацией между системами и приложениями
  • Упростить взаимодействие между компаниями, партнерами, разработчиками и клиентами

Open API стратегия

API стратегия включает в себя:

  • Разработку бизнес-продуктов на основе существующих API
  • Предоставление внутренних сервисов разработчикам
  • Модели монетизации API для построения мультиканального взаимодействия и повышения прибыли

Реализация концепции Open API помогает трансформировать бизнес, встраивать его в гибкую проектную экосистему игроков рынка, создавать условия для постоянной генерации новых идей и формирования дополнительной ценности при управлении массивами корпоративных данных.

Рынок интеграционных решений развивается в контексте эволюции API — от EDI и SOAP до Web 2.0, с которого началась эра публичных API. Число таких интерфейсов в ближайшие 3 года может вырасти более чем в 50 раза и достичь 1 миллиона. Это связано с мультиканальностью: каналы взаимодействия с клиентами должны меняться вместе с ними. Непрерывный рост количества потребителей и объема данных привел к появлению экономики API, помогающей на основе открытых интерфейсов создавать инновационные бизнес-модели использования корпоративных активов и сервисов.

Сигнатура функции

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

Иногда различают сигнатуру вызова и сигнатуру реализации функции. Сигнатура вызова обычно составляется по синтаксической конструкции вызова функции с учётом сигнатуры области видимости данной функции, имени функции, последовательности фактических типов аргументов в вызове и типе результата. В сигнатуре реализации обычно участвуют некоторые элементы из синтаксической конструкции объявления функции: спецификатор области видимости функции, её имя и последовательность формальных типов аргументов.

Например, в языке программирования Си++ простая функция однозначно опознаётся компилятором по её имени и последовательности типов её аргументов, что составляет сигнатуру функции в этом языке. Если функция является методом некоторого класса, то в сигнатуре будет учаcтвовать и имя класса.

В языке программирования Java сигнатуру метода составляет его имя и последовательность типов параметров; тип значения в сигнатуре не участвует.

Семантика функции

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

API операционных систем. Проблемы, связанные с многообразием API

Практически все операционные системы (Unix, Windows, MacOS, и т. д.) имеют API, с помощью которого программисты могут создавать приложения для этой операционной системы. Главный API операционных систем — это множество системных вызовов.

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

С другой стороны, отличия в API различных операционных систем существенно затрудняют перенос приложений между платформами. Существуют различные методы обхода этой сложности — написание «промежуточных» API (API графических интерфейсов Qt, Gtk, и т. п.), написание библиотек, которые отображают системные вызовы одной ОС в системные вызовы другой ОС (такие среды исполнения, как Wine, cygwin, и т. п.), введение стандартов кодирования в языках программирования (например, стандартная библиотека [[Си языка C), написания интерпретируемых языков, реализуемых на разных платформах (sh, perl, php, tcl, Java, и т. д.)

Также необходимо отметить, что в распоряжении программиста часто находится несколько различных API, позволяющих добиться одного и того же результата. При этом каждый API обычно реализован с использованием API программных компонент более низкого уровня абстракции.

Например: для того, чтобы увидеть в браузере строчку «Hello, world!» достаточно лишь создать HTML-документ с минимальным заголовком, и простейшим телом, содержащим данную строку. Что произойдёт, когда браузер откроет этот документ? Программа-браузер передаст имя файла (или уже открытый дескриптор файла) библиотеке, обрабатывающей HTML-документы, та, в свою очередь, при помощи API операционной системы прочитает этот файл, и разберётся в его устройстве, повызывает через API библиотеки стандартных графических примитивов операции типа «очистить окошко», «написать выбранным шрифтом Hello, world!», при этих операциях библиотека графических примитивов обратится к библиотеке оконного интерфейса с соответствующими запросами, уже эта библиотека обратится к API операционной системы с запросами вида «а положи-ка мне в буфер видеокарты вот это».

При этом практически на каждом из уровней реально существует несколько возможных альтернативных API. Например: мы могли бы писать исходный документ не на HTML, а на LaTeX, для отображения могли бы использовать любой браузер. Различные браузеры, вообще говоря, используют различные HTML-библиотеки, и, кроме того, всё это может быть (вообще говоря) собрано с использованием различных библиотек примитивов и на различных операционных системах.

Основными сложностями существующих многоуровневых систем API, таким образом, являются:

  • Сложность портирования программного кода с одной системы API на другую (например, при смене ОС);
  • Потеря функциональности при переходе с более низкого уровня на более высокий. Грубо говоря, каждый «слой» API создаётся для облегчения выполнения некоторого стандартного набора операций. Но при этом реально затрудняется, либо становится принципиально невозможным выполнение некоторых других операций, которые предоставляет более низкий уровень API.

Основные типы API

  • Доступ к API предоставляется только внутренним разработчикам
  • Приложения нацелены на сотрудников предприятия
  • Консистентность разработки
  • Снижение затрат
  • Повышение эффективности разработки
  • API доступны только ограниченному набору бизнес-партнеров
  • Приложения предназначены для конечных потребителей и для бизнес-пользователей
  • Автоматизация процесса разработки
  • Развитие партнерских отношений
  • Оптимизация процесса взаимодействия с партнерами

Доступ предоставляется любому внешнему разработчику Приложения нацелены на конечных пользователей

  • Разработка новых сервисов
  • Развитие экосистемы
  • Мультиканальное взаимодействие

Мне действительно нужно использовать графический API?

Нужно ли использовать графические API для получения аппаратного ускорения в 3D-игре? В какой степени можно освободиться от зависимостей от API-интерфейсов графических карт, таких как OpenGL, DirectX , CUDA, OpenCL или что-то еще?

Могу ли я создать собственный графический API или библиотеку для своей игры? Даже если это сложно, теоретически возможно для моего 3D-приложения самостоятельно обращаться к графическому драйверу и отображать все на графическом процессоре?

11 ответов

Я думаю, что многие ответы пропустят важный момент: вы можете писать приложения, напрямую обращающиеся к оборудованию, , но не в современных операционных системах . Это не просто проблема времени, но проблема «у вас нет выбора».

Windows, Linux, OSX и т. д. запрещают прямое аппаратное обеспечение доступа к произвольным приложениям. Это важно по соображениям безопасности: вы не хотите, чтобы случайное приложение могло читать произвольную память GPU по той же причине, по которой вы не хотите, чтобы случайное приложение могло читать системную память. Такие вещи, как фреймбуфер для вашего банковского счета или чего еще нет в памяти GPU. Вы хотите, чтобы этот материал был изолирован и защищен, а доступ контролировался вашей ОС.

Только драйверы могут напрямую разговаривать с большинством аппаратных средств, и единственный способ поговорить с драйвером — это разоблачение ОС HAL и собственный и несовместимый интерфейс каждого драйвера. Этот интерфейс драйвера не только будет отличаться для каждого поставщика, но даже будет отличаться между версиями самого драйвера, что делает невозможным прямое общение с интерфейсом в потребительском приложении. Эти слои часто покрываются элементами управления доступом, которые дополнительно ограничивают возможность доступа приложения к ним.

Нет, ваша игра не может просто использовать оборудование напрямую, если, конечно, вы не нацеливаете небезопасные операционные системы, такие как DOS, и ваш единственный возможный вариант для игры в современных потребительских операционных системах — нацелить открытый API, такой как DirectX , OpenGL или Vulkan.

Читать еще:  На компьютере отсутствует Msvcp120 dll что делать

Практически его необходимо, да. Это необходимо, потому что, если вы не хотите тратить годы на то, что в действительности представляет собой код драйвера для множества различных конфигураций оборудования, вам нужно использовать API, который объединяется с существующими драйверами, написанными производителями GPU для всех популярных операционных систем и оборудования.

Единственная реалистичная альтернатива заключается в том, что вы не используете 3D-ускорение, а вместо этого отправляетесь на программный рендеринг, который, если он написан на чем-то действительно портативном, например C, сможет работать практически на любой системе /устройстве. Это хорошо для небольших игр . что-то вроде SDL подходит для этой цели . есть и другие. Но у этого нет встроенных 3D-возможностей, поэтому вам придется их самостоятельно создавать . что не является тривиальной задачей.

Также помните, что рендеринг ЦП неэффективен и имеет низкую производительность по сравнению с графическими процессорами.

API, такие как OpenGL или DirectX, частично реализованы операционной системой и частично реализованы самим графическим драйвером.

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

Загрузите свой компьютер в MS-DOS. Затем, используя свою копию Энциклопедии программистов для ПК , вы можете напрямую писать в карточку VESA регистрируется и записывается в видеопамять. У меня все еще есть код, который я написал 20 лет назад, чтобы сделать это и сделать рудиментарное 3D в программном обеспечении.

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

Вкратце: Теоретически вы можете, но это неосуществимо, и вы не получите никакого преимущества. Теперь API-интерфейсы ограничений становятся меньше с каждым днем, у вас есть CUDA и OpenCL и шейдеры. Таким образом, полный контроль не является проблемой.

Более полное объяснение:

Ответ на этот вопрос — скучный да . Реальный вопрос: почему ?

Я не представляю, зачем вам делать это иначе, чем в учебных целях. Вы должны знать, что в какой-то момент разработчики имели свободу делать что-либо с их реализацией рендеринга процессора, у всех был собственный API, они контролировали все в «конвейере». С введением фиксированного конвейера и графических процессоров все переключались.

С GPU вы получаете «лучшую» производительность, но теряете много свободы. Графические разработчики стремятся вернуть эту свободу. Следовательно, каждый день настраивается каждый день. Вы можете делать почти все, используя CUDA /OpenCL и даже шейдеры, не касаясь драйверов.

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

Однако это не означает, что вы должны быть на 100% зависимыми от одного конкретного API. Вы всегда можете кодировать свой собственный уровень абстракции и затем заменять более конкретные реализации (например, реализацию DirectX, реализацию OpenGL и т. Д.).

Даже тогда, вероятно, это не стоит. Просто выберите то, что работает достаточно хорошо для ваших целей, и сделайте это. Вы инди-разработчик игр — вам нужно сосредоточиться на том, что делает игру, а не на миниатюрах. Просто сделайте игру!

Вы хотите поговорить с оборудованием. Вам нужно использовать способ общения с оборудованием. Таким образом, это интерфейс к оборудованию. Это то, что OpenGL, DirectX, CUDA, OpenCL и все остальное.

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

Чтобы получить 3D Hardware Acceleration без использования традиционного API, вам необходимо написать собственный код, чтобы дублировать функциональность графического драйвера. Таким образом, лучший способ узнать, как это сделать, — это посмотреть на код графического драйвера.

Для карт NVIDIA вы должны посмотреть проект нуворив . У них есть коллекция больших ресурсов здесь .

Для других марок видеокарт вы можете найти похожие проекты и документацию.

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

Избавление от DirectX или OpenGl не приведет к удалению зависимостей, и это приведет к появлению большего числа из них. В других ответах уже есть несколько хороших моментов, из-за которых невозможно даже напрямую разговаривать с графическим оборудованием (по крайней мере, это невозможно), но первым ответом будет: Если бы вы действительно писали библиотеку, которая абстрагирует все обычные 3D-графики в единый API, вы бы действительно переписали DirectX /OpenGl. Если бы вы использовали свой код для написания игры, вы бы добавили новую библиотеку в новую зависимость, как и теперь у вас DirectX /OpenGl в качестве зависимости.

Используя DirectX или OpenGl, ваши зависимости в основном говорят: «Этот код зависит от библиотеки, чтобы предоставить код, объясняющий, как выполнять определенные команды на разных видеокартах». Если бы вы пошли без такой библиотеки, вы бы представили зависимость «Этот код зависит от графического оборудования, которое ведет себя точно так же, как и аппаратное обеспечение, которое существовало при создании игры».

Абстракции, такие как OpenGl или DirectX, позволяют производителям оборудования предоставлять собственный код (драйверы), которые приводят к общей базе кода, поэтому игры, скорее всего, будут работать на оборудовании, которое даже не существовало, когда игра была написана.

Прежде всего, CUDA и OpenCL не являются графическими. Они представляют собой apis.

Проблема с написанием собственной графики api заключается в том, что она очень сложна. Вы можете напрямую взаимодействовать с оборудованием, но нет гарантии, что если он работает с системой с X-процессором, X-графическим процессором, X-портом RAM и операционной системой X, он будет работать на системе с Y-процессором, графическим процессором Y и т. Д. Хорошим моментом является то, что DirectX работает с драйверами режима ядра. Он внедрен в ядро. Кроме того, графические apis не созданы для поддержки графических процессоров. Для их поддержки создаются графические процессоры (и их драйверы). Таким образом, вы почти не можете создавать графические api, если вы не создаете свою собственную ОС и не используете прерывания VGA с x86. Но вы все равно не сможете правильно взаимодействовать с GPU, и вы будете застревать с низким разрешением.

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

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

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

Ссылка на основную публикацию
Adblock
detector