# HG changeset patch # User John Tsiombikas # Date 1529463454 -10800 # Node ID 20eb42197ab85d7c45804659b5d00c20e0967d4b # Parent 1dd2c7398afc203ab4c383f011ec13042dc748aa clear color ... diff -r 1dd2c7398afc -r 20eb42197ab8 src/main.c --- a/src/main.c Fri Sep 22 18:13:03 2017 +0300 +++ b/src/main.c Wed Jun 20 05:57:34 2018 +0300 @@ -1,6 +1,7 @@ #include #include "wsys.h" #include "vku.h" +#include "vkgl.h" static void display(void); static void reshape(int x, int y); @@ -30,6 +31,9 @@ static void display(void) { + vkgl_clear_color(1, 0, 0, 1); + vkgl_clear(VKGL_COLOR_BUFFER_BIT); + wsys_swap_buffers(); } diff -r 1dd2c7398afc -r 20eb42197ab8 src/vkgl.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/vkgl.c Wed Jun 20 05:57:34 2018 +0300 @@ -0,0 +1,63 @@ +#include +#include "vkgl.h" +#include "vku.h" + +static struct vkgl_state { + VkClearValue clear; +} st; + +void vkgl_clear_color(float r, float g, float b, float a) +{ + st.clear.color.float32[0] = r; + st.clear.color.float32[1] = g; + st.clear.color.float32[2] = b; + st.clear.color.float32[3] = a; +} + +void vkgl_clear_depth(float z) +{ + st.clear.depthStencil.depth = z; +} + +void vkgl_clear_stencil(int s) +{ + st.clear.depthStencil.stencil = s; +} + +void vkgl_clear(unsigned int flags) +{ + VkImageSubresourceRange wtf; + VkSubmitInfo si; + + memset(&wtf, 0, sizeof wtf); + + if(flags & VKGL_COLOR_BUFFER_BIT) { + wtf.aspectMask |= VK_IMAGE_ASPECT_COLOR_BIT; + } + if(flags & VKGL_DEPTH_BUFFER_BIT) { + wtf.aspectMask |= VK_IMAGE_ASPECT_DEPTH_BIT; + } + if(flags & VKGL_STENCIL_BUFFER_BIT) { + wtf.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT; + } + wtf.levelCount = 1; + wtf.layerCount = 1; + + vku_begin_cmdbuf(vkcmdbuf, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT); + if(flags & VKGL_COLOR_BUFFER_BIT) { + vkCmdClearColorImage(vkcmdbuf, swapchain_images[next_swapchain_image], + VK_IMAGE_LAYOUT_GENERAL, &st.clear.color, 1, &wtf); + } + if(flags & (VKGL_DEPTH_BUFFER_BIT | VKGL_STENCIL_BUFFER_BIT)) { + vkCmdClearDepthStencilImage(vkcmdbuf, swapchain_images[next_swapchain_image], + VK_IMAGE_LAYOUT_GENERAL, &st.clear.depthStencil, 1, &wtf); + } + vku_end_cmdbuf(vkcmdbuf); + + memset(&si, 0, sizeof si); + si.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + si.commandBufferCount = 1; + si.pCommandBuffers = &vkcmdbuf; + + vkQueueSubmit(vkq, 1, &si, 0); +} diff -r 1dd2c7398afc -r 20eb42197ab8 src/vkgl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/vkgl.h Wed Jun 20 05:57:34 2018 +0300 @@ -0,0 +1,15 @@ +#ifndef VKGL_H_ +#define VKGL_H_ + +enum { + VKGL_COLOR_BUFFER_BIT = 1, + VKGL_DEPTH_BUFFER_BIT = 2, + VKGL_STENCIL_BUFFER_BIT = 4 +}; + +void vkgl_clear_color(float r, float g, float b, float a); +void vkgl_clear_depth(float z); +void vkgl_clear_stencil(int s); +void vkgl_clear(unsigned int flags); + +#endif /* VKGL_H_ */ diff -r 1dd2c7398afc -r 20eb42197ab8 src/vku.h --- a/src/vku.h Fri Sep 22 18:13:03 2017 +0300 +++ b/src/vku.h Wed Jun 20 05:57:34 2018 +0300 @@ -13,6 +13,10 @@ VkCommandPool vkcmdpool; VkCommandBuffer vkcmdbuf; /* primary command buffer */ +VkImage *swapchain_images; +int next_swapchain_image; + + struct vku_buffer { VkBuffer buf; VkDeviceMemory mem_pool; diff -r 1dd2c7398afc -r 20eb42197ab8 src/wsys_x11.c --- a/src/wsys_x11.c Fri Sep 22 18:13:03 2017 +0300 +++ b/src/wsys_x11.c Wed Jun 20 05:57:34 2018 +0300 @@ -26,8 +26,6 @@ static Window win; static VkSurfaceKHR surf; static VkSwapchainKHR swapchain; -static VkImage *swapchain_images; -static int next_swapchain_image; static Atom xa_wm_delete; static int win_width, win_height; static int win_mapped;