/* * Spout4Unity * Copyright © 2014-2015 Benjamin Kuperberg * Copyright © 2015 Stefan Schlupek * All rights reserved */ using UnityEngine; using System.Collections; using System; namespace Spout{ public class TextureInfo { public string name; private int w; private int h; private IntPtr resourceView; private Texture2D tex; // Use this for initialization public TextureInfo (string name) { this.name = name; } public void setInfos(int width, int height, IntPtr resourceView){ this.w = width; this.h = height; this.resourceView = resourceView; } public Texture2D getTexture() { if(resourceView == IntPtr.Zero) { Debug.LogWarning("ResourceView is null, returning empty texture"); tex = null; //Resources.UnloadUnusedAssets(); //GC.Collect(); //There could be problems with creating a Texture2d at this point! //tex = new Texture2D(64,64,TextureFormat.RGBA32,false,true);//new Texture2D(64,64); //tex.hideFlags = HideFlags.HideAndDontSave; } else { if(tex == null) { tex = Texture2D.CreateExternalTexture(w,h,TextureFormat.RGBA32,true,true,resourceView); /* Without setting the Hideflags there seems to be a reference floating in the scene which causes great trouble with [ExecuteInEditmode] at OnDestroy And we get some weired exception when enter PlayMode and there is an already open Spout sender outside from Unity */ tex.hideFlags = HideFlags.HideAndDontSave; } } return tex; } //Make it comparable for Linq public override bool Equals(object obj) { TextureInfo q = obj as TextureInfo; return q != null && q.name == this.name ; } public override int GetHashCode() { return this.name.GetHashCode() ^ this.name.GetHashCode(); } } }