金属着色器 stage_in

马克·刘

我从这里下载了一个简单的 Metal 着色器:https : //medium.com/@MalikAlayli/metal-with-scenekit-create-your-first-shader-2c4e4e983300我通过添加clip_distanceVertexOut. 如果clip_distance是浮点数,一切正常由于我需要 6 个剪切平面,因此我尝试将其定义为 vector [[clip_distance]][6]但是,Xcode 抱怨该textureSamplerFragment例程,说“类型 'VertexOut' 对属性 'stage_in' 无效”。我是 Metal 着色器的新手,不知道如何修复错误。

谁能给我一个方向?先感谢您。

#include <metal_stdlib>
using namespace metal;
#include <SceneKit/scn_metal>

struct NodeBuffer {
    float4x4 modelTransform;
    float4x4 modelViewProjectionTransform;
    float4x4 modelViewTransform;
    float4x4 normalTransform;
    float2x3 boundingBox;
};

struct VertexInput {
    float3 position  [[attribute(SCNVertexSemanticPosition)]];
    float2 uv [[attribute(SCNVertexSemanticTexcoord0)]];
};


struct VertexOut {
    float4 position [[position]];
    float clip_distance [[clip_distance]][6];
    float2 uv;
};

vertex VertexOut textureSamplerVertex(VertexInput in [[ stage_in ]], constant NodeBuffer& scn_node [[buffer(1)]]) {
    VertexOut out;
    out.position = scn_node.modelViewProjectionTransform * float4(in.position, 1.0);
    out.clip_distance[0] = 1.5 - in.position.x;
    out.uv = in.uv;
    return out;
}

fragment float4 textureSamplerFragment(VertexOut out [[ stage_in ]], texture2d<float, access::sample> customTexture [[texture(0)]]) {
    constexpr sampler textureSampler(coord::normalized, filter::linear, address::repeat);
    return customTexture.sample(textureSampler, out.uv );
}
哈米德·尤西弗利

基于此金属着色语言规范

clip_distance属性数据类型应该是floatfloat[n]n - 必须在编译时知道。您应该将着色器逻辑更改为相应的要求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章