win_starfield.h (1758B)
1 #ifndef WIN_STARFIELD_H 2 #define WIN_STARFIELD_H 3 4 #include <stdio.h> 5 6 #include <windows.h> 7 8 #define VK_USE_PLATFORM_WAYLAND_WIN32 9 #include <vulkan/vulkan.h> 10 #include <vulkan/vulkan_win32.h> 11 12 #include "starfield_api.h" 13 #include "renderer.h" 14 #include "utils.h" 15 16 struct starfield_thread { 17 u32 id; 18 }; 19 20 /* wasapi state */ 21 struct win_audio { 22 // TODO 23 24 struct starfield_audio_buffer buffer; 25 26 b32 enabled; 27 }; 28 29 /* dwm state */ 30 struct win_video { 31 // TODO 32 33 u32 width, height; 34 }; 35 36 /* vulkan state */ 37 struct win_vulkan { 38 VkInstance instance; 39 VkDebugUtilsMessengerEXT debug_messenger; 40 VkSurfaceKHR surface; 41 42 struct renderer *renderer; 43 }; 44 45 struct win_starfield_state { 46 struct arena platform_arena; 47 struct arena renderer_arena; 48 struct arena starfield_arena; 49 50 struct win_audio audio; 51 struct win_video video; 52 struct win_vulkan vulkan; 53 54 struct platform_api platform_api; 55 struct renderer_api renderer_api; 56 struct starfield_api starfield_api; 57 58 b32 running; 59 }; 60 61 internal b32 62 load_starfield_api(char const *filename, struct starfield_api *api); 63 64 internal struct platform_api 65 load_platform_api(void); 66 67 internal b32 68 init_memory(struct arena *platform_arena, u64 platform_capacity, 69 struct arena *renderer_arena, u64 renderer_capacity, 70 struct arena *starfield_arena, u64 starfield_capacity); 71 72 internal b32 73 init_audio(struct arena *arena, struct win_audio *audio, u32 period_us, u32 buffered_periods); 74 75 internal void 76 play_audio(struct win_audio *audio); 77 78 internal b32 79 init_video(struct arena *arena, struct win_video *video, HINSTANCE instance); 80 81 internal void 82 draw_frame(struct win_video *video); 83 84 internal b32 85 init_vulkan(struct arena *arena, struct win_vulkan *vulkan); 86 87 internal void 88 free_vulkan(struct win_vulkan *vulkan); 89 90 #endif /* WIN_STARFIELD_H */