mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-26 18:09:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2023 Dolphin Emulator Project
 | |
| // SPDX-License-Identifier: GPL-2.0-or-later
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <map>
 | |
| #include <memory>
 | |
| #include <span>
 | |
| #include <string>
 | |
| #include <string_view>
 | |
| 
 | |
| #include <picojson.h>
 | |
| 
 | |
| #include "Common/CommonTypes.h"
 | |
| #include "Common/Matrix.h"
 | |
| 
 | |
| #include "VideoCommon/Assets/CustomAsset.h"
 | |
| #include "VideoCommon/NativeVertexFormat.h"
 | |
| #include "VideoCommon/RenderState.h"
 | |
| 
 | |
| namespace File
 | |
| {
 | |
| class IOFile;
 | |
| }
 | |
| 
 | |
| namespace VideoCommon
 | |
| {
 | |
| struct MeshDataChunk
 | |
| {
 | |
|   std::unique_ptr<u8[]> vertex_data;
 | |
|   u32 vertex_stride;
 | |
|   u32 num_vertices;
 | |
|   std::unique_ptr<u16[]> indices;
 | |
|   u32 num_indices;
 | |
|   PortableVertexDeclaration vertex_declaration;
 | |
|   PrimitiveType primitive_type;
 | |
|   u32 components_available;
 | |
|   Common::Vec3 minimum_position;
 | |
|   Common::Vec3 maximum_position;
 | |
|   Common::Matrix44 transform;
 | |
|   std::string material_name;
 | |
| };
 | |
| 
 | |
| struct MeshData
 | |
| {
 | |
|   static bool FromJson(const CustomAssetLibrary::AssetID& asset_id, const picojson::object& json,
 | |
|                        MeshData* data);
 | |
|   static void ToJson(picojson::object& obj, const MeshData& data);
 | |
| 
 | |
|   static bool FromDolphinMesh(std::span<const u8> raw_data, MeshData* data);
 | |
| 
 | |
|   static bool ToDolphinMesh(File::IOFile* file_data, const MeshData& data);
 | |
| 
 | |
|   static bool FromGLTF(std::string_view gltf_file, MeshData* data);
 | |
| 
 | |
|   std::vector<MeshDataChunk> m_mesh_chunks;
 | |
|   std::map<std::string, CustomAssetLibrary::AssetID, std::less<>>
 | |
|       m_mesh_material_to_material_asset_id;
 | |
| };
 | |
| 
 | |
| class MeshAsset final : public CustomLoadableAsset<MeshData>
 | |
| {
 | |
| public:
 | |
|   using CustomLoadableAsset::CustomLoadableAsset;
 | |
| 
 | |
| private:
 | |
|   CustomAssetLibrary::LoadInfo LoadImpl(const CustomAssetLibrary::AssetID& asset_id) override;
 | |
| };
 | |
| }  // namespace VideoCommon
 |