完成glTFMesh重构
parent
19bb71ee57
commit
037ad7402c
|
@ -21,7 +21,7 @@ set(GLTF_MODEL_LOADER
|
|||
"${PLUMAGE_RENDER}/glTFMaterial.cpp"
|
||||
|
||||
"${PLUMAGE_RENDER}/glTFPrimitive.cpp"
|
||||
"render/glTFPrimitive.h")
|
||||
"render/glTFPrimitive.h" "render/glTFMesh.h" "render/glTFMesh.cpp")
|
||||
|
||||
set(VULKAN_BASE
|
||||
"${PLUMAGE_RENDER}/VulkanBase_Marco.h"
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
Loading…
Reference in New Issue