はかせのラボ

私の頭の中を書いていく雑記ブログです

DirectXさっそく躓く ~シェーダーコンパイル~

DirectX勉強2回目です。
タイトルにある通りさっそく躓きました。

前回初期化ができたので今回は点を描画してみようと思ったわけです。
そのためにはシェーダーが必要だということで簡単なシェーダーファイルを作りコンパイルしてみようとしました。

コンパイルしようとしたシェーダー 名前はshader.hlsl

cbuffer global
{
	matrix gWVP;
};

float4 VS(float4 pos:POSITION):SV_POSITON
{
    return mul(pos, gWVP);
};

float4 PS() : SV_Target
{
    return float4(1, 1, 1, 1);
};

↓シェーダーを読み込みコンパイルしようとしたコード

ID3D11VertexShader* mVertexShader;
ID3D11PixelShader* mPixelShader;

//シェーダの設定
ID3DBlob* compileVS = NULL;
ID3DBlob* compilePS = NULL;
if (FAILED(D3DCompileFromFile(L"shader.hlsl", nullptr, nullptr, "VS", "vs_5_0", 0, 0, &compileVS, NULL))) return S_FALSE;
if (FAILED(D3DCompileFromFile(L"shader.hlsl", nullptr, nullptr, "PS", "ps_5_0", 0, 0, &compilePS, NULL))) return S_FALSE;
mDevice->CreateVertexShader(compileVS->GetBufferPointer(), compileVS->GetBufferSize(), NULL, &mVertexShader);
mDevice->CreatePixelShader(compilePS->GetBufferPointer(), compilePS->GetBufferSize(), NULL, &mPixelShader);

実行してみたところD3DCompileFromFile関数が失敗しているらしくうまく動作しませんでした。

関数の使い方が間違っているのか、
シェーダーが間違っているのか、もしくは全く違う原因があるのか・・

そもそも実行時にコンパイルしようとすること自体間違ってるんですかね?
でも間違いならこんな関数できませんよね・・

とりあえずシェーダーとシェーダーコンパイルについて勉強しなおしてみます。

今回作ったコードはgithubに上げました
https://github.com/hakase0724/DirectX/tree/ShaderTest