pull/2/head
InkSoul 2023-05-19 00:08:15 +08:00
parent 2eda8f2493
commit 104ebaa0a7
2 changed files with 13 additions and 5 deletions

1
.gitignore vendored
View File

@ -37,3 +37,4 @@ data/
# vs compile file # vs compile file
out/ out/
.vs/ .vs/
*.zip

View File

@ -234,7 +234,10 @@ VulkanglTFModel::~VulkanglTFModel()
memcpy(skins[i].inverseBindMatrices.data(), &buffer.data[accessor.byteOffset + bufferview.byteOffset], accessor.count * sizeof(glm::mat4)); memcpy(skins[i].inverseBindMatrices.data(), &buffer.data[accessor.byteOffset + bufferview.byteOffset], accessor.count * sizeof(glm::mat4));
//create a host visible shader buffer to store inverse bind matrices for this skin //create a host visible shader buffer to store inverse bind matrices for this skin
VK_CHECK_RESULT(vulkanDevice->createBuffer(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, VK_CHECK_RESULT(
vulkanDevice->createBuffer(
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
&skins[i].ssbo, &skins[i].ssbo,
sizeof(glm::mat4) * skins[i].inverseBindMatrices.size(), sizeof(glm::mat4) * skins[i].inverseBindMatrices.size(),
skins[i].inverseBindMatrices.data())); skins[i].inverseBindMatrices.data()));
@ -327,9 +330,12 @@ VulkanglTFModel::~VulkanglTFModel()
uint32_t firstIndex = static_cast<uint32_t>(indexBuffer.size()); uint32_t firstIndex = static_cast<uint32_t>(indexBuffer.size());
uint32_t vertexStart = static_cast<uint32_t>(vertexBuffer.size()); uint32_t vertexStart = static_cast<uint32_t>(vertexBuffer.size());
uint32_t indexCount = 0; uint32_t indexCount = 0;
//vertices
const float* positionBuffer = nullptr; const float* positionBuffer = nullptr;
const float* normalsBuffer = nullptr; const float* normalsBuffer = nullptr;
const float* texcoordsBuffer = nullptr; const float* texcoordsBuffer = nullptr;
const float* tangentsBuffer = nullptr;
//skin joints
const float* jointWeightsBuffer = nullptr; const float* jointWeightsBuffer = nullptr;
const uint16_t * jointIndicesBuffer = nullptr; const uint16_t * jointIndicesBuffer = nullptr;
size_t vertexCount = 0; size_t vertexCount = 0;
@ -377,9 +383,9 @@ VulkanglTFModel::~VulkanglTFModel()
{ {
Vertex vert{}; Vertex vert{};
vert.pos = glm::vec4(glm::make_vec3(&positionBuffer[v * 3]), 1.0f); vert.pos = glm::vec4(glm::make_vec3(&positionBuffer[v * 3]), 1.0f);
vert.uv = texcoordsBuffer ? glm::make_vec2(&texcoordsBuffer[v*2]):glm::vec4(0.0f); vert.uv = texcoordsBuffer ? glm::make_vec2(&texcoordsBuffer[v*2]) : glm::vec3(0.0f);
vert.normal = glm::normalize(glm::vec3(normalsBuffer ? glm::make_vec3(&normalsBuffer[v * 3]) : glm::vec3(0.0f))); vert.normal = glm::normalize(glm::vec3(normalsBuffer ? glm::make_vec3(&normalsBuffer[v * 3]) : glm::vec3(0.0f)));
vert.color = glm::vec3(1.0f); vert.color = glm::vec3(1.0f,1.0f,nodeIndex);
vert.jointIndices = hasSkin ? glm::vec4(glm::make_vec4(&jointIndicesBuffer[v * 4])) : glm::vec4(0.0f); vert.jointIndices = hasSkin ? glm::vec4(glm::make_vec4(&jointIndicesBuffer[v * 4])) : glm::vec4(0.0f);
vert.jointWeights = hasSkin ? glm::make_vec4(&jointWeightsBuffer[v * 4]) : glm::vec4(0.0f); vert.jointWeights = hasSkin ? glm::make_vec4(&jointWeightsBuffer[v * 4]) : glm::vec4(0.0f);
vertexBuffer.push_back(vert); vertexBuffer.push_back(vert);
@ -597,7 +603,7 @@ VulkanglTFModel::~VulkanglTFModel()
} }
} }
} }
for (auto& child : node.children) { for (auto &child : node.children) {
drawNode(commandBuffer, pipelineLayout, *child); drawNode(commandBuffer, pipelineLayout, *child);
} }
} }
@ -645,6 +651,7 @@ VulkanExample::~VulkanExample()
shaderData.buffer.destroy(); shaderData.buffer.destroy();
} }
void VulkanExample::getEnabledFeatures() void VulkanExample::getEnabledFeatures()
@ -660,7 +667,7 @@ void VulkanExample::getEnabledFeatures()
VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo();
VkClearValue clearValues[2]; VkClearValue clearValues[2];
clearValues[0].color = defaultClearColor;
clearValues[0].color = { { 0.25f, 0.25f, 0.25f, 1.0f } };; clearValues[0].color = { { 0.25f, 0.25f, 0.25f, 1.0f } };;
clearValues[1].depthStencil = { 1.0f, 0 }; clearValues[1].depthStencil = { 1.0f, 0 };