首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将预编译的HLSL着色器加载到内存中,用于CreatePixelShader

将预编译的HLSL着色器加载到内存中,用于CreatePixelShader
EN

Stack Overflow用户
提问于 2011-02-16 17:57:46
回答 2查看 11.9K关注 0票数 10

我需要将编译好的像素着色器加载到内存中,以便与CreatePixelShader一起使用,但我不能使用任何D3DX调用。

我该怎么做?

(我使用Visual 2010作为编译器,使用C++作为语言)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
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。

票数 22
EN

Stack Overflow用户

发布于 2011-02-16 18:36:33

使用fxc从命令行构建预编译着色器:

代码语言:javascript
复制
fxc filename.hlsl /E PixelShaderEntry /Fo precompiledShader.ext

使用常规c++文件加载代码加载预编译着色器数据。

在psuedo-ish代码中:

代码语言:javascript
复制
byte * data = loadFile("precompiledShader.ext");
IDirect3DPixelShader9 *ps = NULL;
HRESULT hr = device->CreatePixelShader(data, ps);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5020204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档