Бесшовная многоэкранная визуализация OpenGL с неоднородной конфигурацией нескольких графических процессоров в Windows XP - PullRequest
1 голос
/ 01 сентября 2011

В Windows XP (64-разрядная версия) кажется невозможным рендерить с OpenGL на два экрана, подключенных к разным видеокартам с разными графическими процессорами (например, два NVIDIA разных поколений).В этом случае происходит то, что рендеринг работает только на одном из экранов.С другой стороны, с Direct3D он работает без проблем, рендеринг на обоих экранах.Кто-нибудь знает, почему это?Или, что более важно: есть ли способ рендеринга на обоих экранах с помощью OpenGL?

Я обнаружил, что в Windows 7 рендеринг работает на обоих экранах даже с графическими процессорами разных брендов (например, AMD и Intel).Я думаю, что это может быть из-за его модели дисплея, которая работает поверх композитного Direct3D, если я не ошибаюсь.Это просто предположение, я действительно не знаю, является ли это реальной причиной.

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

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Что происходит в Windows 7, так это то, что один графический процессор или один и тот же тип графических процессоров, связанных друг с другом, рендерит изображение в внеэкранный буфер, который затем компонуется на экранах. Однако (пока) невозможно распределить рендеринг одного контекста по графическим процессорам разных производителей. Это потребует стандартизированной инфраструктуры связи и синхронизации, которой просто не существует. Ни OpenGL, ни Direct3D не могут этого сделать.

Что можно сделать, это скопировать результаты рендеринга в экранные кадровые буферы нескольких графических процессоров. Windows 7 и DirectX имеют встроенную поддержку. Работа с OpenGL немного сложнее. Технически вы визуализируете в контекст вне устройства, обычно так называемый PBuffer . После окончания рендеринга вы копируете результат с помощью функций GDI в ваше окно. Этот последний шаг копирования, однако, очень медленный по сравнению с остальной частью операции OpenGL.

0 голосов
/ 01 сентября 2011

И у NVIDIA, и у AMD есть способы, позволяющие вам выбирать, какой графический процессор использовать.NVIDIA имеет WGL_NV_gpu_affinity , а AMD имеет WGL_AMD_gpu_association .Они оба работают по-разному, поэтому вам придется делать разные вещи на разных аппаратных средствах, чтобы получить необходимое поведение.

...