完成图像关系中着色器模块创建
							parent
							
								
									9a189740e3
								
							
						
					
					
						commit
						b6a7ed9d6d
					
				| 
						 | 
					@ -111,6 +111,8 @@ void HelloTriangleApplication::initVulkan() {
 | 
				
			||||||
	createSwapChain();
 | 
						createSwapChain();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	creatImageView();
 | 
						creatImageView();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						createGraphicPipeline();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -561,6 +563,74 @@ void HelloTriangleApplication::creatImageView()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					std::vector<char> HelloTriangleApplication::readFile(const std::string& filename)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::ifstream file(filename, std::ios::ate | std::ios::binary);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!file.is_open())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							throw std::runtime_error("failed to open file!");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rsize_t fileSize = (rsize_t)file.tellg();
 | 
				
			||||||
 | 
						std::vector<char> buffer(fileSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						file.seekg(0);
 | 
				
			||||||
 | 
						file.read(buffer.data(), fileSize);
 | 
				
			||||||
 | 
						file.close();
 | 
				
			||||||
 | 
						return buffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VkShaderModule HelloTriangleApplication::createShaderModule(const std::vector<char> code)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						VkShaderModuleCreateInfo createInfo{};
 | 
				
			||||||
 | 
						createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
 | 
				
			||||||
 | 
						createInfo.codeSize = code.size();
 | 
				
			||||||
 | 
						createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						VkShaderModule shaderModeul;
 | 
				
			||||||
 | 
						if (vkCreateShaderModule(device,&createInfo,nullptr,&shaderModeul) != VK_SUCCESS)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							throw std::runtime_error("failed to create shader module!");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return shaderModeul;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void HelloTriangleApplication::createGraphicPipeline()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						auto vertShaderCode = readFile("../../../shaders/triangleVert.spv");
 | 
				
			||||||
 | 
						auto fragShaderCode = readFile("../../..//shaders/triangleFrag.spv");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						std::cout << "vertShader size:" << vertShaderCode.size() << "\nfragShader size:" << fragShaderCode.size() << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						VkShaderModule vertShaderModule = createShaderModule(vertShaderCode);
 | 
				
			||||||
 | 
						VkShaderModule fragShaderModule = createShaderModule(fragShaderCode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//指定管线vertex阶段
 | 
				
			||||||
 | 
						VkPipelineShaderStageCreateInfo vertShaderStageInfo{};
 | 
				
			||||||
 | 
						vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
 | 
				
			||||||
 | 
						vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;
 | 
				
			||||||
 | 
						//指定模块和入口点
 | 
				
			||||||
 | 
						vertShaderStageInfo.module = vertShaderModule;
 | 
				
			||||||
 | 
						vertShaderStageInfo.pName = "main";
 | 
				
			||||||
 | 
						//指定管线fragment阶段
 | 
				
			||||||
 | 
						VkPipelineShaderStageCreateInfo fragShaderStageInfo{};
 | 
				
			||||||
 | 
						fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
 | 
				
			||||||
 | 
						fragShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;
 | 
				
			||||||
 | 
						fragShaderStageInfo.module = fragShaderModule;
 | 
				
			||||||
 | 
						fragShaderStageInfo.pName = "main";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						VkPipelineShaderStageCreateInfo shaderStages[] = { vertShaderStageInfo,fragShaderStageInfo };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//管道创建完成后销毁着色器模块
 | 
				
			||||||
 | 
						vkDestroyShaderModule(device, fragShaderModule, nullptr);
 | 
				
			||||||
 | 
						vkDestroyShaderModule(device, vertShaderModule, nullptr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool HelloTriangleApplication::checkValidationLayerSupport() {
 | 
					bool HelloTriangleApplication::checkValidationLayerSupport() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,8 @@
 | 
				
			||||||
#include <limits>
 | 
					#include <limits>
 | 
				
			||||||
#include <algorithm>
 | 
					#include <algorithm>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,const VkAllocationCallbacks* pAllocator,VkDebugUtilsMessengerEXT* pDebugMessenger);
 | 
					VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,const VkAllocationCallbacks* pAllocator,VkDebugUtilsMessengerEXT* pDebugMessenger);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -124,6 +126,10 @@ private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void creatImageView();
 | 
						void creatImageView();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void createGraphicPipeline();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static std::vector<char> readFile(const std::string& filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HelloTriangleApplication::HelloTriangleApplication()
 | 
					HelloTriangleApplication::HelloTriangleApplication()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					E:\vulkanSDK\Bin\glslc.exe triangle.vert -o triangleVert.spv
 | 
				
			||||||
 | 
					E:\vulkanSDK\Bin\glslc.exe triangle.frag -o triangleFrag.spv
 | 
				
			||||||
 | 
					pause
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					#version 450
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 0) out vec4 outColor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 0) in vec3 fragColor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main(){
 | 
				
			||||||
 | 
						outColor = vec4(fragColor,1.0);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					#version 450
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 0) out vec3 fragColor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vec2 positions[3] = vec2[](
 | 
				
			||||||
 | 
					    vec2(0.0f, -0.5f),
 | 
				
			||||||
 | 
					    vec2(0.5f, 0.5f),
 | 
				
			||||||
 | 
					    vec2(-0.5f, 0.5f)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vec3 colors[3] = vec3[](
 | 
				
			||||||
 | 
					    vec3(1.0,0.0,0.0),
 | 
				
			||||||
 | 
					    vec3(0.0,1.0,0.0),
 | 
				
			||||||
 | 
					    vec3(0.0,0.0,1.0)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main(){
 | 
				
			||||||
 | 
					    gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0);
 | 
				
			||||||
 | 
					    fragColor = colors[gl_VertexIndex];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue