如何从.fxo文件创建ID3D11VertexShader
How to create ID3D11VertexShader from .fxo file?
我有一个没有定义任何技术的.fx文件。在我的代码中,为了加载顶点和像素着色器,我使用
ID3DBlob* pVSBlob = NULL;
ID3DBlob* pErrorBlob;
hr = D3DX11CompileFromFile( "shader.fx", NULL, NULL, "VS", "vs_4_0",
dwShaderFlags, 0, NULL, &pVSBlob, &pErrorBlob, NULL );
然后用
制作着色器hr = g_pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader );
这个效果很好,当需要渲染的时候,我只使用
g_pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 );
g_pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 );
设置着色器。我想将。fx文件编译成。fxo文件,但我看到加载。fxo文件的唯一方法是使用D3DX11CreateEffectFromMemory。然而,我宁愿不使用效果界面,我没有技术在我的。fx文件。除了从。fxo文件而不是。fx文件外,是否有任何方法可以像我上面那样加载着色器?
由于编译的shader只是准备上传的大量二进制数据,任何文件加载API都可以。
HANDLE hFile = CreateFile(shaderFileName, FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL );
if (hFile == INVALID_HANDLE_VALUE)
{
//Error opening file, handle here (GetLastError can return why this failed).
}
else
{
int fileSize = GetFileSize(hFile,NULL);
byte* data = (byte*)malloc(fileSize);
//You can also check if data is NULL, hence malloc failed
DWORD numRead = 0;
if (ReadFile(hFile, data, fileSize, &numRead , NULL ))
{
hr = g_pd3dDevice->CreateVertexShader(data,fileSize,NULL,&g_pVertexShader);
}
else
{
//Read failed, handle error as you wish
}
CloseHandle(hFile);
free(data);
}
相关文章:
- 终端不会为C++文件创建.exe文件吗
- 如何从具有两列的.txt文件创建并行数组?
- 从 .lib 文件创建一个.dll文件
- 如何从输入文件 c++ 创建随机名称生成器
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- 如何为多个目录中的多个文件创建生成文件?
- 在编译时从 c++ 文件创建枚举
- 如何在运行时从 c++ 中的 DLL 文件创建对象?
- 文件创建并不总是成功
- 如何使用 QFile、c++ 从文件创建整数数组
- 您可以使用 makefile 从 .o 对象文件创建 C++ 文件吗?
- 从函数中的dat文件创建一个2维数组
- 如何为 cpp 和 h 文件创建别名(并忽略编译器__attributes__)
- 如何从现有的生成文件创建 CMake 文件?
- 为什么我无法使用文本文件创建文件映射?
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 从文本文件创建 2D 字符串矢量
- ofStream: - 尽管文件创建了,但文本文件上没有输出
- 从语言文件创建JSON对象
- 将文本文件创建到节点.js的插件C++