Skip to content

Instantly share code, notes, and snippets.

@Darianopolis
Last active December 11, 2023 07:13
Show Gist options
  • Save Darianopolis/89098448f8af3bf00f722f4dd279f837 to your computer and use it in GitHub Desktop.
Save Darianopolis/89098448f8af3bf00f722f4dd279f837 to your computer and use it in GitHub Desktop.
vktinyhellotriangle
int main(){glfwInit();
glfwWindowHint(GLFW_CLIENT_API,GLFW_NO_API);
void*window=glfwCreateWindow(800,600,"Hello Triangle",nullptr,nullptr),*glfwExtensions,*extensionCount=new uint32_t,*queueFamily=new uint32_t,*imageIndex=new uint32_t,*count=new uint32_t,*queueFamilies,*formats,*images,*instance,*surface,*physicalDevice,*device,*queue,*swapchain,*vertexShader,*fragmentShader,*renderPass,*pipelineLayout,*pipeline,*fence,*imageView,*framebuffer,*cmdPool,*cmd;
glfwExtensions=glfwGetRequiredInstanceExtensions((uint32_t*)extensionCount);
vkCreateInstance([](auto&&v){return&v;}(VkInstanceCreateInfo{.sType=VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,.pApplicationInfo=[](auto&&v){return&v;}(VkApplicationInfo{.sType=VK_STRUCTURE_TYPE_APPLICATION_INFO,.apiVersion=VK_API_VERSION_1_0,}),.enabledExtensionCount=*(uint32_t*)extensionCount,.ppEnabledExtensionNames=(const char**)glfwExtensions,}),nullptr,(VkInstance*)&instance);
glfwCreateWindowSurface((VkInstance)instance,(GLFWwindow*)window,nullptr,(VkSurfaceKHR*)&surface);
vkEnumeratePhysicalDevices((VkInstance)instance,[](auto&&v){return&v;}(1u),(VkPhysicalDevice*)&physicalDevice);
for(vkGetPhysicalDeviceQueueFamilyProperties((VkPhysicalDevice)physicalDevice,&(*(uint32_t*)count=16),(VkQueueFamilyProperties*)(queueFamilies=new VkQueueFamilyProperties[16])), *(uint32_t*)queueFamily=0;*(uint32_t*)queueFamily<(*(uint32_t*)count)&&!(((VkQueueFamilyProperties*)queueFamilies)[*(uint32_t*)queueFamily].queueFlags&VK_QUEUE_GRAPHICS_BIT);++*(uint32_t*)queueFamily);
vkCreateDevice((VkPhysicalDevice)physicalDevice,[](auto&&v){return&v;}(VkDeviceCreateInfo{.sType=VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,.queueCreateInfoCount=1,.pQueueCreateInfos=[](auto&&v){return&v;}(VkDeviceQueueCreateInfo{.sType=VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,.queueFamilyIndex=*(uint32_t*)queueFamily,.queueCount=1,.pQueuePriorities=[](auto&&v){return&v;}(1.f),}),.enabledExtensionCount=1,.ppEnabledExtensionNames=[](auto&&v){return&v;}((const char*)VK_KHR_SWAPCHAIN_EXTENSION_NAME),}),nullptr,(VkDevice*)&device);
vkGetDeviceQueue((VkDevice)device,*(uint32_t*)queueFamily,0,(VkQueue*)&queue);
vkGetPhysicalDeviceSurfaceFormatsKHR((VkPhysicalDevice)physicalDevice,(VkSurfaceKHR)surface,&(*(uint32_t*)count=16),(VkSurfaceFormatKHR*)(formats=new VkSurfaceFormatKHR[16]));
vkCreateSwapchainKHR((VkDevice)device,[](auto&&v){return&v;}(VkSwapchainCreateInfoKHR{.sType=VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,.surface=(VkSurfaceKHR)surface,.minImageCount=2,.imageFormat=((VkSurfaceFormatKHR*)formats)[0].format,.imageColorSpace=((VkSurfaceFormatKHR*)formats)[0].colorSpace,.imageExtent={uint32_t(800),uint32_t(600)},.imageArrayLayers=1,.imageUsage=VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,.preTransform=VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,.compositeAlpha=VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,.presentMode=VK_PRESENT_MODE_FIFO_KHR,.clipped=VK_TRUE,}),nullptr,(VkSwapchainKHR*)&swapchain);
vkGetSwapchainImagesKHR((VkDevice)device,(VkSwapchainKHR)swapchain,&(*(uint32_t*)count=16),(VkImage*)(images=new VkImage[16]));
vkCreateShaderModule((VkDevice)device,[](auto&&v){return&v;}(VkShaderModuleCreateInfo{.sType=VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,.codeSize=1472,.pCode=new uint32_t[384]{119734787,65536,524299,56,0,131089,1,393227,1,1280527431,1685353262,808793134,0,196622,0,1,524303,0,4,1852399981,0,9,21,33,196611,2,450,262149,4,1852399981,0,262149,9,1869377379,114,393221,21,1449094247,1702130277,1684949368,30821,327685,24,1701080681,1818386808,101,393221,31,1348430951,1700164197,2019914866,0,393222,31,0,1348430951,1953067887,7237481,458758,31,1,1348430951,1953393007,1702521171,0,458758,31,2,1130327143,1148217708,1635021673,6644590,458758,31,3,1130327143,1147956341,1635021673,6644590,196613,33,0,327685,44,1701080681,1818386808,101,262215,9,30,0,262215,21,11,42,327752,31,0,11,0,327752,31,1,11,1,327752,31,2,11,3,327752,31,3,11,4,196679,31,2,131091,2,196641,3,2,196630,6,32,262167,7,6,3,262176,8,3,7,262203,8,9,3,262165,10,32,0,262187,10,11,3,262172,12,7,11,262187,6,13,1065353216,262187,6,14,0,393260,7,15,13,14,14,393260,7,16,14,13,14,393260,7,17,14,14,13,393260,12,18,15,16,17,262165,19,32,1,262176,20,1,19,262203,20,21,1,262176,23,7,12,262176,25,7,7,262167,28,6,4,262187,10,29,1,262172,30,6,29,393246,31,28,6,30,30,262176,32,3,31,262203,32,33,3,262187,19,34,0,262167,35,6,2,262172,36,35,11,262187,6,37,3212836864,327724,35,38,37,13,327724,35,39,13,13,327724,35,40,14,37,393260,36,41,38,39,40,262176,43,7,36,262176,45,7,35,262187,6,48,1061158912,327724,35,49,48,48,262176,54,3,28,327734,2,4,0,3,131320,5,262203,23,24,7,262203,43,44,7,262205,19,22,21,196670,24,18,327745,25,26,24,22,262205,7,27,26,196670,9,27,262205,19,42,21,196670,44,41,327745,45,46,44,42,262205,35,47,46,327813,35,50,47,49,327761,6,51,50,0,327761,6,52,50,1,458832,28,53,51,52,14,13,327745,54,55,33,34,196670,55,53,65789,65592},}),nullptr,(VkShaderModule*)&vertexShader);
vkCreateShaderModule((VkDevice)device,[](auto&&v){return&v;}(VkShaderModuleCreateInfo{.sType=VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,.codeSize=496,.pCode=new uint32_t[124]{119734787,65536,524299,19,0,131089,1,393227,1,1280527431,1685353262,808793134,0,196622,0,1,458767,4,4,1852399981,0,9,12,196624,4,7,196611,2,450,262149,4,1852399981,0,327685,9,1734439526,1869377347,114,262149,12,1866690153,7499628,262215,9,30,0,262215,12,30,0,131091,2,196641,3,2,196630,6,32,262167,7,6,4,262176,8,3,7,262203,8,9,3,262167,10,6,3,262176,11,1,10,262203,11,12,1,262187,6,14,1065353216,327734,2,4,0,3,131320,5,262205,10,13,12,327761,6,15,13,0,327761,6,16,13,1,327761,6,17,13,2,458832,7,18,15,16,17,14,196670,9,18,65789,65592},}),nullptr,(VkShaderModule*)&fragmentShader);
vkCreateRenderPass((VkDevice)device,[](auto&&v){return&v;}(VkRenderPassCreateInfo{.sType=VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,.attachmentCount=1,.pAttachments=[](auto&&v){return&v;}(VkAttachmentDescription{.format=((VkSurfaceFormatKHR*)formats)[0].format,.samples=VK_SAMPLE_COUNT_1_BIT,.loadOp=VK_ATTACHMENT_LOAD_OP_CLEAR,.finalLayout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,}),.subpassCount=1,.pSubpasses=[](auto&&v){return&v;}(VkSubpassDescription{.pipelineBindPoint=VK_PIPELINE_BIND_POINT_GRAPHICS,.colorAttachmentCount=1,.pColorAttachments=[](auto&&v){return&v;}(VkAttachmentReference{.attachment=0,.layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,})}),}),nullptr,(VkRenderPass*)&renderPass);
vkCreatePipelineLayout((VkDevice)device,[](auto&&v){return&v;}(VkPipelineLayoutCreateInfo{.sType=VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,}),nullptr,(VkPipelineLayout*)&pipelineLayout);
vkCreateGraphicsPipelines((VkDevice)device,nullptr,1,[](auto&&v){return&v;}(VkGraphicsPipelineCreateInfo{.sType=VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,.stageCount=2,.pStages=new VkPipelineShaderStageCreateInfo[2]{ {.sType=VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,.stage=VK_SHADER_STAGE_VERTEX_BIT,.module=(VkShaderModule)vertexShader,.pName="main",},{ .sType=VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,.stage=VK_SHADER_STAGE_FRAGMENT_BIT,.module=(VkShaderModule)fragmentShader,.pName="main",} },.pVertexInputState=[](auto&&v){return&v;}(VkPipelineVertexInputStateCreateInfo{.sType=VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,}),.pInputAssemblyState=[](auto&&v){return&v;}(VkPipelineInputAssemblyStateCreateInfo{.sType=VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,.topology=VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,}),.pViewportState=[](auto&&v){return&v;}(VkPipelineViewportStateCreateInfo{.sType=VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,.viewportCount=1,.pViewports=[](auto&&v){return&v;}(VkViewport{0.f,0.f,float(800),float(600),0.f,1.f}),.scissorCount=1,.pScissors=[](auto&&v){return&v;}(VkRect2D{{0,0},{uint32_t(800),uint32_t(600)} })}),.pRasterizationState=[](auto&&v){return&v;}(VkPipelineRasterizationStateCreateInfo{.sType=VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,.lineWidth=1.f}),.pMultisampleState=nullptr,.pDepthStencilState=nullptr,.pColorBlendState=[](auto&&v){return&v;}(VkPipelineColorBlendStateCreateInfo{.sType=VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,.attachmentCount=1,.pAttachments=[](auto&&v){return&v;}(VkPipelineColorBlendAttachmentState{.colorWriteMask=VK_COLOR_COMPONENT_R_BIT|VK_COLOR_COMPONENT_G_BIT|VK_COLOR_COMPONENT_B_BIT|VK_COLOR_COMPONENT_A_BIT,}),}),.pDynamicState=nullptr,.layout=(VkPipelineLayout)pipelineLayout,.renderPass=(VkRenderPass)renderPass,.subpass=0,}),nullptr,(VkPipeline*)&pipeline);
vkCreateFence((VkDevice)device,[](auto&&v){return&v;}(VkFenceCreateInfo{.sType=VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,}),nullptr,(VkFence*)&fence);
vkAcquireNextImageKHR((VkDevice)device,(VkSwapchainKHR)swapchain,UINT64_MAX,VK_NULL_HANDLE,(VkFence)fence,&*(uint32_t*)imageIndex);
vkWaitForFences((VkDevice)device,1,(VkFence*)&fence,VK_TRUE,UINT64_MAX);
vkCreateImageView((VkDevice)device,[](auto&&v){return&v;}(VkImageViewCreateInfo{.sType=VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,.image=((VkImage*)images)[*(uint32_t*)imageIndex],.viewType=VK_IMAGE_VIEW_TYPE_2D,.format=((VkSurfaceFormatKHR*)formats)[0].format,.subresourceRange={VK_IMAGE_ASPECT_COLOR_BIT,0,1,0,1},}),nullptr,(VkImageView*)&imageView);
vkCreateFramebuffer((VkDevice)device,[](auto&&v){return&v;}(VkFramebufferCreateInfo{.sType=VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,.renderPass=(VkRenderPass)renderPass,.attachmentCount=1,.pAttachments=(VkImageView*)&imageView,.width=uint32_t(800),.height=uint32_t(600),.layers=1,}),nullptr,(VkFramebuffer*)&framebuffer);
vkCreateCommandPool((VkDevice)device,[](auto&&v){return&v;}(VkCommandPoolCreateInfo{.sType=VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,.queueFamilyIndex=*(uint32_t*)queueFamily}),nullptr,(VkCommandPool*)&cmdPool);
vkAllocateCommandBuffers((VkDevice)device,[](auto&&v){return&v;}(VkCommandBufferAllocateInfo{.sType=VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,.commandPool=(VkCommandPool)cmdPool,.level=VK_COMMAND_BUFFER_LEVEL_PRIMARY,.commandBufferCount=1,}),(VkCommandBuffer*)&cmd);
vkBeginCommandBuffer((VkCommandBuffer)cmd,[](auto&&v){return&v;}(VkCommandBufferBeginInfo{.sType=VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO}));
vkCmdBeginRenderPass((VkCommandBuffer)cmd,[](auto&&v){return&v;}(VkRenderPassBeginInfo{.sType=VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,.renderPass=(VkRenderPass)renderPass,.framebuffer=(VkFramebuffer)framebuffer,.renderArea={ {},{uint32_t(800),uint32_t(600)} },.clearValueCount=1,.pClearValues=[](auto&&v){return&v;}(VkClearValue{.color={{0.1f,0.1f,0.1f,1.f}}}),}),VK_SUBPASS_CONTENTS_INLINE);
vkCmdBindPipeline((VkCommandBuffer)cmd,VK_PIPELINE_BIND_POINT_GRAPHICS,(VkPipeline)pipeline);
vkCmdDraw((VkCommandBuffer)cmd,3,1,0,0);
vkCmdEndRenderPass((VkCommandBuffer)cmd);
vkEndCommandBuffer((VkCommandBuffer)cmd);
vkQueueSubmit((VkQueue)queue,1,[](auto&&v){return&v;}(VkSubmitInfo{.sType=VK_STRUCTURE_TYPE_SUBMIT_INFO,.commandBufferCount=1,.pCommandBuffers=(VkCommandBuffer*)&cmd,}),nullptr);
vkQueueWaitIdle((VkQueue)queue);
vkQueuePresentKHR((VkQueue)queue,[](auto&&v){return&v;}(VkPresentInfoKHR{.sType=VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,.swapchainCount=1,.pSwapchains=(VkSwapchainKHR*)&swapchain,.pImageIndices=&*(uint32_t*)imageIndex}));
while(!glfwWindowShouldClose((GLFWwindow*)window))
glfwWaitEvents();}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment