This commit is contained in:
xsl
2025-09-15 22:32:11 +08:00
parent 2e059eef07
commit ac43d3b0aa
2 changed files with 11 additions and 3 deletions
@@ -28,6 +28,8 @@ add_sample_with_tags(
SHADER_FILES_GLSL
"texture_loading/glsl/texture.vert"
"texture_loading/glsl/texture.frag"
"texture_loading/glsl/bg.vert"
"texture_loading/glsl/bg.frag"
SHADER_FILES_HLSL
"texture_loading/hlsl/texture.vert.hlsl"
"texture_loading/hlsl/texture.frag.hlsl")
@@ -67,6 +67,7 @@ void TextureLoading::build_command_buffers()
VkClearValue clear_values[2];
clear_values[0].color = default_clear_color;
clear_values[1].depthStencil = { 1.0f, 0 }; // 使用 1.0f 作为深度清除值
//clear_values[1].depthStencil = { 0, 0 }; // 使用 1.0f 作为深度清除值
VkRenderPassBeginInfo render_pass_begin_info = vkb::initializers::render_pass_begin_info();
render_pass_begin_info.renderPass = render_pass;
@@ -95,7 +96,7 @@ void TextureLoading::build_command_buffers()
// --- 绘制全屏背景 ---
if (cam_text.image != VK_NULL_HANDLE && cam_text.view != VK_NULL_HANDLE && cam_text.sampler != VK_NULL_HANDLE) {
vkCmdBindPipeline(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.background);
vkCmdBindDescriptorSets(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout_bg, 0, 1, &descriptor_set_bg, 0, NULL);
//vkCmdBindDescriptorSets(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout_bg, 0, 1, &descriptor_set_bg, 0, NULL);
// 绘制一个三角形 strip,覆盖整个屏幕 (NDC -1 to 1)
// 顶点顺序: (-1,-1), (1,-1), (-1,1), (1,1)
vkCmdDraw(draw_cmd_buffers[i], 4, 1, 0, 0); // 4 个顶点, 1 个实例, 从索引 0 开始
@@ -396,7 +397,8 @@ void TextureLoading::prepare_pipelines()
vkb::initializers::pipeline_depth_stencil_state_create_info(
VK_TRUE, // depthTestEnable
VK_TRUE, // depthWriteEnable
VK_COMPARE_OP_GREATER); // Reversed depth buffer
VK_COMPARE_OP_ALWAYS); // VK_COMPARE_OP_LESS);
//VK_COMPARE_OP_GREATER); // Reversed depth buffer
VkPipelineViewportStateCreateInfo viewport_state =
vkb::initializers::pipeline_viewport_state_create_info(1, 1, 0);
@@ -490,7 +492,7 @@ void TextureLoading::prepare_pipeline_bg()
vkb::initializers::pipeline_depth_stencil_state_create_info(
VK_TRUE, // depthTestEnable - 启用深度测试
VK_FALSE, // depthWriteEnable - 禁用深度写入,让前景物体能正确遮挡背景
VK_COMPARE_OP_LESS); // 比较操作:如果片段的深度小于深度缓冲区中的值,则通过。
VK_COMPARE_OP_ALWAYS); //VK_COMPARE_OP_LESS); // 比较操作:如果片段的深度小于深度缓冲区中的值,则通过。
// 结合清除深度为 1.0 和前景使用 GREATER,这应该可以正确工作。
// 或者使用 VK_COMPARE_OP_ALWAYS 来强制绘制背景,忽略深度。
@@ -594,6 +596,10 @@ bool TextureLoading::prepare(const vkb::ApplicationOptions& options)
std::cout << "Data size: " << dataSize << " bytes" << std::endl;
processWithVulkan(testImage.data(), width, height, 1, rowStride, dataSize, texture);
auto bgImage = generateSimpleTestImage(width, height, &rowStride);
dataSize = bgImage.size();
processWithVulkan(bgImage.data(), width, height, 1, rowStride, dataSize, cam_text);
// --- 生成前景几何体 ---
generate_quad();