vulkan_test2

annotate 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
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 }