2009-08-15 6 views
1
float4x4 matInvViewProj; 

float4 GetPointPosition(float2 Tex0) 
{ 
    float4 PosImageSpace; 
    PosImageSpace.xy = float2(Tex0*2-1); 
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r; 
    return mul(PosImageSpace,matInvViewProj); 
} 

그건 내 pixelshader의 일부입니다. 컴파일러 오류가있는 이유는 무엇입니까? ps_3_0. 에 컴파일 중입니다. mul()이 없으면 컴파일됩니다.HLSL 컴파일러 오류?

+0

어떤 오류가 발생합니까? 여기에서 잘 컴파일됩니다. – Tchami

+0

는 C : \ Dokumente 싶게 Einstellungen \ 관리자 \ 바탕 화면 \ 프로그램 \ 3D \ Litte3DEngine2 \ 빈 \ 릴리스 \ 쉐이더 \ Directional_Lighting_Shader_Default.fx은 (91) : ID3DXEffectCompiler :: CompileEffect은 : 표현을 ID3DXEffectCompiler를 컴파일 오류가 발생했습니다 컴파일 – gufftan

+0

라인을 실패 (91) : PixelShader = PS_3_0을 컴파일하십시오(); – gufftan

답변

1

아, 맞 겠죠. w componenet이 초기화되지 않았으므로 mul() 함수는 실패합니다.

다음과 같이 당신이 당신의 벡터를 초기화 할 수 그것을 방지하려면 : 난 아직도 디버그 모드에서 FXC를 사용하여 쉐이더를 컴파일하는 시도를 권장합니다

float4 PosImageSpace = (float4)0; 

, 당신이 그런 식으로 더 나은 오류 설명을 얻을 수있다. .fx 파일을 마우스 오른쪽 단추로 클릭하고 전체 솔루션/프로젝트를 컴파일 할 필요없이 컴파일 할 수있는 사용자 정의 빌드 단계를 설정할 수도 있습니다.

은 디버그 구성에 FXC를 사용하여 쉐이더를 컴파일하려면 :

fxc /Od /Zi /T fx_3_0 /Fo Directional_Lighting_Shader_Defaul.fxo Directional_Lighting_Shader_Defaul.fx 

당신은 C에서 FXC 찾을 수 있습니다 : 사용자 지정 빌드를 설정하려면 \ 프로그램 파일 \ 마이크로 소프트 다이렉트 X SDK \ 유틸리티 \ bin에

을 Visual Studio의 단계 check this sample from the DirectX SDKcheck this site

또한 fxc 사용에 대해서는 this article on msdn을 확인하십시오.

이상해
0

: 나는이 줄을 추가 :

PosImageSpace.w = 0.0f; 

을 지금은 잘 컴파일합니다. 그것이 지금의 모습입니다.

float4x4 matInvViewProj; 

float4 GetPointPosition(float2 Tex0) 
{ 
    float4 PosImageSpace; 
    PosImageSpace.xy = float2(Tex0*2-1); 
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r; 
    PosImageSpace.w = 0.0f; 
    return mul(PosImageSpace,matInvViewProj); 
} 
+0

좀 더 많은 정보를 가지고 대답을 업데이트했습니다. 그것은 모든 의견을 쓰는 것보다 쉽습니다 :) – Tchami