您的位置:首页 > 财经 > 产业 > 中国互联网协会属于什么单位_前端面试官常问的问题_代运营是什么意思_企业推广宣传方式

中国互联网协会属于什么单位_前端面试官常问的问题_代运营是什么意思_企业推广宣传方式

2025/1/22 8:45:56 来源:https://blog.csdn.net/patronwa/article/details/144426802  浏览:    关键词:中国互联网协会属于什么单位_前端面试官常问的问题_代运营是什么意思_企业推广宣传方式
中国互联网协会属于什么单位_前端面试官常问的问题_代运营是什么意思_企业推广宣传方式

目录

  • 先叨叨
  • Git信息
  • 关键代码
    • VulkanEnv::RecordCommandBuffer()
  • 编译并运行代码

先叨叨

上篇已经创建的CommandPool和CommandBuffer。接下来就可以向CommandBuffer中记录命令了。

Git信息

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

关键代码

VulkanEnv::RecordCommandBuffer()

  1. vkBeginCommandBuffer的作用是重置CommanderBuffer。也表示开始记录Command。
  2. vkCmdBeginRenderPass的作用开始一个渲染过程
  3. vkCmdBindPipeline将CommandBuffer和Pipeline关联上,表示Commander作用于该Pipeline
  4. vkCmdSetViewport和vkCmdSetScissor用来设置视口和裁剪区域。因为在创建Pipline时,设置了这两个state需要动态设置。
  5. vkCmdDraw为描画操作。这里我们要描画三个点。
  6. vkCmdEndRenderPass 结束渲染过程
  7. vkEndCommandBuffer 结束记录CommandBuffer。

以上以kCmd开始的API就是记录到CommanderBuffer中的Command

void VulkanEnv::RecordCommandBuffer()
{VkCommandBufferBeginInfo beginInfo{};beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;if (vkBeginCommandBuffer(m_commandBuffer, &beginInfo) != VK_SUCCESS) {throw std::runtime_error("failed to begin recording command buffer!");}VkRenderPassBeginInfo renderPassInfo{};renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;renderPassInfo.renderPass = m_testPipeline.GetRenderPass();renderPassInfo.framebuffer = m_testPipeline.GetFramebuffer();renderPassInfo.renderArea.offset = {0, 0};renderPassInfo.renderArea.extent = {m_width, m_height};VkClearValue clearColor = {{{0.0f, 0.0f, 0.0f, 1.0f}}};renderPassInfo.clearValueCount = 1;renderPassInfo.pClearValues = &clearColor;vkCmdBeginRenderPass(m_commandBuffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);vkCmdBindPipeline(m_commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, m_testPipeline.GetPipeline());VkViewport viewport{};viewport.x = 0.0f;viewport.y = 0.0f;viewport.width = (float) m_width;viewport.height = (float) m_height;viewport.minDepth = 0.0f;viewport.maxDepth = 1.0f;vkCmdSetViewport(m_commandBuffer, 0, 1, &viewport);VkRect2D scissor{};scissor.offset = {0, 0};scissor.extent = {m_width, m_height};vkCmdSetScissor(m_commandBuffer, 0, 1, &scissor);vkCmdDraw(m_commandBuffer, 3, 1, 0, 0);vkCmdEndRenderPass(m_commandBuffer);if (vkEndCommandBuffer(m_commandBuffer) != VK_SUCCESS) {throw std::runtime_error("failed to record command buffer!");}
}

编译并运行代码

能编译成功即可,下一篇将会开始真正的渲染。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com