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