mirror of
https://github.com/ZuneDev/Xune.git
synced 2026-07-27 13:13:10 -07:00
106 lines
3.4 KiB
C#
106 lines
3.4 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Microsoft.Iris.Render.Protocol.DataBuffer
|
|
// Assembly: UIX.RenderApi, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: D47658B8-A8EA-43D6-8837-ECE823BFFFC1
|
|
// Assembly location: C:\Program Files\Zune\UIX.RenderApi.dll
|
|
|
|
using Microsoft.Iris.Render.Protocols.Splash.Messaging;
|
|
using System;
|
|
|
|
namespace Microsoft.Iris.Render.Protocol
|
|
{
|
|
internal class DataBuffer : IDataBufferCallback, IRenderHandleOwner
|
|
{
|
|
private RenderPort m_port;
|
|
private RemoteDataBuffer m_remoteBuffer;
|
|
private byte[] m_pvData;
|
|
private uint m_cbSize;
|
|
|
|
public unsafe DataBuffer(RenderPort port, byte[] pvData, uint cbSize)
|
|
{
|
|
this.m_port = port;
|
|
this.m_remoteBuffer = null;
|
|
this.m_pvData = pvData;
|
|
this.m_cbSize = cbSize;
|
|
}
|
|
|
|
~DataBuffer() => this.Dispose(false);
|
|
|
|
public void Dispose()
|
|
{
|
|
this.m_port.Session.AssertOwningThread();
|
|
GC.SuppressFinalize(this);
|
|
this.Dispose(true);
|
|
}
|
|
|
|
private void Dispose(bool fInDispose)
|
|
{
|
|
if (fInDispose && this.m_remoteBuffer != null)
|
|
this.m_remoteBuffer.Dispose();
|
|
this.m_remoteBuffer = null;
|
|
}
|
|
|
|
public RenderPort Port => this.m_port;
|
|
|
|
public uint DataSize => this.m_cbSize;
|
|
|
|
public byte[] Data => this.m_pvData;
|
|
|
|
public RemoteDataBuffer RemoteStub => this.m_remoteBuffer;
|
|
|
|
public unsafe void Commit()
|
|
{
|
|
RENDERHANDLE renderhandle = this.m_port.AllocHandle(this);
|
|
try
|
|
{
|
|
this.m_port.SendDataBuffer(this.m_pvData, this.m_cbSize, renderhandle);
|
|
this.m_remoteBuffer = RemoteDataBuffer.CreateFromHandle(this.m_port, renderhandle);
|
|
this.m_remoteBuffer.SendRegisterOwner(this.m_port.MessagingProtocol.LocalDataBufferCallbackHandle);
|
|
renderhandle = RENDERHANDLE.NULL;
|
|
}
|
|
finally
|
|
{
|
|
if (renderhandle != RENDERHANDLE.NULL)
|
|
{
|
|
if (this.m_remoteBuffer != null)
|
|
{
|
|
this.m_remoteBuffer.Dispose();
|
|
this.m_remoteBuffer = null;
|
|
}
|
|
else
|
|
this.m_port.FreeHandle(renderhandle);
|
|
}
|
|
}
|
|
}
|
|
|
|
public event EventHandler DataConsumed;
|
|
|
|
protected virtual void OnDataConsumed(object sender, EventArgs args)
|
|
{
|
|
this.OnReleaseLocalData();
|
|
if (this.DataConsumed == null)
|
|
return;
|
|
this.DataConsumed(sender, args);
|
|
}
|
|
|
|
protected void OnDataConsumed() => this.OnDataConsumed(this, EventArgs.Empty);
|
|
|
|
public event EventHandler ReleaseLocalData;
|
|
|
|
protected virtual void OnReleaseLocalData(object sender, EventArgs args)
|
|
{
|
|
if (this.ReleaseLocalData == null)
|
|
return;
|
|
this.ReleaseLocalData(sender, args);
|
|
}
|
|
|
|
protected void OnReleaseLocalData() => this.OnReleaseLocalData(this, EventArgs.Empty);
|
|
|
|
RENDERHANDLE IRenderHandleOwner.RenderHandle => this.m_remoteBuffer.RenderHandle;
|
|
|
|
void IRenderHandleOwner.OnDisconnect() => this.m_remoteBuffer = null;
|
|
|
|
void IDataBufferCallback.OnComplete(RENDERHANDLE target) => this.OnDataConsumed();
|
|
}
|
|
}
|