完成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