2017-09-22 9 views
1

Bon après-midi!DirectX. Comment convertir une texture d'un format de pixel à un autre (RGBA -> BGRA)?

Dans DirectX je suis un débutant, je ne sais pas beaucoup de choses.

J'ai une texture dans la mémoire de la carte vidéo au format RGBA (DXGI_FORMAT_R8G8B8A8_UNORM). C'est un tampon de jeu intercepté. Avant de copier son contenu dans la mémoire de l'ordinateur, j'ai besoin de faire une transformation de cette texture au format BGRA (DXGI_FORMAT_B8G8R8A8_UNORM). Comment convertir une texture d'un format de pixel à l'autre moyen de carte vidéo?

// DXGI_FORMAT_R8G8B8A8_UNORM 
ID3D11Texture2D *pTexture1; 

// DXGI_FORMAT_B8G8R8A8_UNORM 
ID3D11Texture2D *pTexture2; 
D3D11_TEXTURE2D_DESC desc2 = {}; 
desc2.Width = swapChainDesc.BufferDesc.Width; 
desc2.Height = swapChainDesc.BufferDesc.Height; 
desc2.MipLevels = 1; 
desc2.ArraySize = 1; 
desc2.Format = DXGI_FORMAT_B8G8R8A8_UNORM; 
desc2.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; 
desc2.SampleDesc.Count = 1; 
desc2.Usage = D3D11_USAGE_DEFAULT; 
desc2.MiscFlags = 0; 

void pixelConvert(ID3D11Texture2D *pTexture1, ID3D11Texture2D *pTexture2) 
{ 
    // 
    // Code.... 
    // 
} 

Je ne comprends pas cette solution: DX11 convert pixel format BGRA to RGBA Il est pas terminé

+0

double possible de [DX11 convertir le format des pixels BGRA à RGBA] (https://stackoverflow.com/questions/24148164/dx11-convert-pixel-format-bgra-to-rgba) mais inverse .. – user1810087

+0

Je ne comprends pas cette réponse –

Répondre

2

Sur le GPU, la solution simple est de simplement rendre la texture à une autre cible de rendu comme un « quad plein écran » . Il n'y a pas besoin de shader spécialisé, c'est juste un rendu simple. Lorsque vous chargez la texture, elle est "balancée" si nécessaire sur les canaux Rouge, Vert et Bleu standard et lorsque vous écrivez sur la cible de rendu, la même chose se produit selon le format.

Voir SpriteBatch dans DirectX Tool Kit et this tutorial en particulier si vous avez besoin d'une solution qui fonctionne sur tous les Direct3D Hardware Feature Levels. Si vous pouvez demander D3D_FEATURE_LEVEL_10_0 ou plus tard, voir PostProcess qui est optimisé pour le fait que vous dessinez toujours le quadruplé sur l'ensemble de la cible de rendu.

Si vous voulez une solution de processeur, voyez DirectXTex.