Непрограммируемые стадии графического ковейера
This commit is contained in:
		
							parent
							
								
									9370f8b7bb
								
							
						
					
					
						commit
						1aee70ecd8
					
				| @ -39,6 +39,7 @@ class Vulkan | ||||
|         void createSwapchain(GLFWwindow* window); // Создание цепочки показа
 | ||||
|         void createRenderpass(); // Создание проходов рендера
 | ||||
|         VkShaderModule createShaderModule(const char * filename); // Создание шейдерного модуля
 | ||||
|         void createGraphicPipeline(); // Создание графического конвеера
 | ||||
| };   | ||||
| 
 | ||||
| #endif // VK_H
 | ||||
							
								
								
									
										102
									
								
								src/vk.cpp
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								src/vk.cpp
									
									
									
									
									
								
							| @ -1,4 +1,5 @@ | ||||
| #include "vk.h" | ||||
| #include "Vertex.h" | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| @ -17,6 +18,7 @@ void Vulkan::init(GLFWwindow* window) | ||||
|     createLogicalDevice(deviceExtensions); // Создание физического устройства
 | ||||
|     createSwapchain(window); // Создание списка показа
 | ||||
|     createRenderpass(); // Создание проходов рендера
 | ||||
|     createGraphicPipeline(); // Создание графического конвейера
 | ||||
| } | ||||
| 
 | ||||
| // завершение работы
 | ||||
| @ -562,3 +564,103 @@ VkShaderModule Vulkan::createShaderModule(const char * filename) | ||||
| 
 | ||||
|     return shaderModule; | ||||
| } | ||||
| 
 | ||||
| // Создание графического конвеера
 | ||||
| void Vulkan::createGraphicPipeline() | ||||
| { | ||||
|     // Входные данные вершин
 | ||||
|     VkPipelineVertexInputStateCreateInfo vertexInputInfo{}; | ||||
|     vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; | ||||
| 
 | ||||
|     // Привязка
 | ||||
|     VkVertexInputBindingDescription bindingDescription{}; | ||||
|     bindingDescription.binding = 0; | ||||
|     bindingDescription.stride = sizeof(Vertex); | ||||
|     bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; | ||||
| 
 | ||||
|     // Описание атрибута 
 | ||||
|     std::vector<VkVertexInputAttributeDescription> attributeDescriptions(2); | ||||
| 
 | ||||
|     attributeDescriptions[0].binding = 0; | ||||
|     attributeDescriptions[0].location = 0; | ||||
|     attributeDescriptions[0].format = VK_FORMAT_R32G32_SFLOAT; | ||||
|     attributeDescriptions[0].offset = offsetof(Vertex, position); | ||||
| 
 | ||||
|     attributeDescriptions[1].binding = 0; | ||||
|     attributeDescriptions[1].location = 1; | ||||
|     attributeDescriptions[1].format = VK_FORMAT_R32G32B32_SFLOAT; | ||||
|     attributeDescriptions[1].offset = offsetof(Vertex, color); | ||||
| 
 | ||||
|     vertexInputInfo.vertexBindingDescriptionCount = 1; | ||||
|     vertexInputInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(attributeDescriptions.size()); | ||||
|     vertexInputInfo.pVertexBindingDescriptions = &bindingDescription; | ||||
|     vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions.data(); | ||||
| 
 | ||||
|     // Входной сборщик
 | ||||
|     VkPipelineInputAssemblyStateCreateInfo inputAssembly{}; | ||||
|     inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; | ||||
|     inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; | ||||
|     inputAssembly.primitiveRestartEnable = VK_FALSE; | ||||
| 
 | ||||
|     // Область просмотра
 | ||||
|     VkViewport viewport{}; | ||||
|     viewport.x = 0.0f; | ||||
|     viewport.y = 0.0f; | ||||
|     viewport.width = surface.selectedExtent.width; | ||||
|     viewport.height = surface.selectedExtent.height; | ||||
|     viewport.minDepth = 0.0f; | ||||
|     viewport.maxDepth = 1.0f; | ||||
| 
 | ||||
|     // Прямоугольник отсечения
 | ||||
|     VkRect2D scissor{}; | ||||
|     scissor.offset = {0, 0}; | ||||
|     scissor.extent = surface.selectedExtent; | ||||
| 
 | ||||
|     // Состояние области просмотра
 | ||||
|     VkPipelineViewportStateCreateInfo viewportState{}; | ||||
|     viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; | ||||
|     viewportState.viewportCount = 1; | ||||
|     viewportState.pViewports = &viewport; | ||||
|     viewportState.scissorCount = 1; | ||||
|     viewportState.pScissors = &scissor; | ||||
| 
 | ||||
|     // Растеризатор
 | ||||
|     VkPipelineRasterizationStateCreateInfo rasterizer{}; | ||||
|     rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; | ||||
|     rasterizer.depthClampEnable = VK_FALSE; | ||||
|     rasterizer.rasterizerDiscardEnable = VK_FALSE; | ||||
|     rasterizer.polygonMode = VK_POLYGON_MODE_FILL; | ||||
|     rasterizer.lineWidth = 1.0f; | ||||
|     rasterizer.cullMode = VK_CULL_MODE_BACK_BIT; | ||||
|     rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE; | ||||
|     rasterizer.depthBiasEnable = VK_FALSE; | ||||
| 
 | ||||
|     // Мультисэмплинг 
 | ||||
|     VkPipelineMultisampleStateCreateInfo multisampling{}; | ||||
|     multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; | ||||
|     multisampling.sampleShadingEnable = VK_FALSE; | ||||
|     multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; | ||||
| 
 | ||||
|     // Смешивание цветов для буфера
 | ||||
|     VkPipelineColorBlendAttachmentState colorBlendAttachment{}; | ||||
|     colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; | ||||
|     colorBlendAttachment.blendEnable = VK_FALSE; | ||||
| 
 | ||||
|     // Глобальные настройки смешивания цветов
 | ||||
|     VkPipelineColorBlendStateCreateInfo colorBlending{}; | ||||
|     colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; | ||||
|     colorBlending.logicOpEnable = VK_FALSE; | ||||
|     colorBlending.logicOp = VK_LOGIC_OP_COPY; | ||||
|     colorBlending.attachmentCount = 1; | ||||
|     colorBlending.pAttachments = &colorBlendAttachment; | ||||
|     colorBlending.blendConstants[0] = 0.0f; | ||||
|     colorBlending.blendConstants[1] = 0.0f; | ||||
|     colorBlending.blendConstants[2] = 0.0f; | ||||
|     colorBlending.blendConstants[3] = 0.0f; | ||||
| 
 | ||||
|     // раскладка конвейера
 | ||||
|     VkPipelineLayoutCreateInfo pipelineLayoutInfo{}; | ||||
|     pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; | ||||
|     pipelineLayoutInfo.setLayoutCount = 0; | ||||
|     pipelineLayoutInfo.pushConstantRangeCount = 0; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user