• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#include <metal_stdlib>
2#include <simd/simd.h>
3using namespace metal;
4struct Inputs {
5};
6struct Outputs {
7    float4 sk_Position [[position]];
8    float2 vcoord_Stage0 [[user(locn1)]];
9    float sk_PointSize [[point_size]];
10};
11vertex Outputs vertexMain(Inputs _in [[stage_in]], uint sk_VertexID [[vertex_id]], uint sk_InstanceID [[instance_id]]) {
12    Outputs _out;
13    (void)_out;
14    int x = sk_InstanceID % 200;
15    int y = sk_InstanceID / 200;
16    int ileft = (sk_InstanceID * 929) % 17;
17    int iright = (ileft + 1) + (sk_InstanceID * 1637) % (17 - ileft);
18    int itop = (sk_InstanceID * 313) % 17;
19    int ibot = (itop + 1) + (sk_InstanceID * 1901) % (17 - itop);
20    float outset = 0.03125;
21    outset = 0 == (x + y) % 2 ? -outset : outset;
22    float l = float(ileft) / 16.0 - outset;
23    float r = float(iright) / 16.0 + outset;
24    float t = float(itop) / 16.0 - outset;
25    float b = float(ibot) / 16.0 + outset;
26    float2 vertexpos;
27    vertexpos.x = float(x) + (0 == sk_VertexID % 2 ? l : r);
28    vertexpos.y = float(y) + (0 == sk_VertexID / 2 ? t : b);
29    _out.vcoord_Stage0.x = float(0 == sk_VertexID % 2 ? -1 : 1);
30    _out.vcoord_Stage0.y = float(0 == sk_VertexID / 2 ? -1 : 1);
31    _out.sk_Position = float4(vertexpos.x, vertexpos.y, 0.0, 1.0);
32    return _out;
33}
34