2016-12-20 2 views
0

J'essaye d'écrire ma première application DX12. Je n'ai aucune expérience en DX11. Je voudrais montrer des objets rigides et des objets mous. Sans textures pour le moment. J'ai donc besoin de placer dans le GPU des tampons de vertex/index que je ne changerai jamais plus tard et certains que je changerai. Et la scène en soi n'est pas statique, donc de nouveaux objets peuvent apparaître et certains peuvent disparaître.Comment dois-je allouer/remplir/mettre à jour la mémoire sur le GPU pour différents types d'objets de scène?

Comment dois-je allouer/remplir/mettre à jour la mémoire sur GPU pour cela? Je voudrais voir un aperçu de haut niveau facile à lire et à comprendre, pas de vrai code. J'espère que la question n'est pas trop large.

Répondre

1

Vous avez dit que vous êtes nouveau sur DirectX, je vous recommande fortement de rester loin de DX12 et de rester fidèle à DX11. DX12 n'est utile que pour les personnes déjà expertes (avec un grand E) et pour un projet qui doit pousser très loin ou avoir des cas de bords pour une fonctionnalité dans DX12 impossible dans DX11.

Mais de toute façon, sur DX12, à titre d'exemple pour initialiser un tampon, vous devez créer des instances de ID3D12Resource. Vous en aurez besoin de deux, un dans le tas de téléchargement et un dans le tas par défaut. Vous remplissez le premier sur le processeur en utilisant la carte. Ensuite, vous devez utiliser une liste de commandes à copier à la seconde. Bien sûr, vous devez gérer l'état des ressources de votre ressource avec des barrières (destination de copie, ressource de shader, ...). Vous devez ensuite exécuter la liste de commandes dans la file d'attente de commandes. Vous devez également ajouter une clôture pour écouter le gpu avant de pouvoir détruire la ressource dans le tas de téléchargement.

Sur DX11, vous appelez ID3D11Device :: CreateBuffer, en fournissant la struct description avec un drapeau de liaison SRV et le pointeur sur les données de cpu que vous voulez mettre dedans ... Fait

Il est un peu plus complexe pour la texture comme vous traitez avec la disposition de la mémoire. Donc, comme je l'indique ci-dessus, vous devriez vous concentrer sur DX11, il ne se dégrade pas du tout, les deux ont leurs rôles.