完成glTFMesh重构
parent
19bb71ee57
commit
037ad7402c
|
@ -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"
|
||||||
|
|
|
@ -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