0
CreateVertexShader()でシェーダーを作成しようとすると、COMエラー 'paremeterが正しくありません。'が表示されます。C++ DirectX CreateVertexShader COMエラー
struct ShaderData
{
LPVOID ShaderCode;
size_t ShaderSize;
};
この機能は機能しますが、リークします。 delete [] bufferのコメントが解除されるとエラーが出ます。
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;
}
同じ機能のもう1つのバージョンですが、std :: vectorを使用すると、同じエラーが表示されます。
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;
}
シェーダを作成する機能。 m_vertex_dataとm_pixel_dataは両方ともShaderクラスのメンバ変数であり、LoadShader()から返されたデータを保持します。
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()));
}
これは今、本当にありがとうございます。 – sorte33