| /* | |
| * Copyright 2026 Rive | |
| */ | |
| #ifdef @VERTEX | |
| ATTR_BLOCK_BEGIN(Attrs) | |
| ATTR(0, packed_float3, @a_triangleVertex); | |
| ATTR_BLOCK_END | |
| VERTEX_MAIN(@drawVertexMain, Attrs, attrs, _vertexID, _instanceID) | |
| { | |
| ATTR_UNPACK(_vertexID, attrs, @a_triangleVertex, packed_float3); | |
| float4 pos = RENDER_TARGET_COORD_TO_CLIP_COORD(@a_triangleVertex.xy); | |
| EMIT_VERTEX(pos); | |
| } | |
| #endif | |
| #ifdef @FRAGMENT | |
| PLS_BLOCK_BEGIN | |
| #ifndef @FIXED_FUNCTION_COLOR_OUTPUT | |
| PLS_DECL4F(COLOR_PLANE_IDX, colorBuffer); | |
| #endif | |
| PLS_DECL4F(CLIP_PLANE_IDX, clipBuffer); | |
| PLS_BLOCK_END | |
| CLOCKWISE_ATOMIC_PLS_MAIN(@drawFragmentMain) | |
| { | |
| // srcOver blend is enabled: emit an alpha value of 1 to overwrite the | |
| // existing clip. | |
| PLS_STORE4F(clipBuffer, make_half4(.0, .0, .0, 1.)); | |
| // srcOver blend is enabled: emit a color of 0 to make sure the framebuffer | |
| // remains unchanged. | |
| EMIT_CLOCKWISE_ATOMIC_PLS(make_half4(.0)); | |
| } | |
| #endif // FRAGMENT |