structure D3DHAL_DP2TEXBLT (d3dhal.h)
La structure D3DHAL_DP2TEXBLT est utilisée pour les blts de texture lorsque D3dDrawPrimitives2 répond au jeton de commande D3DDP2OP_TEXBLT.
Syntaxe
typedef struct _D3DHAL_DP2TEXBLT {
DWORD dwDDDestSurface;
DWORD dwDDSrcSurface;
POINT pDest;
RECTL rSrc;
DWORD dwFlags;
} D3DHAL_DP2TEXBLT;
Membres
dwDDDestSurface
Spécifie le handle de la texture de destination.
dwDDSrcSurface
Spécifie le handle de la texture source.
pDest
Spécifie le point de destination où le blt doit être effectué, autrement dit, le point dans la surface de destination (dwDDDestSurface) pour commencer le blt. Ces x et y membres de la structure POINT sont spécifiés dans les coordonnées de l’écran.
rSrc
Spécifie le rectangle à bliter dans la texture source, autrement dit, le rectangle source dans la surface source (dwDSrcSurface) à partir duquel blt.
dwFlags
Réservé à l’utilisation du système.
Remarques
Le rappel D3dCreateSurfaceEx crée les petits handles entiers aux textures qui peuvent être utilisées comme textures source et de destination pour les blts de texture.
La structure D3DHAL_DP2TEXBLT est utilisée avec un jeton de flux de commandes D3DDP2OP_TEXBLT pour informer les pilotes d’effectuer une opération blt d’une texture source vers une texture de destination. Une texture peut également être une carte d’environnement cube. Le pilote doit copier un rectangle spécifié par rSrc dans la texture source à l’emplacement spécifié par le plus pDest dans la texture de destination. Les textures de destination et de source sont identifiées par des handles auxquels le pilote a été averti pendant la création de texture. Si le pilote est capable de gérer les textures, il est possible que le handle de destination soit 0. Cela indique au pilote qu’il doit précharger la texture en mémoire vidéo (ou où que le matériel soit efficacement extrait). Dans ce cas, le pilote peut ignorer rSrc et pDest .
Notez que pour les textures mappées MIP, une seule instruction D3DDP2OP_TEXBLT est insérée dans le flux de commandes D3dDrawPrimitives2. Dans ce cas, le pilote est censé blter tous les niveaux de carte MIP présents dans la texture. Les régions à copier dans les sous-niveaux de carte MIP peuvent être obtenues en divisant rSrc etpDest de 2 à chaque niveau.
Il est possible que les textures source et de destination contiennent différents nombres de niveaux de carte MIP. Dans ce cas, le pilote devrait blter les niveaux communs. Par exemple, si une texture source 256x256 a 8 niveaux de carte MIP et si la destination est une texture de 64 x 64 avec 6 niveaux, le pilote doit blter les 6 niveaux correspondants de la source. Le pilote peut s’attendre à ce que les dimensions du niveau MIP supérieur de la texture de destination soient toujours inférieures ou égales aux dimensions du niveau MIP supérieur de la texture source.
Notez que les handles source et de destination font toujours référence aux surfaces de niveau supérieur et ne font jamais référence à un sous-niveau de carte MIP. En raison d’une erreur dans l’application, il est possible que la texture de destination contienne des niveaux de mappage MIP supplémentaires. Par exemple, une texture source 256x256 peut contenir cinq niveaux, mais la texture de destination 256x256 peut contenir huit. Le pilote est censé gérer ce cas en toute sécurité, mais il n’est pas prévu de produire des résultats corrects. En raison de problèmes de compatibilité d’application hérités, Direct3D n’empêche pas les paires de textures source/destination d’être transmises au pilote.
Le pilote peut s’attendre à ce que les formats de pixels des textures source et de destination soient identiques et, en général, le blt spécifié est sûr à effectuer. Autre que la seule affaire mentionnée ci-dessus, le conducteur ne devrait pas s’attendre à être présenté à toute situation qui rend impossible d’effectuer un blt.
Si le pilote souhaite effectuer des blts asynchrones de la mémoire système à la mémoire vidéo, il doit implémenter l’appel DirectDraw HAL GetSysmemBltStatus, sinon, des incohérences peuvent survenir.
Avec TexBlt, il n’est pas nécessaire que le pilote effectue une synchronisation, car les TexBlts sont toujours émis dans l’ordre approprié, ainsi que les commandes de rendu. Avant cela, il était nécessaire que le pilote gère correctement le cas lorsqu’un blt DirectDraw a modifié une texture référencée par des commandes de rendu dans n’importe quel contexte Direct3D. Lorsque plusieurs contextes sont présents, Direct3D n’émet pas TexBlts. Cela signifie que l’enregistreur de pilotes peut omettre le code de synchronisation dans le chemin du code TexBlt (mais nécessite toujours la synchronisation pour les blts).
exemple de
Le pseudocode suivant montre comment un sous-paramètre doit être calculé pour les niveaux MIP consécutifs, pour accéder au niveau MIP i + 1 à partir du niveau MIP i :
rect.left >>= 1;
rect.top >>= 1;
DWORD right = (rect.right + 1) >> 1;
DWORD bottom = (rect.bottom + 1) >> 1;
rect.right = ((right - rect.left) < 1) ?
(rect.left + 1) : (right);
rect.bottom = ((bottom - rect.top ) < 1) ?
(rect.top + 1) : (bottom);
Exigences
Exigence | Valeur |
---|---|
d’en-tête | d3dhal.h (include D3dhal.h) |
Voir aussi
D3DDP2OP_TEXBLT