void Update() { PluginEntry.Poll(); if (_receiver == System.IntPtr.Zero) { // The receiver hasn't been set up yet; try to get one. SearchAndCreateTexture(); } else { // We've received textures via this receiver // but now it's disconnected from the sender -> Destroy it. if (PluginEntry.GetTexturePointer(_receiver) != System.IntPtr.Zero && PluginEntry.DetectDisconnection(_receiver)) { OnDestroy(); } } if (_receiver != System.IntPtr.Zero) { if (_sharedTexture == null) { // Try to initialize the shared texture. var ptr = PluginEntry.GetTexturePointer(_receiver); if (ptr != System.IntPtr.Zero) { _sharedTexture = Texture2D.CreateExternalTexture( PluginEntry.GetTextureWidth(_receiver), PluginEntry.GetTextureHeight(_receiver), TextureFormat.ARGB32, false, false, ptr ); } } else { // Update external objects. if (_targetTexture != null) { Graphics.Blit(_sharedTexture, _targetTexture, _fixupMaterial, 1); } else { if (_fixedTexture == null) { _fixedTexture = new RenderTexture(_sharedTexture.width, _sharedTexture.height, 0); } Graphics.Blit(_sharedTexture, _fixedTexture, _fixupMaterial, 1); } if (_targetRenderer != null) { _propertyBlock.SetTexture(_targetMaterialProperty, receivedTexture); _targetRenderer.SetPropertyBlock(_propertyBlock); } } } }
void Update() { PluginEntry.Poll(); }