/
MaterialData.hx
136 lines (105 loc) · 4.39 KB
/
MaterialData.hx
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package backend;
class MaterialData {
public var material:Dynamic = null;
public var texture:backend.Texture = null;
public var shader:backend.Shader = null;
public var srcRgb:backend.BlendMode = ONE;
public var dstRgb:backend.BlendMode = ONE_MINUS_SRC_ALPHA;
public var srcAlpha:backend.BlendMode = ONE;
public var dstAlpha:backend.BlendMode = ONE_MINUS_SRC_ALPHA;
public var paramsVersion:Int = -1;
public function new() {}
inline public function matches(
texture:backend.Texture,
shader:backend.Shader,
srcRgb:backend.BlendMode,
dstRgb:backend.BlendMode,
srcAlpha:backend.BlendMode,
dstAlpha:backend.BlendMode
):Bool {
return this.texture == texture
&& this.shader == shader
&& this.srcRgb == srcRgb
&& this.dstRgb == dstRgb
&& this.srcAlpha == srcAlpha
&& this.dstAlpha == dstAlpha;
}
inline public function syncShaderParams():Void {
var shaderImpl:ShaderImpl = shader;
if (paramsVersion != shaderImpl.paramsVersion) {
untyped __cs__('UnityEngine.Material m = (UnityEngine.Material){0}', material);
if (shaderImpl.intParams != null) {
for (name => val in shaderImpl.intParams) {
untyped __cs__('m.SetInt({0}, {1})', name, val);
}
}
if (shaderImpl.floatParams != null) {
for (name => val in shaderImpl.floatParams) {
untyped __cs__('m.SetFloat({0}, (float){1})', name, val);
}
}
if (shaderImpl.colorParams != null) {
for (name => val in shaderImpl.colorParams) {
untyped __cs__('m.SetColor({0}, {1})', name, val);
}
}
if (shaderImpl.vec2Params != null) {
for (name => val in shaderImpl.vec2Params) {
untyped __cs__('m.SetVector({0}, {1})', name, val);
}
}
if (shaderImpl.vec3Params != null) {
for (name => val in shaderImpl.vec3Params) {
untyped __cs__('m.SetVector({0}, {1})', name, val);
}
}
if (shaderImpl.vec4Params != null) {
for (name => val in shaderImpl.vec4Params) {
untyped __cs__('m.SetVector({0}, {1})', name, val);
}
}
if (shaderImpl.floatArrayParams != null) {
for (name => val in shaderImpl.floatArrayParams) {
untyped __cs__('m.SetFloatArray({0}, {1})', name, val);
}
}
if (shaderImpl.textureParams != null) {
for (name => val in shaderImpl.textureParams) {
untyped __cs__('m.SetTexture({0}, {1})', name, (val:TextureImpl).unityTexture);
}
}
if (shaderImpl.mat4Params != null) {
for (name => val in shaderImpl.mat4Params) {
untyped __cs__('m.SetMatrix({0}, (UnityEngine.Matrix4x4){1})', name, val);
}
}
paramsVersion = shaderImpl.paramsVersion;
}
}
public static function blendingToUnityBlending(blending:backend.BlendMode):unityengine.rendering.BlendMode {
return switch blending {
case ZERO:
unityengine.rendering.BlendMode.Zero;
case ONE:
unityengine.rendering.BlendMode.One;
case SRC_COLOR:
unityengine.rendering.BlendMode.SrcColor;
case ONE_MINUS_SRC_COLOR:
unityengine.rendering.BlendMode.OneMinusSrcColor;
case SRC_ALPHA:
unityengine.rendering.BlendMode.SrcAlpha;
case ONE_MINUS_SRC_ALPHA:
unityengine.rendering.BlendMode.OneMinusSrcAlpha;
case DST_ALPHA:
unityengine.rendering.BlendMode.DstAlpha;
case ONE_MINUS_DST_ALPHA:
unityengine.rendering.BlendMode.OneMinusDstAlpha;
case DST_COLOR:
unityengine.rendering.BlendMode.DstColor;
case ONE_MINUS_DST_COLOR:
unityengine.rendering.BlendMode.OneMinusDstColor;
case SRC_ALPHA_SATURATE:
unityengine.rendering.BlendMode.SrcAlphaSaturate;
}
}
}