struct DrawCommand { uint vertex_count; uint instance_count; uint fist_vertex; uint first_instance; }; layout(std430, buffer_reference) buffer DrawCommandList { DrawCommand d[]; }; struct DispatchCommand { uint x; uint y; uint z; }; struct Symbol { float top; float left; float width; float height; float advance; }; layout(std430, buffer_reference) buffer SymbolList { Symbol s[]; }; struct Font { SymbolList symbols; uint num_symbols; uint width; uint height; }; layout(std430, buffer_reference) buffer FontList { Font f[]; }; struct String { vec2 pos; vec4 color; float size; uint offset; uint len; }; layout(std430, buffer_reference) readonly buffer StringList { String s[]; }; layout(std430, buffer_reference) readonly buffer CodeList { uint c[]; }; struct Drawable { vec2 pos; vec2 size; vec4 color; uint type; uint code; }; layout(std430, buffer_reference) readonly buffer DrawableList { Drawable d[]; }; layout(std430, buffer_reference) readonly buffer Container { vec2 pos; vec2 size; }; layout(std430, buffer_reference) readonly buffer Layer { StringList strings; CodeList codes; DrawableList drawables; DrawCommand draw; DispatchCommand dispatch; uint font_index; uint max_drawables; uint max_codes; uint max_strings; uint num_drawables; Container container; }; layout(std430, buffer_reference) buffer Context { FontList fonts; vec2 scale; };