Question

Je sais que mélanger OpenGL et DirectX n’est pas recommandé, mais j’essaie de créer un pont entre deux applications différentes qui utilisent une API graphique distincte: s et j’espère qu’il existe une technique de partage des données, en particulier des textures.

J'ai une texture créée dans Direct3D comme ceci:

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

Existe-t-il un moyen d'utiliser cette texture à partir d'OpenGL sans effectuer un aller-retour dans la mémoire système?

Était-ce utile?

La solution

Non.

Pensez-y comme au partage d’une image dans Photoshop avec un autre lecteur d’images. Vous aurez besoin d’une bibliothèque de gestion de la mémoire partagée par ces deux applications.

Autres conseils

OUI. Comme indiqué précédemment (voir ci-dessous), il devrait exister au moins une solution. J'ai trouvé deux solutions possibles:

1) Sur les cartes nvidia, une nouvelle extension a été intégrée dans les 256 dirvers. voir http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interp. txt

2) DXGI est la force motrice pour composer toutes les fenêtres de Vista et Windows 7. Voir msdn.microsoft.com/en-us/library/ee913554.aspx

Je n’ai pas encore fait l’expérience de l’une ou l’autre des solutions, mais j’espère trouver le temps de tester l’une d’elles. Mais pour moi, le premier semble être le plus facile.

[Je pense que cela devrait être possible. Dans les versions récentes de Windows (Vista et 7), il est possible de voir un aperçu du contenu d’une fenêtre dans la barre des tâches (qu’il s’agisse de GDI, Direct3D ou OpenGL). À ma connaissance, l'aperçu OpenGL n'était pas pris en charge dans les versions antérieures de Windows. Donc, au moins dans la nouvelle version, il devrait y avoir une possibilité de coupler ou de partager des contextes de rendu, même entre différents processus ... Ceci est également vrai pour les autres plates-formes modernes qui partagent des contextes de rendu à l’échelle du système afin d’obtenir différents effets de rendu.]

Je pense que ce n'est pas possible. Comme les deux ont différents modèles de texture.

Vous ne pouvez pas accéder directement à la mémoire de texture sans directX ou openGL.

Sinon, si possible, vous devriez pouvoir récupérer l’adresse de texture, sa hauteur, sa largeur et d’autres informations sur la disposition de la mémoire (dépendant du matériel) et créer une image factice dans l’autre système, puis insérer les données récupérées dans votre fichier. objet de texture créé. Ce n'est pas possible

Évidemment, cela ne fonctionnera sur aucun matériel descendant et, dans ce cas, il ne serait pas très portable.

Je ne pense pas que ce soit possible sans télécharger les données dans la mémoire de l'hôte et les télécharger à nouveau dans la mémoire de l'appareil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top