完成图像关系中着色器模块创建
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