修改为单纹理,在android上编译通过,apk修改为日期名字

This commit is contained in:
xsl
2025-10-27 21:48:15 +08:00
parent 300340bb19
commit 10505c616f
12 changed files with 158 additions and 82 deletions
+93 -38
View File
@@ -360,9 +360,20 @@ void FaceApp::create_face_pipelines()
viewportState.scissorCount = 1;
viewportState.pScissors = &scissor;
std::vector<char> vertShaderCode;
std::vector<char> fragShaderCode;
if (kThick)
{
vertShaderCode = readFile("shaders/texture_thick.vert.spv");
fragShaderCode = readFile("shaders/texture_thick.frag.spv");
}
else
{
vertShaderCode = readFile("shaders/texture.vert.spv");
fragShaderCode = readFile("shaders/texture.frag.spv");
}
auto vertShaderCode = readFile("shaders/texture.vert.spv");
auto fragShaderCode = readFile("shaders/texture.frag.spv");
VkShaderModule vertShaderModule = createShaderModule(this->device, vertShaderCode);
VkShaderModule fragShaderModule = createShaderModule(this->device, fragShaderCode);
@@ -492,22 +503,38 @@ void FaceApp::setup_descriptor_set_layout()
set_layout_binding_fragment.binding = 1;
set_layout_binding_fragment.descriptorCount = 1;
// 添加第二个纹理绑定点
VkDescriptorSetLayoutBinding set_layout_binding_fragment1{};
set_layout_binding_fragment1.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
set_layout_binding_fragment1.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
set_layout_binding_fragment1.binding = 2;
set_layout_binding_fragment1.descriptorCount = 1;
if (kThick)
{
// 添加第二个纹理绑定点
VkDescriptorSetLayoutBinding set_layout_binding_fragment1{};
set_layout_binding_fragment1.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
set_layout_binding_fragment1.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
set_layout_binding_fragment1.binding = 2;
set_layout_binding_fragment1.descriptorCount = 1;
std::vector<VkDescriptorSetLayoutBinding> set_layout_bindings{ set_layout_binding_vertex , set_layout_binding_fragment, set_layout_binding_fragment1 };
std::vector<VkDescriptorSetLayoutBinding> set_layout_bindings{ set_layout_binding_vertex , set_layout_binding_fragment, set_layout_binding_fragment1 };
VkDescriptorSetLayoutCreateInfo descriptor_layout{};
descriptor_layout.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
descriptor_layout.pBindings = set_layout_bindings.data();
descriptor_layout.bindingCount = static_cast<uint32_t>(set_layout_bindings.size());
VkDescriptorSetLayoutCreateInfo descriptor_layout{};
descriptor_layout.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
descriptor_layout.pBindings = set_layout_bindings.data();
descriptor_layout.bindingCount = static_cast<uint32_t>(set_layout_bindings.size());
VK_CHECK(vkCreateDescriptorSetLayout(device, &descriptor_layout, nullptr, &m_descriptorSetLayout));
VK_CHECK(vkCreateDescriptorSetLayout(device, &descriptor_layout, nullptr, &m_descriptorSetLayout));
}
else
{
std::vector<VkDescriptorSetLayoutBinding> set_layout_bindings{ set_layout_binding_vertex , set_layout_binding_fragment };
VkDescriptorSetLayoutCreateInfo descriptor_layout{};
descriptor_layout.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
descriptor_layout.pBindings = set_layout_bindings.data();
descriptor_layout.bindingCount = static_cast<uint32_t>(set_layout_bindings.size());
VK_CHECK(vkCreateDescriptorSetLayout(device, &descriptor_layout, nullptr, &m_descriptorSetLayout));
}
VkPipelineLayoutCreateInfo pipeline_layout_create_info{};
@@ -550,12 +577,6 @@ void FaceApp::setup_descriptor_set()
image_descriptor.sampler = m_texs[i].sampler;
image_descriptor.imageLayout = m_texs[i].image_layout;
// 第二个纹理描述符 - 假设你的第二个纹理变量名为 tex_demo1
VkDescriptorImageInfo image_descriptor1;
image_descriptor1.imageView = m_texs_ex[i].view;
image_descriptor1.sampler = m_texs_ex[i].sampler;
image_descriptor1.imageLayout = m_texs_ex[i].image_layout;
VkWriteDescriptorSet write_descriptor_set_uniform{};
write_descriptor_set_uniform.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
write_descriptor_set_uniform.dstSet = m_descriptor_sets[i];
@@ -573,23 +594,51 @@ void FaceApp::setup_descriptor_set()
write_descriptor_set_image.pImageInfo = &image_descriptor;
write_descriptor_set_image.descriptorCount = 1;
// 添加第二个纹理的写入描述符
VkWriteDescriptorSet write_descriptor_set_image1{};
write_descriptor_set_image1.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
write_descriptor_set_image1.dstSet = m_descriptor_sets[i];
write_descriptor_set_image1.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
write_descriptor_set_image1.dstBinding = 2; // 绑定到位置2
write_descriptor_set_image1.pImageInfo = &image_descriptor1;
write_descriptor_set_image1.descriptorCount = 1;
std::vector<VkWriteDescriptorSet> write_descriptor_sets =
if (kThick)
{
write_descriptor_set_uniform,
write_descriptor_set_image,
write_descriptor_set_image1, // 添加第二个纹理
};
// 第二个纹理描述符 - 假设你的第二个纹理变量名为 tex_demo1
VkDescriptorImageInfo image_descriptor1;
image_descriptor1.imageView = m_texs_ex[i].view;
image_descriptor1.sampler = m_texs_ex[i].sampler;
image_descriptor1.imageLayout = m_texs_ex[i].image_layout;
vkUpdateDescriptorSets(device, static_cast<uint32_t>(write_descriptor_sets.size()), write_descriptor_sets.data(), 0, NULL);
// 添加第二个纹理的写入描述符
VkWriteDescriptorSet write_descriptor_set_image1{};
write_descriptor_set_image1.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
write_descriptor_set_image1.dstSet = m_descriptor_sets[i];
write_descriptor_set_image1.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
write_descriptor_set_image1.dstBinding = 2; // 绑定到位置2
write_descriptor_set_image1.pImageInfo = &image_descriptor1;
write_descriptor_set_image1.descriptorCount = 1;
std::vector<VkWriteDescriptorSet> write_descriptor_sets =
{
write_descriptor_set_uniform,
write_descriptor_set_image,
write_descriptor_set_image1, // 添加第二个纹理
};
vkUpdateDescriptorSets(device, static_cast<uint32_t>(write_descriptor_sets.size()), write_descriptor_sets.data(), 0, NULL);
}
else
{
std::vector<VkWriteDescriptorSet> write_descriptor_sets =
{
write_descriptor_set_uniform,
write_descriptor_set_image,
};
vkUpdateDescriptorSets(device, static_cast<uint32_t>(write_descriptor_sets.size()), write_descriptor_sets.data(), 0, NULL);
}
}
@@ -1099,13 +1148,19 @@ void FaceApp::changeMotion(Motion& motion)
{
string path = _curMotion.type + "/" + _curMotion.technique + "/" + _curMotion.step + "/" + _curMotion.show_type;
string path_name = path + "/" + _curMotion.png_name + std::to_string(i) + ".png";
string path_name_ex = path + "/" + _curMotion.png_name + std::to_string(i) + "_thick.png";
#ifdef _WIN32
loadTextureExample(path_name, m_texs[i], true);
loadTextureExample(path_name_ex, m_texs_ex[i], true);
if (kThick)
{
string path_name_ex = path + "/" + _curMotion.png_name + std::to_string(i) + "_thick.png";
loadTextureExample(path_name_ex, m_texs_ex[i], true);
}
#else
loadTexture(path_name, m_texs[i], true);
loadTexture(path_name, m_texs_ex[i], true);
if (kThick)
{
loadTexture(path_name, m_texs_ex[i], true);
}
#endif // _WIN32