完成glTFMesh重构

reconstruct-gltfLoader
InkSoul 2025-04-06 01:31:20 +08:00
parent 19bb71ee57
commit 037ad7402c
3 changed files with 91 additions and 1 deletions

View File

@ -21,7 +21,7 @@ set(GLTF_MODEL_LOADER
"${PLUMAGE_RENDER}/glTFMaterial.cpp" "${PLUMAGE_RENDER}/glTFMaterial.cpp"
"${PLUMAGE_RENDER}/glTFPrimitive.cpp" "${PLUMAGE_RENDER}/glTFPrimitive.cpp"
"render/glTFPrimitive.h") "render/glTFPrimitive.h" "render/glTFMesh.h" "render/glTFMesh.cpp")
set(VULKAN_BASE set(VULKAN_BASE
"${PLUMAGE_RENDER}/VulkanBase_Marco.h" "${PLUMAGE_RENDER}/VulkanBase_Marco.h"

View File

@ -0,0 +1,42 @@
#include "glTFMesh.h"
#include <VulkanTools.h>
GLTFLOADER_NAMESPACE_BEGIN
glTFMesh::glTFMesh(VulkanBase::VulkanDevice* device, glm::mat4 matrix)
:m_device(device)
{
m_uniformBlock.matrix = matrix;
VK_CHECK_RESULT(m_device->createBuffer(
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
sizeof(m_uniformBlock),
&m_uniformBuffer.buffer,
&m_uniformBuffer.memory,
&m_uniformBlock));
VK_CHECK_RESULT(vkMapMemory(m_device->getLogicalDevice(), m_uniformBuffer.memory, 0, sizeof(m_uniformBlock), 0, &m_uniformBuffer.mapped));
m_uniformBuffer.descriptor = { m_uniformBuffer.buffer, 0, sizeof(m_uniformBlock) };
}
glTFMesh::~glTFMesh()
{
vkDestroyBuffer(m_device->getLogicalDevice(), m_uniformBuffer.buffer, nullptr);
vkFreeMemory(m_device->getLogicalDevice(), m_uniformBuffer.memory, nullptr);
for (glTFPrimitive* primitive : m_primitives)
{
delete primitive;
}
m_primitives.clear();
}
void glTFMesh::setBoundingBox(glm::vec3 min, glm::vec3 max)
{
m_boundingBox.setBoundingBox(min, max);
}
GLTFLOADER_NAMESPACE_END

View File

@ -0,0 +1,48 @@
#ifndef GLTFMESH_H
#define GLTFMESH_H
#include "glTFModel_Marco.h"
#include "VulkanDevice.h"
#include "glTFPrimitive.h"
#include "glTFBoundingBox.h"
#include <glm.hpp>
GLTFLOADER_NAMESPACE_BEGIN
class glTFMesh
{
public:
glTFMesh(VulkanBase::VulkanDevice* device, glm::mat4 matrix);
~glTFMesh();
void setBoundingBox(glm::vec3 min, glm::vec3 max);
private:
VulkanBase::VulkanDevice* m_device;
std::vector<glTFPrimitive*> m_primitives;
glTFBoundingBox m_boundingBox;
glTFBoundingBox m_aabb;
struct UniformBuffer {
VkBuffer buffer;
VkDeviceMemory memory;
VkDescriptorBufferInfo descriptor;
VkDescriptorSet descriptorSet;
void* mapped = nullptr;
} m_uniformBuffer;
struct UniformBlock {
glm::mat4 matrix;
glm::mat4 jointMatrix[128]{};
float jointcount{ 0 };
} m_uniformBlock;
};
GLTFLOADER_NAMESPACE_END
#endif // !GLTFMESH_H