[英]Loading a precompiled HLSL shader into memory for use with CreatePixelShader
我需要将一个已编译的像素着色器加载到内存中以与CreatePixelShader一起使用,但我不能使用任何 D3DX调用。
我怎样才能做到这一点?
(我使用Visual Studio 2010作为编译器,使用C ++作为语言)
我意识到有人早先发布了伪代码。 这是使用Windows SDK的C ++代码(而不是所请求的D3DX库)。
这里“PixelShader.cso”是Visual Studio 11从项目中的.hlsl文件生成的预编译hlsl着色器。 编译后的.cso文件通常默认移动到Projects / ProjectName / Debug文件夹。 因此,在使用之前必须将其剪切并粘贴到与源代码相同的目录中。 请注意,可以通过在Visual Studio 11中右键单击HLSL文件并编辑“输出设置”来更改此设置。 默认情况下:$(OutDir)%(文件名).cso,将其更改为:$(目录)%(文件名).cso
ID3D11PixelShader* PS;
ID3DBlob* PS_Buffer;
D3DReadFileToBlob(L"PixelShader.cso", &PS_Buffer);
d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(), NULL, &PS);
d3d11DevCon->PSSetShader(PS, 0, 0);
在“PixelShader.cso”之前记下L。 我的项目使用的是多字节字符集,如果您将其设置为Unicode,则可能不需要L。
使用fxc从命令行构建预编译着色器:
fxc filename.hlsl /E PixelShaderEntry /Fo precompiledShader.ext
使用常规c ++文件加载代码加载预编译的着色器数据。
在psuedo-ish代码中:
byte * data = loadFile("precompiledShader.ext");
IDirect3DPixelShader9 *ps = NULL;
HRESULT hr = device->CreatePixelShader(data, ps);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.