Intro :
DirectX 10 utilise différentes structures pour se configurer.
Il peut être utile de les connaître afin de maitriser l’initialisation de DirectX 10.
[à faire] D3D10_TEXTURE2D_DESC textureDesc;
D3D10_RENDER_TARGET_VIEW_DESC renderTargetViewDesc;
D3D10_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
Les voici énumérées :
– DXGI_SWAP_CHAIN_DESC :
– utilisée pour configurer la Swap Chain au tout début de l’initialisation de DirectX
– D3D10_TEXTURE2D_DESC :
– utilisée pour décrire une surface 2D
– D3D10_BUFFER_DESC :
– utilisée pour décrire un buffer quelconque
– D3D10_RASTERIZER_DESC :
– utilisée pour configurer l’étape Rasterizer de la chaîne de rendu 3D
– D3D10_VIEWPORT :
– utilisée pour configurer un cadre de vue 3D
– D3D10_SAMPLER_DESC :
– utilisée pour décrire l’échantillonnage d’une texture utilisable dans un shader
– D3D10_COMPARISON_FUNC :
– utilisée pour spécifier la fonction de comparaison entre deux valeurs
– D3D10_USAGE :
– utilisée pour spécifier comment est gérée une ressource par le CPU ou le GPU
– DXGI_SWAP_CHAIN_DESC :
Explications :
Avant tout configuration de structure, pensez à l’initialiser à zéro avec la macro :
ZeroMemory(&structure_variable, sizeof(Structure));
Pour DXGI_SWAP_CHAIN_DESC :
typedef struct DXGI_SWAP_CHAIN_DESC {
DXGI_MODE_DESC BufferDesc;
DXGI_SAMPLE_DESC SampleDesc;
DXGI_USAGE BufferUsage;
UINT BufferCount;
HWND OutputWindow;
BOOL Windowed;
DXGI_SWAP_EFFECT SwapEffect;
UINT Flags;
} DXGI_SWAP_CHAIN_DESC;
On la configure ainsi :
DXGI_SWAP_CHAIN_DESC swapChainDesc; // La taille de la surface en largeur swapChainDesc.BufferDesc.Width // La taille de la surface en hauteur swapChainDesc.BufferDesc.Height // Le format de la surface swapChainDesc.BufferDesc.Format // Le numérateur du taux de rafraichissement - (usuellement 60) swapChainDesc.BufferDesc.RefreshRate.Numerator // Le dénominateur du taux de rafraichissement - (usuellement 1) swapChainDesc.BufferDesc.RefreshRate.Denominator // Le nombre de buffers dans la Swap Chain // (y compris le front buffer) swapChainDesc.BufferCount // Le nombre de sample par pixel pour l'antialiasing swapChainDesc.SampleDesc.Count // Le niveau de qualité de l'image pour l'antialiasing swapChainDesc.SampleDesc.Quality // L'handle de la fenêtre à laquelle on va afficher dessus swapChainDesc.OutputWindow // Précise si on est en mode fenetré ou plein écran swapChainDesc.Windowed // Gère comment DirectX 10 se comporte après l'appel de ->Present(0, 0) swapChainDesc.SwapEffect
Pour D3D10_TEXTURE2D_DESC :
typedef struct D3D10_TEXTURE2D_DESC {
UINT Width;
UINT Height;
UINT MipLevels;
UINT ArraySize;
DXGI_FORMAT Format;
DXGI_SAMPLE_DESC SampleDesc;
D3D10_USAGE Usage;
UINT BindFlags;
UINT CPUAccessFlags;
UINT MiscFlags;
} D3D10_TEXTURE2D_DESC;
On la configure ainsi :
D3D10_TEXTURE2D_DESC textureDesc; // Taille de la texture en largeur (l'unité est en texels) textureDesc.Width // Taille de la texture en hauteur textureDesc.Height // Le nombre de niveau de mipmaps de la texture textureDesc.MipLevels // Le nombre de texture dans le tableau textureDesc.ArraySize // Le format de la texture textureDesc.Format // Le nombre d'échantillon par pixel pour le multisampling textureDesc.SampleDesc.Count // Le niveau de qualité de l'image pour le multisampling textureDesc.SampleDesc.Quality // Décrit commment est utilisée la texture par le CPU et le GPU // (voir l'annexe tout en bas) textureDesc.Usage // Décrit à quelle étape de la chaîne de rendu 3D est liée cette texture textureDesc.BindFlags // Décrit comment le CPU peut accéder à cette ressource texture // (en lecture ou écriture) // si 0 : le CPU n'a pas besoin d'accéder à cette ressource textureDesc.CPUAccessFlags // Autres options pour cette ressource textureDesc.MiscFlags
Pour D3D10_BUFFER_DESC :
typedef struct D3D10_BUFFER_DESC {
UINT ByteWidth;
D3D10_USAGE Usage;
UINT BindFlags;
UINT CPUAccessFlags;
UINT MiscFlags;
} D3D10_BUFFER_DESC;
On la configure ainsi :
D3D10_BUFFER_DESC bufferDesc; // Taille du buffer en octet (bytes) bufferDesc.ByteWidth // Décrit commment est utilisée la texture par le CPU et le GPU // (voir l'annexe tout en bas) bufferDesc.Usage // Décrit à quelle étape de la chaîne de rendu 3D est liée cette texture bufferDesc.BindFlags // Décrit comment le CPU peut accéder à cette ressource texture // (en lecture ou écriture) // si 0 : le CPU n'a pas besoin d'accéder à cette ressource bufferDesc.CPUAccessFlags // Autres options bufferDesc.MiscFlags
Pour D3D10_RASTERIZER_DESC :
typedef struct D3D10_RASTERIZER_DESC {
D3D10_FILL_MODE FillMode;
D3D10_CULL_MODE CullMode;
BOOL FrontCounterClockwise;
INT DepthBias;
FLOAT DepthBiasClamp;
FLOAT SlopeScaledDepthBias;
BOOL DepthClipEnable;
BOOL ScissorEnable;
BOOL MultisampleEnable;
BOOL AntialiasedLineEnable;
} D3D10_RASTERIZER_DESC;
On la configure ainsi :
D3D10_RASTERIZER_DESC rasterizerDesc; // Précise le mode de remplissage des primitives // D3D10_FILL_WIREFRAME ou D3D10_FILL_SOLID rasterizerDesc.FillMode // Spécifie si on affiche les triangles qui sont orientés "en face" ou pas // D3D10_CULL_NONE, D3D10_CULL_FRONT ou D3D10_CULL_BACK rasterizerDesc.CullMode // Détermine dans quel sens les triangles sont considérés orientés "en face" rasterizerDesc.FrontCounterClockwise // Spécifie le valeur de profondeur DepthBias ajouté à un pixel rasterizerDesc.DepthBias // Spécifie la valeur maximale de DepthBias d'un pixel rasterizerDesc.DepthBiasClamp // Spécifie l'échelle de grandeur de DepthBias d'un pixel rasterizerDesc.SlopeScaledDepthBias // Active ou non la coupure de primitives basée sur la distance rasterizerDesc.DepthClipEnable // Active ou non la méthode "rectangle-ciseau" // qui permet de ne pas rendre les triangles dépassants ce // rectangle rasterizerDesc.ScissorEnable // Active ou non la technique d'antialiasing de multi-échantillonage rasterizerDesc.MultisampleEnable // Active ou non la technique de l'antialiasing de ligne rasterizerDesc.AntialiasedLineEnable
Pour D3D10_VIEWPORT :
typedef struct D3D10_VIEWPORT {
INT TopLeftX;
INT TopLeftY;
UINT Width;
UINT Height;
FLOAT MinDepth;
FLOAT MaxDepth;
} D3D10_VIEWPORT;
On la configure ainsi :
D3D10_VIEWPORT viewPortDesc; // Abscisse de la position du cadre de vue en partant de haut à gauche viewPortDesc.TopLeftX // Ordonnée basse de la position du cadre de vue en partant de haut à gauche viewPortDesc.TopLeftY // Largeur du cadre de vue viewPortDesc.Width // Hauteur du cadre de vue viewPortDesc.Height // Profondeur minimum du cadre de vue viewPortDesc.MinDepth // Profondeur maximale du cadre de vue viewPortDesc.MaxDepth
Pour D3D10_SAMPLER_DESC :
typedef struct D3D10_SAMPLER_DESC {
D3D10_FILTER Filter;
D3D10_TEXTURE_ADDRESS_MODE AddressU;
D3D10_TEXTURE_ADDRESS_MODE AddressV;
D3D10_TEXTURE_ADDRESS_MODE AddressW;
FLOAT MipLODBias;
UINT MaxAnisotropy;
D3D10_COMPARISON_FUNC ComparisonFunc;
FLOAT BorderColor[4];
FLOAT MinLOD;
FLOAT MaxLOD;
} D3D10_SAMPLER_DESC;
On la configure ainsi :
D3D10_SAMPLER_DESC samplerDesc; // Méthode de filtrage utilisée pour échantillonner la texture samplerDesc.Filter // Méthode utilisée pour afficher la texture lorsque ses coordonnées U // sont en dehors de l'intervalle de 0.0f - 1.0f // (voir l’annexe) samplerDesc.AddressU // Méthode utilisée pour afficher la texture lorsque ses coordonnées V // sont en dehors de l'intervalle de 0.0f - 1.0f // (voir l’annexe) samplerDesc.AddressV // Méthode utilisée pour afficher la texture lorsque ses coordonnées W // sont en dehors de l'intervalle de 0.0f - 1.0f // (voir l’annexe) samplerDesc.AddressW // Augmente la valeur préétablis du niveau de mimap de la texture samplerDesc.MipLODBias // Spécifie le niveau d'anisotropie de la texture samplerDesc.MaxAnisotropy // Spécifie la fonction de comparaison entre chaque données de // la texture eux-mêmes samplerDesc.ComparisonFunc // Spécifie la couleur de bordure si l'on a passé // D3D10_TEXTURE_ADDRESS_BORDER comme valeur aux AddressU, V ou W samplerDesc.BorderColor // samplerDesc.MinLOD // samplerDesc.MaxLOD
Pour D3D10_USAGE :
typedef enum D3D10_USAGE {
D3D10_USAGE_DEFAULT = 0,
D3D10_USAGE_IMMUTABLE = 1,
D3D10_USAGE_DYNAMIC = 2,
D3D10_USAGE_STAGING = 3
} D3D10_USAGE;
Voici comment la configurer :
Résumé :
Nous avons appris le rôle que joue chaque structure de DirectX 10 afin de mieux comprendre son fonctionnement.
Références :
– DirectX June 2010 SDK Documentation

