这是我的第一个问题,请给我一点怜悯。我目前正在使用像素着色器中的以下着色器代码位:
struct PixelShaderInput
{
float4 pos : SV_POSITION;
};
float4 main(PixelShaderInput input) : SV_TARGET
{
return float4(0.1f, 0.1f, 0.1f, 1.0f);
}
在顶点着色器中:
cbuffer ModelViewProjectionConstantBuffer : register(b0)
{
matrix model;
matrix view;
matrix projection;
};
struct VertexShaderInput
{
float3 pos : POSITION;
};
struct PixelShaderInput
{
float4 pos : SV_POSITION;
};
PixelShaderInput main(VertexShaderInput input)
{
PixelShaderInput output;
float4 pos = float4(input.pos, 1.0f);
pos = mul(pos, model);
pos = mul(pos, view);
pos = mul(pos, projection);
output.pos = pos;
return output;
}
现在是奇怪的部分。在我的不支持 DirectX11 的虚拟机上,如果我将上述着色器代码复制到项目框架创建的两个文件中,则此版本的代码可以工作:
void SUS3DApp1Main::SUSCreateDeviceResources()
{
//auto loadVSTask = DX::ReadDataAsync(L"SUSPixelShader.cso");
//auto loadPSTask = DX::ReadDataAsync(L"SUSVertexShader.cso");
// Load shaders asynchronously.
//this version works
auto loadVSTask = DX::ReadDataAsync(L"SampleVertexShader.cso");
auto loadPSTask = DX::ReadDataAsync(L"SamplePixelShader.cso");
虽然这个没有:
void SUS3DApp1Main::SUSCreateDeviceResources()
{
auto loadVSTask = DX::ReadDataAsync(L"SUSPixelShader.cso");
auto loadPSTask = DX::ReadDataAsync(L"SUSVertexShader.cso");
我检查并重新检查了 Visual Studio 中的编译设置,但它们在我看来是一样的。你们中有人知道在创建项目骨架期间创建的“特殊”文件有什么不同吗?