2024-10-30 17:36:53 -06:00
|
|
|
#ifndef HEX_H
|
|
|
|
#define HEX_H
|
|
|
|
|
|
|
|
#include "gpu.h"
|
|
|
|
|
2024-11-02 23:25:21 -06:00
|
|
|
#define REGION_SIZE (10)
|
2024-11-01 17:34:41 -06:00
|
|
|
#define REGION_HEX_COUNT (3*REGION_SIZE*(REGION_SIZE-1)+1)
|
2024-11-02 23:25:21 -06:00
|
|
|
#define MAX_LOADED_REGIONS (25*25)
|
2024-10-30 21:24:03 -06:00
|
|
|
|
2024-11-01 17:34:41 -06:00
|
|
|
typedef struct GPUHexStruct {
|
|
|
|
float height[6];
|
2024-11-02 22:02:32 -06:00
|
|
|
uint32_t color[7];
|
2024-11-01 17:34:41 -06:00
|
|
|
} GPUHex;
|
|
|
|
|
|
|
|
typedef struct GPUHexRegionStruct {
|
2024-11-02 12:07:11 -06:00
|
|
|
int32_t q;
|
|
|
|
int32_t r;
|
2024-11-01 17:34:41 -06:00
|
|
|
|
|
|
|
GPUHex hexes[REGION_HEX_COUNT];
|
|
|
|
} GPUHexRegion;
|
|
|
|
|
|
|
|
typedef struct HexRegionStruct {
|
2024-11-02 12:07:11 -06:00
|
|
|
int32_t q;
|
|
|
|
int32_t r;
|
2024-11-01 17:34:41 -06:00
|
|
|
|
|
|
|
VkDeviceAddress address;
|
|
|
|
VkBuffer region;
|
|
|
|
VmaAllocation region_memory;
|
2024-11-02 23:25:21 -06:00
|
|
|
|
|
|
|
GPUHex data[REGION_HEX_COUNT];
|
2024-11-01 17:34:41 -06:00
|
|
|
} HexRegion;
|
2024-10-30 17:36:53 -06:00
|
|
|
|
2024-11-01 15:46:27 -06:00
|
|
|
typedef struct GPUHexContextStruct {
|
|
|
|
mat4 proj;
|
|
|
|
mat4 view;
|
2024-11-02 22:02:32 -06:00
|
|
|
vec2 camera;
|
|
|
|
vec2 forward;
|
2024-11-01 17:34:41 -06:00
|
|
|
VkDeviceAddress regions[MAX_LOADED_REGIONS];
|
2024-11-01 15:46:27 -06:00
|
|
|
} GPUHexContext;
|
|
|
|
|
|
|
|
typedef struct HexContextStruct {
|
|
|
|
VkDeviceAddress address;
|
|
|
|
VkBuffer context;
|
|
|
|
VmaAllocation context_memory;
|
|
|
|
|
|
|
|
GraphicsPipeline graphics;
|
|
|
|
ComputePipeline compute;
|
|
|
|
|
2024-11-01 17:34:41 -06:00
|
|
|
HexRegion regions[MAX_LOADED_REGIONS];
|
|
|
|
|
2024-11-01 15:46:27 -06:00
|
|
|
GPUHexContext data;
|
|
|
|
} HexContext;
|
|
|
|
|
2024-11-01 17:34:41 -06:00
|
|
|
typedef struct HexPushConstantStruct {
|
|
|
|
VkDeviceAddress context;
|
|
|
|
uint32_t region;
|
|
|
|
double time;
|
|
|
|
} HexPushConstant;
|
2024-11-01 15:46:27 -06:00
|
|
|
|
|
|
|
VkResult create_hex_context(
|
|
|
|
RenderContext* gpu,
|
|
|
|
HexContext* context);
|
|
|
|
|
|
|
|
VkResult create_hex_region(
|
2024-11-02 12:07:11 -06:00
|
|
|
int32_t q, int32_t r,
|
2024-11-01 17:34:41 -06:00
|
|
|
HexRegion** region,
|
|
|
|
HexContext* hex,
|
2024-11-01 15:46:27 -06:00
|
|
|
RenderContext* gpu);
|
2024-10-30 17:36:53 -06:00
|
|
|
|
|
|
|
#endif
|