2013-11-03 3 views
1

이것은 계산 쉐이더에 있지만, 일반적인 hlsl 일이라고 생각합니다.Texture2D as function parameter

Texture2D<float> Ground : register(t1); 
Texture2D<float> Water : register(t2); 

SamplerState LinearSampler 
{ 
    Filter = MIN_MAG_MIP_LINEAR; 
    AddressU = Clamp; 
    AddressV = Clamp; 
}; 

float4 Get(Texture2D source, float x, float y) 
{ 
    return source.SampleLevel(LinearSampler, float2(x * dimension.z, y * dimension.w), 0); 
} 

[numthreads(32, 32, 1)] 
void main(uint3 threadID : SV_DispatchThreadID, uint3 groupThreadID : SV_GroupThreadID, uint3 blockID : SV_GroupID) 
{ 
    float4 g = GetGround(Ground, 0, 0); 

    Output[threadID.xy] = g.z; 
} 

Get 메소드에 대한 모든 호출하는 것은 나에게 줄 :

오류 X3017 : 여기 단편이다 '가져 오기'암시 'Texture2D'가

+0

'float4 Get (const Texture2D source, float x, float y)'을 시도해 보셨습니까? – Gnietschow

+0

어떻게 Get()을 호출합니까? 매개 변수 유형은 무엇입니까? – Drop

+1

어디에서이 함수를 호출 했습니까? 호출 코드가 없으면 근본 원인을 식별하기가 어렵습니다. – zdd

답변

0

내가 가정에 'const를 Texture2D'에서 변환 할 수 있습니다 코드 태그가 없어져 꺾쇠 괄호가 생략되었습니다. 오류는 error X3017: 'Get': cannot implicitly convert from 'const Texture2D<float>' to 'Texture2D<float4>'이어야합니다. 이는 Texture2D이 암시 적으로 Texture2D<float4> (4 채널)이고 전체 질감이 Texture2D<float> (단일 채널)이기 때문에 의미가 있습니다. 컴파일러는 암시 적으로 형식을 확장하지 않습니다 (경고와 함께 잘립니다). 이것은 그것이 Texture2D인지 평범한 오래된 float4인지에 관계없이 적용됩니다. 코드를 수정하려면 소스 텍스처가 실제로 단일 채널인지 확인한 다음 함수 인수를 일치시켜야합니다 (즉, Texture2D<float> source).