2013-07-23 167 views
2

我有一個用HLSL編寫的着色器,我不希望用戶能夠訪問它。有一種方法可以從一段內存中編譯。問題是,下面的功能,以使用.fx文件作爲輸入接受一個LPCSTR硬編碼HLSL着色器

HRESULT D3DXCreateEffectFromFile(
    _In_ LPDIRECT3DDEVICE9 pDevice, 
    _In_ LPCTSTR pSrcFile, 
    _In_ const D3DXMACRO *pDefines, 
    _In_ LPD3DXINCLUDE pInclude, 
    _In_ DWORD Flags, 
    _In_ LPD3DXEFFECTPOOL pPool, 
    _Out_ LPD3DXEFFECT *ppEffect, 
    _Out_ LPD3DXBUFFER *ppCompilationErrors 
); 

我需要的東西沿着空隙線條更*或至少某種方式從內存塊進行編譯。除了將數據保存到文件,編譯和刪除文件之外,有沒有辦法做到這一點?

wchar_t* shaderCode = L"//Poorly formatted shader code goes here"; 

我希望能夠從上面的內存部分從字面上編譯。如何才能做到這一點?

+0

什麼是你的開發環境? (Microsoft Visual Studio提供資源文件) –

+0

確實,Microsoft Visual Studio確實如此。我要去看看,謝謝! –

回答

3

是的。 D3DXCreateEffect函數。通過ASCII或二元效果描述創建效果。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb172763(v=vs.85).aspx

還可以檢查出D3DX10CompileFromMemory ..

http://msdn.microsoft.com/en-us/library/windows/desktop/bb310587(v=vs.85).aspx

+0

哇,我感覺真的很愚蠢。非常感謝,這是完美:) –

+0

我會盡快接受它,問題是你的回答太快;) –

+0

@JosephPla:請注意,這不*防止用戶能夠訪問着色器。他們總是可以從你的可執行文件中抽出它,儘管顯然它需要更多的努力。但它需要*少*的努力,而不是找出你的包文件使用什麼壓縮並從中解碼它。 –