mirror of
https://github.com/BlackMATov/unity-flash-tools.git
synced 2025-12-16 14:11:19 +07:00
fix shader properties initialization
This commit is contained in:
@@ -4,6 +4,10 @@ using System.Collections.Generic;
|
|||||||
namespace FTRuntime.Internal {
|
namespace FTRuntime.Internal {
|
||||||
static class SwfUtils {
|
static class SwfUtils {
|
||||||
|
|
||||||
|
//
|
||||||
|
// UnpackUV/UnpackFColorFromUInts
|
||||||
|
//
|
||||||
|
|
||||||
const ushort UShortMax = ushort.MaxValue;
|
const ushort UShortMax = ushort.MaxValue;
|
||||||
const float FColorPrecision = 1.0f / 512.0f;
|
const float FColorPrecision = 1.0f / 512.0f;
|
||||||
const float InvFColorPrecision = 1.0f / FColorPrecision;
|
const float InvFColorPrecision = 1.0f / FColorPrecision;
|
||||||
@@ -24,7 +28,39 @@ namespace FTRuntime.Internal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Shader properties
|
||||||
//
|
//
|
||||||
|
|
||||||
|
public static int TintShaderProp {
|
||||||
|
get {
|
||||||
|
ShaderPropsCache.LazyInitialize();
|
||||||
|
return ShaderPropsCache.TintShaderProp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int MainTexShaderProp {
|
||||||
|
get {
|
||||||
|
ShaderPropsCache.LazyInitialize();
|
||||||
|
return ShaderPropsCache.MainTexShaderProp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int AlphaTexShaderProp {
|
||||||
|
get {
|
||||||
|
ShaderPropsCache.LazyInitialize();
|
||||||
|
return ShaderPropsCache.AlphaTexShaderProp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int ExternalAlphaShaderProp {
|
||||||
|
get {
|
||||||
|
ShaderPropsCache.LazyInitialize();
|
||||||
|
return ShaderPropsCache.ExternalAlphaShaderProp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetComponent<T>
|
||||||
//
|
//
|
||||||
|
|
||||||
public static T GetComponent<T>(GameObject obj, bool allow_create) where T : Component {
|
public static T GetComponent<T>(GameObject obj, bool allow_create) where T : Component {
|
||||||
@@ -36,7 +72,7 @@ namespace FTRuntime.Internal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
// FillGeneratedMesh
|
||||||
//
|
//
|
||||||
|
|
||||||
public static void FillGeneratedMesh(Mesh mesh, SwfClipAsset.MeshData mesh_data) {
|
public static void FillGeneratedMesh(Mesh mesh, SwfClipAsset.MeshData mesh_data) {
|
||||||
@@ -64,8 +100,28 @@ namespace FTRuntime.Internal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ShaderPropsCache
|
||||||
|
|
||||||
|
static class ShaderPropsCache {
|
||||||
|
public static int TintShaderProp = 0;
|
||||||
|
public static int MainTexShaderProp = 0;
|
||||||
|
public static int AlphaTexShaderProp = 0;
|
||||||
|
public static int ExternalAlphaShaderProp = 0;
|
||||||
|
|
||||||
|
static bool _initialized = false;
|
||||||
|
public static void LazyInitialize() {
|
||||||
|
if ( !_initialized ) {
|
||||||
|
_initialized = true;
|
||||||
|
TintShaderProp = Shader.PropertyToID("_Tint");
|
||||||
|
MainTexShaderProp = Shader.PropertyToID("_MainTex");
|
||||||
|
AlphaTexShaderProp = Shader.PropertyToID("_AlphaTex");
|
||||||
|
ExternalAlphaShaderProp = Shader.PropertyToID("_ExternalAlpha");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
// GeneratedMeshCache
|
||||||
//
|
//
|
||||||
|
|
||||||
static class GeneratedMeshCache {
|
static class GeneratedMeshCache {
|
||||||
|
|||||||
@@ -21,11 +21,6 @@ namespace FTRuntime {
|
|||||||
SwfClipAsset.Sequence _curSequence = null;
|
SwfClipAsset.Sequence _curSequence = null;
|
||||||
MaterialPropertyBlock _curPropBlock = null;
|
MaterialPropertyBlock _curPropBlock = null;
|
||||||
|
|
||||||
static readonly int _tintShaderProp = Shader.PropertyToID("_Tint");
|
|
||||||
static readonly int _mainTexShaderProp = Shader.PropertyToID("_MainTex");
|
|
||||||
static readonly int _alphaTexShaderProp = Shader.PropertyToID("_AlphaTex");
|
|
||||||
static readonly int _externalAlphaShaderProp = Shader.PropertyToID("_ExternalAlpha");
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// Events
|
// Events
|
||||||
@@ -394,19 +389,19 @@ namespace FTRuntime {
|
|||||||
_curPropBlock = new MaterialPropertyBlock();
|
_curPropBlock = new MaterialPropertyBlock();
|
||||||
}
|
}
|
||||||
_meshRenderer.GetPropertyBlock(_curPropBlock);
|
_meshRenderer.GetPropertyBlock(_curPropBlock);
|
||||||
_curPropBlock.SetColor(_tintShaderProp, tint);
|
_curPropBlock.SetColor(SwfUtils.TintShaderProp, tint);
|
||||||
var sprite = clip ? clip.Sprite : null;
|
var sprite = clip ? clip.Sprite : null;
|
||||||
var atlas = sprite && sprite.texture ? sprite.texture : Texture2D.whiteTexture;
|
var atlas = sprite && sprite.texture ? sprite.texture : Texture2D.whiteTexture;
|
||||||
var atlasA = sprite ? sprite.associatedAlphaSplitTexture : null;
|
var atlasA = sprite ? sprite.associatedAlphaSplitTexture : null;
|
||||||
_curPropBlock.SetTexture(
|
_curPropBlock.SetTexture(
|
||||||
_mainTexShaderProp,
|
SwfUtils.MainTexShaderProp,
|
||||||
atlas ? atlas : Texture2D.whiteTexture);
|
atlas ? atlas : Texture2D.whiteTexture);
|
||||||
if ( atlasA ) {
|
if ( atlasA ) {
|
||||||
_curPropBlock.SetTexture(_alphaTexShaderProp, atlasA);
|
_curPropBlock.SetTexture(SwfUtils.AlphaTexShaderProp, atlasA);
|
||||||
_curPropBlock.SetFloat(_externalAlphaShaderProp, 1.0f);
|
_curPropBlock.SetFloat(SwfUtils.ExternalAlphaShaderProp, 1.0f);
|
||||||
} else {
|
} else {
|
||||||
_curPropBlock.SetTexture(_alphaTexShaderProp, Texture2D.whiteTexture);
|
_curPropBlock.SetTexture(SwfUtils.AlphaTexShaderProp, Texture2D.whiteTexture);
|
||||||
_curPropBlock.SetFloat(_externalAlphaShaderProp, 0.0f);
|
_curPropBlock.SetFloat(SwfUtils.ExternalAlphaShaderProp, 0.0f);
|
||||||
}
|
}
|
||||||
_meshRenderer.SetPropertyBlock(_curPropBlock);
|
_meshRenderer.SetPropertyBlock(_curPropBlock);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user