首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Texture2D作为函数参数

Texture2D作为函数参数
EN

Stack Overflow用户
提问于 2013-11-03 04:53:47
回答 1查看 3.8K关注 0票数 1

这是在一个电脑着色器,但我认为这是一个一般的hlsl的东西。这里有一个片段:

代码语言:javascript
复制
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:“Get”:无法隐式地将“const Texture2D”转换为“Texture2D”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 18:38:46

我假设您缺少代码标记导致省略了尖括号。错误应该是error X3017: 'Get': cannot implicitly convert from 'const Texture2D<float>' to 'Texture2D<float4>'对吗?这是有意义的,因为Texture2D是隐式的Texture2D<float4> (4通道),而您的全局纹理是Texture2D<float> (单通道)。编译器不会隐式展开类型(尽管它会截断并带有警告)。无论是Texture2D还是普通的旧float4,都是如此。要修复您的代码,您应该确保源纹理是真正的单通道,然后使函数参数匹配(即Texture2D<float> source)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19749959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档