Как GPU рендерится в правильное окно? - PullRequest
0 голосов
/ 02 сентября 2018

Я не понимаю рендеринга окна opengl. Допустим, я хочу, чтобы моя видеокарта нарисовала сцену на экране. Мое окно opengl расположено, скажем, 50, 50, 100, 100 (x, y, ширина, высота). ГПУ знает, как нарисовать сцену в этом месте. Это называется окном просмотра, и графический процессор получает эту информацию в виде матрицы.

Что происходит, когда я перемещаю свое окно opengl из местоположения 50, 50, 100, 100 в местоположение 150, 150, 100, 100. Как GPU получает эту новую информацию о окне просмотра, все еще визуализируя сцену (возможно, она сейчас находится в этап фрагментирования). Это будет рисовать неправильные пиксели в местах 50, 50, 100, 100. Пожалуйста, объясните.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Мое окно opengl расположено, скажем, 50, 50, 100, 100 (x, y, ширина, высота). GPU знает, как нарисовать сцену в этом месте.

Есть ли это? Вы делаете предположения о специфике того, что делают внутренние компоненты системы рендеринга, ОС и графического процессора.

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

Даже в системах рендеринга, где вы напрямую визуализируете для отображения памяти, кто может сказать, что то, что вы можете установить в качестве «окна просмотра», не управляется внутренним драйвером OpenGL? Когда вы перемещаете окно из одного места в другое, водитель может просто сместить настройки вашего окна просмотра, и вы не станете мудрее.

В принципе, есть много способов, чтобы это произошло, и какой путь будет выбран, полностью зависит от того, как реализация OpenGL (и сопутствующая ОС / система рендеринга) выбирает обработку местоположений экрана.

0 голосов
/ 02 сентября 2018

Я не знаю всех внутренних компонентов графического стека, но когда вы запрашиваете область просмотра, вы получаете пиксельный буфер от display server, такого как X-сервер или Wayland. Графический процессор выполняет вычисления, чтобы заполнить буфер кадров цветами. Затем сервер дисплея выбрасывает буфер кадров в окно. Это упрощает, и я ошибаюсь в некоторых деталях. В Linux существует сложный конвейер событий, которые происходят из выходящего из пользовательского пространства, проникают в ядро ​​и, наконец, видят ваш кадровый буфер на экране.

...