| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -12,6 +12,9 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#include "vulkan/vulkan_core.h"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#include "pthread.h"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#include <math.h>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#include <stdlib.h>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#define max(a, b) ((a > b) ? a : b)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				typedef struct ClientContextStruct {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  GLFWwindow* window;
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -21,6 +24,7 @@ typedef struct ClientContextStruct {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  uint32_t clicked_container;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  uint32_t clicked_element;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  int32_t  clicked_hex[2];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  vec2    cursor;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -62,45 +66,14 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .length = 0,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .font = 0,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .pos = {110, 138},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .size = 32,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .color = {1.0, 1.0, 1.0, 1.0},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .offset = 20,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .length = 1,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .font = 0,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .pos = {210, 138},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .size = 32,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .color = {1.0, 1.0, 1.0, 1.0},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .offset = 21,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .length = 1,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .font = 0,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  GPUDrawable drawables[] = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .pos = {100, 100},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .size = {50, 50},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .color = {1, 0, 0, 1},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .type = 0,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .id = 1,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .pos = {200, 100},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .size = {50, 50},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .color = {0, 1, 0, 1},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .type = 0,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      .id = 2,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  GPUDrawable drawables[] = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  LayerInput layer = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    .strings = strings,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    .num_strings = sizeof(strings)/sizeof(GPUString),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    .max_codes = 24,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    .max_codes = 50,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    .drawables = drawables,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    .num_drawables = sizeof(drawables)/sizeof(GPUDrawable),
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -114,57 +87,30 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  create_container(&container, &context->render, &context->ui);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  map_string("1234", context->ui.containers[0].layers[0].codes_buffer, 20, 0, &context->ui);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  VK_RESULT(add_transfers(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        &context->ui.containers[0].layers[0].codes_buffer[20],
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        context->ui.containers[0].layers[0].codes,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        20*sizeof(uint32_t),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        4*sizeof(uint32_t),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        &context->render));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  HexRegion* regions[MAX_LOADED_REGIONS];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  uint32_t colors[] = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0xFF0000FF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x00FF00FF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x00FF00FF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x00FF00FF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x00FF00FF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x00FF00FF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x00FF00FF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    0x0000FFFF,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  GPUHex* temp_hexes = malloc(sizeof(GPUHex)*REGION_HEX_COUNT);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  uint32_t region = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  for(int32_t q = -5; q < 5; q++) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    for(int32_t r = -5; r < 5; r++) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  for(int32_t q = -10; q < 10; q++) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    for(int32_t r = -10; r < 10; r++) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      VK_RESULT(create_hex_region(q, r, ®ions[region], &context->hex, &context->render));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      for(uint32_t i = 0; i < REGION_HEX_COUNT; i++) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for(uint32_t h = 0; h < 6; h++) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          temp_hexes[i].color[h] = colors[r % (sizeof(colors)/sizeof(uint32_t))];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          temp_hexes[i].height[h] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          regions[region]->data[i].color[h] = colors[(q+r+50) % (sizeof(colors)/sizeof(uint32_t))];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          regions[region]->data[i].height[h] = (float)i/REGION_HEX_COUNT; 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        temp_hexes[i].color[6] = colors[r % (sizeof(colors)/sizeof(uint32_t))];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        regions[region]->data[i].color[6] = colors[(q+r+50) % (sizeof(colors)/sizeof(uint32_t))];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      VK_RESULT(add_transfer(temp_hexes, regions[region]->region, offsetof(GPUHexRegion, hexes), sizeof(GPUHex)*REGION_HEX_COUNT, 0, &context->render));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      VK_RESULT(add_transfer(®ions[region]->data, regions[region]->region, offsetof(GPUHexRegion, hexes), sizeof(GPUHex)*REGION_HEX_COUNT, 0, &context->render));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      region++;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  free(temp_hexes);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->position[0] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->position[1] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->position[2] = 0;
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -178,7 +124,7 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->key_spin[1] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->cur_spin[0] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->cur_spin[1] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->distance = 50;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->distance = 25;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->zoom = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->camera_mode = false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  context->key_spin_speed = 1.0;
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -188,15 +134,18 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  //
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  uint32_t* mapped_codes = context->ui.containers[0].layers[0].codes_buffer;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  GPUString* mapped_string = context->ui.containers[0].layers[0].strings_buffer;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  char str[21];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  char str[51];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  double last_frame_time = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  int frame = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  while(glfwWindowShouldClose(context->window) == 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    double frame_time = glfwGetTime();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    double delta_time = (frame_time - last_frame_time);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    context->clicked_element   = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    context->clicked_container = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    context->clicked_hex[0] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    context->clicked_hex[1] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    context->zoom = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    context->cur_spin[0] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    context->cur_spin[1] = 0;
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -205,8 +154,7 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if(context->key_spin[0] != 0 || context->key_spin[1] != 0 ||
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				       context->zoom != 0 ||
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				       context->cur_spin[0] != 0 || context->cur_spin[1] != 0 ||
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				       last_frame_time == 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				       context->cur_spin[0] != 0 || context->cur_spin[1] != 0 || frame == 1) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      context->rotation[0] += (float)context->key_spin[0]*delta_time*context->key_spin_speed; 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      context->rotation[0] += (float)context->cur_spin[0]*delta_time*context->cur_spin_speed;
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -237,8 +185,10 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      vec2 hex_pos = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      vec2 hex_forward = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      hex_pos[0] = camera[0];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      hex_pos[1] = camera[2] - camera[0]/2;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      hex_pos[0] =  camera[0];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      hex_pos[1] = -camera[2] + camera[0]/2;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      hex_forward[0] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      hex_forward[1] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      glm_lookat(camera, context->position, up, context->hex.data.view);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      add_transfer(&context->hex.data, context->hex.context, 0, 2*sizeof(mat4), context->render.current_frame, &context->render);
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -246,8 +196,8 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      add_transfer(hex_forward, context->hex.context, offsetof(GPUHexContext, forward), sizeof(vec2), context->render.current_frame, &context->render);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if(context->clicked_container != 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      snprintf(str, 21, "Clicked: %d.%d", context->clicked_container, context->clicked_element);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if(context->clicked_hex[0] != 0 || context->clicked_hex[1] != 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      snprintf(str, 50, "Clicked: (%d,%d)", context->clicked_hex[0], context->clicked_hex[1]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      map_string(str, mapped_codes, 0, 0, &context->ui);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      VK_RESULT(add_transfers(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            context->ui.containers[0].layers[0].codes_buffer,
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -264,6 +214,7 @@ VkResult main_thread(ClientContext* context) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            &context->render));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    frame += 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    //
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VkResult result = draw_frame(&context->render, &context->ui, &context->hex, frame_time);
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |