Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Directx 简单的HLSL文件没有';不行?_Directx_Hlsl - Fatal编程技术网

Directx 简单的HLSL文件没有';不行?

Directx 简单的HLSL文件没有';不行?,directx,hlsl,Directx,Hlsl,我完全是HLSL的初学者,并且有一些呈现平面三角形的示例代码。如果我尝试将PShader函数从返回显式颜色的函数替换为下面引用全局变量(mycl)的函数,那么它将不再以颜色呈现三角形,而是以黑色呈现三角形 float4 mycol = float4(1.0f, 1.0f, 0.0f, 1.0f); float4 VShader(float4 position : POSITION) : SV_POSITION { return position; } float4 PShad

我完全是HLSL的初学者,并且有一些呈现平面三角形的示例代码。如果我尝试将PShader函数从返回显式颜色的函数替换为下面引用全局变量(mycl)的函数,那么它将不再以颜色呈现三角形,而是以黑色呈现三角形

float4 mycol = float4(1.0f, 1.0f, 0.0f, 1.0f);

float4 VShader(float4 position : POSITION) : SV_POSITION
{
        return position;
}

float4 PShader(float4 position : SV_POSITION) : SV_Target
{
    return mycol; // float4(1.0f, 0.0f, 1.0f, 1.0f);
}
我试过阅读HLSL规范,但觉得我可能遗漏了一些明显的东西

感谢您的帮助,
GMan

如果使用分离的着色器,则全局变量可能已更改值。。。尝试向前传递变量:

float4 mycol = float4(1.0f, 1.0f, 0.0f, 1.0f);

struct VS_OUT
{
    float4 pos : SV_Position;
    float4 color : COLOR0;
}

VS_OUT VShader(float4 position : POSITION)
{
    VS_OUT ret;
    ret.pos = position;
    ret.color = mycol; // forward variable
    return ret; 
}

float4 PShader(VS_OUT input) : SV_Target
{
    return input.color;
}

我相信在directx中只能使用常量缓冲区传递全局值。您需要在C++代码中启动常数缓冲区:

    D3D11_BUFFER_DESC constDesc;
ZeroMemory( &constDesc, sizeof( constDesc ) );
constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
constDesc.ByteWidth = sizeof(XMFLOAT4);
constDesc.Usage = D3D11_USAGE_DEFAULT;

d3dResult = d3dDevice_->CreateBuffer( &constDesc, 0, &shaderCB_ );

if( FAILED( d3dResult ) )
{
    return false;
}
然后在渲染代码中:

XMFLOAT4 mycol = XMFLOAT4(1,1,0,1);
d3dContext_->UpdateSubresource(shaderCB_, 0, 0, &mycol, 0, 0);
在着色器中:

cbuffer colorbuf : register(b0)
{
    float4 mycol;
};