2011-02-16 17 views
8

ile kullanım için belleğe önceden derlenmiş HLSL shader yükleniyor Ben CreatePixelShader ile kullanmak belleğe bir derlenmiş pixel shader yüklemeniz gerekir ama herhangi D3DX aramaları kullanamaz.CreatePixelShader

Bunu nasıl yapabilirim?

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

Yükü düzenli kullanarak önceden derlenmiş gölgelendirici verilerini:

+0

Neden D3DX kullanıyorsunuz? DirectX'i hiç kullanmıyor musunuz, yoksa bu bir çeşit test mi? – thecoshman

cevap

4

FXC kullanarak komut satırından önceden derlenmiş shaderı inşa (ı dil olarak benim derleyici ve C++ olarak Visual Studio 2010 kullanıyorum) C++ dosya yükleme kodu. psuedo imsi kodunda

:

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

Birisi sözde kod daha önce yayınlanan biliyoruz. İşte Windows SDK'yı kullanarak C++ kodu (istenildiği gibi D3DX kütüphaneleri değil).

Burada "PixelShader.cso", Visual Studio 11 tarafından oluşturulan bir .hlsl dosyasındaki önceden oluşturulmuş hlsl gölgelendiricidir. Derlenmiş .cso dosyası genellikle varsayılan olarak Projeler/ProjeAdı/Hata Ayıklama klasörüne taşınır. Sonuç olarak, kesilmeli ve kullanmadan önce kaynak kodunuzla aynı dizine yapıştırılmalıdır. Visual Studio 11'in içinde HLSL dosyasını sağ tıklatıp Çıkış Ayarlarını düzenleyerek bu ayarın değiştirilebileceğini unutmayın. Varsayılan olarak onun: "PixelShader.cso" önce L

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); 

Dikkat edin .cso $ (Rehber)% (Dosya adı): $ (OutDir)% (Dosya adı) .cso, değiştirin. Projem Multi-Bayt Karakter Kümesini kullanıyordu, eğer Unicode'a ayarlanmışsanız, L gerekli olmayabilir.