2013-11-03 1 views
1

Это в вычислительном шейдере, но я думаю, что это общая вещь hlsl. Вот отрывок:Texture2D как параметр функции

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; 
} 

Любые вызовы на Получ дать мне:

ошибка X3017: «Получить»: не может неявно преобразовать из «сопзЬ Texture2D» к «Texture2D»

+0

Просто быстро догадались, что вы попробовали 'float4 Get (const Texture2D source, float x, float y)'? – Gnietschow

+0

Как вы называете 'Get()'? С какими типами параметров? – Drop

+1

Где вы назвали эту функцию? без вызывающего кода трудно определить основную причину. – zdd

ответ

0

Я предполагаю, что ваш отсутствие кодовых меток приводит к тому, что угловые скобки опущены. Ошибка должна быть error X3017: 'Get': cannot implicitly convert from 'const Texture2D<float>' to 'Texture2D<float4>' вправо? Это имеет смысл, так как Texture2D неявно Texture2D<float4> (4-канальный), а ваши глобальные текстуры: Texture2D<float> (одноканальный). Компилятор не расширяет типы неявно (хотя он будет усекать с предупреждением). Это независимо от того, является ли это Texture2D или простой старый float4. Чтобы исправить свой код, вы должны убедиться, что исходные текстуры действительно одноканальны, а затем сопоставить аргумент функции (т. Е. Texture2D<float> source).

 Смежные вопросы

  • Нет связанных вопросов^_^