mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-07-18 03:24:15 -04:00
Refactor read assets
Generic PPtr Misc
This commit is contained in:
@ -15,6 +15,9 @@ namespace AssetStudio
|
||||
|
||||
public byte[] ConvertToWav()
|
||||
{
|
||||
var m_AudioData = m_AudioClip.m_AudioData.Value;
|
||||
if (m_AudioData == null || m_AudioData.Length == 0)
|
||||
return null;
|
||||
var exinfo = new FMOD.CREATESOUNDEXINFO();
|
||||
var result = FMOD.Factory.System_Create(out var system);
|
||||
if (result != FMOD.RESULT.OK)
|
||||
@ -24,7 +27,7 @@ namespace AssetStudio
|
||||
return null;
|
||||
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
||||
exinfo.length = (uint)m_AudioClip.m_Size;
|
||||
result = system.createSound(m_AudioClip.m_AudioData, FMOD.MODE.OPENMEMORY, ref exinfo, out var sound);
|
||||
result = system.createSound(m_AudioData, FMOD.MODE.OPENMEMORY, ref exinfo, out var sound);
|
||||
if (result != FMOD.RESULT.OK)
|
||||
return null;
|
||||
result = sound.getSubSound(0, out var subsound);
|
||||
|
@ -19,29 +19,27 @@ namespace AssetStudio
|
||||
|
||||
private Avatar avatar;
|
||||
private Dictionary<uint, string> morphChannelInfo = new Dictionary<uint, string>();
|
||||
private HashSet<ObjectReader> animationClipHashSet = new HashSet<ObjectReader>();
|
||||
private HashSet<AnimationClip> animationClipHashSet = new HashSet<AnimationClip>();
|
||||
private Dictionary<uint, string> bonePathHash = new Dictionary<uint, string>();
|
||||
private Dictionary<ObjectReader, string> textureNameDictionary = new Dictionary<ObjectReader, string>();
|
||||
private Dictionary<Texture2D, string> textureNameDictionary = new Dictionary<Texture2D, string>();
|
||||
|
||||
public ModelConverter(GameObject m_GameObject)
|
||||
{
|
||||
if (m_GameObject.m_Animator != null && m_GameObject.m_Animator.TryGet(out var m_Animator))
|
||||
if (m_GameObject.m_Animator != null)
|
||||
{
|
||||
var animator = new Animator(m_Animator);
|
||||
InitWithAnimator(animator);
|
||||
CollectAnimationClip(animator);
|
||||
InitWithAnimator(m_GameObject.m_Animator);
|
||||
CollectAnimationClip(m_GameObject.m_Animator);
|
||||
}
|
||||
else
|
||||
InitWithGameObject(m_GameObject);
|
||||
ConvertAnimations();
|
||||
}
|
||||
|
||||
public ModelConverter(GameObject m_GameObject, ObjectReader[] animationList)
|
||||
public ModelConverter(GameObject m_GameObject, AnimationClip[] animationList)
|
||||
{
|
||||
if (m_GameObject.m_Animator != null && m_GameObject.m_Animator.TryGet(out var m_Animator))
|
||||
if (m_GameObject.m_Animator != null)
|
||||
{
|
||||
var animator = new Animator(m_Animator);
|
||||
InitWithAnimator(animator);
|
||||
InitWithAnimator(m_GameObject.m_Animator);
|
||||
}
|
||||
else
|
||||
InitWithGameObject(m_GameObject);
|
||||
@ -59,7 +57,7 @@ namespace AssetStudio
|
||||
ConvertAnimations();
|
||||
}
|
||||
|
||||
public ModelConverter(Animator m_Animator, ObjectReader[] animationList)
|
||||
public ModelConverter(Animator m_Animator, AnimationClip[] animationList)
|
||||
{
|
||||
InitWithAnimator(m_Animator);
|
||||
foreach (var animationClip in animationList)
|
||||
@ -72,27 +70,26 @@ namespace AssetStudio
|
||||
private void InitWithAnimator(Animator m_Animator)
|
||||
{
|
||||
if (m_Animator.m_Avatar.TryGet(out var m_Avatar))
|
||||
avatar = new Avatar(m_Avatar);
|
||||
avatar = m_Avatar;
|
||||
|
||||
m_Animator.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||
m_Animator.m_GameObject.TryGet(out var m_GameObject);
|
||||
InitWithGameObject(m_GameObject, m_Animator.m_HasTransformHierarchy);
|
||||
}
|
||||
|
||||
private void InitWithGameObject(GameObject m_GameObject, bool hasTransformHierarchy = true)
|
||||
{
|
||||
m_GameObject.m_Transform.TryGetTransform(out var m_Transform);
|
||||
var rootTransform = m_Transform;
|
||||
var m_Transform = m_GameObject.m_Transform;
|
||||
if (!hasTransformHierarchy)
|
||||
{
|
||||
var rootFrame = ConvertFrame(rootTransform);
|
||||
var rootFrame = ConvertFrame(m_Transform);
|
||||
FrameList.Add(rootFrame);
|
||||
DeoptimizeTransformHierarchy();
|
||||
}
|
||||
else
|
||||
{
|
||||
var frameList = new List<ImportedFrame>();
|
||||
var tempTransform = rootTransform;
|
||||
while (tempTransform.m_Father.TryGetTransform(out var m_Father))
|
||||
var tempTransform = m_Transform;
|
||||
while (tempTransform.m_Father.TryGet(out var m_Father))
|
||||
{
|
||||
frameList.Add(ConvertFrame(m_Father));
|
||||
tempTransform = m_Father;
|
||||
@ -113,7 +110,7 @@ namespace AssetStudio
|
||||
ConvertFrames(m_Transform, null);
|
||||
}
|
||||
|
||||
CreateBonePathHash(rootTransform);
|
||||
CreateBonePathHash(m_Transform);
|
||||
}
|
||||
|
||||
ConvertMeshRenderer(m_Transform);
|
||||
@ -121,83 +118,68 @@ namespace AssetStudio
|
||||
|
||||
private void ConvertMeshRenderer(Transform m_Transform)
|
||||
{
|
||||
m_Transform.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||
foreach (var m_Component in m_GameObject.m_Components)
|
||||
m_Transform.m_GameObject.TryGet(out var m_GameObject);
|
||||
|
||||
if (m_GameObject.m_MeshRenderer != null)
|
||||
{
|
||||
if (m_Component.TryGet(out var objectReader))
|
||||
ConvertMeshRenderer(m_GameObject.m_MeshRenderer);
|
||||
}
|
||||
|
||||
if (m_GameObject.m_SkinnedMeshRenderer != null)
|
||||
{
|
||||
ConvertMeshRenderer(m_GameObject.m_SkinnedMeshRenderer);
|
||||
}
|
||||
|
||||
if (m_GameObject.m_Animation != null)
|
||||
{
|
||||
foreach (var animation in m_GameObject.m_Animation.m_Animations)
|
||||
{
|
||||
switch (objectReader.type)
|
||||
if (animation.TryGet(out var animationClip))
|
||||
{
|
||||
case ClassIDType.MeshRenderer:
|
||||
{
|
||||
var m_Renderer = new MeshRenderer(objectReader);
|
||||
ConvertMeshRenderer(m_Renderer);
|
||||
break;
|
||||
}
|
||||
case ClassIDType.SkinnedMeshRenderer:
|
||||
{
|
||||
var m_SkinnedMeshRenderer = new SkinnedMeshRenderer(objectReader);
|
||||
ConvertMeshRenderer(m_SkinnedMeshRenderer);
|
||||
break;
|
||||
}
|
||||
case ClassIDType.Animation:
|
||||
{
|
||||
var m_Animation = new Animation(objectReader);
|
||||
foreach (var animation in m_Animation.m_Animations)
|
||||
{
|
||||
if (animation.TryGet(out var animationClip))
|
||||
{
|
||||
animationClipHashSet.Add(animationClip);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
animationClipHashSet.Add(animationClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var pptr in m_Transform.m_Children)
|
||||
{
|
||||
if (pptr.TryGetTransform(out var child))
|
||||
if (pptr.TryGet(out var child))
|
||||
ConvertMeshRenderer(child);
|
||||
}
|
||||
}
|
||||
|
||||
private void CollectAnimationClip(Animator m_Animator)
|
||||
{
|
||||
if (m_Animator.m_Controller.TryGet(out var objectReader))
|
||||
if (m_Animator.m_Controller.TryGet(out var m_Controller))
|
||||
{
|
||||
if (objectReader.type == ClassIDType.AnimatorOverrideController)
|
||||
switch (m_Controller)
|
||||
{
|
||||
var m_AnimatorOverrideController = new AnimatorOverrideController(objectReader);
|
||||
if (m_AnimatorOverrideController.m_Controller.TryGet(out objectReader))
|
||||
{
|
||||
var m_AnimatorController = new AnimatorController(objectReader);
|
||||
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
||||
case AnimatorOverrideController m_AnimatorOverrideController:
|
||||
{
|
||||
if (m_AnimationClip.TryGet(out objectReader))
|
||||
if (m_AnimatorOverrideController.m_Controller.TryGet<AnimatorController>(out var m_AnimatorController))
|
||||
{
|
||||
animationClipHashSet.Add(objectReader);
|
||||
foreach (var pptr in m_AnimatorController.m_AnimationClips)
|
||||
{
|
||||
if (pptr.TryGet(out var m_AnimationClip))
|
||||
{
|
||||
animationClipHashSet.Add(m_AnimationClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
/*foreach (var clip in m_AnimatorOverrideController.m_Clips)
|
||||
{
|
||||
if (assetsfileList.TryGetPD(clip[1], out assetPreloadData))
|
||||
|
||||
case AnimatorController m_AnimatorController:
|
||||
{
|
||||
animationList.Add(new AnimationClip(assetPreloadData));
|
||||
foreach (var pptr in m_AnimatorController.m_AnimationClips)
|
||||
{
|
||||
if (pptr.TryGet(out var m_AnimationClip))
|
||||
{
|
||||
animationClipHashSet.Add(m_AnimationClip);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
else if (objectReader.type == ClassIDType.AnimatorController)
|
||||
{
|
||||
var m_AnimatorController = new AnimatorController(objectReader);
|
||||
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
||||
{
|
||||
if (m_AnimationClip.TryGet(out objectReader))
|
||||
{
|
||||
animationClipHashSet.Add(objectReader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -205,7 +187,7 @@ namespace AssetStudio
|
||||
private ImportedFrame ConvertFrame(Transform trans)
|
||||
{
|
||||
var frame = new ImportedFrame();
|
||||
trans.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||
trans.m_GameObject.TryGet(out var m_GameObject);
|
||||
frame.Name = m_GameObject.m_Name;
|
||||
frame.InitChildren(trans.m_Children.Count);
|
||||
var m_EulerRotation = QuatToEuler(new[] { trans.m_LocalRotation[0], -trans.m_LocalRotation[1], -trans.m_LocalRotation[2], trans.m_LocalRotation[3] });
|
||||
@ -243,7 +225,7 @@ namespace AssetStudio
|
||||
}
|
||||
foreach (var pptr in trans.m_Children)
|
||||
{
|
||||
if (pptr.TryGetTransform(out var child))
|
||||
if (pptr.TryGet(out var child))
|
||||
ConvertFrames(child, frame);
|
||||
}
|
||||
}
|
||||
@ -254,9 +236,8 @@ namespace AssetStudio
|
||||
if (mesh == null)
|
||||
return;
|
||||
var iMesh = new ImportedMesh();
|
||||
meshR.m_GameObject.TryGetGameObject(out var m_GameObject2);
|
||||
m_GameObject2.m_Transform.TryGetTransform(out var meshTransform);
|
||||
iMesh.Name = GetMeshPath(meshTransform);
|
||||
meshR.m_GameObject.TryGet(out var m_GameObject2);
|
||||
iMesh.Name = GetMeshPath(m_GameObject2.m_Transform);
|
||||
iMesh.SubmeshList = new List<ImportedSubmesh>();
|
||||
var subHashSet = new HashSet<int>();
|
||||
var combine = false;
|
||||
@ -294,9 +275,9 @@ namespace AssetStudio
|
||||
Material mat = null;
|
||||
if (i - firstSubMesh < meshR.m_Materials.Length)
|
||||
{
|
||||
if (meshR.m_Materials[i - firstSubMesh].TryGet(out var MaterialPD))
|
||||
if (meshR.m_Materials[i - firstSubMesh].TryGet(out var m_Material))
|
||||
{
|
||||
mat = new Material(MaterialPD);
|
||||
mat = m_Material;
|
||||
}
|
||||
}
|
||||
ImportedMaterial iMat = ConvertMaterial(mat);
|
||||
@ -431,9 +412,9 @@ namespace AssetStudio
|
||||
for (int i = 0; i < sMesh.m_Bones.Length; i++)
|
||||
{
|
||||
var bone = new ImportedBone();
|
||||
if (sMesh.m_Bones[i].TryGetTransform(out var m_Transform))
|
||||
if (sMesh.m_Bones[i].TryGet(out var m_Transform))
|
||||
{
|
||||
if (m_Transform.m_GameObject.TryGetGameObject(out var m_GameObject))
|
||||
if (m_Transform.m_GameObject.TryGet(out var m_GameObject))
|
||||
{
|
||||
bone.Name = m_GameObject.m_Name;
|
||||
}
|
||||
@ -538,7 +519,7 @@ namespace AssetStudio
|
||||
//TODO combine mesh
|
||||
if (combine)
|
||||
{
|
||||
meshR.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||
meshR.m_GameObject.TryGet(out var m_GameObject);
|
||||
var frame = ImportedHelpers.FindChildOrRoot(m_GameObject.m_Name, FrameList[0]);
|
||||
if (frame?.Parent != null)
|
||||
{
|
||||
@ -567,26 +548,19 @@ namespace AssetStudio
|
||||
{
|
||||
if (meshR is SkinnedMeshRenderer sMesh)
|
||||
{
|
||||
if (sMesh.m_Mesh.TryGet(out var MeshPD))
|
||||
if (sMesh.m_Mesh.TryGet(out var m_Mesh))
|
||||
{
|
||||
return new Mesh(MeshPD);
|
||||
return m_Mesh;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
meshR.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||
foreach (var m_Component in m_GameObject.m_Components)
|
||||
meshR.m_GameObject.TryGet(out var m_GameObject);
|
||||
if (m_GameObject.m_MeshFilter != null)
|
||||
{
|
||||
if (m_Component.TryGet(out var objectReader))
|
||||
if (m_GameObject.m_MeshFilter.m_Mesh.TryGet(out var m_Mesh))
|
||||
{
|
||||
if (objectReader.type == ClassIDType.MeshFilter)
|
||||
{
|
||||
var m_MeshFilter = new MeshFilter(objectReader);
|
||||
if (m_MeshFilter.m_Mesh.TryGet(out var MeshPD))
|
||||
{
|
||||
return new Mesh(MeshPD);
|
||||
}
|
||||
}
|
||||
return m_Mesh;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -596,7 +570,7 @@ namespace AssetStudio
|
||||
|
||||
private string GetMeshPath(Transform meshTransform)
|
||||
{
|
||||
meshTransform.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||
meshTransform.m_GameObject.TryGet(out var m_GameObject);
|
||||
var curFrame = ImportedHelpers.FindChildOrRoot(m_GameObject.m_Name, FrameList[0]);
|
||||
var path = curFrame.Name;
|
||||
while (curFrame.Parent != null)
|
||||
@ -610,8 +584,8 @@ namespace AssetStudio
|
||||
|
||||
private string GetTransformPath(Transform transform)
|
||||
{
|
||||
transform.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||
if (transform.m_Father.TryGetTransform(out var father))
|
||||
transform.m_GameObject.TryGet(out var m_GameObject);
|
||||
if (transform.m_Father.TryGet(out var father))
|
||||
{
|
||||
return GetTransformPath(father) + "/" + m_GameObject.m_Name;
|
||||
}
|
||||
@ -675,9 +649,9 @@ namespace AssetStudio
|
||||
foreach (var texEnv in mat.m_TexEnvs)
|
||||
{
|
||||
Texture2D m_Texture2D = null;
|
||||
if (texEnv.m_Texture.TryGet(out var m_Texture) && m_Texture.type == ClassIDType.Texture2D) //TODO other Texture
|
||||
if (texEnv.m_Texture.TryGet<Texture2D>(out var m_Texture)) //TODO other Texture
|
||||
{
|
||||
m_Texture2D = new Texture2D(m_Texture, true);
|
||||
m_Texture2D = m_Texture;
|
||||
}
|
||||
|
||||
if (m_Texture2D == null)
|
||||
@ -758,9 +732,8 @@ namespace AssetStudio
|
||||
|
||||
private void ConvertAnimations()
|
||||
{
|
||||
foreach (var assetPreloadData in animationClipHashSet)
|
||||
foreach (var animationClip in animationClipHashSet)
|
||||
{
|
||||
var animationClip = new AnimationClip(assetPreloadData);
|
||||
var iAnim = new ImportedKeyframedAnimation();
|
||||
AnimationList.Add(iAnim);
|
||||
iAnim.Name = animationClip.m_Name;
|
||||
@ -1027,7 +1000,7 @@ namespace AssetStudio
|
||||
}
|
||||
foreach (var pptr in m_Transform.m_Children)
|
||||
{
|
||||
if (pptr.TryGetTransform(out var child))
|
||||
if (pptr.TryGet(out var child))
|
||||
CreateBonePathHash(child);
|
||||
}
|
||||
}
|
||||
|
@ -13,9 +13,8 @@ namespace AssetStudio
|
||||
{
|
||||
var m_MonoBehaviour = new MonoBehaviour(reader);
|
||||
var sb = CreateMonoBehaviourHeader(m_MonoBehaviour);
|
||||
if (m_MonoBehaviour.m_Script.TryGet(out var script))
|
||||
if (m_MonoBehaviour.m_Script.TryGet(out var m_Script))
|
||||
{
|
||||
var m_Script = new MonoScript(script);
|
||||
if (!moduleDic.TryGetValue(m_Script.m_AssemblyName, out var module))
|
||||
{
|
||||
return sb.ToString();
|
||||
@ -150,7 +149,7 @@ namespace AssetStudio
|
||||
}
|
||||
if (indent != -1 && IsAssignFromUnityObject(typeDef))
|
||||
{
|
||||
var pptr = reader.ReadPPtr();
|
||||
var pptr = new PPtr<Object>(reader);
|
||||
sb.AppendLine($"{new string('\t', indent)}PPtr<{typeDef.Name}> {name} = {{fileID: {pptr.m_FileID}, pathID: {pptr.m_PathID}}}");
|
||||
return;
|
||||
}
|
||||
@ -291,19 +290,24 @@ namespace AssetStudio
|
||||
{
|
||||
switch (typeDef.FullName)
|
||||
{
|
||||
case "UnityEngine.Vector2":
|
||||
case "UnityEngine.Vector3":
|
||||
case "UnityEngine.Vector4":
|
||||
case "UnityEngine.Rect":
|
||||
case "UnityEngine.Quaternion":
|
||||
case "UnityEngine.Matrix4x4":
|
||||
case "UnityEngine.AnimationCurve":
|
||||
case "UnityEngine.Bounds":
|
||||
case "UnityEngine.BoundsInt":
|
||||
case "UnityEngine.Color":
|
||||
case "UnityEngine.Color32":
|
||||
case "UnityEngine.LayerMask":
|
||||
case "UnityEngine.AnimationCurve":
|
||||
case "UnityEngine.Gradient":
|
||||
case "UnityEngine.RectOffset":
|
||||
case "UnityEngine.GUIStyle":
|
||||
case "UnityEngine.LayerMask":
|
||||
case "UnityEngine.Matrix4x4":
|
||||
case "UnityEngine.Quaternion":
|
||||
case "UnityEngine.Rect":
|
||||
case "UnityEngine.RectInt":
|
||||
case "UnityEngine.RectOffset":
|
||||
case "UnityEngine.Vector2":
|
||||
case "UnityEngine.Vector2Int":
|
||||
case "UnityEngine.Vector3":
|
||||
case "UnityEngine.Vector3Int":
|
||||
case "UnityEngine.Vector4":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
@ -42,7 +42,7 @@ namespace AssetStudio
|
||||
new ShaderProgram(blobReader);
|
||||
}
|
||||
}*/
|
||||
return shader.reader.Dump();
|
||||
return shader.Dump();
|
||||
}
|
||||
return Encoding.UTF8.GetString(shader.m_Script);
|
||||
}
|
||||
|
@ -8,27 +8,26 @@ namespace AssetStudio
|
||||
{
|
||||
public static Bitmap GetImageFromSprite(Sprite m_Sprite)
|
||||
{
|
||||
if (m_Sprite.m_SpriteAtlas != null && m_Sprite.m_SpriteAtlas.TryGet(out var objectReader))
|
||||
if (m_Sprite.m_SpriteAtlas != null && m_Sprite.m_SpriteAtlas.TryGet(out var m_SpriteAtlas))
|
||||
{
|
||||
var m_SpriteAtlas = new SpriteAtlas(objectReader);
|
||||
if (m_SpriteAtlas.m_RenderDataMap.TryGetValue(m_Sprite.m_RenderDataKey, out var spriteAtlasData) && spriteAtlasData.texture.TryGet(out objectReader))
|
||||
if (m_SpriteAtlas.m_RenderDataMap.TryGetValue(m_Sprite.m_RenderDataKey, out var spriteAtlasData) && spriteAtlasData.texture.TryGet(out var m_Texture2D))
|
||||
{
|
||||
return CutImage(objectReader, spriteAtlasData.textureRect, m_Sprite, spriteAtlasData.settingsRaw);
|
||||
return CutImage(m_Texture2D, spriteAtlasData.textureRect, m_Sprite, spriteAtlasData.settingsRaw);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Sprite.texture.TryGet(out objectReader))
|
||||
if (m_Sprite.texture.TryGet(out var m_Texture2D))
|
||||
{
|
||||
return CutImage(objectReader, m_Sprite.textureRect, m_Sprite, m_Sprite.settingsRaw);
|
||||
return CutImage(m_Texture2D, m_Sprite.textureRect, m_Sprite, m_Sprite.settingsRaw);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Bitmap CutImage(ObjectReader texture2DAsset, RectangleF textureRect, Sprite m_Sprite, SpriteSettings settingsRaw)
|
||||
private static Bitmap CutImage(Texture2D m_Texture2D, RectangleF textureRect, Sprite m_Sprite, SpriteSettings settingsRaw)
|
||||
{
|
||||
var texture2D = new Texture2DConverter(new Texture2D(texture2DAsset, true));
|
||||
var texture2D = new Texture2DConverter(m_Texture2D);
|
||||
var originalImage = texture2D.ConvertToBitmap(false);
|
||||
if (originalImage != null)
|
||||
{
|
||||
|
@ -87,7 +87,7 @@ namespace AssetStudio
|
||||
public Texture2DConverter(Texture2D m_Texture2D)
|
||||
{
|
||||
image_data_size = m_Texture2D.image_data_size;
|
||||
image_data = m_Texture2D.image_data;
|
||||
image_data = m_Texture2D.image_data.Value;
|
||||
m_Width = m_Texture2D.m_Width;
|
||||
m_Height = m_Texture2D.m_Height;
|
||||
m_TextureFormat = m_Texture2D.m_TextureFormat;
|
||||
@ -913,7 +913,7 @@ namespace AssetStudio
|
||||
buff = new byte[stride * m_Height];
|
||||
for (int i = 0; i < m_Height; i++)
|
||||
{
|
||||
Array.Copy(image_data, i * m_Width * 2, buff, i * stride, m_Width * 2);
|
||||
Buffer.BlockCopy(image_data, i * m_Width * 2, buff, i * stride, m_Width * 2);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user