【问题标题】:Hardcoding HLSL Shader硬编码 HLSL 着色器
【发布时间】:2013-07-23 20:50:32
【问题描述】:

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

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

【问题讨论】:

  • 你的开发环境是什么? (Microsoft Visual Studio 提供资源文件)
  • 是的,确实是微软视觉工作室。我要调查一下,谢谢!

标签: c++ graphics directx shader hlsl


【解决方案1】:

是的。 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

【讨论】:

  • 哇,我觉得自己很愚蠢。非常感谢,这是完美的:)
  • 我会尽快接受,问题是你回答得太快了;)
  • @JosephPla:请注意,这不会阻止用户访问着色器。他们总是可以从您的可执行文件中将其拉出,但显然这需要更多的努力。但与弄清楚你的包文件使用什么压缩并从中解码相比,它需要更少的工作。
  • @NicolBolas 好的,非常感谢。我一定会记住这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
相关资源
最近更新 更多