当前位置: 首页 > news >正文

成都网站建设公司浅谈百度一下官方网

成都网站建设公司浅谈,百度一下官方网,网站建设合同 售后维护期,宁波网站建设网络推广目录 先叨叨Git信息关键代码TestPipeline::Initialize() 编译运行 先叨叨 到上篇为止已经创建了FrameBuffer和RenderPass。建立Pipeline的先决条件已经具备。本篇就来创建Pipeline。 Git信息 repository: https://gitee.com/J8_series/easy-car-uitag: 10-CreatePipelineurl…

目录

  • 先叨叨
  • Git信息
  • 关键代码
    • TestPipeline::Initialize()
  • 编译运行

先叨叨

到上篇为止已经创建了FrameBuffer和RenderPass。建立Pipeline的先决条件已经具备。本篇就来创建Pipeline。

Git信息

  • repository: https://gitee.com/J8_series/easy-car-ui
  • tag: 10-CreatePipeline
  • url: https://gitee.com/J8_series/easy-car-ui/tree/10-CreatePipeline

关键代码

TestPipeline::Initialize()

本方法很长,对照【Vulkan入门】06-Pipeline介绍看会清晰一点。

  1. 通过shaderStages为Pipeline指定Shader程序
  2. VIEWPORT决定了Vulkan渲染图片的大小,SCISSOR决定了Vulkan渲染后对图片的裁剪。我们希望这两个值随窗口大小改变而改变,因此我们用dynamicStates告诉Vulkan这两个值在渲染时动态指定。
  3. 通过vertexInputInfo给Pipeline提供顶点信息,但目前我们还不需要任何顶点信息。
  4. 通过inputAssembly告诉Pipeline我们的顶点是想画什么,例子中我们需要Pipeline画三角形
  5. 通过rasterizer告诉Pipeline如何光栅化
  6. 通过multisampling告诉Pipeline如何采样
  7. 通过colorBlending告诉Pipeline如何叠加同一个像素的多个颜色
  8. 通过pipelineLayoutInfo告诉Pipeline全局变量,目前我们不需要任何全局变量
void TestPipeline::Initialize(const std::string& vertexShaderFile,const std::string& fragmentShaderFile,const VkDevice& device,uint32_t width,uint32_t height,uint32_t memroyTypeIndex){m_vertexShaderFile = vertexShaderFile;m_fragmentShaderFile = fragmentShaderFile;m_device = device;m_width = width;m_height = height;m_memroyTypeIndex = memroyTypeIndex;CreateRenderPass();CreateFramebuffers();std::vector<char> vertShaderCode = ReadShader(m_vertexShaderFile);std::vector<char> fragShaderCode = ReadShader(m_fragmentShaderFile);VkShaderModule vertShaderModule = CreateShaderModule(vertShaderCode);VkShaderModule fragShaderModule = CreateShaderModule(fragShaderCode);//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineShaderStageCreateInfoVkPipelineShaderStageCreateInfo vertShaderStageInfo{};vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;vertShaderStageInfo.module = vertShaderModule;vertShaderStageInfo.pName = "main";VkPipelineShaderStageCreateInfo fragShaderStageInfo{};fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT;fragShaderStageInfo.module = fragShaderModule;fragShaderStageInfo.pName = "main";VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo, fragShaderStageInfo};std::vector<VkDynamicState> dynamicStates = {VK_DYNAMIC_STATE_VIEWPORT,VK_DYNAMIC_STATE_SCISSOR};//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineDynamicStateCreateInfoVkPipelineDynamicStateCreateInfo dynamicState{};dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;dynamicState.dynamicStateCount = static_cast<uint32_t>(dynamicStates.size());dynamicState.pDynamicStates = dynamicStates.data();//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineVertexInputStateCreateInfoVkPipelineVertexInputStateCreateInfo vertexInputInfo{};vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;vertexInputInfo.vertexBindingDescriptionCount = 0;vertexInputInfo.vertexAttributeDescriptionCount = 0;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineInputAssemblyStateCreateInfoVkPipelineInputAssemblyStateCreateInfo inputAssembly{};inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;inputAssembly.primitiveRestartEnable = VK_FALSE;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineViewportStateCreateInfoVkPipelineViewportStateCreateInfo viewportState{};viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;viewportState.viewportCount = 1;viewportState.scissorCount = 1;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineRasterizationStateCreateInfoVkPipelineRasterizationStateCreateInfo 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;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineMultisampleStateCreateInfoVkPipelineMultisampleStateCreateInfo multisampling{};multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;multisampling.sampleShadingEnable = VK_FALSE;multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineColorBlendAttachmentStateVkPipelineColorBlendAttachmentState 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;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineColorBlendStateCreateInfoVkPipelineColorBlendStateCreateInfo 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;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkPipelineLayoutCreateInfoVkPipelineLayoutCreateInfo pipelineLayoutInfo{};pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;pipelineLayoutInfo.setLayoutCount = 0;pipelineLayoutInfo.pushConstantRangeCount = 0;if (vkCreatePipelineLayout(m_device, &pipelineLayoutInfo, nullptr, &m_pipelineLayout) != VK_SUCCESS){throw std::runtime_error("To create pipeline layout is failed");}VkGraphicsPipelineCreateInfo pipelineInfo{};pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;pipelineInfo.stageCount = 2;pipelineInfo.pStages = shaderStages;pipelineInfo.pVertexInputState = &vertexInputInfo;pipelineInfo.pInputAssemblyState = &inputAssembly;pipelineInfo.pViewportState = &viewportState;pipelineInfo.pRasterizationState = &rasterizer;pipelineInfo.pMultisampleState = &multisampling;pipelineInfo.pColorBlendState = &colorBlending;pipelineInfo.pDynamicState = &dynamicState;pipelineInfo.layout = m_pipelineLayout;pipelineInfo.renderPass = m_renderPass;pipelineInfo.subpass = 0;pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;if (vkCreateGraphicsPipelines(m_device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &m_graphicsPipeline) != VK_SUCCESS) {throw std::runtime_error("To create graphics pipeline is failed!");}vkDestroyShaderModule(m_device, fragShaderModule, nullptr);vkDestroyShaderModule(m_device, vertShaderModule, nullptr);}

编译运行

没有出现错误就是最好的现象

http://www.mnyf.cn/news/14270.html

相关文章:

  • 淘宝客网站主题下载商丘网络推广公司
  • 做翻译赚钱的网站好郑州网站seo外包公司
  • 沧州瑞智网站建设专注于品牌营销服务
  • 网站建设发票税率是多少域名注册查询网站
  • 手机触屏网站网页设计与制作软件
  • 开发一个网站需要哪些步骤网络营销方法有哪些?
  • 设计网站源码好搜seo软件
  • 装修网名大全大同优化推广
  • 广州高端网站建设seo数据
  • 承德网站建设服务优化大师怎么样
  • 哪些网站可以做养殖的广告广州网站优化步骤
  • wordpress设置网站地图个人开发app可以上架吗
  • 网站的用户登录一般怎么做的广州广告公司
  • 网页设计与网站建设大作业怎么去推广自己的店铺
  • 香港公司网站备案百度图片搜索入口
  • 网站建设怎么添加视频查图百度识图
  • 想学网络营销网站建设1688关键词怎么优化
  • wordpress头像怎么设置seo教程论坛
  • wordpress 4.9.6 zhseo查询系统源码
  • 手机有办法做网站吗搜索关键词排名提升
  • 58同城做网站找谁百度关键词seo优化
  • ui做标注的网站企业培训课程名称
  • 公司网站费用谷歌seo排名公司
  • 企业自助建站系统怎么操作下载百度app免费下载安装
  • 自己做投票网站怎么弄seo 的原理和作用
  • 微网站建设哪家优惠seo优化一般包括哪些内容()
  • 温岭专做男鞋批发的网站站长之家工具高清
  • 51一起做网站东莞网站开发公司
  • 网站建设域名注册免费千锋教育培训收费一览表
  • php建立网站seo关键词优化软件