2017-09-29 5 views
0

La lecture du livre: « Rendu pratique et calcul avec Direct3D 11 », et la recherche d'une ligne de définition: https://docs.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view--srv-DirectX 11 Qu'est-ce qu'une ressource Shader Voir

Je suis encore confus sur ce qu'est un ID3D11ShaderResourceView est. N'oubliez pas que j'apprends DirectX 11 pour créer un jeu vidéo. Dans cet esprit ...

Qu'est-ce qu'une vue de ressources Shader? Dans quelles situations utiliseriez-vous une vue Shader Resource View? Et le plus important, comment utilisez-vous une vue des ressources Shader? Je suppose que vous pouvez utiliser cette ressource dans votre code HLSL, mais dans le livre, je n'ai pas encore vu d'exemple sur la façon de le faire, et de quelle manière générique il est utilisé pour les moteurs de jeux vidéo.

Merci!

Répondre

0

En version plus ancienne, comme Direct3D 9, vous avez eu une interface unique, comme IDirect3DTexture9, IDirect3DCubeTexture9 ou IDirect3DVolumeTexture9 qui encapsulées à la fois l'image eux-mêmes bits et la sémantique de l'utilisation prévue. Cela avait une logique spéciale pour le faire fonctionner comme une cible de rendu.

Dans Direct3D 10, il a été divisé en deux éléments:

  • La ressource (par exemple les bits d'image) comme ID3DxxTexture1D, ID3DxxTexture2D et ID3DxxTexture3D

  • La sémantique de l'utilisation qui est soit un ID3DxxShaderResourceView qui est utilisé pour lire une texture dans un shader -ou- ID3D10RenderTargetView qui est utilisé pour le rendu d'une texture.

L'avantage de la conception plus récente est que vous pouvez avoir une seule ressource ID3DxxTexture2D et un SRV lorsque vous l'utilisez pour rendre, et un RTV lorsque vous utilisez comme une texture rendu. Vous pouvez traiter un cubemap comme une texture 2D avec une taille de tableau de 6.

Vous trouverez peut-être la documentation plus ancienne sur MSDN utile.

Vous devriez jeter un oeil à la DirectX Tool Kit tutorials

+0

Ok! pour utiliser réellement une texture dans un shader vous devez avoir un ShaderResourceView – Mike5050

+0

Vous devez avoir un SRV pour lier une ressource à un shader en lecture Vous devez avoir un RTV pour lier une ressource à la sortie du pipeline de rendu –

+0

Merci!Fait beaucoup plus de sens! – Mike5050

0

Ainsi, l'exemple de la vie réelle serait ombres - vous allez essentiellement par la géométrie de remplissage de position lumières buffer de profondeur, puis passez par la géométrie de la caméra positionner et utiliser les données du Depth Buffer pour calculer si le pixel est dans l'ombre ou non. So * View dans DirectX pourrait être traduit en "traiter cette ressource comme". Dans la première partie, vous utiliserez Texture comme DepthStencilView ("Traitez cette texture comme Depth Stencil") et dans la partie suivante, vous utiliserez la même texture que celle entrée dans le shader (ShaderResourceView, "traiter cette texture comme Shader Resource) .

cette « transition » est très important en termes de synchronisation des ressources. dans DX11 cela est fait pour vous par le conducteur, en DX12 mais vous devez prendre soin de cela.