Что такое аппаратный курсор и как он работает?


Есть ли кто-нибудь, кто может объяснить, как именно работает аппаратный курсор? Как это связано с графикой, которую я рисую на экране? Я использую OpenGL для рисования, как аппаратный курсор связан с графикой OpenGL?

EDIT: для тех, кто может быть заинтересован в этом в будущем я просто реализовал то, что нужно, чтобы показать курсор с аппаратным обеспечением. Реализация была в ядре, и для ее использования достаточно было простого ioctl. Работать отлично.

3 18

3 ответа:

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

Отношение к OpenGL: нет!

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

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

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

Вы можете легко проверить это, отрисовав программный курсор, оставив аппаратный курсор включенным. (К вашему сведению, в Windows API функция курсора hw-ShowCursor). Вы обнаружите, что программный курсор следует за аппаратным курсором.