AVProWindowsMediaMaterialApply.cs
1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using UnityEngine;
using System.Collections;
//-----------------------------------------------------------------------------
// Copyright 2012-2016 RenderHeads Ltd. All rights reserverd.
//-----------------------------------------------------------------------------
[AddComponentMenu("AVPro Windows Media/Material Apply")]
public class AVProWindowsMediaMaterialApply : MonoBehaviour
{
public Material _material;
public string _textureName;
public AVProWindowsMediaMovie _movie;
public Texture2D _defaultTexture;
private Vector2 _scale = Vector2.one;
private Vector2 _offset = Vector2.zero;
private Texture _texture;
void Update()
{
bool applied = false;
if (_movie != null && _movie.MovieInstance != null)
{
Texture texture = _movie.OutputTexture;
if (texture != null)
{
ApplyMapping(texture, _movie.MovieInstance.RequiresFlipY);
applied = true;
}
}
if (!applied)
{
ApplyMapping(_defaultTexture, false);
}
}
private void ApplyMapping(Texture texture, bool requiresYFlip)
{
if (_material != null && texture != null)
{
Vector2 scale = _scale;
Vector2 offset = _offset;
if (requiresYFlip)
{
scale.Scale(new Vector2(1f, -1f));
offset.y += 1f;
}
if (string.IsNullOrEmpty(_textureName))
{
_material.mainTexture = texture;
_material.mainTextureScale = scale;
_material.mainTextureOffset = offset;
}
else
{
_material.SetTexture(_textureName, texture);
_material.SetTextureScale(_textureName, scale);
_material.SetTextureOffset(_textureName, offset);
}
}
}
void OnEnable()
{
if (_material != null)
{
_scale = _material.mainTextureScale;
_offset = _material.mainTextureOffset;
_texture = _material.mainTexture;
}
Update();
}
void OnDisable()
{
ApplyMapping(_defaultTexture, false);
if (_material != null)
{
_material.mainTextureScale = _scale;
_material.mainTextureOffset = _offset;
_material.mainTexture = _texture;
}
}
}