2

我有一个用 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";

我希望能够从上面的内存部分进行逐字编译。如何才能做到这一点?

4

1 回答 1

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

于 2013-07-23T20:57:44.563 回答