2017-01-06 1 views
-5

Est-il possible de rendre les contrôles Winapi sur la fenêtre Direct3D comme dans WPF?Comment rendre les contrôles Winapi en utilisant DirectX?

+0

[DXGI] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb205075.aspx) fournit l'infrastructure pour [Partage de surface entre API Windows Graphics] (https: // msdn. microsoft.com/en-us/library/windows/desktop/ee913554.aspx). Mais si vous devez demander, si c'est possible, cette API n'est probablement pas pour vous. Nécessite une connaissance ** intime ** de tous les composants du système impliqués. – IInspectable

+0

@IInspectable, merci pour l'information – monobogdan

+0

@IInspectable, j'ai besoin de GUI dans mon application d3d. Dois-je utiliser DXGI? – monobogdan

Répondre

0

Les contrôles Windows Win32 classiques ne peuvent pas être dessinés facilement sur une cible de rendu Direct3D. Avec les applications Windows Store, vous pouvez utiliser le modèle Direct3D + XAML, ce qui signifie que vous disposez d'un contrôle spécifique pour le rendu de votre contenu Direct3D dans l'interface utilisateur basée sur XAML.

Pour les applications Windows Presentation Foundation, vous pouvez utiliser D3DImage pour rendre le contenu Direct3D dans l'interface utilisateur de WPF. Cela prend uniquement en charge Direct3D 9 hérité, mais vous pouvez utiliser this project pour effectuer le rendu en utilisant Direct3D 11.

De nombreux jeux utilisent quelque chose comme Scaleform pour rendre les contrôles sur une scène Direct3D.

Anciens échantillons DirectX constitués de simples widgets d'interface utilisateur dans DXUT.

Je vous recommande de jeter un oeil à imgui si vous voulez un ensemble robuste de contrôles qui peuvent rendre directement sur une surface Direct3D.

Sinon, pour les contrôles simples, vous pouvez les implémenter vous-même. DirectX Tool Kit avec SpriteBatch et SpriteFont peut vous aider beaucoup.

+0

Merci, mais pourquoi DXUT - mauvaise solution? SAMP utilise DXUT pour le rendu de sa propre interface graphique. – monobogdan

+0

@ monobogdan1: DXUT est obsolète et n'est pas une bibliothèque officielle. Bien que Chuck Walbourn ait mis à jour le dépôt GitHub, il a également [blogué] (https://blogs.msdn.microsoft.com/chuckw/2013/09/14/dxut-for-win32-desktop-update/) sur les problèmes que vous avez rencontrés. pourrait tomber dessus en s'appuyant dessus. – IInspectable

+0

@ChuckWalbourn, je sais à propos de Scaleform, c'est vélo pour wrap flash dans les API 3D. UDK l'utilise pour une interface graphique agréable et lente. Mais c'est uniquement C++, pas de wrappers C#. – monobogdan