@@ -234,6 +234,53 @@ internal extension VertexShader {
234234 } ( )
235235}
236236
237+ @MainActor
237238internal extension FragmentShader {
238-
239+ static let userInterfaceClipRectTextureSample : FragmentShader = {
240+ let fsh = FragmentShader ( )
241+ let viewOrigin : Vec2 = fsh. uniforms [ " ViewOrigin " ]
242+ let viewSize : Vec2 = fsh. uniforms [ " ViewSize " ]
243+ let minX : Scalar = viewOrigin. x
244+ let maxX : Scalar = minX + viewSize. width
245+ let minY : Scalar = viewOrigin. y
246+ let maxY : Scalar = minY + viewSize. height
247+ let inBounds : Scalar = ( fsh. input. position. x >= minX && fsh. input. position. x < maxX && fsh. input. position. y >= minY && fsh. input. position. y < maxY)
248+ let opacity : Scalar = fsh. uniforms [ " opacity " ]
249+ let sample = fsh. channel ( 0 ) . texture. sample (
250+ at: fsh. input [ " texCoord0 " ]
251+ )
252+ fsh. output. color = Vec4 ( sample. rgb, sample. a * opacity) . discard ( if: inBounds == false )
253+ return fsh
254+ } ( )
255+ static let userInterfaceClipRectTintColor : FragmentShader = {
256+ let fsh = FragmentShader ( )
257+ let viewOrigin : Vec2 = fsh. uniforms [ " ViewOrigin " ]
258+ let viewSize : Vec2 = fsh. uniforms [ " ViewSize " ]
259+ let minX : Scalar = viewOrigin. x
260+ let maxX : Scalar = minX + viewSize. width
261+ let minY : Scalar = viewOrigin. y
262+ let maxY : Scalar = minY + viewSize. height
263+ let inBounds : Scalar = ( fsh. input. position. x >= minX && fsh. input. position. x < maxX && fsh. input. position. y >= minY && fsh. input. position. y < maxY)
264+ let opacity : Scalar = fsh. uniforms [ " opacity " ]
265+ let tintColor : Vec4 = fsh. channel ( 0 ) . color
266+ fsh. output. color = Vec4 ( tintColor. rgb, tintColor. a * opacity) . discard ( if: inBounds == false )
267+ return fsh
268+ } ( )
269+ static let userInterfaceClipRectTextureTemplateTintColor : FragmentShader = {
270+ let fsh = FragmentShader ( )
271+ let viewOrigin : Vec2 = fsh. uniforms [ " ViewOrigin " ]
272+ let viewSize : Vec2 = fsh. uniforms [ " ViewSize " ]
273+ let minX : Scalar = viewOrigin. x
274+ let maxX : Scalar = minX + viewSize. width
275+ let minY : Scalar = viewOrigin. y
276+ let maxY : Scalar = minY + viewSize. height
277+ let inBounds : Scalar = ( fsh. input. position. x >= minX && fsh. input. position. x < maxX && fsh. input. position. y >= minY && fsh. input. position. y < maxY)
278+ let opacity : Scalar = fsh. uniforms [ " opacity " ]
279+ let tintColor : Vec4 = fsh. channel ( 0 ) . color
280+ let sample = fsh. channel ( 0 ) . texture. sample (
281+ at: fsh. input [ " texCoord0 " ]
282+ )
283+ fsh. output. color = Vec4 ( tintColor. rgb, opacity * tintColor. a * sample. a) . discard ( if: inBounds == false )
284+ return fsh
285+ } ( )
239286}
0 commit comments