shaders.h

  1#include <simd/simd.h>
  2
  3typedef struct {
  4  vector_float2 viewport_size;
  5} GPUIUniforms;
  6
  7typedef enum {
  8  GPUIQuadInputIndexVertices = 0,
  9  GPUIQuadInputIndexQuads = 1,
 10  GPUIQuadInputIndexUniforms = 2,
 11} GPUIQuadInputIndex;
 12
 13typedef struct {
 14  vector_float2 origin;
 15  vector_float2 size;
 16  vector_uchar4 background_color;
 17  float border_top;
 18  float border_right;
 19  float border_bottom;
 20  float border_left;
 21  vector_uchar4 border_color;
 22  float corner_radius_top_left;
 23  float corner_radius_top_right;
 24  float corner_radius_bottom_right;
 25  float corner_radius_bottom_left;
 26} GPUIQuad;
 27
 28typedef enum {
 29  GPUIShadowInputIndexVertices = 0,
 30  GPUIShadowInputIndexShadows = 1,
 31  GPUIShadowInputIndexUniforms = 2,
 32} GPUIShadowInputIndex;
 33
 34typedef struct {
 35  vector_float2 origin;
 36  vector_float2 size;
 37  float corner_radius_top_left;
 38  float corner_radius_top_right;
 39  float corner_radius_bottom_right;
 40  float corner_radius_bottom_left;
 41  float sigma;
 42  vector_uchar4 color;
 43} GPUIShadow;
 44
 45typedef enum {
 46  GPUISpriteVertexInputIndexVertices = 0,
 47  GPUISpriteVertexInputIndexSprites = 1,
 48  GPUISpriteVertexInputIndexViewportSize = 2,
 49  GPUISpriteVertexInputIndexAtlasSize = 3,
 50} GPUISpriteVertexInputIndex;
 51
 52typedef enum {
 53  GPUISpriteFragmentInputIndexAtlas = 0,
 54} GPUISpriteFragmentInputIndex;
 55
 56typedef struct {
 57  vector_float2 origin;
 58  vector_float2 target_size;
 59  vector_float2 source_size;
 60  vector_float2 atlas_origin;
 61  vector_uchar4 color;
 62  uint8_t compute_winding;
 63} GPUISprite;
 64
 65typedef enum {
 66  GPUIPathAtlasVertexInputIndexVertices = 0,
 67  GPUIPathAtlasVertexInputIndexAtlasSize = 1,
 68} GPUIPathAtlasVertexInputIndex;
 69
 70typedef struct {
 71  vector_float2 xy_position;
 72  vector_float2 st_position;
 73  vector_float2 clip_rect_origin;
 74  vector_float2 clip_rect_size;
 75} GPUIPathVertex;
 76
 77typedef enum {
 78  GPUIImageVertexInputIndexVertices = 0,
 79  GPUIImageVertexInputIndexImages = 1,
 80  GPUIImageVertexInputIndexViewportSize = 2,
 81  GPUIImageVertexInputIndexAtlasSize = 3,
 82} GPUIImageVertexInputIndex;
 83
 84typedef enum {
 85  GPUIImageFragmentInputIndexAtlas = 0,
 86} GPUIImageFragmentInputIndex;
 87
 88typedef struct {
 89  vector_float2 origin;
 90  vector_float2 target_size;
 91  vector_float2 source_size;
 92  vector_float2 atlas_origin;
 93  float border_top;
 94  float border_right;
 95  float border_bottom;
 96  float border_left;
 97  vector_uchar4 border_color;
 98  float corner_radius_top_left;
 99  float corner_radius_top_right;
100  float corner_radius_bottom_right;
101  float corner_radius_bottom_left;
102  uint8_t grayscale;
103} GPUIImage;
104
105typedef enum {
106  GPUISurfaceVertexInputIndexVertices = 0,
107  GPUISurfaceVertexInputIndexSurfaces = 1,
108  GPUISurfaceVertexInputIndexViewportSize = 2,
109  GPUISurfaceVertexInputIndexAtlasSize = 3,
110} GPUISurfaceVertexInputIndex;
111
112typedef enum {
113  GPUISurfaceFragmentInputIndexYAtlas = 0,
114  GPUISurfaceFragmentInputIndexCbCrAtlas = 1,
115} GPUISurfaceFragmentInputIndex;
116
117typedef struct {
118  vector_float2 origin;
119  vector_float2 target_size;
120  vector_float2 source_size;
121} GPUISurface;
122
123typedef enum {
124  GPUIUnderlineInputIndexVertices = 0,
125  GPUIUnderlineInputIndexUnderlines = 1,
126  GPUIUnderlineInputIndexUniforms = 2,
127} GPUIUnderlineInputIndex;
128
129typedef struct {
130  vector_float2 origin;
131  vector_float2 size;
132  float thickness;
133  vector_uchar4 color;
134  uint8_t squiggly;
135} GPUIUnderline;