更改更合适的宏定义文件名,重构gltfPrimitive
							parent
							
								
									7f3056d2fe
								
							
						
					
					
						commit
						19bb71ee57
					
				| 
						 | 
				
			
			@ -9,20 +9,26 @@ set(MAIN_FILE
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
set(GLTF_MODEL_LOADER
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFModel_Marco.h"
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFModel_common.h"
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFBoundingBox.h"
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFBoundingBox.cpp"
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFTexture.h" 
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFTexture.cpp"
 | 
			
		||||
	"render/glTFModel.h" 
 | 
			
		||||
	"render/glTFModel.cpp" 
 | 
			
		||||
)
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFModel.h" 
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFModel.cpp" 
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFMaterial.h" 
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFMaterial.cpp" 
 | 
			
		||||
	
 | 
			
		||||
	"${PLUMAGE_RENDER}/glTFPrimitive.cpp"
 | 
			
		||||
 "render/glTFPrimitive.h")
 | 
			
		||||
 | 
			
		||||
set(VULKAN_BASE
 | 
			
		||||
	"render/VulkanBase_Common.h"
 | 
			
		||||
	"render/VulkanDevice.h"
 | 
			
		||||
	"render/VulkanDevice.cpp"
 | 
			
		||||
	"render/VulkanTextureSampler.h"
 | 
			
		||||
	"render/VulkanTextureSampler.cpp"
 | 
			
		||||
	"${PLUMAGE_RENDER}/VulkanBase_Marco.h"
 | 
			
		||||
	"${PLUMAGE_RENDER}/VulkanDevice.h"
 | 
			
		||||
	"${PLUMAGE_RENDER}/VulkanDevice.cpp"
 | 
			
		||||
	"${PLUMAGE_RENDER}/VulkanTextureSampler.h"
 | 
			
		||||
	"${PLUMAGE_RENDER}/VulkanTextureSampler.cpp"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# wayland requires additional source files
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#ifndef VULKANDEVICE_H
 | 
			
		||||
#define VULKANDEVICE_H
 | 
			
		||||
 | 
			
		||||
#include "VulkanBase_Common.h"
 | 
			
		||||
#include "VulkanBase_Marco.h"
 | 
			
		||||
 | 
			
		||||
#include <vulkan/vulkan.h>
 | 
			
		||||
#include <vector>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#ifndef VULKANTEXTURESAMPLER_H
 | 
			
		||||
#define VULKANTEXTURESAMPLER_H
 | 
			
		||||
 | 
			
		||||
#include "VulkanBase_Common.h"
 | 
			
		||||
#include "VulkanBase_Marco.h"
 | 
			
		||||
 | 
			
		||||
#include <vulkan/vulkan.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,49 +3,56 @@
 | 
			
		|||
GLTFLOADER_NAMESPACE_BEGIN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
glTFBoundingBOX::glTFBoundingBOX()
 | 
			
		||||
	: m_isValid(false)
 | 
			
		||||
glTFBoundingBox::glTFBoundingBox()
 | 
			
		||||
	: m_isValid(true)
 | 
			
		||||
	, m_Min(glm::vec3(0,0,0))
 | 
			
		||||
	, m_Max(glm::vec3(1,1,1))
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
glTFBoundingBOX::glTFBoundingBOX(glm::vec3 min, glm::vec3 max)
 | 
			
		||||
	: m_isValid(false)
 | 
			
		||||
glTFBoundingBox::glTFBoundingBox(glm::vec3 min, glm::vec3 max)
 | 
			
		||||
	: m_isValid(true)
 | 
			
		||||
	, m_Min(min)
 | 
			
		||||
	, m_Max(max)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
glTFBoundingBOX::~glTFBoundingBOX()
 | 
			
		||||
glTFBoundingBox::~glTFBoundingBox()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
glTFBoundingBOX glTFBoundingBOX::getAABB(glm::mat4 matrix)
 | 
			
		||||
glTFBoundingBox glTFBoundingBox::getAABB(glm::mat4 matrix)
 | 
			
		||||
{
 | 
			
		||||
	glm::vec3 min = glm::vec3(matrix[3]);
 | 
			
		||||
	glm::vec3 max = min;
 | 
			
		||||
	glm::vec3 v0, v1;
 | 
			
		||||
 | 
			
		||||
	glm::vec3 right = glm::vec3(matrix[0]);
 | 
			
		||||
	v0 = right * m_Min.x;
 | 
			
		||||
	v1 = right * m_Max.x;
 | 
			
		||||
	v0 = right * m_min.x;
 | 
			
		||||
	v1 = right * m_max.x;
 | 
			
		||||
	min += glm::min(v0, v1);
 | 
			
		||||
	max += glm::max(v0, v1);
 | 
			
		||||
 | 
			
		||||
	glm::vec3 up = glm::vec3(matrix[1]);
 | 
			
		||||
	v0 = up * m_Min.y;
 | 
			
		||||
	v1 = up * m_Max.y;
 | 
			
		||||
	v0 = up * m_min.y;
 | 
			
		||||
	v1 = up * m_max.y;
 | 
			
		||||
	min += glm::min(v0, v1);
 | 
			
		||||
	max += glm::max(v0, v1);
 | 
			
		||||
 | 
			
		||||
	glm::vec3 back = glm::vec3(matrix[2]);
 | 
			
		||||
	v0 = back * m_Min.z;
 | 
			
		||||
	v1 = back * m_Max.z;
 | 
			
		||||
	v0 = back * m_min.z;
 | 
			
		||||
	v1 = back * m_max.z;
 | 
			
		||||
	min += glm::min(v0, v1);
 | 
			
		||||
	max += glm::max(v0, v1);
 | 
			
		||||
 | 
			
		||||
	return glTFBoundingBOX(min, max);
 | 
			
		||||
	return glTFBoundingBox(min, max);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void glTFBoundingBox::setBoundingBox(glm::vec3 min, glm::vec3 max)
 | 
			
		||||
{
 | 
			
		||||
	m_min = min;
 | 
			
		||||
	m_max = max;
 | 
			
		||||
	m_isValid = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +1,26 @@
 | 
			
		|||
#ifndef GLTFBOUNDINGBOX_H
 | 
			
		||||
#ifndef GLTFBOUNDINGBOX_H
 | 
			
		||||
#define GLTFBOUNDINGBOX_H
 | 
			
		||||
 | 
			
		||||
#include "glTFModel_Common.h"
 | 
			
		||||
#include <glm/glm.hpp>
 | 
			
		||||
#include "glTFModel_Marco.h"
 | 
			
		||||
#include <glm.hpp>
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_BEGIN
 | 
			
		||||
 | 
			
		||||
class glTFBoundingBOX
 | 
			
		||||
class glTFBoundingBox
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	glTFBoundingBOX();
 | 
			
		||||
	glTFBoundingBOX(glm::vec3 min, glm::vec3 max);
 | 
			
		||||
	~glTFBoundingBOX();
 | 
			
		||||
	glTFBoundingBox();
 | 
			
		||||
	glTFBoundingBox(glm::vec3 min, glm::vec3 max);
 | 
			
		||||
	~glTFBoundingBox();
 | 
			
		||||
 | 
			
		||||
	glTFBoundingBOX getAABB(glm::mat4 matrix);
 | 
			
		||||
	glTFBoundingBox getAABB(glm::mat4 matrix);
 | 
			
		||||
 | 
			
		||||
	void setBoundingBox(glm::vec3 min, glm::vec3 max);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	glm::vec3 m_Min;
 | 
			
		||||
	glm::vec3 m_Max;
 | 
			
		||||
	glm::vec3 m_min;
 | 
			
		||||
	glm::vec3 m_max;
 | 
			
		||||
	bool m_isValid = false;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
#include "glTFMaterial.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_BEGIN
 | 
			
		||||
 | 
			
		||||
glTFMaterial::glTFMaterial()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
glTFMaterial::~glTFMaterial()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_END
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
#ifndef GLTFMATERIAL_H
 | 
			
		||||
#define GLTFMATERIAL_H
 | 
			
		||||
 | 
			
		||||
#include "glTFModel_Marco.h"
 | 
			
		||||
 | 
			
		||||
#include "glTFModel_common.h"
 | 
			
		||||
 | 
			
		||||
#include "glTFTexture.h"
 | 
			
		||||
 | 
			
		||||
#include <glm.hpp>
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_BEGIN
 | 
			
		||||
 | 
			
		||||
class glTFMaterial
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	glTFMaterial();
 | 
			
		||||
	~glTFMaterial();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	AlphaMode m_alphaMode = ALPHAMODE_OPAQUE;
 | 
			
		||||
	float m_alphaCutoff = 1.0f;
 | 
			
		||||
	float m_metallicFactor = 1.0f;
 | 
			
		||||
	float m_roughnessFactor = 1.0f;
 | 
			
		||||
	glm::vec4 m_baseColorFactor = glm::vec4(1.0f);
 | 
			
		||||
	glm::vec4 m_emissiveFactor = glm::vec4(1.0f);
 | 
			
		||||
	glTFTexture* m_baseColorTexture = nullptr;
 | 
			
		||||
	glTFTexture* m_metallicRoughnessTexture = nullptr;
 | 
			
		||||
	glTFTexture* m_normalTexture = nullptr;
 | 
			
		||||
	glTFTexture* m_occlusionTexture = nullptr;
 | 
			
		||||
	glTFTexture* m_emissiveTexture = nullptr;
 | 
			
		||||
	bool m_doubleSided = false;
 | 
			
		||||
	struct TexCoordSets {
 | 
			
		||||
		uint8_t baseColor = 0;
 | 
			
		||||
		uint8_t metallicRoughness = 0;
 | 
			
		||||
		uint8_t specularGlossiness = 0;
 | 
			
		||||
		uint8_t normal = 0;
 | 
			
		||||
		uint8_t occlusion = 0;
 | 
			
		||||
		uint8_t emissive = 0;
 | 
			
		||||
	} m_texCoordSets;
 | 
			
		||||
	struct Extension {
 | 
			
		||||
		glTFTexture* specularGlossinessTexture = nullptr;
 | 
			
		||||
		glTFTexture* diffuseTexture = nullptr;
 | 
			
		||||
		glm::vec4 diffuseFactor = glm::vec4(1.0f);
 | 
			
		||||
		glm::vec3 specularFactor = glm::vec3(0.0f);
 | 
			
		||||
	} m_extension;
 | 
			
		||||
	struct PbrWorkflows {
 | 
			
		||||
		bool metallicRoughness = true;
 | 
			
		||||
		bool specularGlossiness = false;
 | 
			
		||||
	} m_pbrWorkflows;
 | 
			
		||||
	VkDescriptorSet m_descriptorSet = VK_NULL_HANDLE;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_END
 | 
			
		||||
 | 
			
		||||
#endif // !GLTFMATERIAL_H
 | 
			
		||||
| 
						 | 
				
			
			@ -1,30 +1,22 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
#ifndef GLTFMODEL_COMMON_H
 | 
			
		||||
#define GLTFMODEL_COMMON_H
 | 
			
		||||
 | 
			
		||||
/// 命名空间宏
 | 
			
		||||
#define GLTFLOADER_NAMESPACE_BEGIN namespace glTFLoader {
 | 
			
		||||
#define GLTFLOADER_NAMESPACE_END }
 | 
			
		||||
#include "glTFModel_Marco.h"
 | 
			
		||||
 | 
			
		||||
/// windows 导入导出宏,GLTFLOADER_EXPORTS将在cmake中定义
 | 
			
		||||
/// unix-like 下提供符号可见性控制
 | 
			
		||||
#ifdef GLTFLOADER_STATIC_BUILD
 | 
			
		||||
	#define GLTFLOADER_API
 | 
			
		||||
	#define GLTFLOADER_LOCAL
 | 
			
		||||
#else
 | 
			
		||||
	#ifdef _WIN32
 | 
			
		||||
		#ifdef GLTFLOADER_EXPORTS
 | 
			
		||||
			#define GLTFLOADER_API __declspec(dllexport)
 | 
			
		||||
			#define GLTFLOADER_LOCAL
 | 
			
		||||
		#else
 | 
			
		||||
			#define GLTFLOADER_API __declspec(dllimport)
 | 
			
		||||
			#define GLTFLOADER_LOCAL
 | 
			
		||||
		#endif
 | 
			
		||||
	#else
 | 
			
		||||
		#if __GNUC__ >= 4 || defined(__clang__)
 | 
			
		||||
			#define GLTFLOADER_API __attribute__ ((visibility ("default")))
 | 
			
		||||
			#define GLTFLOADER_LOCAL __attribute__ ((visibility ("hidden")))
 | 
			
		||||
		#else
 | 
			
		||||
			#define GLTFLOADER_API
 | 
			
		||||
			#define GLTFLOADER_LOCAL
 | 
			
		||||
		#endif
 | 
			
		||||
	#endif
 | 
			
		||||
#endif
 | 
			
		||||
GLTFLOADER_NAMESPACE_BEGIN
 | 
			
		||||
 | 
			
		||||
enum AlphaMode
 | 
			
		||||
{
 | 
			
		||||
	ALPHAMODE_OPAQUE,
 | 
			
		||||
	ALPHAMODE_MASK,
 | 
			
		||||
	ALPHAMODE_BLEND
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_END
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // !GLTFMODEL_COMMON_H
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
/// 命名空间宏
 | 
			
		||||
#define GLTFLOADER_NAMESPACE_BEGIN namespace glTFLoader {
 | 
			
		||||
#define GLTFLOADER_NAMESPACE_END }
 | 
			
		||||
 | 
			
		||||
/// windows 导入导出宏,GLTFLOADER_EXPORTS将在cmake中定义
 | 
			
		||||
/// unix-like 下提供符号可见性控制
 | 
			
		||||
#ifdef GLTFLOADER_STATIC_BUILD
 | 
			
		||||
	#define GLTFLOADER_API
 | 
			
		||||
	#define GLTFLOADER_LOCAL
 | 
			
		||||
#else
 | 
			
		||||
	#ifdef _WIN32
 | 
			
		||||
		#ifdef GLTFLOADER_EXPORTS
 | 
			
		||||
			#define GLTFLOADER_API __declspec(dllexport)
 | 
			
		||||
			#define GLTFLOADER_LOCAL
 | 
			
		||||
		#else
 | 
			
		||||
			#define GLTFLOADER_API __declspec(dllimport)
 | 
			
		||||
			#define GLTFLOADER_LOCAL
 | 
			
		||||
		#endif
 | 
			
		||||
	#else
 | 
			
		||||
		#if __GNUC__ >= 4 || defined(__clang__)
 | 
			
		||||
			#define GLTFLOADER_API __attribute__ ((visibility ("default")))
 | 
			
		||||
			#define GLTFLOADER_LOCAL __attribute__ ((visibility ("hidden")))
 | 
			
		||||
		#else
 | 
			
		||||
			#define GLTFLOADER_API
 | 
			
		||||
			#define GLTFLOADER_LOCAL
 | 
			
		||||
		#endif
 | 
			
		||||
	#endif
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
#include "glTFPrimitive.h"
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_BEGIN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
glTFPrimitive::glTFPrimitive(uint32_t firstIndex, uint32_t indexCount, uint32_t vertexCount, glTFMaterial& material)
 | 
			
		||||
	:m_firstIndex(firstIndex)
 | 
			
		||||
	,m_indexCount(indexCount)
 | 
			
		||||
	,m_vertexCount(vertexCount)
 | 
			
		||||
	,m_material(material)
 | 
			
		||||
{
 | 
			
		||||
	m_hasIndices = indexCount > 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
glTFPrimitive::~glTFPrimitive()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void glTFPrimitive::setBoundingBox(glm::vec3 min, glm::vec3 max)
 | 
			
		||||
{
 | 
			
		||||
	m_boundingBox.setBoundingBox(min, max);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_END
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
#ifndef GLTFPRIMITIVE_H
 | 
			
		||||
#define GLTFPRIMITIVE_H
 | 
			
		||||
 | 
			
		||||
#include "glTFModel_Marco.h"
 | 
			
		||||
 | 
			
		||||
#include "glTFMaterial.h"
 | 
			
		||||
#include "glTFBoundingBox.h"
 | 
			
		||||
 | 
			
		||||
#include <glm.hpp>
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_BEGIN
 | 
			
		||||
 | 
			
		||||
class GLTFLOADER_API glTFPrimitive
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	glTFPrimitive(uint32_t firstIndex, uint32_t indexCount, uint32_t vertexCount, glTFMaterial& material);
 | 
			
		||||
	
 | 
			
		||||
	~glTFPrimitive();
 | 
			
		||||
 | 
			
		||||
	void setBoundingBox(glm::vec3 min, glm::vec3 max);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	uint32_t m_firstIndex;
 | 
			
		||||
	uint32_t m_indexCount;
 | 
			
		||||
	uint32_t m_vertexCount;
 | 
			
		||||
	glTFMaterial& m_material;
 | 
			
		||||
	bool m_hasIndices;
 | 
			
		||||
	glTFBoundingBox m_boundingBox;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GLTFLOADER_NAMESPACE_END
 | 
			
		||||
 | 
			
		||||
#endif // !GLTFPRIMITIVE_H
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#ifndef GLTFTEXTURE_H
 | 
			
		||||
#define GLTFTEXTURE_H
 | 
			
		||||
 | 
			
		||||
#include "glTFModel_Common.h"
 | 
			
		||||
#include "glTFModel_Marco.h"
 | 
			
		||||
 | 
			
		||||
#include "VulkanDevice.h"
 | 
			
		||||
#include "VulkanTextureSampler.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue