硬编码HLSL着色器

时间:2013-07-23 20:50:33

标签: c++ graphics directx shader hlsl

我有一个用HLSL编写的着色器,我不希望用户能够访问。有没有办法可以从一段内存中进行编译。问题是以下函数接受LPCSTR以使用.fx文件作为输入:

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

我需要更多类似于void *或者至少某种方式来编译内存块。除了将数据保存到文件,编译和删除文件之外,还有办法吗?

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

我希望能够从上面的内存部分进行逐字编译。怎么办呢?

1 个答案:

答案 0 :(得分: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