C++ C++;DirectX CreateVertexShader COM错误
当我尝试使用CreateVertexShader()创建着色器时,会出现COM错误“参数不正确”C++ C++;DirectX CreateVertexShader COM错误,c++,directx,C++,Directx,当我尝试使用CreateVertexShader()创建着色器时,会出现COM错误“参数不正确” struct ShaderData { LPVOID ShaderCode; size_t ShaderSize; }; 此功能可以工作,但会泄漏。当删除[]缓冲区未注释时,我得到错误 Shader::ShaderData Shader::LoadShader(const std::string& file) { std::ifstream ifs(file, st
struct ShaderData
{
LPVOID ShaderCode;
size_t ShaderSize;
};
此功能可以工作,但会泄漏。当删除[]缓冲区未注释时,我得到错误
Shader::ShaderData Shader::LoadShader(const std::string& file)
{
std::ifstream ifs(file, std::ios::in | std::ios::binary);
if (!ifs) return;
ifs.seekg(0, std::ios::end);
size_t size = static_cast<std::size_t>(ifs.tellg());
ifs.seekg(0, std::ios::beg);
char* buffer = new char[size];
ifs.read(buffer, len);
ShaderData data = { buffer, size };
//delete[] buffer;
return data;
}
您需要保持由
ShaderData::ShaderCode指向的缓冲区代码>在创建着色器之前有效。为了避免泄漏,只需将其替换为::std::vectorShaderCode代码>这样缓冲区将保持安全。实际上,您根本不需要ShaderData
struct,只需返回包含着色器代码的向量即可
Shader::ShaderData Shader::LoadShader(const std::string& file)
{
std::ifstream ifs(file, std::ios::in | std::ios::binary);
if (!ifs) return;
ifs.seekg(0, std::ios::end);
size_t size = static_cast<std::size_t>(ifs.tellg());
ifs.seekg(0, std::ios::beg);
std::vector<char> buffer(size);
ifs.read(buffer.data(), size);
ShaderData data = { static_cast<void*>(buffer.data()), size };
return data;
}
void Shader::CreateShaders(ID3D11Device* device)
{
device->CreateVertexShader(m_vertex_data.ShaderCode,
m_vertex_data.ShaderSize,
nullptr,
m_vertex_shader.GetAddressOf()));
device->CreatePixelShader(m_pixel_data.ShaderCode,
m_pixel_data.ShaderSize,
nullptr,
m_pixel_shader.GetAddressOf()));
}