123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class DesktopDuplication : MonoBehaviour
- {
- public bool CreateDesktopDuplication(string display_device_name)
- {
- NDebug.Assert(this.class_pointer_ == IntPtr.Zero, "CreateDesktopDuplication二重に作成しようとしました。");
- if (!DesktopDuplication.class_pointer_cache_.TryGetValue(display_device_name, out this.class_pointer_))
- {
- this.class_pointer_ = DLLDesktopDuplication.CreateDesktopDuplication(display_device_name);
- if (this.class_pointer_ == IntPtr.Zero)
- {
- return false;
- }
- DesktopDuplication.class_pointer_cache_.Add(display_device_name, this.class_pointer_);
- }
- this.render_event_func_ptr_ = DLLDesktopDuplication.GetDesktopDuplicationRenderEventFunc();
- this.render_event_id_ = DLLDesktopDuplication.GetDesktopDuplicationRenderID(this.class_pointer_);
- this.routine_ = this.CallPluginAtEndOfFrames();
- NDebug.Assert(this.render_coroutine_ == null, "CreateDesktopDuplication Coroutine 二重に作成しようとしました。");
- this.render_coroutine_ = base.StartCoroutine(this.routine_);
- return true;
- }
- private void OnEnable()
- {
- if (this.routine_ != null && this.render_coroutine_ == null)
- {
- this.render_coroutine_ = base.StartCoroutine(this.routine_);
- }
- }
- private void OnDisable()
- {
- if (this.routine_ != null && this.render_coroutine_ != null)
- {
- base.StopCoroutine(this.render_coroutine_);
- this.render_coroutine_ = null;
- }
- }
- private void OnDestroy()
- {
- if (this.routine_ != null && this.render_coroutine_ != null)
- {
- base.StopCoroutine(this.render_coroutine_);
- this.render_coroutine_ = null;
- }
- if (this.is_valid)
- {
- }
- this.class_pointer_ = IntPtr.Zero;
- }
- public void OnApplicationQuit()
- {
- foreach (KeyValuePair<string, IntPtr> keyValuePair in DesktopDuplication.class_pointer_cache_)
- {
- if (keyValuePair.Value != IntPtr.Zero)
- {
- DLLDesktopDuplication.DeleteDesktopDuplication(keyValuePair.Value);
- }
- }
- DesktopDuplication.class_pointer_cache_.Clear();
- this.class_pointer_ = IntPtr.Zero;
- }
- public Texture2D render_texture
- {
- get
- {
- return this.render_tex_;
- }
- set
- {
- if (!this.is_valid)
- {
- return;
- }
- this.render_tex_ = value;
- if (this.render_tex_ != null)
- {
- DLLDesktopDuplication.SetDesktopDuplicationDrawTex(this.class_pointer_, this.render_tex_.GetNativeTexturePtr());
- }
- }
- }
- public int width
- {
- get
- {
- return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationRenderWidth(this.class_pointer_);
- }
- }
- public int height
- {
- get
- {
- return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationRenderHeight(this.class_pointer_);
- }
- }
- public bool is_mouse_pointer_visible
- {
- get
- {
- return this.is_valid && DLLDesktopDuplication.GetDesktopDuplicationIsMousePointerVisible(this.class_pointer_) != 0;
- }
- }
- public int mouse_pointer_x
- {
- get
- {
- return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationGetMousePointerX(this.class_pointer_);
- }
- }
- public int mouse_pointer_y
- {
- get
- {
- return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationGetMousePointerY(this.class_pointer_);
- }
- }
- public bool is_valid
- {
- get
- {
- return this.class_pointer_ != IntPtr.Zero;
- }
- }
- private IEnumerator CallPluginAtEndOfFrames()
- {
- for (;;)
- {
- yield return new WaitForEndOfFrame();
- if (this.is_valid && this.render_texture != null)
- {
- GL.IssuePluginEvent(this.render_event_func_ptr_, this.render_event_id_);
- }
- }
- yield break;
- }
- private static Dictionary<string, IntPtr> class_pointer_cache_ = new Dictionary<string, IntPtr>();
- private IntPtr class_pointer_ = IntPtr.Zero;
- private Texture2D render_tex_;
- private int render_event_id_ = -1;
- private IEnumerator routine_;
- private Coroutine render_coroutine_;
- private IntPtr render_event_func_ptr_;
- }
|