我需要将编译好的像素着色器加载到内存中,以便与CreatePixelShader一起使用,但我不能使用任何D3DX调用。
我该怎么做?
(我使用Visual 2010作为编译器,使用C++作为语言)
发布于 2012-05-25 18:12:48
我知道早些时候有人发了伪码。下面是使用Windows的C++代码(而不是请求的D3DX库)。
这里的"PixelShader.cso“是由Visual 11从项目中的.hlsl文件生成的预编译hlsl着色器。默认情况下,编译后的.cso文件通常会移动到Projects/ProjectName/Debug文件夹中。因此,在使用之前,必须将其剪切并粘贴到与源代码相同的目录中。请注意,可以通过在Visual 11中右键单击HLSL文件并编辑输出设置来更改此设置。默认情况下,its:$(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。
发布于 2011-02-16 18:36:33
使用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);https://stackoverflow.com/questions/5020204
复制相似问题