2011-02-16 1 views

Répondre

4

construire votre shaders précompilé à partir de la ligne de commande à l'aide FXC:

fxc filename.hlsl /E PixelShaderEntry /Fo precompiledShader.ext 

charge les données de shaders précompilés à l'aide régulière Code de chargement du fichier C++.

dans le code pseudo-ish:

byte * data = loadFile("precompiledShader.ext"); 
IDirect3DPixelShader9 *ps = NULL; 
HRESULT hr = device->CreatePixelShader(data, ps); 
19

Je me rends compte que quelqu'un a posté pseudo-code précédent. Voici le code C++ utilisant le SDK Windows (et non les bibliothèques D3DX comme demandé).

Ici, "PixelShader.cso" est le shaders hlsl précompilé généré par Visual Studio 11 à partir d'un fichier .hlsl dans le projet. Le fichier .cso compilé est généralement déplacé vers le dossier Projects/ProjectName/Debug par défaut. Par conséquent, il doit être coupé et coller dans le même répertoire que votre code source avant de l'utiliser. Notez que ce paramètre peut être modifié en cliquant avec le bouton droit sur le fichier HLSL dans Visual Studio 11 et en modifiant les paramètres de sortie. Par défaut son: $ (OutDir)% (Nom du fichier) .cso, changer à: $ (Répertoire)% (Nom du fichier) .cso

ID3D11PixelShader* PS; 
ID3DBlob* PS_Buffer; 

D3DReadFileToBlob(L"PixelShader.cso", &PS_Buffer); 
d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(), NULL, &PS); 
d3d11DevCon->PSSetShader(PS, 0, 0); 

Prenez note de la L avant "PixelShader.cso". Mon projet utilisait le jeu de caractères multi-octets, si vous avez défini le vôtre sur Unicode, le L pourrait ne pas être nécessaire. Pourquoi ne pas utiliser D3DX?

Questions connexes