#ifndef HEX_H #define HEX_H #include "gpu.h" #define REGION_SIZE (10) #define REGION_HEX_COUNT (3*REGION_SIZE*(REGION_SIZE-1)+1) #define MAX_LOADED_REGIONS (51*51) typedef struct GPUHexStruct { float height[6]; uint32_t color[7]; } GPUHex; typedef struct GPUHexRegionStruct { int32_t q; int32_t r; int32_t y; uint32_t map; GPUHex hexes[REGION_HEX_COUNT]; } GPUHexRegion; typedef struct HexRegionStruct { VkDeviceAddress address; VkBuffer region; VmaAllocation region_memory; GPUHexRegion data; } HexRegion; typedef struct GPUHexContextStruct { mat4 proj; mat4 view; vec4 click_start; vec4 click_end; vec4 hover_start; vec4 hover_end; uint32_t current_map; uint32_t clicked_region; int32_t clicked_hex; uint32_t hovered_region; int32_t hovered_hex; VkDeviceAddress regions[MAX_LOADED_REGIONS]; } GPUHexContext; typedef struct HexContextStruct { VkDeviceAddress address; VkBuffer context; VmaAllocation context_memory; GraphicsPipeline graphics; GraphicsPipeline ray_pipeline; GraphicsPipeline highlight_pipeline; HexRegion regions[MAX_LOADED_REGIONS]; GPUHexContext data; } HexContext; typedef struct HexPushConstantStruct { VkDeviceAddress context; double time; } HexPushConstant; VkResult create_hex_context( RenderContext* gpu, HexContext* context); VkResult set_hex_region( int32_t q, int32_t r, int32_t y, uint32_t map, HexRegion** region, HexContext* hex, RenderContext* gpu); #endif