2017-12-24 22 views
0

저는 결과를 변경해서는 안되는 라인을 제외하고 거의 모든 코드를 공유하는 두 개의 셰이더를 만들었습니다. 즉 코드의 공유 부분 :HLSL 셰이더가 작동하지 않습니다.

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

cbuffer LIGHT : register (cb0) 
{ 
    float4 light_direction; 
    float4 light_color; 

}; 

cbuffer TRANSFORMATION_MATRIX : register (cb1) 
{ 
    float4x4 transformationMatrix; 
}; 

cbuffer CAM_PROJ_MATRIX : register (cb2) 
{ 
    float4x4 cameraProjectionMatrix; 
}; 

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

버텍스 쉐이더가 변경 부분 :

VOut VShader(float3 position : POSITION, float4 color : COLOR) 
{ 
    VOut output; 

    float4 rpos = mul(transformationMatrix,float4(position, 1.0)); 

    output.position = mul(cameraProjectionMatrix, rpos); 

    *output.ld1 = light_direction;* 

    output.color = color; 

    return output; 
} 

이 사람은 잘 작동하지만 내가 별표 사이의 라인을 변경하는 경우 (분명히 별표 없습니다 실제 코드에서) :

output.ld1 = float4(1.0,1.0,1.0,1.0); 

그런 다음 화면에 아무 것도 표시되지 않습니다. 이게 어때요?

+0

''LD''는 표준 의미론이 아니므로 의미가 없습니다. 유효한 인터 스테이지 인터폴 레이터를 얻으려면''TEXCOORD0''을 사용해보십시오. –

답변

0
struct VOut 
    { 
     float4 position : SV_POSITION; 
     float4 color : COLOR; 
     float4 ld1 : TEXCOORD0; 
    }; 
+1

이 코드 스 니펫이 해결책 일 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 정말로 도움이됩니다. 앞으로 독자의 질문에 답하고 있으며 코드 제안의 이유를 알지 못할 수도 있습니다. – Alexander