Поделиться текстурой между Direct3D и OpenGL? - PullRequest
3 голосов
/ 21 октября 2009

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

У меня есть текстура, которая создается в Direct3D, например:

d3_device-> CreateTexture(width, height,
  1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
  &texture, NULL);

Можно ли как-нибудь использовать эту текстуру из OpenGL, не совершая обхода системной памяти?

Ответы [ 4 ]

9 голосов
/ 10 ноября 2010

YES. Как было ранее опубликовано (см. Ниже), должно существовать хотя бы одно решение. Я нашел два возможных решения:

1) На картах nvidia в 256 dirvers было добавлено новое расширение. см http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop.txt

2) DXGI является движущей силой объединения всех окон в Vista и Windows 7. См. Msdn.microsoft.com/en-us/library/ee913554.aspx

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


[Я думаю, это должно быть возможно. В последних версиях Windows (Vista и 7) можно увидеть предварительный просмотр любого содержимого окна на панели задач (будь то GDI, Direct3D или OpenGL). Насколько мне известно, предварительный просмотр OpenGL не был поддержан в более ранних версиях Windows. Так что, по крайней мере, в более новой версии должна быть возможность связывать или обмениваться контекстами рендеринга даже между разными процессами ... Это также справедливо для других современных платформ, которые совместно используют контексты рендеринга в масштабе всей системы для создания различных эффектов рендеринга.]

0 голосов
/ 21 октября 2009

Нет.

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

0 голосов
/ 25 февраля 2010

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

0 голосов
/ 21 октября 2009

Я думаю, что это невозможно. Так как у обоих разные модели текстуры.

Вы не можете получить доступ к памяти текстур напрямую без DirectX или OpenGL.

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

Очевидно, что это не будет работать на любом оборудовании, работающем по нисходящей линии, и в этом случае оно не будет очень переносимым.

...