Совместное использование текстуры между Direct3D и OpenGL?

StackOverflow https://stackoverflow.com/questions/1601165

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Есть ли способ использовать эту текстуру из OpenGL, не проходя через системную память?

Это было полезно?

Решение

Нет.

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

Другие советы

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

1) На картах нвидиа в драйвер 256 было интегрировано новое расширение.видеть 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.Так что, по крайней мере, в новой версии должна быть возможность связывать или совместно использовать контексты рендеринга даже между разными процессами...Это также верно и для других современных платформ, которые используют общесистемные контексты рендеринга для создания различных эффектов рендеринга.]

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top