Skip to content

Commit 238fc2c

Browse files
committed
1.38 - Stencil buffer properties can now be exposed to the inspector
1 parent 019191d commit 238fc2c

File tree

4 files changed

+72
-24
lines changed

4 files changed

+72
-24
lines changed

Shader Forge/Assets/ShaderForge/Editor/Code/SFPSC_Blending.cs

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public class SFPSC_Blending : SFPS_Category {
117117

118118

119119
public bool useStencilBuffer = false;
120+
public bool allowStencilWriteThroughProperties = false;
120121

121122

122123
new void OnEnable() {
@@ -168,6 +169,7 @@ public override string Serialize(){
168169

169170
// Stencil buffer:
170171
s += Serialize ( "stcl", useStencilBuffer.ToString());
172+
s += Serialize ( "atwp", allowStencilWriteThroughProperties.ToString());
171173
s += Serialize ( "stva", stencilValue.ToString());
172174
s += Serialize ( "stmr", stencilMaskRead.ToString());
173175
s += Serialize ( "stmw", stencilMaskWrite.ToString());
@@ -306,6 +308,9 @@ public override void Deserialize(string key, string value){
306308
case "stcl":
307309
useStencilBuffer = bool.Parse(value);
308310
break;
311+
case "atwp":
312+
allowStencilWriteThroughProperties = bool.Parse( value );
313+
break;
309314
case "stva":
310315
stencilValue = byte.Parse(value);
311316
break;
@@ -562,25 +567,33 @@ public void ConformBlendsToPreset() {
562567

563568

564569
public string GetStencilContent(){
570+
565571
string s = "";
566-
567-
s += "Ref " + stencilValue + "\n";
568-
569-
if(stencilMaskRead != (byte)255)
570-
s += "ReadMask " + stencilMaskRead + "\n";
571-
if(stencilMaskWrite != (byte)255)
572-
s += "WriteMask " + stencilMaskWrite + "\n";
573-
if(stencilComparison != DepthTestStencil.Always)
574-
s += "Comp " + stencilComparison + "\n";
575-
if(stencilPass != StencilOp.Keep)
576-
s += "Pass " + stencilPass + "\n";
577-
if(stencilFail != StencilOp.Keep)
578-
s += "Fail " + stencilFail + "\n";
579-
if(stencilFailZ != StencilOp.Keep)
580-
s += "ZFail " + stencilFailZ + "\n";
581-
582-
return s.Substring(0,s.Length-1);
583-
572+
if( allowStencilWriteThroughProperties ) {
573+
s += "Ref [_Stencil]\n";
574+
s += "ReadMask [_StencilReadMask]\n";
575+
s += "WriteMask [_StencilWriteMask]\n";
576+
s += "Comp [_StencilComp]\n";
577+
s += "Pass [_StencilOp]\n";
578+
s += "Fail [_StencilOpFail]\n";
579+
s += "ZFail [_StencilOpZFail]";
580+
} else {
581+
s += "Ref " + stencilValue + "\n";
582+
if( stencilMaskRead != (byte)255 )
583+
s += "ReadMask " + stencilMaskRead + "\n";
584+
if( stencilMaskWrite != (byte)255 )
585+
s += "WriteMask " + stencilMaskWrite + "\n";
586+
if( stencilComparison != DepthTestStencil.Always )
587+
s += "Comp " + stencilComparison + "\n";
588+
if( stencilPass != StencilOp.Keep )
589+
s += "Pass " + stencilPass + "\n";
590+
if( stencilFail != StencilOp.Keep )
591+
s += "Fail " + stencilFail + "\n";
592+
if( stencilFailZ != StencilOp.Keep )
593+
s += "ZFail " + stencilFailZ + "\n";
594+
s = s.Substring( 0, s.Length - 1 );
595+
}
596+
return s;
584597
}
585598

586599
public void RefractionBlock( ref Rect r ) {
@@ -645,7 +658,12 @@ public void StencilBlock(ref Rect r){
645658
if(!useStencilBuffer)
646659
return;
647660
r.xMin += 20;
648-
661+
662+
allowStencilWriteThroughProperties = UndoableToggle( r, allowStencilWriteThroughProperties, "Expose stencil as properties", "toggle expose stencil as properties" );
663+
r.y += 20;
664+
665+
EditorGUI.BeginDisabledGroup( allowStencilWriteThroughProperties );
666+
649667
Rect rTmp = r;
650668
rTmp.width = 88;
651669
GUI.Label(rTmp,"Reference Value", EditorStyles.miniLabel);
@@ -669,6 +687,8 @@ public void StencilBlock(ref Rect r){
669687
r.y += 20;
670688
r.xMin -= 20;
671689
r.y += 20;
690+
691+
EditorGUI.EndDisabledGroup();
672692
}
673693

674694

Shader Forge/Assets/ShaderForge/Editor/Code/_Evaluator/SF_Evaluator.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,18 @@ void PropertiesShaderLab() {
513513
if( ps.catGeometry.showPixelSnap )
514514
App("[MaterialToggle] PixelSnap (\"Pixel snap\", Float) = 0");
515515

516+
if( ps.catBlending.allowStencilWriteThroughProperties ) {
517+
App( "_Stencil (\"Stencil ID\", Float) = 0" );
518+
App( "_StencilReadMask (\"Stencil Read Mask\", Float) = 255" );
519+
App( "_StencilWriteMask (\"Stencil Write Mask\", Float) = 255" );
520+
App( "_StencilComp (\"Stencil Comparison\", Float) = 8" );
521+
App( "_StencilOp (\"Stencil Operation\", Float) = 0" );
522+
App( "_StencilOpFail (\"Stencil Fail Operation\", Float) = 0" );
523+
App( "_StencilOpZFail (\"Stencil Z-Fail Operation\", Float) = 0" );
524+
}
525+
526+
527+
516528
End();
517529

518530
}

Shader Forge/Assets/ShaderForge/Editor/InternalResources/Shader Presets/PresetSprite.shader

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
1-
// Shader created with Shader Forge v1.35
1+
// Shader created with Shader Forge v1.38
22
// Shader Forge (c) Neat Corporation / Joachim Holmer - http://www.acegikmo.com/shaderforge/
33
// Note: Manually altering this data may prevent you from opening it in Shader Forge
4-
/*SF_DATA;ver:1.35;sub:START;pass:START;ps:flbk:,iptp:1,cusa:True,bamd:0,lico:1,lgpr:1,limd:0,spmd:1,trmd:0,grmd:0,uamb:True,mssp:True,bkdf:False,hqlp:False,rprd:False,enco:False,rmgx:True,imps:True,rpth:0,vtps:0,hqsc:True,nrmq:1,nrsp:0,vomd:0,spxs:True,tesm:0,olmd:1,culm:2,bsrc:0,bdst:7,dpts:2,wrdp:False,dith:0,atcv:False,rfrpo:True,rfrpn:Refraction,coma:15,ufog:False,aust:True,igpj:True,qofs:0,qpre:3,rntp:2,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,stcl:False,stva:128,stmr:255,stmw:255,stcp:6,stps:0,stfa:0,stfz:0,ofsf:0,ofsu:0,f2p0:False,fnsp:False,fnfb:False;n:type:ShaderForge.SFN_Final,id:1873,x:33229,y:32719,varname:node_1873,prsc:2|emission-1749-OUT,alpha-603-OUT;n:type:ShaderForge.SFN_Tex2d,id:4805,x:32551,y:32729,ptovrint:False,ptlb:MainTex,ptin:_MainTex,varname:_MainTex_copy,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:True,tagnsco:False,tagnrm:False,ntxv:0,isnm:False;n:type:ShaderForge.SFN_Multiply,id:1086,x:32812,y:32818,cmnt:RGB,varname:node_1086,prsc:2|A-4805-RGB,B-5983-RGB,C-5376-RGB;n:type:ShaderForge.SFN_Color,id:5983,x:32551,y:32915,ptovrint:False,ptlb:Color,ptin:_Color,varname:_Color_copy,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:1,c2:1,c3:1,c4:1;n:type:ShaderForge.SFN_VertexColor,id:5376,x:32551,y:33079,varname:node_5376,prsc:2;n:type:ShaderForge.SFN_Multiply,id:1749,x:33025,y:32818,cmnt:Premultiply Alpha,varname:node_1749,prsc:2|A-1086-OUT,B-603-OUT;n:type:ShaderForge.SFN_Multiply,id:603,x:32812,y:32992,cmnt:A,varname:node_603,prsc:2|A-4805-A,B-5983-A,C-5376-A;proporder:4805-5983;pass:END;sub:END;*/
4+
/*SF_DATA;ver:1.38;sub:START;pass:START;ps:flbk:,iptp:1,cusa:True,bamd:0,cgin:,lico:1,lgpr:1,limd:0,spmd:1,trmd:0,grmd:0,uamb:True,mssp:True,bkdf:False,hqlp:False,rprd:False,enco:False,rmgx:True,imps:True,rpth:0,vtps:0,hqsc:True,nrmq:1,nrsp:0,vomd:0,spxs:True,tesm:0,olmd:1,culm:2,bsrc:0,bdst:7,dpts:2,wrdp:False,dith:0,atcv:False,rfrpo:True,rfrpn:Refraction,coma:15,ufog:False,aust:True,igpj:True,qofs:0,qpre:3,rntp:2,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,stcl:True,atwp:True,stva:128,stmr:255,stmw:255,stcp:6,stps:0,stfa:0,stfz:0,ofsf:0,ofsu:0,f2p0:False,fnsp:False,fnfb:False,fsmp:False;n:type:ShaderForge.SFN_Final,id:1873,x:33229,y:32719,varname:node_1873,prsc:2|emission-1749-OUT,alpha-603-OUT;n:type:ShaderForge.SFN_Tex2d,id:4805,x:32551,y:32729,ptovrint:False,ptlb:MainTex,ptin:_MainTex,varname:_MainTex_copy,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:True,tagnsco:False,tagnrm:False,ntxv:0,isnm:False;n:type:ShaderForge.SFN_Multiply,id:1086,x:32812,y:32818,cmnt:RGB,varname:node_1086,prsc:2|A-4805-RGB,B-5983-RGB,C-5376-RGB;n:type:ShaderForge.SFN_Color,id:5983,x:32551,y:32915,ptovrint:False,ptlb:Color,ptin:_Color,varname:_Color_copy,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:1,c2:1,c3:1,c4:1;n:type:ShaderForge.SFN_VertexColor,id:5376,x:32551,y:33079,varname:node_5376,prsc:2;n:type:ShaderForge.SFN_Multiply,id:1749,x:33025,y:32818,cmnt:Premultiply Alpha,varname:node_1749,prsc:2|A-1086-OUT,B-603-OUT;n:type:ShaderForge.SFN_Multiply,id:603,x:32812,y:32992,cmnt:A,varname:node_603,prsc:2|A-4805-A,B-5983-A,C-5376-A;proporder:4805-5983;pass:END;sub:END;*/
55

66
Shader "Hidden/Shader Forge/PresetSprite" {
77
Properties {
88
[PerRendererData]_MainTex ("MainTex", 2D) = "white" {}
99
_Color ("Color", Color) = (1,1,1,1)
1010
[HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
1111
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
12+
_Stencil ("Stencil ID", Float) = 0
13+
_StencilReadMask ("Stencil Read Mask", Float) = 255
14+
_StencilWriteMask ("Stencil Write Mask", Float) = 255
15+
_StencilComp ("Stencil Comparison", Float) = 8
16+
_StencilOp ("Stencil Operation", Float) = 0
17+
_StencilOpFail ("Stencil Fail Operation", Float) = 0
18+
_StencilOpZFail ("Stencil Z-Fail Operation", Float) = 0
1219
}
1320
SubShader {
1421
Tags {
@@ -27,6 +34,15 @@ Shader "Hidden/Shader Forge/PresetSprite" {
2734
Cull Off
2835
ZWrite Off
2936

37+
Stencil {
38+
Ref [_Stencil]
39+
ReadMask [_StencilReadMask]
40+
WriteMask [_StencilWriteMask]
41+
Comp [_StencilComp]
42+
Pass [_StencilOp]
43+
Fail [_StencilOpFail]
44+
ZFail [_StencilOpZFail]
45+
}
3046
CGPROGRAM
3147
#pragma vertex vert
3248
#pragma fragment frag
@@ -52,7 +68,7 @@ Shader "Hidden/Shader Forge/PresetSprite" {
5268
VertexOutput o = (VertexOutput)0;
5369
o.uv0 = v.texcoord0;
5470
o.vertexColor = v.vertexColor;
55-
o.pos = UnityObjectToClipPos(v.vertex );
71+
o.pos = UnityObjectToClipPos( v.vertex );
5672
#ifdef PIXELSNAP_ON
5773
o.pos = UnityPixelSnap(o.pos);
5874
#endif
@@ -98,7 +114,7 @@ Shader "Hidden/Shader Forge/PresetSprite" {
98114
};
99115
VertexOutput vert (VertexInput v) {
100116
VertexOutput o = (VertexOutput)0;
101-
o.pos = UnityObjectToClipPos(v.vertex );
117+
o.pos = UnityObjectToClipPos( v.vertex );
102118
#ifdef PIXELSNAP_ON
103119
o.pos = UnityPixelSnap(o.pos);
104120
#endif

Shader Forge/Assets/ShaderForge/Editor/InternalResources/Shader Presets/PresetSprite.shader.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)