完成图像关系中着色器模块创建
parent
9a189740e3
commit
b6a7ed9d6d
|
@ -111,6 +111,8 @@ void HelloTriangleApplication::initVulkan() {
|
|||
createSwapChain();
|
||||
|
||||
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() {
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
#include <limits>
|
||||
#include <algorithm>
|
||||
|
||||
#include <fstream>
|
||||
|
||||
|
||||
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,const VkAllocationCallbacks* pAllocator,VkDebugUtilsMessengerEXT* pDebugMessenger);
|
||||
|
||||
|
@ -124,6 +126,10 @@ private:
|
|||
|
||||
void creatImageView();
|
||||
|
||||
void createGraphicPipeline();
|
||||
|
||||
static std::vector<char> readFile(const std::string& filename);
|
||||
|
||||
};
|
||||
|
||||
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