vulkan_test2

view src/main.c @ 17:f8bd29f124a8

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