+// VkCommandBufferBeginInfo binf;
+// binf.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+// binf.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
+
+// /* this function must be called outside a renderpass instance */
+// const VkClearColorValue pcolor[4] = {r, g, b, 1.0};
+
+// VkImageSubresourceRange range;
+// memset(&range, 0, sizeof range);
+// range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+// range.baseMipLevel = 0;
+// range.baseArrayLayer = 0;
+// range.layerCount = 1;
+
+// for(int i=0; i<vknum_swapchain_images; i++) {
+// /* layout for clearing */
+// VkImageMemoryBarrier cb;
+// memset(&cb, 0, sizeof cb);
+// cb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+// cb.srcAccessMask = VK_ACCESS_MEMORY_READ_BIT;
+// cb.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
+// cb.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+// cb.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
+// cb.srcQueueFamilyIndex = vkqfamily;
+// cb.dstQueueFamilyIndex = vkqfamily;
+// cb.image = vkswapchain_images[i];
+// cb.subresourceRange = range;
+
+// /* layout for presenting */
+// VkImageMemoryBarrier pb;
+// memset(&pb, 0, sizeof pb);
+// pb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+// pb.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
+// pb.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
+// pb.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
+// pb.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
+// pb.srcQueueFamilyIndex = vkqfamily;
+// pb.dstQueueFamilyIndex = vkqfamily;
+// pb.image = vkswapchain_images[i];
+// pb.subresourceRange = range;
+
+// vkBeginCommandBuffer(swapchain_cmd_bufs[i], &binf);
+// vkCmdPipelineBarrier(swapchain_cmd_bufs[i], VK_PIPELINE_STAGE_TRANSFER_BIT,
+// VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, 0, 0, 0, 1, &pb);
+
+// vkCmdClearColorImage(swapchain_cmd_bufs[i], vkswapchain_images[vk_curr_swapchain_image], VK_IMAGE_LAYOUT_GENERAL,
+// pcolor, 1, &range);
+
+// vkCmdPipelineBarrier(swapchain_cmd_bufs[i], VK_PIPELINE_STAGE_TRANSFER_BIT,
+// VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, 0, 0, 0, 1, &cb);
+
+// if(vkEndCommandBuffer(swapchain_cmd_bufs[i]) != VK_SUCCESS) {
+// fprintf(stderr, "Failed to record command buffer.\n");
+// return false;
+// }
+// }
+// return true;
+// }
+
+// static bool create_swapchain_cmd_bufs(VkCommandPool cpool)
+// {
+// swapchain_cmd_bufs = new VkCommandBuffer[vknum_swapchain_images];
+
+// VkCommandBufferAllocateInfo ainf;
+// memset(&ainf, 0, sizeof ainf);
+
+// ainf.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
+// ainf.commandPool = cpool;
+// ainf.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
+// ainf.commandBufferCount = (uint32_t)vknum_swapchain_images;
+
+// if(vkAllocateCommandBuffers(vk_device, &ainf, swapchain_cmd_bufs) != VK_SUCCESS) {
+// fprintf(stderr, "Failed to allocate the swapchain command buffers.\n");
+// return false;
+// }
+
+ return true;
+}