Vulkan 线条图未显示

问题描述

所以我想渲染选定对象的边界框。我有一个缓冲区来存储 8 个点,另一个缓冲区来存储索引以使用这些点的线带绘制来制作一个框。我使用 RenderDoc 捕获了一个帧,我可以看到黄色框 bounding box

box with rest of scene

所以看起来值是正确的并且正在绘制框,但我没有在屏幕的最终渲染中看到它。

final scene

。有人知道我在这里可能遗漏了什么吗?

    VkDescriptorSetLayoutBinding camerabind = vkinit::descriptorset_layout_binding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,VK_SHADER_STAGE_VERTEX_BIT,0);

    VkDescriptorSetLayoutCreateInfo setinfo = {};
    setinfo.bindingCount = 1;
    setinfo.flags = 0;
    setinfo.pNext = nullptr;
    setinfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
    setinfo.pBindings = &camerabind;

    vkCreateDescriptorSetLayout(_device,&setinfo,nullptr,&_globalSetLayout);

    //setup push constant
    VkPushConstantRange push_constant;
    push_constant.offset = 0;
    push_constant.size = sizeof(glm::mat4);
    push_constant.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;

    VkPipelineLayoutCreateInfo mesh_pipeline_layout_info = vkinit::pipeline_layout_create_info();
    mesh_pipeline_layout_info.setLayoutCount = 1;
    mesh_pipeline_layout_info.pSetLayouts = &_globalSetLayout;
    mesh_pipeline_layout_info.pPushConstantRanges = &push_constant;
    mesh_pipeline_layout_info.pushConstantRangeCount = 1;

    vkCreatePipelineLayout(_device,&mesh_pipeline_layout_info,&_highlightPipelineLayout);

    PipelineBuilder highlightPipelineBuilder;

    VertexInputDescription description;
    VkVertexInputBindingDescription mainBinding = {};
    mainBinding.binding = 0;
    mainBinding.stride = sizeof(glm::vec3);
    mainBinding.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
    description.bindings.push_back(mainBinding);

    //Position will be stored at Location 0
    VkVertexInputAttributeDescription positionAttribute = {};
    positionAttribute.binding = 0;
    positionAttribute.location = 0;
    positionAttribute.format = VK_FORMAT_R32G32B32_SFLOAT;
    positionAttribute.offset = 0;

    description.attributes.push_back(positionAttribute);

    highlightPipelineBuilder._pipelineLayout = _highlightPipelineLayout;
    highlightPipelineBuilder.vertexDescription = description;
    highlightPipelineBuilder._inputAssembly = vkinit::input_assembly_create_info(VK_PRIMITIVE_TOPOLOGY_LINE_STRIP);
    highlightPipelineBuilder._rasterizer = vkinit::rasterization_state_create_info(VK_polyGON_MODE_LINE);
    highlightPipelineBuilder._depthStencil = vkinit::depth_stencil_create_info(true,true,VK_COMPARE_OP_ALWAYS);

    ShaderEffect* lineEffect = new ShaderEffect();
    lineEffect->add_stage(_shadercache.get_shader(shader_path("wk_highlight.vert.spv")),VK_SHADER_STAGE_VERTEX_BIT);
    lineEffect->add_stage(_shadercache.get_shader(shader_path("wk_highlight.frag.spv")),VK_SHADER_STAGE_FRAGMENT_BIT);
    lineEffect->reflect_layout(_device,0);

    highlightPipelineBuilder.setShaders(lineEffect);

    _highlightPipeline = highlightPipelineBuilder.build_pipeline(_device,_renderPass);

这是绘图部分

        vkCmdBindPipeline(cmd,VK_PIPELINE_BIND_POINT_GRAPHICS,_highlightPipeline);

        uint32_t camera_data_offset = _dynamicData.push(_camera.matrices);
        VkDescriptorBufferInfo camInfo = _dynamicData.source.get_info();
        camInfo.range = sizeof(GPUCameraData);
        camInfo.offset = camera_data_offset;

        VkDescriptorSet cameraSet;
        vkutil::DescriptorBuilder::begin(_descriptorLayoutCache,_dynamicDescriptorAllocator)
            .bind_buffer(0,&camInfo,VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,VK_SHADER_STAGE_VERTEX_BIT)
            .build(cameraSet);

        vkCmdPushConstants(cmd,_highlightPipelineLayout,sizeof(glm::mat4),&_selectedMatrix);

        VkDeviceSize offset = 0;
        vkCmdBindVertexBuffers(cmd,1,&_highlightVertexBuffer._buffer,&offset);
        vkCmdBindindexBuffer(cmd,_highlightIndexBuffer._buffer,VK_INDEX_TYPE_UINT16);

        vkCmdBindDescriptorSets(cmd,&cameraSet,nullptr);

        vkCmdDrawIndexed(cmd,16,0);

和着色器

#version 450
layout (location = 0) in vec3 vPosition;

layout(set = 0,binding = 0) uniform  CameraBuffer{   
    mat4 view;
    mat4 proj;
    mat4 viewproj;
} cameraData;

layout(push_constant) uniform PushConstants {
    mat4 matrix;
} pushConstants;

void main() 
{   
    mat4 modelMatrix = pushConstants.matrix;
    mat4 transformMatrix = (cameraData.viewproj * modelMatrix);
    gl_Position = transformMatrix * vec4(vPosition,1.0f);
}

片段着色器

//glsl version 4.5
#version 450

//output write
layout (location = 0) out vec4 outFragColor;

void main() 
{   
    outFragColor  = vec4(1.0,1.0,0.0,1.0);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)