0

この DirectX11 プロジェクトで、shader.hlsl ファイルを使用して三角形内の位置に基づいて三角形を色付けする画面に三角形をロードするように取り組んでいます (これは、混ざり合う多色の三角形です)。今回も通常の出力エラーは出ていません。これにアプローチ/処理する方法がわかりません。

//shaders.hlsl ファイルを呼び出す関数

void InitPipeline()

{

// load and compile the two shaders

ID3D10Blob *VS, *PS;
D3DX11CompileFromFile("shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, 0, 0);
D3DX11CompileFromFile("shaders.hlsl", 0, 0, "PShader", "ps_5_0", 0, 0, 0, &PS, 0, 0);

// encapsulate both shaders into shader objects
dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &pVS);
dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), NULL, &pPS);

// set the shader objects
devcon->VSSetShader(pVS, 0, 0);
devcon->PSSetShader(pPS, 0, 0);

// create the input layout object
D3D11_INPUT_ELEMENT_DESC ied[] =
{
    {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
    {"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
};

dev->CreateInputLayout(ied, 2, VS->GetBufferPointer(), VS->GetBufferSize(), &pLayout);
devcon->IASetInputLayout(pLayout);

}

struct VOut { 
    float4 position : SV_POSITION; 
    float4 color : COLOR; 
}; 

VOut VShader(float4 position : POSITION, float4 color : COLOR) { 
    VOut output; 
    output.position = position; 
    output.color = color; 
    return output; 
} 

float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET {
    return color; 
} 
4

1 に答える 1

1

Visual Studio を使用していますか? shaders.hlslを右クリックして完全なパスを見つけ、関数内のshaders.hlslD3DX11CompileFromFile絶対パスに置き換えます。適切にエスケープされるように、\文字をに置き換えてください。\\

Visual Studio は、shaders.hlslをソース コードと同じ場所に残します。これは、プログラムがそれを見つけられないことを意味します。青いウィンドウはまだ表示されていますか? それが私が抱えていた問題です。

于 2011-11-29T20:51:35.630 に答える