我正在使用点法来绘制正方形。
commandEncoder.drawPrimitives(type: .point, vertexStart: 0, vertexCount:1 )
通过这个,我传递了屏幕尺寸的纹理。(可绘制尺寸)。我可以在着色器中绘制如下。
fragment half4 fragment_chalk(VertexOutChalk params[[stage_in]],
texture2d<half>texture4 [[texture(0)]],
float2 texcoord [[ point_coord ]]
)
{
constexpr sampler defaultSampler;
half4 alphaSample = texture4.sample(defaultSampler,texcoord) *half4(0.8666667, 0.101960786, 0.35686275,0.7);
return alphaSample;
}
但我的需要是不要绘制完整的纹理。我想绘制与特定正方形相对应的部分。对于纹理采样,我需要传递与屏幕相关的坐标。我想更改采样的坐标。我怎样才能做到这一点
假设特定的 Square 位于 normalized 坐标中,且格式与 NSRect (origin.x, origin.y, size.width, size.height) 相同,那么您需要将其传递给 params,并像这样修改 texcoord这个:
texcoord = texcoord * params.PartSquare.size + FullTextureSize * params.PartSquare.origin;