Могу ли я записать графические данные из видеоигры, прежде чем она перейдет в gpu? - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь понять, как обрабатывается графика.Может ли программа получить графические данные перед их отправкой в ​​gpu, зарегистрировать их, отправить их в gpu, получить обработанные результаты обратно из gpu и отправить их в видеоигру, запрашивающую процесс?Я не уверен, объяснил ли я что-либо из этого ясно, но я относительно новичок в этом, поэтому прошу прощения за это.

1 Ответ

2 голосов
/ 26 апреля 2019

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

В этом случае ответ «нет».

Кадровый буфер генерируется (отображается) на графическом процессоре. Единственное, что в ЦП в любой современной игре - это список команд рисования, которые отправляются видеодрайверу и преобразуются в другие команды, понятные графическому процессору. На стороне процессора нет изображения, если вы не рендерили в текстуру и не копировали ее обратно на хост.

Относительно второй части вашего вопроса:

«Игра, запрашивающая процесс», на самом деле не сильно мешает обратной связи с графическим процессором. Дисплей - монитор, HMD или любой другой - показывает содержимое буфера, который находится на GPU. Игра никогда не получает отрендеренный кадр, если она действительно этого не хочет и не проходит через множество проблем, чтобы скопировать его обратно на хост. Рендеринг - это процесс с обратной связью. Помимо некоторых кодов ошибок и состояний, хост-приложение действительно не может проверить, что происходит на графическом процессоре (опять же, без рендеринга во внеэкранный буфер и копирования этих данных обратно в ЦП).

Я бы искал "конвейер рендеринга OpenGL", чтобы лучше понять, как это работает. (DirectX работает так же, кстати.)

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

...