Совместное использование текстуры между Direct3D и OpenGL?
Вопрос
Я знаю, что смешивать 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. Р>
В противном случае: если это возможно, вы должны быть в состоянии получить адрес текстуры, ее высоту, ширину и другую (аппаратно-зависимую) информацию о расположении памяти, создать фиктивную текстуру в другой системе и вставить полученные данные в ваш обычный создан объект текстуры. Это невозможно
Очевидно, что это не сработает на любом оборудовании для нисходящего трафика, и в этом случае оно не будет очень переносимым.
Я не думаю, что это возможно без загрузки данных в память хоста и повторной загрузки в память устройства.