blob: 48da3c92962d4e5392bdd6966dec1ba1bed5e558 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#ifndef PKE_WINDOW_HPP
#define PKE_WINDOW_HPP
#include "asset-manager.hpp"
#include "window-types.hpp"
#include "pk.h"
#include "vendor-glm-include.hpp"
#include <GLFW/glfw3.h>
#include <vulkan/vulkan.h>
// TODO replace me with something more elegant
extern uint32_t swapchainLength;
extern struct pk_membucket *MemBkt_Vulkan;
extern bool shouldRecreateSwapchain;
extern pk_ev_mgr_id_T pke_ev_mgr_id_window;
extern pk_ev_id_T pke_ev_id_framebuffer_length_changed;
extern GLFWwindow *window;
extern GLFWmonitor *monitor;
extern GLFWvidmode vidMode;
extern VkInstance vkInstance;
extern VkPhysicalDevice vkPhysicalDevice;
extern VkPhysicalDeviceProperties vkPhysicalDeviceProperties;
extern VkSurfaceKHR vkSurfaceKHR;
extern VkFormat depthFormat;
extern VkDevice vkDevice;
extern VkAllocationCallbacks *vkAllocator;
extern unsigned int graphicsFamilyIndex;
extern unsigned int presentFamilyIndex;
extern unsigned int transferFamilyIndex;
extern VkRenderPass presentRenderPass;
extern VkRenderPass renderRenderPass;
extern VkSampler global_sampler;
extern VkSampleCountFlagBits global_sample_count;
struct UniformBufferObject {
glm::mat4 model;
glm::mat4 view;
glm::mat4 proj;
};
extern UniformBufferObject UBO;
extern VkBuffer *UniformBuffers;
extern VkExtent2D Extent;
struct DebugHitbox {
VkImage vkImage = VK_NULL_HANDLE;
VkImageView vkImageView = VK_NULL_HANDLE;
VkDeviceMemory textureMemory = VK_NULL_HANDLE;
VkDeviceMemory vertBufferMemory = VK_NULL_HANDLE;
VkBuffer vertexBuffer;
VkBuffer normalsBuffer;
VkBuffer uvBuffer;
VkBuffer indexBuffer;
VkBuffer instanceBuffer = VK_NULL_HANDLE;
uint32_t indexCount = 0;
uint32_t instanceCount = 1;
uint32_t instanceStartingIndex = 0;
VkDescriptorPool vkDescriptorPool;
VkDescriptorSet *vkDescriptorSets = nullptr;
};
extern DebugHitbox pkeDebugHitbox;
struct ImplementedPKVK {
struct ImplementedDescrSetLayouts {
struct ImplementedDescrSetLayoutsByName {
VkDescriptorSetLayout texture;
VkDescriptorSetLayout glyph;
} named;
} descr_layouts;
struct ImplementedPipelineLayouts {
struct ImplementedPipelineLayoutsByName {
VkPipelineLayout texture;
VkPipelineLayout glyph;
} named;
} pipe_layouts;
struct ImplementedPipelines {
struct ImplementedPipelinesByName {
VkPipeline texture;
VkPipeline texture_wireframe;
VkPipeline glyph;
} named;
} pipelines;
};
extern ImplementedPKVK pkePipelines;
void CreateWindow(PKEWindowProperties wp);
void DestroyWindow();
VkShaderModule UploadShader(AssetHandle handle);
void Render();
unsigned int FindMemoryTypeIndex(uint32_t typeFilter, VkMemoryPropertyFlags memPropertyFlags);
void CalculateCombinedMemReqs(uint64_t memReqsCount, VkMemoryRequirements *memReqs, VkMemoryRequirements &combinedMemReqs);
enum PKVK_TmpBufferFlags : uint8_t {
PKVK_TmpBufferFlags_NONE = 0,
PKVK_TmpBufferFlags_MAP_MEMORY = 1,
PKVK_TmpBufferFlags_ALL = 0xFF,
};
struct PKVK_TmpBufferDetails {
VkQueue queue = VK_NULL_HANDLE;
VkCommandBuffer cmdBuffer = VK_NULL_HANDLE;
VkBuffer buffer = VK_NULL_HANDLE;
VkDeviceMemory deviceMemory = VK_NULL_HANDLE;
void *deviceData = nullptr;
};
void PKVK_BeginBuffer(unsigned int family_index, VkDeviceSize requestedMemorySize, PKVK_TmpBufferDetails &tmpBufferDetails, PKVK_TmpBufferFlags flags = PKVK_TmpBufferFlags_ALL);
void PKVK_EndBuffer(PKVK_TmpBufferDetails &tmpBufferDetails, PKVK_TmpBufferFlags flags = PKVK_TmpBufferFlags_ALL);
#endif /* PKE_WINDOW_HPP */
|