linux_starfield.h (2410B)
1 #ifndef LINUX_STARFIELD_H 2 #define LINUX_STARFIELD_H 3 4 #define _XOPEN_SOURCE 700 5 #define _GNU_SOURCE 6 #define _DEFAULT_SOURCE 7 8 #include <stdio.h> 9 #include <string.h> 10 #include <unistd.h> 11 12 #include <sys/mman.h> 13 14 #include <dlfcn.h> 15 16 #include <alsa/asoundlib.h> 17 18 #include <wayland-client.h> 19 #include "xdg-shell.h" 20 21 #define VK_USE_PLATFORM_WAYLAND_KHR 22 #include <vulkan/vulkan.h> 23 #include <vulkan/vulkan_wayland.h> 24 25 #include "starfield_api.h" 26 #include "renderer.h" 27 #include "utils.h" 28 29 struct starfield_thread { 30 u32 id; 31 }; 32 33 /* alsa state */ 34 struct linux_audio { 35 snd_pcm_t *handle; 36 37 struct starfield_audio_buffer buffer; 38 39 b32 enabled; 40 }; 41 42 /* wayland state */ 43 struct linux_video { 44 struct wl_display *display; 45 struct wl_registry *registry; 46 47 struct wl_compositor *compositor; 48 struct xdg_wm_base *wm_base; 49 50 struct wl_surface *surface; 51 struct xdg_surface *xdg_surface; 52 struct xdg_toplevel *xdg_toplevel; 53 54 u32 width, height; 55 }; 56 57 /* vulkan state */ 58 struct linux_vulkan { 59 VkInstance instance; 60 VkDebugUtilsMessengerEXT debug_messenger; 61 VkSurfaceKHR surface; 62 63 struct renderer *renderer; 64 }; 65 66 struct linux_state { 67 struct arena platform_arena; 68 struct arena renderer_arena; 69 struct arena starfield_arena; 70 71 struct linux_audio audio; 72 struct linux_video video; 73 struct linux_vulkan vulkan; 74 75 struct platform_api platform_api; 76 struct render_api render_api; 77 struct starfield_api starfield_api; 78 79 b32 running; 80 }; 81 82 internal u64 83 linux_elapsed_ns(struct timespec *restrict start, struct timespec *restrict end); 84 85 internal b32 86 load_starfield_api(char const *filename, struct starfield_api *api); 87 88 internal struct platform_api 89 load_platform_api(void); 90 91 internal b32 92 init_memory(struct arena *platform_arena, u64 platform_capacity, 93 struct arena *renderer_arena, u64 renderer_capacity, 94 struct arena *starfield_arena, u64 starfield_capacity); 95 96 internal b32 97 init_audio(struct arena *arena, struct linux_audio *audio, u32 period_us, u32 buffered_periods); 98 99 internal void 100 play_audio(struct linux_audio *audio); 101 102 internal b32 103 init_video(struct arena *arena, struct linux_video *video, char const *display_name); 104 105 internal void 106 draw_frame(struct linux_video *video); 107 108 internal b32 109 init_vulkan(struct arena *arena, struct linux_vulkan *vulkan, 110 struct wl_display *display, struct wl_surface *surface, 111 u32 width, u32 height); 112 113 internal void 114 free_vulkan(struct linux_vulkan *vulkan); 115 116 #endif /* LINUX_STARFIELD_H */