private void Vkctrl_VulkanInitialized(object sender, SharpVulkanWpf.VulkanEventArgs args) { var device = args.Device; var commandPoolCreateInfo = new VkCommandPoolCreateInfo() { queueFamilyIndex = args.GraphicsQueueIndex, flags = VkCommandPoolCreateFlags.VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, }; VulkanAPI.vkCreateCommandPool(device, ref commandPoolCreateInfo, out m_commandPool); var allocateInfo = new VkCommandBufferAllocateInfo() { commandBufferCount = 1, commandPool = m_commandPool, }; VulkanAPI.vkAllocateCommandBuffers(device, ref allocateInfo, out m_commandBuffers); // 頂点入力情報の構築. m_vertexInputState = CreateVertexInputState(); // プリミティブの情報 トライアングルリストでデータが生成されている. m_inputAssemblyState = new VkPipelineInputAssemblyStateCreateInfo() { topology = VkPrimitiveTopology.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST }; // シェーダーステージ情報の構築. m_shaderStages = new VkPipelineShaderStageCreateInfo[2] { SampleHelpers.CreateShader(device, "resource/simpleVS.spv", VkShaderStageFlagBits.VK_SHADER_STAGE_VERTEX_BIT), SampleHelpers.CreateShader(device, "resource/simpleFS.spv", VkShaderStageFlagBits.VK_SHADER_STAGE_FRAGMENT_BIT), }; // ラスタライザーステートの構築. m_rasterizationState = new VkPipelineRasterizationStateCreateInfo(); // デプスステンシルステートの構築. m_depthStencilState = new VkPipelineDepthStencilStateCreateInfo(); // カラーブレンドステートの構築. m_colorBlendState = new VkPipelineColorBlendStateCreateInfo(); var colorBlendAttachment = new VkPipelineColorBlendAttachmentState(); m_colorBlendState.attachments = new[] { colorBlendAttachment }; // マルチサンプルステートの構築. m_multisampleState = new VkPipelineMultisampleStateCreateInfo(); // パイプラインレイアウトの構築. m_pipelineLayout = CreatePipelineLayout(device); // ビューポートステートの構築. m_viewportState = CreateViewportState(); // グラフィックスパイプラインを構築. m_graphicsPipeline = CreateGraphicsPipeline(device, vkctrl.GetControlRenderPass()); // 頂点バッファの作成. CreateVertexBuffer(device, args.PhysicalDevice); }