繁体   English   中英

将预编译的HLSL着色器加载到内存中以与CreatePixelShader一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM