C++ 无法从.cso文件(DirectX、c+;+;)加载顶点着色器
我正在尝试从先前编译的.cso文件加载顶点着色器 我使用的代码是:C++ 无法从.cso文件(DirectX、c+;+;)加载顶点着色器,c++,file,directx,shader,C++,File,Directx,Shader,我正在尝试从先前编译的.cso文件加载顶点着色器 我使用的代码是: char* bytes = { 0 }; size_t fSize = readFileBytes("vsTex.cso", bytes); hr = d3d11Device->CreateVertexShader((void*)bytes, fSize, NULL, &TexVertexShader); if (hr != S_OK){ MessageBox(NULL, "FAIL", "ERROR",
char* bytes = { 0 };
size_t fSize = readFileBytes("vsTex.cso", bytes);
hr = d3d11Device->CreateVertexShader((void*)bytes, fSize, NULL, &TexVertexShader);
if (hr != S_OK){
MessageBox(NULL, "FAIL", "ERROR", NULL);
}
readFileBytes:
long readFileBytes(const char *name, char* bytes)
{
FILE *fl;
fopen_s(&fl, name, "r");
fseek(fl, 0, SEEK_END);
long len = ftell(fl);
bytes = (char*)malloc(len);
fseek(fl, 0, SEEK_SET);
fread(bytes, 1, len, fl);
fclose(fl);
return len;
}
D3D11设备是指向ID3D11设备的指针。我一直在使用D3D11CompileFromFile()创建顶点着色器,但没有任何错误,因此据我所知,着色器本身没有任何问题
我不确定我是否只是错误地读取了文件,或者在给函数指定字节之前,我是否必须对其执行其他操作。我注意到的一些事情可能会导致一些问题
long readFileBytes(const char *name, char* bytes)
long readFileBytes(const char *name, char*& bytes) //pass in bytes by reference
fopen_s(&fl, name, "r");
fopen_s(&fl, name, "rb"); //open file in binary mode
最后,不要忘记在创建着色器后释放字节
free(bytes);
通过引用传入字节修复了该问题。谢谢!当然也要使用“rb”选项。你可能会在有用的.Wow中找到“ReadData.h”帮助程序,这花了我一秒钟的时间,但我从某处认出了沃尔伯恩。你的工作太棒了,恰克!