Компонент Nvidia opengl sdk framework загружает систему

Обновлено: 04.07.2024

После создания экземпляра с одним или несколькими графическими процессорами вашей системе требуются драйверы устройств NVIDIA, чтобы ваши приложения могли получить доступ к устройству. Убедитесь, что у экземпляров вашей виртуальной машины (ВМ) достаточно свободного места на диске (выберите не менее 30 ГБ для загрузочного диска при создании новой ВМ).

В этом документе объясняется, как установить проприетарные драйверы NVIDIA на виртуальные машины, созданные с использованием общедоступных или пользовательских образов.

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

Чтобы установить драйверы для виртуальной рабочей станции NVIDIA RTX, см. раздел Установка драйверов для виртуальных рабочих станций NVIDIA RTX.

Прежде чем начать

  • Если вы хотите использовать примеры командной строки из этого руководства, сделайте следующее:
    1. Установите или обновите до последней версии интерфейс командной строки Google Cloud.
    2. Установите регион и зону по умолчанию.
  • Если вы хотите использовать примеры API из этого руководства, настройте доступ к API.

Драйвер NVIDIA, набор инструментов CUDA и версии среды выполнения CUDA

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

  • Драйвер NVIDIA
  • Инструментарий CUDA
  • Среда выполнения CUDA

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

Однако вы должны убедиться, что ваши версии драйвера NVIDIA и инструментария CUDA совместимы. Сведения о совместимости инструментария CUDA и драйвера NVIDIA см. в документации NVIDIA о совместимости с CUDA.

Требуемые версии драйверов NVIDIA

Графические процессоры NVIDIA, работающие на Compute Engine, должны использовать следующие версии драйверов NVIDIA:

Для графических процессоров A100:

  • Линукс: 450.80.02–495.29.05
  • Windows: 452,77–496,13

Для графических процессоров K80:

  • Линукс: 410.79–470.103.01
  • Windows: 426,00–472,98

Для графических процессоров K80 NVIDIA объявила, что ветвь драйвера R470 станет последней версией драйвера, которая получит поддержку отладки. Чтобы ознакомиться с этим обновлением, см. Матрицу поддержки программного обеспечения NVIDIA.

Для всех остальных моделей GPU:

  • Линукс: 410.79–495.29.05
  • Windows: 426,00–496,13

Установка драйверов графического процессора на виртуальные машины

Один из способов установить драйвер NVIDIA на большинстве виртуальных машин — это установить NVIDIA CUDA Toolkit.

Чтобы установить набор инструментов NVIDIA, выполните следующие действия:

Выберите набор инструментов CUDA, который поддерживает минимальный необходимый вам драйвер.

Подключитесь к виртуальной машине, на которую вы хотите установить драйвер.

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

  • NVIDIA A100
  • Linux: набор инструментов CUDA 11.1
  • Windows: набор инструментов CUDA 11.2
  • Linux: руководство по установке CUDA 11.1
  • Windows: руководство по установке CUDA 11.2
  • NVIDIA T4
  • NVIDIA V100
  • NVIDIA P100
  • NVIDIA P4
  • NVIDIA K80
  • Linux: обновление CUDA Toolkit 10.12
  • Windows: обновление CUDA Toolkit 10.12
  • Linux: руководство по установке CUDA 10.1
  • Windows: руководство по установке CUDA 10.1

Сценарии установки

Для автоматизации процесса установки можно использовать следующие сценарии. Чтобы ознакомиться с этими скриптами, посетите репозиторий GitHub.

Линукс

Поддерживаемые операционные системы

Сценарий установки Linux был протестирован на следующих операционных системах:

  • CentOS 7 и 8
  • Debian 10 и 11
  • RHEL Enterprise Linux (RHEL) 7 и 8
  • Рокки Линукс 8
  • Убунту 18, 20 и 21

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

Убедитесь, что Python 3 установлен в вашей операционной системе.

Загрузить скрипт установки.

Запустите сценарий установки.

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

Окна

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

Откройте терминал PowerShell от имени администратора и выполните следующие действия:

Скачать скрипт.

Выполнение сценария занимает некоторое время. В процессе установки не выдаются командные строки. После завершения сценария драйвер будет установлен.

Этот сценарий устанавливает драйверы в следующую папку по умолчанию на вашей виртуальной машине: "C:\Program Files\NVIDIA Corporation".

Установка драйверов графического процессора на ВМ, использующих безопасную загрузку

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

Поддержка ОС

    Информацию об установке драйверов NVIDIA в операционной системе Windows, использующей безопасную загрузку, см. в разделе «Общая установка драйверов графического процессора на виртуальных машинах».

Для операционных систем Linux поддержка доступна только для операционных систем Ubuntu 18.04 и 20.04. Осуществляется поддержка других операционных систем.

Убунту 18.04 и 20.04

Подключитесь к виртуальной машине, на которую вы хотите установить драйвер.

Обновите репозиторий.

Выполните поиск самого последнего пакета модуля ядра NVIDIA или нужной версии. Этот пакет содержит модули ядра NVIDIA, подписанные ключом Ubuntu. Выполните следующую команду, чтобы увидеть последние пакеты:

Например, укажите число 2, чтобы получить следующую более раннюю версию:

Вы можете проверить выбранную версию драйвера, запустив команду echo $NVIDIA_DRIVER_VERSION . Вывод представляет собой строку версии, например 455 .

Установите пакет модуля ядра и соответствующий драйвер NVIDIA:

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

Убедитесь, что драйвер NVIDIA установлен. Возможно, вам потребуется перезагрузить виртуальную машину.

Настройте APT для использования репозитория пакетов NVIDIA.

Чтобы помочь APT выбрать правильную зависимость, закрепите репозитории следующим образом:

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

Добавьте репозиторий NVIDIA:

Найдите совместимую версию драйвера CUDA.

Следующий скрипт определяет последнюю версию драйвера CUDA, совместимую с только что установленным драйвером NVIDIA:

Вы можете проверить версию драйвера CUDA, запустив команду echo $CUDA_DRIVER_VERSION . Вывод представляет собой строку версии, например 455.32.00-1 .

Установите драйверы CUDA той версии, которая была определена на предыдущем шаге.

Необязательно: придержите пакеты dkms.

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

Чтобы сохранить пакеты dkms, выполните следующую команду:

Установите набор инструментов CUDA и среду выполнения.

Выберите подходящую версию CUDA. Следующий скрипт определяет последнюю версию CUDA, совместимую с только что установленным драйвером CUDA:

Вы можете проверить версию CUDA, запустив команду echo $CUDA_VERSION . Вывод представляет собой строку версии, например 11-1 .

Установите пакет CUDA:

Проверьте установку CUDA: первая команда выводит информацию о графическом процессоре. Вторая команда выводит установленную версию компилятора CUDA.

Проверка установки драйвера графического процессора

После завершения шагов по установке драйвера убедитесь, что драйвер правильно установлен и инициализирован.

Линукс

Подключитесь к экземпляру Linux и используйте команду nvidia-smi, чтобы убедиться, что драйвер работает правильно.

Вывод аналогичен следующему:

Если эта команда не удалась, проверьте следующее:

Проверьте, не подключен ли к виртуальной машине графический процессор.

Используйте следующую команду для проверки любых устройств NVIDIA PCI:

sudo lspci | grep -i "nvidia" .

Убедитесь, что версия ядра драйвера и версия ядра виртуальной машины совпадают.

  • Чтобы проверить версию ядра виртуальной машины, запустите uname -r .
  • Чтобы проверить версию ядра драйвера, запустите sudo apt-cache show linux-modules-nvidia-NVIDIA_DRIVER_VERSION -gcp.

Если версии не совпадают, перезагрузите виртуальную машину с новой версией ядра.

Сервер Windows

Подключитесь к экземпляру Windows Server и откройте терминал PowerShell от имени администратора, затем выполните следующую команду, чтобы убедиться, что драйвер работает правильно.

Вывод аналогичен следующему:

Что дальше?

  • Чтобы отслеживать производительность графического процессора, см. раздел Мониторинг производительности графического процессора.
  • Информацию об обслуживании узла GPU см. в разделе Обработка событий обслуживания узла GPU.
  • Чтобы оптимизировать производительность графического процессора, см. раздел Оптимизация производительности графического процессора.

Если не указано иное, содержимое этой страницы предоставляется по лицензии Creative Commons Attribution 4.0, а образцы кода — по лицензии Apache 2.0.Подробнее см. в Правилах сайта Google Developers. Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.

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

Для программирования с использованием API OpenGL вам потребуются драйвер и пакет разработки (зависит от платформы и языка программирования). Дополнительные сведения о конкретных платформах описаны в разделах ниже.

Содержание

Эта вики содержит страницу часто задаваемых вопросов по OpenGL.

Загрузка OpenGL

На всех трех основных настольных платформах (Linux, macOS и Windows) OpenGL более или менее входит в состав системы. Однако вам необходимо убедиться, что вы загрузили и установили последнюю версию драйвера для вашего графического оборудования.

Окна

Подходящие веб-сайты с драйверами для Windows:

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

Без драйверов вы по умолчанию будете использовать версию программного обеспечения OpenGL 1.1 (в Win98, ME и 2000), оболочку Direct3D, поддерживающую OpenGL 1.1 (WinXP), или оболочку Direct3D, поддерживающую OpenGL 1.1 (Windows Vista и Windows 7). Ни один из этих вариантов не является особенно быстрым, поэтому установка драйверов всегда является хорошей идеей.

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

Линукс

Графика в Linux практически полностью реализована с использованием системы X Window. Поддержка OpenGL в Linux предполагает использование расширений GLX для X-сервера. Существует стандартный двоичный интерфейс приложения, определенный для OpenGL в Linux, который обеспечивает совместимость приложений с OpenGL для ряда драйверов. Кроме того, инфраструктура прямого рендеринга (DRI) представляет собой структуру драйверов, которая позволяет записывать драйверы и взаимодействовать в рамках стандартной структуры, чтобы легко поддерживать аппаратное ускорение. установка. В наши дни XFree86 был отклонен в пользу XOrg из-за изменения лицензии XFree86, поэтому многие разработчики покинули Xfree86 и присоединились к группе XOrg. Популярные дистрибутивы Linux теперь поставляются с XOrg.

Поставщики по-разному подходят к драйверам для Linux, некоторые поддерживают работу с открытым исходным кодом с использованием DRI, а другие поддерживают платформы с закрытым исходным кодом, но все методы поддерживают стандартный ABI, который позволяет корректно написанным приложениям OpenGL работать в Linux.

Дополнительную информацию о разработке приложений OpenGL в Linux см. в разделе Особенности платформы: Linux

macOS

Для разработчиков установка macOS по умолчанию не включает заголовки OpenGL и другие необходимые инструменты разработки. Они устанавливаются отдельным пакетом инструментов разработчика под названием Xcode. Этот установщик включает в себя заголовочные файлы OpenGL, компиляторы (gcc), отладчики (gdb), среду Apple Xcode IDE и ряд инструментов повышения производительности, полезных для разработки приложений OpenGL.

Дополнительную информацию о разработке приложений OpenGL для macOS см. в разделе Особенности платформы: macOS.

Написание приложения OpenGL

Если вы не используете C/C++, вам необходимо загрузить и установить пакет или библиотеку для выбранного вами языка, включающую привязки OpenGL. Некоторые из них предустановлены, другие можно загрузить отдельно.

Если вы используете C/C++, вам необходимо сначала настроить среду сборки (проект Visual Studio, make-файл GNU, файл CMake и т. д.), которая может связываться с OpenGL. В Windows вам необходимо статически связать библиотеку с именем OpenGL32.lib (обратите внимание, что вы по-прежнему ссылаетесь на OpenGL32.lib, если вы создаете 64-битный исполняемый файл. Часть «32» не имеет смысла). Visual Studio и большинство компиляторов Windows поставляются с этой библиотекой.

В Linux вам необходимо установить ссылку на libGL. Это делается с помощью параметра командной строки "-lGL".

Инициализация

Прежде чем вы действительно сможете использовать OpenGL в программе, вы должны сначала ее инициализировать. Поскольку OpenGL не зависит от платформы, стандартного способа инициализации OpenGL не существует; каждая платформа обрабатывает это по-разному. Привязки к языкам, отличным от C/C++, также могут обрабатывать их по-разному.

Существует два этапа инициализации OpenGL. Первый этап — это создание контекста OpenGL; второй этап — загрузка всех необходимых функций для использования OpenGL. Некоторые языковые привязки, отличные от C/C++, объединяют их в одну.

Создание контекста OpenGL

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

Если вы используете привязку к языку C/C++ для OpenGL, вам настоятельно рекомендуется использовать набор оконных инструментов для управления этой задачей. Эти библиотеки создают окно, присоединяют контекст OpenGL к этому окну и управляют основным вводом для этого окна. Как только вы освоитесь с OpenGL, вы сможете научиться делать это вручную.

Большинство языковых привязок, отличных от C/C++, предоставляют механизм для создания контекста, зависящий от языка.

Получение функций

Если вы используете привязку к языку, отличному от C/C++, то сопровождающий этой привязки уже обработает это как часть создания контекста. Если вы используете C/C++, читайте дальше.

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

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

Использование OpenGL

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

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

Существуют методы обновления только части экрана. И вы можете использовать OpenGL с этими методами. Но сам OpenGL не делает этого внутри себя; вы должны помнить, где вы все нарисовали. Вы должны выяснить, что требует обновления, и очистить только эту часть экрана. И так далее

Существует множество руководств и других материалов для обучения использованию OpenGL как на этой вики, так и в Интернете.

Просмотрщики OpenGL

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

На разработку ушло некоторое время, но мы очень рады представить сообществу новый веб-сайт Vulkan. Не волнуйтесь, Vulkan по-прежнему поддерживается и принадлежит The Khronos Group; мы просто почувствовали, что он перерос свой старый веб-сайт теперь, когда прошло пять лет с момента запуска Vulkan 1.0.

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

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

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

Мы надеемся, что этот веб-сайт станет новым центром внимания сообщества Vulkan и улучшит опыт разработки Vulkan как для новых, так и для опытных разработчиков.

NVIDIA предоставляет удаленный рабочий стол с ускорением OpenGL для GeForce

В наши дни социального дистанцирования разработчики игр и создатели контента по всему миру работают из дома и обращаются за помощью в использовании потоковой передачи удаленного рабочего стола Windows с помощью инструментов OpenGL, которые они используют. NVIDIA создала специальный инструмент для графических процессоров GeForce для ускорения потоковой передачи удаленного рабочего стола Windows с драйверами GeForce R440 или более поздней версии.Загрузите и запустите исполняемый файл (nvidiaopenglrdp.exe) с веб-сайта DesignWorks в качестве администратора на удаленном ПК с Windows, где будет работать ваше приложение OpenGL. Диалоговое окно подтвердит, что ускорение OpenGL включено для удаленного рабочего стола и требуется ли перезагрузка.

Mesa 20.0 теперь по умолчанию использует новый драйвер Intel Gallium3D для более быстрого OpenGL

После того, как их первоначальная цель по переходу на Intel Gallium3D по умолчанию для Mesa 19.3 в качестве предпочтительного драйвера OpenGL Linux для графического оборудования Intel была достигнута, эта веха теперь достигнута для Mesa 20.0.

Khronos Group выпускает Vulkan 1.2

Компания Khronos Group объявляет о выпуске спецификации Vulkan 1.2 для ускорения GPU. В этом выпуске 23 проверенных расширения интегрированы в основной API Vulkan, предоставляя значительный доступ по запросу разработчиков к новым аппаратным функциям, улучшенную производительность приложений и улучшенное удобство использования API. Несколько поставщиков графических процессоров сертифицировали соответствующие реализации, и в январе 2020 года ожидается появление значительных инструментов с открытым исходным кодом. Vulkan продолжает развиваться, прислушиваясь к потребностям разработчиков, поставляя новые функции в виде расширений, а затем объединяя расширения, получившие положительные отзывы разработчиков, в унифицированную спецификацию основного API. . Khronos и сообщество Vulkan будут поддерживать Vulkan 1.2 в широком спектре компиляторов, инструментов и отладчиков с открытым исходным кодом к концу января 2020 года. Обновления выпусков драйверов будут размещены в системе отслеживания общедоступных версий Vulkan.

Дополнительную информацию о спецификации Vulkan 1.2 и связанных с ней тестах и ​​инструментах см. по адресу:

  • Страница ресурсов Khronos Vulkan
  • Пример кода можно найти в едином репозитории образцов Vulkan.
  • Khronos приветствует отзывы о Vulkan 1.2 от сообщества разработчиков:

NVIDIA представляет Nsight Systems 2019.6 с улучшениями OpenGL

NVIDIA Nsight Systems 2019.6 теперь доступна для загрузки. В этом выпуске расширена трассировка графики в Windows за счет добавления поддержки Direct3D 11, очередей WDDM CPU+GPU и OpenGL. В Linux к новым функциям относятся поддержка CUDA 10.2, одновременные сеансы CLI, раскрутка DWARF и захват с помощью горячей клавиши.

Эта фиксация не принадлежит ни к одной из веток в этом репозитории и может принадлежать ответвлению за пределами репозитория.

  • Открыть с рабочего стола
  • Просмотреть в необработанном виде
  • Копировать исходное содержимое Копировать необработанное содержимое

Копировать необработанное содержимое

Копировать необработанное содержимое

Обзор платформы OpenGLES

Любое приложение, работающее на оборудовании OpenGL ES 2.0 / 3.0, например, созданное этой платформой, должно выполнять много работы помимо простых вызовов отрисовки. Независимый от платформы код необходим для создания приложения, а также для абстрагирования файлового ввода-вывода, выделения памяти и стандартной библиотеки. Меши, текстуры и другие ресурсы должны быть загружены. Также полезна поддержка ввода, шрифтов и кода таймера. Эта платформа обеспечивает абстракцию платформы и библиотеку общих функций, упрощающих создание новых приложений.

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

Исходная платформа из Adreno GPU SDK поддерживала несколько платформ посредством эмуляции среды выполнения OpenGL ES. Для целей этого репозитория все платформы, отличные от Android, были удалены, и в будущем будут включены только платформы, изначально поддерживающие OpenGL ES. По этой причине в файловой структуре Framework сохраняется иерархия четкого разделения кода, зависящего от платформы, и кода, не зависящего от платформы. Например, весь код для платформы Android находится в папке src/Android с файлами, помеченными суффиксом _Platform.

В следующем разделе представлен краткий обзор основных функций и компонентов Framework.

Создание приложений выполняется автоматически платформой. Каждая поддерживаемая платформа имеет свою основную точку входа, расположенную в файле FrmApplication_Platform.cpp для данной платформы. В качестве примера ниже показана основная точка входа в Android:

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

Как показано в примере Hello Framework, этот класс используется и является производным от класса CSample. Производный класс отвечает за построение, инициализацию, обработку событий изменения размера, обновление и отрисовку сцены, а также очистку.

Объект CSample инстанцируется и создается в глобальной функции FrmCreateApplicationInstance(). Все образцы, использующие Framework, должны предоставлять эту функцию, иначе образец не будет собран. Платформа использует эту функцию как абстрактный способ создания выборки, поскольку в противном случае она не знает ни о том, что такое класс CSample, ни о том, как его создать. Этот дизайн также был выбран для облегчения независимости от платформы, поскольку не все платформы создают объекты приложений одинаковым образом и в одном и том же порядке во время запуска.

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

ПРИМЕЧАНИЕ. Переменная-член m_OpenGLESVersion по умолчанию имеет значение GLES2. Однако вы можете установить его на GLES3, чтобы включить функциональность OpenGLES 3.0.

Буфер кадров настраивается для различных режимов отображения с помощью метода CFrmRenderContext::Create(). Параметры конфигурации устанавливаются на основе входящих режимов отображения, а поверхность окна создается с помощью вызовов EGL.

Абстракция файлового ввода-вывода

Все вызовы операционной системы, такие как файловый ввод-вывод, упаковываются и абстрагируются для достижения независимости от платформы. Например, FrmFile.h содержит метод FrmFile_Open(), который абстрагирует открытие файлов. У разработчика может возникнуть соблазн вместо этого вызвать fopen() или CreateFile(), но преимущество использования FrmFile_Open() заключается в том, что он гарантированно работает во всех операционных системах, поддерживаемых платформой.

Абстракция стандартной библиотеки C

Все функции в stdlib.h упакованы для обеспечения независимости от платформы. К ним относятся функции управления памятью, такие как FrmMalloc и FrmFree, а также функции-оболочки cstring, такие как FrmStrcpy и FrmSprintf.

Framework предоставляет простую абстрактную функцию для перехвата и реагирования на нажатия клавиш на целевом оборудовании. Все клавиши, которые в настоящее время удерживаются или были нажаты с момента последнего кадра, можно запросить, вызвав FrmGetInput(). Например:

Математическая поддержка 2D/3D

FrmMath.h содержит множество вспомогательных математических структур и функций, включая ряд полезных векторных и матричных операций. Чаще всего используются типы FRMVECTOR3 и FRMVECTOR4 для векторов и кватернионов и FRMMATRIX4X4 для матричных преобразований, совместимых с GLSL.

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

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

Чтобы учесть этот дизайн, Adreno GPU SDK включает инструмент под названием ResourcePacker. Приложение отправляет XML-описание того, какие файлы он хочет, чтобы ResoourcePacker обрабатывал, и как он должен это обрабатывать. Как правило, это список исходных файлов текстур (TGA, BMP, JPG и т. д.), которые необходимо преобразовать в двоичный формат текстур OpenGL ES 2.0 (например, ATC, формат сжатия текстур AMD). Результатом ResourcePacker является один файл .pak. Доступ к этому пакетному файлу можно получить во время выполнения через класс CFrmPackedResource. Каждый ресурс связан с заданным пользователем именем ASCII, которое может быть извлечено в обернутый класс ресурсов, такой как CFrmTexture.

Основным преимуществом использования упакованных файлов ресурсов является возможность абстрагировать имена текстур от реальных файлов. Например, сетки, созданные художником, часто включают определенные имена файлов текстур, которые могут создавать конфликты. Например, если TROLL.MESH и OGRE.MESH ссылаются на текстуру с именем «face.bmp», упаковщик ресурсов может помочь избежать конфликтов имен, поскольку текстуры троллей будут храниться в troll.pak, а текстуры огров — в orge. .пак.

Поддержка шейдеров GLSL

Framework помогает загружать, компилировать и связывать программы шейдеров GLSL с приложением. Все это можно сделать через единый интерфейс FrmCompileShaderProgramFromFile().Эта вспомогательная функция упрощает примерно 100 строк кода до одного вызова функции.

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

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

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

Внутренне объект CFrmMesh представляет собой иерархию фреймов преобразования, которая называется FRM_MESH_FRAME. Каждый кадр может дополнительно включать фактические данные сетки и указатели на дочерние и/или одноуровневые кадры. Фактические данные рендеринга сетки хранятся в структурах FRM_MESH и FRM_MESH_SUBSET. Первый по сути представляет собой оболочку для объекта буфера вершин, а второй представляет собой конкретные данные рендеринга, такие как материалы и текстуры, для подмножества сетки.

Обратите внимание, что сетки Framework также поддерживают данные анимации через структуру FRM_ANIMATION. Анимационные данные представляют собой стандартный набор поворотов, перемещений и значений масштаба по ключевым кадрам. Чтобы анимировать сетку, Framework может использовать указанное значение времени для интерполяции ключевых кадров и построения матриц преобразования, которые он записывает обратно в иерархию кадров сетки. Поскольку с одним мешем может быть связано множество анимаций (бег, ходьба, прыжок и т. д.), данные анимации хранятся в отдельных файлах.

Компоненты графического пользовательского интерфейса

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

В следующем примере показано, как можно использовать класс CFrmUserInterface на практике.

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

Читайте также: