Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中的着色器和DIXTX11编译 我试图用C++来创建DirectX 11程序。在我将法线添加到代码之前,该代码曾经正常工作。现在它根本不编译着色器。它一直给我访问冲突0X0000错误_C++_Compilation_Directx_Shader_Directx 11 - Fatal编程技术网

C++中的着色器和DIXTX11编译 我试图用C++来创建DirectX 11程序。在我将法线添加到代码之前,该代码曾经正常工作。现在它根本不编译着色器。它一直给我访问冲突0X0000错误

C++中的着色器和DIXTX11编译 我试图用C++来创建DirectX 11程序。在我将法线添加到代码之前,该代码曾经正常工作。现在它根本不编译着色器。它一直给我访问冲突0X0000错误,c++,compilation,directx,shader,directx-11,C++,Compilation,Directx,Shader,Directx 11,我尝试使用d3dErrorBlolb,但没有太大帮助。问题似乎在于代码的这一部分 void InitPipeline(HWND hwnd) { ID3D10Blob * BVS = 0,*BPS = 0; ID3D10Blob * BErrorVS,*BErrorPs; HRESULT hr1 = D3DX11CompileFromFile(L"Test.fx",0,0,"VS","vs_4_0",0,0,0,&BVS,&BErrorVS,0); HRESULT hr =

我尝试使用d3dErrorBlolb,但没有太大帮助。问题似乎在于代码的这一部分

void InitPipeline(HWND hwnd)
{

ID3D10Blob * BVS = 0,*BPS  = 0;
ID3D10Blob * BErrorVS,*BErrorPs;

HRESULT hr1 = D3DX11CompileFromFile(L"Test.fx",0,0,"VS","vs_4_0",0,0,0,&BVS,&BErrorVS,0);
HRESULT hr =  D3DX11CompileFromFile(L"Test.fx",0,0,"PS","ps_4_0",0,0,0,&BPS,&BErrorPs,0);


if(FAILED(hr))
{
    printf("Error %08X   %5s\n",hr,(char*)BErrorVS);
    MessageBox(hwnd,L"Pixel shader not created ",L"",0);

}
if(FAILED(hr1))
{   MessageBox(hwnd,L"Vertex shader not created ",L"",0);}
dev->CreateVertexShader(BVS->GetBufferPointer(),BVS->GetBufferSize(),0,&BoxVShader);
dev->CreatePixelShader(BPS->GetBufferPointer(),BPS->GetBufferSize(),0,&BoxPixelShader);


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

};
//SecureZeroMemory(&Bin);
dev->CreateInputLayout(ied,2,BVS->GetBufferPointer(),BVS->GetBufferSize(),&BInputLayout);

devcon->VSSetShader(BoxVShader,0,0);
devcon->PSSetShader(BoxPixelShader,0,0);
devcon->IASetInputLayout(BInputLayout);
}

Test.fx文件

谁能帮我一下吗

如果可能的话,请解释为什么这种情况总是发生1.我做错了什么

请帮帮我。我迫切需要解决这个问题


谢谢…

虽然在运行时编译HLSL对于学习和迭代来说很好,但通过使用命令行编译HLSL,实际上调试HLSL要容易得多:

fxc test.fx/Tvs_4_0/EVS和fxc test.fx/Tps_4_0/EPS

第二个失败,因为您未能在像素着色器中设置col的初始值:

test.fx40,25-47:警告X3206:“点”:向量类型的隐式截断

test.fx40,9-64:错误X4000:未完全初始化就使用了变量“col”

编译失败;没有生成代码

解决方法很简单:

float4 PS(float4 pos:SV_POSITION,float4 normal:NORMAL):SV_TARGET
{
    float4 col = 0;

    for(int i=0; i < 2;++i)
    {
        col += saturate(dot(normal,LightDir[i])) * LightColor[i] ;
    }
    return col;
 }
此外,您应该记住,即使SucceedHr,BErrorVS和BErrorPS也可以设置为非空值,因为它只能报告非致命警告


我帮不了什么忙,但我找到了这个东西:最后哇,谢谢你的时间……我真的很感激……谢谢,我会调查的。。。。谢谢谢谢谢谢…你能告诉我命令行的位置吗,这样我就可以用它来调试它了…再次感谢如果你有VS 2012,请寻找VS2012的开发者命令提示符。使用VS2013,查找包含开发人员命令提示符项的Visual Studio工具文件夹。如果您使用的是旧版DirectX SDK,请查找DirectX SDK命令提示符。您还可以将其添加为VS的MSBuild生成系统中的自定义生成步骤,或添加为.fx文件的自定义生成规则。这两种方法都允许您通过访问VS环境变量集来输入任意命令行指令。对于VS 2012和2013,有一个使用FXC的.fx/.hlsl文件的内置处理程序。主要问题是,MSBuild采用单一源文件->单一结果文件,这只适用于旧的fx_uu配置文件。对于其他用途,通常使用不同的参数多次编译同一文件。使用MSBuild模拟这种情况的唯一方法是为每个目标创建一个文件,并大量使用include。最后,除了一些琐碎的情况外,在批处理文件中使用命令行通常要容易得多。例如,请参见。您好,谢谢大家的帮助。但是我似乎无法从DirecxSDK commandprompt编译文件。我设置了目录usinf cd Path,然后当我使用fxc Test.hlsl/Tvs_4_0/EVS时,它会显示一个红色的错误,表示它从程序开始就存在。您知道为什么会发生这种情况吗
float4 PS(float4 pos:SV_POSITION,float4 normal:NORMAL):SV_TARGET
{
    float4 col = 0;

    for(int i=0; i < 2;++i)
    {
        col += saturate(dot(normal,LightDir[i])) * LightColor[i] ;
    }
    return col;
 }
if(FAILED(hr))
{
    printf("Error %08X   %5s\n",hr,(char*)BErrorPS->GetBufferPointer());
    MessageBox(hwnd,L"Pixel shader not created ",L"",0);

}