add mouse cursor.
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 033e0db89e0ca1d46a399c953629f67d
|
||||||
|
timeCreated: 1477555367
|
||||||
|
licenseType: Pro
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Binary file not shown.
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6e15bc51aada81042a909c808e25c176
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1477555207
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 48b92326b146fa848beec6f35365b1f4
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1477555207
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a615a0cde495b914d95b9d2d53182305
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1477555207
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 967 B |
@@ -0,0 +1,59 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 89616e59e1cccb346bd4e959257990ca
|
||||||
|
timeCreated: 1477555207
|
||||||
|
licenseType: Pro
|
||||||
|
TextureImporter:
|
||||||
|
fileIDToRecycleName: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 0
|
||||||
|
linearTexture: 0
|
||||||
|
correctGamma: 0
|
||||||
|
fadeOut: 0
|
||||||
|
borderMipMap: 0
|
||||||
|
mipMapFadeDistanceStart: 1
|
||||||
|
mipMapFadeDistanceEnd: 3
|
||||||
|
bumpmap:
|
||||||
|
convertToNormalMap: 0
|
||||||
|
externalNormalMap: 0
|
||||||
|
heightScale: 0.25
|
||||||
|
normalMapFilter: 0
|
||||||
|
isReadable: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 0
|
||||||
|
cubemapConvolution: 0
|
||||||
|
cubemapConvolutionSteps: 7
|
||||||
|
cubemapConvolutionExponent: 1.5
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: -1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
filterMode: 0
|
||||||
|
aniso: 1
|
||||||
|
mipBias: -1
|
||||||
|
wrapMode: 1
|
||||||
|
nPOTScale: 0
|
||||||
|
lightmap: 0
|
||||||
|
rGBM: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
spriteMode: 1
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
alphaIsTransparency: 1
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 8
|
||||||
|
buildTargetSettings: []
|
||||||
|
spriteSheet:
|
||||||
|
serializedVersion: 2
|
||||||
|
sprites: []
|
||||||
|
outline: []
|
||||||
|
spritePackingTag:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
@@ -0,0 +1,44 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace uDesktopDuplication
|
||||||
|
{
|
||||||
|
|
||||||
|
[RequireComponent(typeof(uDesktopDuplication))]
|
||||||
|
public class MouseDrawer : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
Transform cursor;
|
||||||
|
[SerializeField]
|
||||||
|
Vector2 modelScale = Vector2.one;
|
||||||
|
[SerializeField]
|
||||||
|
Vector2 offset = new Vector2(0.5f, 0.5f);
|
||||||
|
|
||||||
|
uDesktopDuplication udd_;
|
||||||
|
|
||||||
|
void OnEnable()
|
||||||
|
{
|
||||||
|
udd_ = GetComponent<uDesktopDuplication>();
|
||||||
|
udd_.onMouseMove += OnMouseMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnDisable()
|
||||||
|
{
|
||||||
|
udd_.onMouseMove -= OnMouseMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnMouseMove(Vector2 pos)
|
||||||
|
{
|
||||||
|
var x = pos.x * modelScale.x * 0.5f;
|
||||||
|
var y = pos.y * modelScale.y * 0.5f;
|
||||||
|
var iy = udd_.invertY ? +1 : -1;
|
||||||
|
var localPos = transform.right * x + iy * transform.up * y;
|
||||||
|
|
||||||
|
var worldPos = transform.TransformPoint(localPos);
|
||||||
|
worldPos += cursor.right * offset.x * cursor.localScale.x;
|
||||||
|
worldPos += -cursor.up * offset.y * cursor.localScale.y;
|
||||||
|
|
||||||
|
cursor.position = worldPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d2d9e4ca459ecb44da8815bafe9655c5
|
||||||
|
timeCreated: 1477559806
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {fileID: 2800000, guid: 89616e59e1cccb346bd4e959257990ca, type: 3}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -3,6 +3,9 @@ using System;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace uDesktopDuplication
|
||||||
|
{
|
||||||
|
|
||||||
public class uDesktopDuplication : MonoBehaviour
|
public class uDesktopDuplication : MonoBehaviour
|
||||||
{
|
{
|
||||||
[DllImport("uDesktopDuplication")]
|
[DllImport("uDesktopDuplication")]
|
||||||
@@ -22,16 +25,20 @@ public class uDesktopDuplication : MonoBehaviour
|
|||||||
[DllImport("uDesktopDuplication")]
|
[DllImport("uDesktopDuplication")]
|
||||||
private static extern IntPtr GetRenderEventFunc();
|
private static extern IntPtr GetRenderEventFunc();
|
||||||
|
|
||||||
public bool isPointerVisible = false;
|
private Material material_;
|
||||||
public int pointerX = 0;
|
public bool invertX = false;
|
||||||
public int pointerY = 0;
|
public bool invertY = false;
|
||||||
|
|
||||||
Coroutine renderCoroutine_ = null;
|
public delegate void MouseMoveEventHandler(Vector2 pos);
|
||||||
|
public MouseMoveEventHandler onMouseMove { get; set; }
|
||||||
|
|
||||||
|
private Coroutine renderCoroutine_ = null;
|
||||||
|
|
||||||
void OnEnable()
|
void OnEnable()
|
||||||
{
|
{
|
||||||
var tex = new Texture2D(GetWidth(), GetHeight(), TextureFormat.BGRA32, false);
|
var tex = new Texture2D(GetWidth(), GetHeight(), TextureFormat.BGRA32, false);
|
||||||
GetComponent<Renderer>().sharedMaterial.mainTexture = tex;
|
material_ = GetComponent<Renderer>().material;
|
||||||
|
material_.mainTexture = tex;
|
||||||
|
|
||||||
SetTexturePtr(tex.GetNativeTexturePtr());
|
SetTexturePtr(tex.GetNativeTexturePtr());
|
||||||
renderCoroutine_ = StartCoroutine(OnRender());
|
renderCoroutine_ = StartCoroutine(OnRender());
|
||||||
@@ -47,9 +54,35 @@ public class uDesktopDuplication : MonoBehaviour
|
|||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
isPointerVisible = IsPointerVisible();
|
UpdateMouseEvent();
|
||||||
pointerX = GetPointerX();
|
UpdateMaterial();
|
||||||
pointerY = GetPointerY();
|
}
|
||||||
|
|
||||||
|
void UpdateMouseEvent()
|
||||||
|
{
|
||||||
|
var isVisible = IsPointerVisible();
|
||||||
|
if (isVisible && onMouseMove != null) {
|
||||||
|
var x = GetPointerX();
|
||||||
|
var y = GetPointerY();
|
||||||
|
var w = GetWidth();
|
||||||
|
var h = GetHeight();
|
||||||
|
onMouseMove(new Vector2(2f * x / w - 1f, 1f - 2f * y / h));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateMaterial()
|
||||||
|
{
|
||||||
|
if (invertX) {
|
||||||
|
material_.EnableKeyword("INVERT_X");
|
||||||
|
} else {
|
||||||
|
material_.DisableKeyword("INVERT_X");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (invertY) {
|
||||||
|
material_.EnableKeyword("INVERT_Y");
|
||||||
|
} else {
|
||||||
|
material_.DisableKeyword("INVERT_Y");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator OnRender()
|
IEnumerator OnRender()
|
||||||
@@ -60,3 +93,5 @@ public class uDesktopDuplication : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: bb54a34570e4747429b1c5b66c69d356
|
guid: bb54a34570e4747429b1c5b66c69d356
|
||||||
timeCreated: 1452445649
|
timeCreated: 1477559813
|
||||||
licenseType: Pro
|
licenseType: Pro
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
defaultReferences: []
|
defaultReferences: []
|
||||||
executionOrder: 0
|
executionOrder: 0
|
||||||
icon: {instanceID: 0}
|
icon: {fileID: 2800000, guid: 89616e59e1cccb346bd4e959257990ca, type: 3}
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
assetBundleVariant:
|
assetBundleVariant:
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9844af21eb203794b852f0bcaa5f2be2
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1477556975
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
Shader "uDesktopDuplication/Unlit"
|
||||||
|
{
|
||||||
|
|
||||||
|
Properties
|
||||||
|
{
|
||||||
|
_MainTex ("Texture", 2D) = "white" {}
|
||||||
|
}
|
||||||
|
|
||||||
|
SubShader
|
||||||
|
{
|
||||||
|
|
||||||
|
Tags { "RenderType"="Opaque" }
|
||||||
|
|
||||||
|
CGINCLUDE
|
||||||
|
|
||||||
|
#include "UnityCG.cginc"
|
||||||
|
|
||||||
|
struct appdata
|
||||||
|
{
|
||||||
|
float4 vertex : POSITION;
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct v2f
|
||||||
|
{
|
||||||
|
float4 vertex : SV_POSITION;
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
};
|
||||||
|
|
||||||
|
sampler2D _MainTex;
|
||||||
|
float4 _MainTex_ST;
|
||||||
|
|
||||||
|
v2f vert (appdata v)
|
||||||
|
{
|
||||||
|
v2f o;
|
||||||
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
||||||
|
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
fixed4 frag (v2f i) : SV_Target
|
||||||
|
{
|
||||||
|
#ifdef INVERT_X
|
||||||
|
i.uv.x *= -1.0;
|
||||||
|
#endif
|
||||||
|
#ifdef INVERT_Y
|
||||||
|
i.uv.y *= -1.0;
|
||||||
|
#endif
|
||||||
|
return tex2D(_MainTex, i.uv);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENDCG
|
||||||
|
|
||||||
|
Pass
|
||||||
|
{
|
||||||
|
CGPROGRAM
|
||||||
|
#pragma vertex vert
|
||||||
|
#pragma fragment frag
|
||||||
|
#pragma multi_compile ___ INVERT_X
|
||||||
|
#pragma multi_compile ___ INVERT_Y
|
||||||
|
ENDCG
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2ca7b38c676bddd439a77a646a279a54
|
||||||
|
timeCreated: 1477556963
|
||||||
|
licenseType: Pro
|
||||||
|
ShaderImporter:
|
||||||
|
defaultTextures: []
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -34,7 +34,7 @@ extern "C"
|
|||||||
{
|
{
|
||||||
// Search the main monitor from all outputs.
|
// Search the main monitor from all outputs.
|
||||||
IDXGIOutput* output;
|
IDXGIOutput* output;
|
||||||
for (int j = 0; (adapter->EnumOutputs(j, &output) != DXGI_ERROR_NOT_FOUND); j++)
|
for (int j = 0; (adapter->EnumOutputs(j, &output) != DXGI_ERROR_NOT_FOUND); ++j)
|
||||||
{
|
{
|
||||||
DXGI_OUTPUT_DESC outputDesc;
|
DXGI_OUTPUT_DESC outputDesc;
|
||||||
output->GetDesc(&outputDesc);
|
output->GetDesc(&outputDesc);
|
||||||
|
|||||||
Reference in New Issue
Block a user