Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 硬编码HLSL着色器_C++_Graphics_Directx_Shader_Hlsl - Fatal编程技术网

C++ 硬编码HLSL着色器

C++ 硬编码HLSL着色器,c++,graphics,directx,shader,hlsl,C++,Graphics,Directx,Shader,Hlsl,我有一个用HLSL编写的着色器,我不希望用户能够访问它。是否有一种方法可以从一段内存中编译。问题在于,以下函数接受LPCSTR,以便使用.fx文件作为输入: HRESULT D3DXCreateEffectFromFile( _In_ LPDIRECT3DDEVICE9 pDevice, _In_ LPCTSTR pSrcFile, _In_ const D3DXMACRO *pDefines, _In_ LPD3DXINCLUDE pInclude,

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

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

是的。D3DXCreateEffect函数。根据ASCII或二进制效果描述创建效果

也可以从内存中签出D3DX10 compile


您的开发环境是什么?(Microsoft Visual Studio提供资源文件)是的,确实是Microsoft Visual Studio。我会调查的,谢谢!哇,我觉得自己很傻。非常感谢,这是完美的:)我会尽快接受它,问题是你回答得太快;)@JosephPla:请注意,这不会阻止用户访问着色器。他们总是可以从您的可执行文件中拉出它,尽管这显然需要更多的努力。但这比弄清楚你的包文件使用什么压缩并从中解码要省力得多。@NicolBolas好的,非常感谢。我一定会记住这一点。