Files
VLCForUnity/Runtime/VLC for Unity/Misc/BackgroundKey.cs
T
2025-06-24 08:39:12 +08:00

71 lines
1.6 KiB
C#

using System;
using System.Runtime.InteropServices;
using UnityEngine;
public class BackgroundKey : MonoBehaviour
{
#region dll
[DllImport("Dwmapi.dll")]static extern uint DwmExtendFrameIntoClientArea(IntPtr hWnd, ref Margins margins);
[DllImport("user32.dll")]static extern int SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong);
[DllImport("user32.dll")]public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
private struct Margins{
public int Left;
public int Right;
public int Top;
public int Bottom;
}
#endregion dll
#region Private
private bool active = true;
[SerializeField]private Material _keyMaterial;
#endregion Private
void Start() {
transform.SetAsFirstSibling();
}
public void ActivateTransparency(IntPtr hWnd) {
active = true;
Color32 c =GetComponent<Camera>().backgroundColor;
GetComponent<Camera>().backgroundColor=new Color32(c.r,c.g,c.b,5);
#if !UNITY_EDITOR
var m = new Margins() { Left = -1 };
SetWindowLong(hWnd, -16, 0x80000000 | 0x10000000);
DwmExtendFrameIntoClientArea(hWnd, ref m);
#endif
}
public void DisableTransparency() {
active = false;
Color32 c = GetComponent<Camera>().backgroundColor;
GetComponent<Camera>().backgroundColor = new Color32(c.r, c.g, c.b, 255);
}
void OnRenderImage(RenderTexture a, RenderTexture n)
{
if (active) {
Graphics.Blit(a, n, _keyMaterial);
}
// else {
// Graphics.Blit(a, n);
// }
}
}