rev |
line source |
nuclear@0
|
1 #include <stdio.h>
|
nuclear@4
|
2 #include "wsys.h"
|
nuclear@3
|
3 #include "vku.h"
|
nuclear@13
|
4 #include "vkpipe.h"
|
nuclear@7
|
5 #include "vkgl.h"
|
nuclear@0
|
6
|
nuclear@4
|
7 static void display(void);
|
nuclear@4
|
8 static void reshape(int x, int y);
|
nuclear@4
|
9 static void keyboard(int key, int pressed);
|
nuclear@4
|
10
|
nuclear@13
|
11 static struct vku_pipeline pipeline;
|
nuclear@13
|
12 static VkShaderModule vsdr, psdr;
|
nuclear@17
|
13 static VkSemaphore sem_draw_done;
|
nuclear@17
|
14 static VkFence fence_draw_done;
|
nuclear@13
|
15
|
nuclear@0
|
16 int main(void)
|
nuclear@0
|
17 {
|
nuclear@3
|
18 if(vku_create_dev() == -1) {
|
nuclear@4
|
19 return 1;
|
nuclear@0
|
20 }
|
nuclear@0
|
21
|
nuclear@4
|
22 if(wsys_create_window(800, 600) == -1) {
|
nuclear@4
|
23 return 1;
|
nuclear@4
|
24 }
|
nuclear@4
|
25 wsys_set_window_title("Vulkan test 2");
|
nuclear@4
|
26
|
nuclear@4
|
27 wsys_display_callback(display);
|
nuclear@4
|
28 wsys_reshape_callback(reshape);
|
nuclear@4
|
29 wsys_keyboard_callback(keyboard);
|
nuclear@4
|
30
|
nuclear@13
|
31 if(!(vsdr = vku_load_shader("sdr/vertex.spv")) ||
|
nuclear@13
|
32 !(psdr = vku_load_shader("sdr/pixel.spv"))) {
|
nuclear@13
|
33 return 1;
|
nuclear@13
|
34 }
|
nuclear@13
|
35
|
nuclear@13
|
36 vku_init_pipeline(&pipeline);
|
nuclear@13
|
37 vku_pipeline_shader(&pipeline, vsdr, VK_SHADER_STAGE_VERTEX_BIT);
|
nuclear@13
|
38 vku_pipeline_shader(&pipeline, psdr, VK_SHADER_STAGE_FRAGMENT_BIT);
|
nuclear@13
|
39 vku_pipeline_viewport(&pipeline, 0, 0, 800, 600);
|
nuclear@17
|
40 vku_pipeline_scissor(&pipeline, 0, 0, 800, 600);
|
nuclear@13
|
41 vku_pipeline_renderpass(&pipeline, vkrpass);
|
nuclear@13
|
42 if(!vku_create_pipeline(&pipeline)) {
|
nuclear@13
|
43 return 1;
|
nuclear@13
|
44 }
|
nuclear@13
|
45
|
nuclear@17
|
46 sem_draw_done = vku_create_semaphore();
|
nuclear@17
|
47 fence_draw_done = vku_create_fence();
|
nuclear@13
|
48
|
nuclear@4
|
49 while(wsys_process_events(WSYS_BLOCKING) != -1);
|
nuclear@4
|
50
|
nuclear@17
|
51 vku_destroy_fence(fence_draw_done);
|
nuclear@17
|
52 vku_destroy_semaphore(sem_draw_done);
|
nuclear@17
|
53 vku_destroy_pipeline(&pipeline);
|
nuclear@17
|
54 vku_destroy_shader(vsdr);
|
nuclear@17
|
55 vku_destroy_shader(psdr);
|
nuclear@17
|
56
|
nuclear@4
|
57 wsys_destroy_window();
|
nuclear@3
|
58 vku_cleanup();
|
nuclear@0
|
59 return 0;
|
nuclear@0
|
60 }
|
nuclear@4
|
61
|
nuclear@4
|
62 static void display(void)
|
nuclear@4
|
63 {
|
nuclear@17
|
64 vku_begin_cmdbuf(vkcmdbuf, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
|
nuclear@17
|
65 vkgl_clear_color(0.2, 0.2, 0.3, 1);
|
nuclear@7
|
66 vkgl_clear(VKGL_COLOR_BUFFER_BIT);
|
nuclear@7
|
67
|
nuclear@15
|
68 vku_begin_renderpass(vkcmdbuf, vkrpass, swapchain_framebuf[next_swapchain_image],
|
nuclear@15
|
69 VK_SUBPASS_CONTENTS_INLINE);
|
nuclear@15
|
70 vkCmdBindPipeline(vkcmdbuf, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.pipeline);
|
nuclear@15
|
71 vkCmdDraw(vkcmdbuf, 3, 1, 0, 0);
|
nuclear@15
|
72 vku_end_renderpass(vkcmdbuf);
|
nuclear@15
|
73 vku_end_cmdbuf(vkcmdbuf);
|
nuclear@15
|
74
|
nuclear@17
|
75 vku_submit_cmdbuf(vkq, vkcmdbuf, swapchain_getimg_sem, sem_draw_done, fence_draw_done);
|
nuclear@15
|
76
|
nuclear@17
|
77 wsys_swap_buffers(sem_draw_done);
|
nuclear@17
|
78 vku_wait_fence(fence_draw_done);
|
nuclear@4
|
79 }
|
nuclear@4
|
80
|
nuclear@4
|
81 static void reshape(int x, int y)
|
nuclear@4
|
82 {
|
nuclear@4
|
83 }
|
nuclear@4
|
84
|
nuclear@4
|
85 static void keyboard(int key, int pressed)
|
nuclear@4
|
86 {
|
nuclear@4
|
87 if(key == 27) {
|
nuclear@4
|
88 wsys_quit();
|
nuclear@4
|
89 }
|
nuclear@4
|
90 }
|