gpt4 book ai didi

swift - Metal 着色器 stage_in

转载 作者:行者123 更新时间:2023-12-04 07:22:16 25 4
gpt4 key购买 nike

我从这里下载了一个简单的 Metal 着色器:https://medium.com/@MalikAlayli/metal-with-scenekit-create-your-first-shader-2c4e4e983300 .我通过添加 clip_distance 对其进行了修改至 VertexOut .如果 clip_distance 一切正常是一个浮点数。由于我需要 6 个裁剪平面,我尝试将其定义为向量 [[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 );
}

最佳答案

基于此 Metal Shading Language Specification :
clip_distance 属性数据类型应该是 float float [n] , - 必须在编译时知道。您应该将着色器逻辑更改为相应的要求。

关于swift - Metal 着色器 stage_in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68416728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com