Added hexagon highlight pipeline
parent
9abfd82cab
commit
56f686273a
@ -0,0 +1,8 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) out vec4 color;
|
||||
layout(location = 0) flat in vec4 color_in;
|
||||
|
||||
void main() {
|
||||
color = color_in;
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
#version 450
|
||||
#extension GL_EXT_buffer_reference : require
|
||||
|
||||
#include "hex_common.glsl"
|
||||
|
||||
layout(location = 0) flat out vec4 color;
|
||||
|
||||
void main() {
|
||||
int hex_index;
|
||||
Region region;
|
||||
float raise;
|
||||
if(gl_InstanceIndex == 0) {
|
||||
hex_index = pc.context.clicked_hex;
|
||||
region = pc.context.regions[pc.context.clicked_region];
|
||||
color = vec4(0.3, 0.3, 0.3, 0.3);
|
||||
raise = 0.015;
|
||||
} else {
|
||||
hex_index = pc.context.hovered_hex;
|
||||
region = pc.context.regions[pc.context.hovered_region];
|
||||
color = vec4(0.8, 0.8, 0.8, 0.3);
|
||||
raise = 0.01;
|
||||
}
|
||||
|
||||
vec2 region_qr = vec2(region.q, region.r);
|
||||
|
||||
vec4 region_pos = vec4(0, 0, 0, 0);
|
||||
region_pos.x = (region_qr.x+region_qr.y/2)*region_width - region_qr.y*x/2;
|
||||
region_pos.z = 0.75*region_qr.y*region_height + 0.25*region_qr.y*z + 0.5*region_qr.x*z;
|
||||
|
||||
float radius = 0;
|
||||
float ring = 0;
|
||||
int side = 0;
|
||||
if(hex_index != 0) {
|
||||
radius = floor(0.5 + sqrt(12*hex_index-3)/6);
|
||||
ring = hex_index - (3*radius*radius - 3*radius + 1);
|
||||
side = int(floor(ring/(radius)));
|
||||
}
|
||||
|
||||
vec4 position = vertices[indices[gl_VertexIndex]]
|
||||
+ (starts[side]*radius)
|
||||
+ (direction[side]*(ring-(radius*side)))
|
||||
+ region_pos;
|
||||
|
||||
if(gl_VertexIndex % 3 == 0) {
|
||||
position.y = (region.hexes[hex_index].heights[0] +
|
||||
region.hexes[hex_index].heights[1] +
|
||||
region.hexes[hex_index].heights[2] +
|
||||
region.hexes[hex_index].heights[3] +
|
||||
region.hexes[hex_index].heights[4] +
|
||||
region.hexes[hex_index].heights[5])/6;
|
||||
} else {
|
||||
position.y = region.hexes[hex_index].heights[indices[gl_VertexIndex]-1];
|
||||
}
|
||||
|
||||
position.y += raise;
|
||||
|
||||
gl_Position = pc.context.proj * pc.context.view * position;
|
||||
}
|
Loading…
Reference in New Issue