/// <summary> /// Creates a new Queue entry /// </summary> /// <param name="textureOrRef">TTextureType or CTextureRef</param> /// <param name="action"></param> /// <param name="dataSize">Size of data</param> /// <param name="data">Texture data</param> public STextureQueue(object textureOrRef, EQueueAction action, Size dataSize, byte[] data) { TextureOrRef = textureOrRef; Action = action; DataSize = dataSize; Data = data; }
/// <summary> /// Creates a new Queue entry /// </summary> /// <param name="textureOrRef">TTextureType or CTextureRef</param> /// <param name="action"></param> /// <param name="data">Texture data as a bitmap</param> public STextureQueue(object textureOrRef, EQueueAction action, Bitmap data) { TextureOrRef = textureOrRef; Action = action; Data = data; DataSize = new Size(); }
/// <summary> /// Helper function to resize a bitmap and enqueue it /// </summary> /// <param name="texture"></param> /// <param name="bmp"></param> /// <param name="action"></param> private void _ResizeTextureAndEnqueue(object texture, Bitmap bmp, EQueueAction action) { Bitmap bmp2 = bmp.Resize(_GetNewTextureSize(bmp.Size)); bmp.Dispose(); lock (_TextureQueue) { _TextureQueue.Enqueue(new STextureQueue(texture, action, bmp2)); } }
/// <summary> /// Enqueues a bitmap to add or update the texture /// </summary> /// <param name="texture">TTextureType (Add) or CTextureRef(Update)</param> /// <param name="bmp"></param> /// <param name="action"></param> /// <param name="asyncResize">True if resizing should be done in an extra thread</param> private void _EnqueueTextureAddOrUpdate(Object texture, Bitmap bmp, EQueueAction action, bool asyncResize) { Debug.Assert(action == EQueueAction.Add || action == EQueueAction.Update); Debug.Assert(action != EQueueAction.Add || texture is TTextureType); Debug.Assert(action != EQueueAction.Update || texture is CTextureRef); if (_RequiresResize(bmp.GetSize())) { if (asyncResize) { Task.Factory.StartNew(() => _ResizeTextureAndEnqueue(texture, bmp, action)); } else { _ResizeTextureAndEnqueue(texture, bmp, action); } } else { lock (_TextureQueue) { _TextureQueue.Enqueue(new STextureQueue(texture, action, bmp)); } } }