roleplay/client/shader/hex_common.glsl

128 lines
2.3 KiB
GLSL

struct Hex {
float heights[6];
uint colors[7];
};
layout(std430, buffer_reference) readonly buffer Region {
int q;
int r;
int y;
uint map;
Hex hexes[];
};
struct Highlight {
vec4 color;
uint region;
uint hex;
float offset;
};
layout(std430, buffer_reference) readonly buffer HighlightList {
Highlight h[];
};
struct Point {
vec4 color;
uint region;
uint hex;
uint vertex;
float size;
float offset;
};
layout(std430, buffer_reference) readonly buffer PointList {
Point p[];
};
struct Ray {
vec4 start;
vec4 end;
vec4 color;
};
layout(std430, buffer_reference) readonly buffer RayList {
Ray r[];
};
layout(std430, buffer_reference) readonly buffer HexContext {
mat4 proj;
mat4 view;
uint current_map;
RayList rays;
PointList points;
HighlightList highlights;
Region regions[];
};
layout(std430, push_constant) uniform PushConstant {
HexContext context;
float time;
} pc;
#define PI 3.1415926535897932384626433832795
const float w = 0.5;
const float x = 0.75;
const float z = sqrt(3.0)/2.0;
const int region_size = 10;
const float region_diameter = 2*region_size-1;
const float region_width = x*region_diameter;
const float region_height = z*region_diameter;
const int region_hex_count = 3*region_size*(region_size-1)+1;
const vec4 vertices[] = {
vec4(0, 0, 0, 1),
vec4(w*cos(0*PI/3), 0, w*sin(0*PI/3), 1),
vec4(w*cos(1*PI/3), 0, w*sin(1*PI/3), 1),
vec4(w*cos(2*PI/3), 0, w*sin(2*PI/3), 1),
vec4(w*cos(3*PI/3), 0, w*sin(3*PI/3), 1),
vec4(w*cos(4*PI/3), 0, w*sin(4*PI/3), 1),
vec4(w*cos(5*PI/3), 0, w*sin(5*PI/3), 1),
};
const uint indices[] = {
0, 2, 1,
0, 3, 2,
0, 4, 3,
0, 5, 4,
0, 6, 5,
0, 1, 6,
};
const vec4 starts[] = {
vec4( 0, 0, z, 0), // 0, -1
vec4(-x, 0, z/2, 0), // -1, 0
vec4(-x, 0, -z/2, 0), // -1, +1
vec4( 0, 0, -z, 0), // 0, +1
vec4( x, 0, -z/2, 0), // +1, 0
vec4( x, 0, z/2, 0), // +1, -1
};
const vec2 start_coords[] = {
vec2(0, -1),
vec2(-1, 0),
vec2(-1, 1),
vec2(0, 1),
vec2(1, 0),
vec2(1, -1),
};
const vec4 direction[] = {
vec4(-x, 0, -z/2, 0),
vec4( 0, 0, -z, 0),
vec4( x, 0, -z/2, 0),
vec4( x, 0, z/2, 0),
vec4( 0, 0, z, 0),
vec4(-x, 0, z/2, 0),
};
const vec2 direction_coords[] = {
vec2(-1, 1),
vec2(0, 1),
vec2(1, 0),
vec2(1, -1),
vec2(0, -1),
vec2(-1, 0),
};