private void OnRenderTexture(string name, Texture2D texture2D) { if (texture2D == null) { for (int i = m_GetTextureTaskList.Count - 1; i >= 0; i--) { GetTextureData task = m_GetTextureTaskList[i]; task.Dispose(); m_GetTextureTaskList.RemoveAt(i); } return; } int index = 0; IntegerRectangle useArea = InsertArea(texture2D.width, texture2D.height, out index); // Log.Info(name + ":texture2D:" + texture2D.width+" "+texture2D.height); if (useArea == null) { Log.Error("No Area"); return; } Rect uv = new Rect((useArea.x), (useArea.y), texture2D.width, texture2D.height); m_PageList[index].AddTexture(useArea.x, useArea.y, texture2D); SaveTextureData saveTextureData = SaveTextureData.Create(); saveTextureData.texIndex = index; saveTextureData.rect = uv; m_UsingTexture[name] = saveTextureData; for (int i = m_GetTextureTaskList.Count - 1; i >= 0; i--) { GetTextureData task = m_GetTextureTaskList[i]; if (task.name.Equals(name)) { m_UsingTexture[name].referenceCount++; } task.Dispose(); m_GetTextureTaskList.RemoveAt(i); } }
/// <summary> /// Image组件用完之后 /// </summary> /// <param name="name"></param> public bool RemoveTexture(string name, bool clearRange = false) { if (m_UsingTexture.ContainsKey(name)) { SaveTextureData data = m_UsingTexture[name]; data.referenceCount--; if (data.referenceCount <= 0)//引用计数0 { if (clearRange) { Log.Info("Remove Texture:" + name); m_PageList[data.texIndex].RemoveTexture(data.rect); } m_UsingTexture.Remove(name); data.Dispose(); return(true); } } return(false); }