@@ -57,10 +57,11 @@ public RegistryKey registryKey
57
57
if ( ! existsInGraphData )
58
58
return m_PreviewRegistryKey ;
59
59
60
- Assert . IsTrue ( TryGetNodeHandler ( out var reader ) ) ;
60
+ Debug . Assert ( TryGetNodeHandler ( out var handler ) ) ;
61
+
61
62
// Store the registry key to use for node duplication
62
- duplicationRegistryKey = reader . GetRegistryKey ( ) ;
63
- return reader . GetRegistryKey ( ) ;
63
+ duplicationRegistryKey = handler . GetRegistryKey ( ) ;
64
+ return handler . GetRegistryKey ( ) ;
64
65
}
65
66
}
66
67
@@ -80,22 +81,17 @@ public RegistryKey registryKey
80
81
public bool existsInGraphData =>
81
82
m_GraphDataName != null && TryGetNodeHandler ( out _ ) ;
82
83
83
- protected GraphHandler graphHandler =>
84
+ GraphHandler graphHandler =>
84
85
( ( SGGraphModel ) GraphModel ) . GraphHandler ;
85
86
86
87
ShaderGraphRegistry registry =>
87
- ( ( ShaderGraphStencil ) GraphModel . Stencil ) . GetRegistry ( ) ;
88
+ ( ( SGGraphModel ) GraphModel ) . RegistryInstance ;
88
89
89
90
public bool TryGetNodeHandler ( out NodeHandler reader )
90
91
{
91
92
try
92
93
{
93
- if ( graphDataName == null )
94
- {
95
- reader = registry . GetDefaultTopology ( m_PreviewRegistryKey ) ;
96
- return true ;
97
- }
98
- reader = graphHandler . GetNode ( graphDataName ) ;
94
+ reader = GetNodeHandler ( ) ;
99
95
return reader != null ;
100
96
}
101
97
catch ( Exception exception )
@@ -106,6 +102,15 @@ public bool TryGetNodeHandler(out NodeHandler reader)
106
102
}
107
103
}
108
104
105
+ public NodeHandler GetNodeHandler ( )
106
+ {
107
+ // Use the default topology handler for preview nodes.
108
+ var isPreview = graphDataName == null ;
109
+ return isPreview ?
110
+ registry . GetDefaultTopology ( m_PreviewRegistryKey ) :
111
+ graphHandler . GetNode ( graphDataName ) ;
112
+ }
113
+
109
114
public virtual bool HasPreview { get ; private set ; }
110
115
111
116
// By default every node's preview is visible
@@ -171,7 +176,12 @@ internal int latestAvailableVersion
171
176
172
177
public void UpgradeToLatestVersion ( )
173
178
{
174
- var nodeHandler = graphHandler . GetNode ( graphDataName ) ;
179
+ if ( ! existsInGraphData )
180
+ {
181
+ return ;
182
+ }
183
+
184
+ var nodeHandler = GetNodeHandler ( ) ;
175
185
176
186
if ( latestAvailableVersion < currentVersion )
177
187
{
@@ -214,9 +224,15 @@ public void SetSearcherPreviewRegistryKey(RegistryKey key)
214
224
215
225
public void ChangeNodeFunction ( string newFunctionName )
216
226
{
217
- NodeHandler nodeHandler = graphHandler . GetNode ( graphDataName ) ;
218
- string fieldName = NodeDescriptorNodeBuilder . SELECTED_FUNCTION_FIELD_NAME ;
219
- FieldHandler selectedFunctionField = nodeHandler . GetField < string > ( fieldName ) ;
227
+ if ( ! existsInGraphData )
228
+ {
229
+ return ;
230
+ }
231
+
232
+ var nodeHandler = GetNodeHandler ( ) ;
233
+ var fieldName = NodeDescriptorNodeBuilder . SELECTED_FUNCTION_FIELD_NAME ;
234
+ var selectedFunctionField = nodeHandler . GetField < string > ( fieldName ) ;
235
+
220
236
if ( selectedFunctionField == null )
221
237
{
222
238
Debug . LogError ( "Unable to update selected function. Node has no selected function field." ) ;
@@ -245,7 +261,13 @@ public void ChangeNodeFunction(string newFunctionName)
245
261
/// <param name="optionIndex">Index of the Option in the port's parameter descriptor to use.</param>
246
262
public void SetPortOption ( string portName , int optionIndex )
247
263
{
248
- if ( ! TryGetNodeHandler ( out var handler ) ) return ;
264
+ // If not backed by real data (i.e., we are a searcher preview), changing options doesn't make sense.
265
+ if ( ! existsInGraphData )
266
+ {
267
+ return ;
268
+ }
269
+
270
+ var nodeHandler = GetNodeHandler ( ) ;
249
271
var parameterInfo = GetViewModel ( ) . GetParameterInfo ( portName ) ;
250
272
var ( _, optionValue ) = parameterInfo . Options [ optionIndex ] ;
251
273
@@ -255,7 +277,7 @@ public void SetPortOption(string portName, int optionIndex)
255
277
return ;
256
278
}
257
279
258
- var port = handler . GetPort ( portName ) ;
280
+ var port = nodeHandler . GetPort ( portName ) ;
259
281
var existing = GetCurrentPortOption ( portName ) ;
260
282
if ( existing != - 1 )
261
283
{
@@ -277,10 +299,12 @@ public void SetPortOption(string portName, int optionIndex)
277
299
/// <returns>Index into the Options list for the given port, or -1 if there are no options or no option is selected.</returns>
278
300
public int GetCurrentPortOption ( string portName )
279
301
{
302
+ if ( ! TryGetNodeHandler ( out var handler ) ) return - 1 ;
303
+ if ( string . IsNullOrEmpty ( m_GraphDataName ) ) return 0 ; // default to first option
304
+
280
305
var paramInfo = GetViewModel ( ) . GetParameterInfo ( portName ) ;
281
- if ( ! existsInGraphData ) return 0 ; // default to first option
306
+ if ( paramInfo . Options == null || paramInfo . Options . Count < 1 ) return - 1 ;
282
307
283
- if ( ! TryGetNodeHandler ( out var handler ) ) return - 1 ;
284
308
var port = handler . GetPort ( portName ) ;
285
309
286
310
var connection = graphHandler . graphDelta . GetDefaultConnectionToPort ( port . ID ) ;
@@ -302,11 +326,6 @@ public void OnPreviewTextureUpdated(Texture newTexture)
302
326
PreviewShaderIsCompiling = false ;
303
327
}
304
328
305
- public void OnPreviewShaderCompiling ( )
306
- {
307
- PreviewShaderIsCompiling = true ;
308
- }
309
-
310
329
SGNodeViewModel CreateNodeViewModel ( NodeUIDescriptor nodeUIInfo , NodeHandler node )
311
330
{
312
331
var portViewModels = new List < SGPortViewModel > ( ) ;
@@ -421,21 +440,18 @@ bool CreatePortViewModel(PortHandler portInfo, ParameterUIDescriptor parameter,
421
440
422
441
protected override void OnDefineNode ( )
423
442
{
424
- if ( ! TryGetNodeHandler ( out var nodeReader ) )
443
+ if ( ! TryGetNodeHandler ( out var nodeHandler ) )
425
444
{
426
445
Debug . LogErrorFormat ( "Node \" {0}\" is missing from graph data" , graphDataName ) ;
427
446
return ;
428
447
}
429
448
430
- NodeUIDescriptor nodeUIDescriptor = new ( ) ;
431
- if ( GraphModel . Stencil is ShaderGraphStencil shaderGraphStencil )
432
- nodeUIDescriptor = shaderGraphStencil . GetUIHints ( registryKey , nodeReader ) ;
433
-
434
- bool nodeHasPreview = nodeUIDescriptor . HasPreview && existsInGraphData ;
435
- m_NodeViewModel = CreateNodeViewModel ( nodeUIDescriptor , nodeReader ) ;
449
+ var nodeUIDescriptor = registry . GetNodeUIDescriptor ( registryKey , nodeHandler ) ;
450
+ var nodeHasPreview = nodeUIDescriptor . HasPreview && existsInGraphData ;
451
+ m_NodeViewModel = CreateNodeViewModel ( nodeUIDescriptor , nodeHandler ) ;
436
452
437
453
// TODO: Convert this to a NodePortsPart maybe?
438
- foreach ( var portReader in nodeReader . GetPorts ( ) . Where ( e => ! e . LocalID . Contains ( "out_" ) ) )
454
+ foreach ( var portReader in nodeHandler . GetPorts ( ) . Where ( e => ! e . LocalID . Contains ( "out_" ) ) )
439
455
{
440
456
if ( ! portReader . IsHorizontal )
441
457
continue ;
@@ -449,7 +465,7 @@ protected override void OnDefineNode()
449
465
450
466
// var type = ShaderGraphTypes.GetTypeHandleFromKey(portReader.GetRegistryKey());
451
467
var type = ShaderGraphExampleTypes . GetGraphType ( portReader ) ;
452
- var nodeId = nodeReader . ID ;
468
+ var nodeId = nodeHandler . ID ;
453
469
void initCallback ( Constant e )
454
470
{
455
471
var constant = e as BaseShaderGraphConstant ;
@@ -476,7 +492,7 @@ void initCallback(Constant e)
476
492
var newPortModel = this . AddDataInputPort ( portReader . LocalID , type , orientation : orientation , initializationCallback : initCallback ) ;
477
493
// If we were deserialized, the InitCallback doesn't get triggered.
478
494
if ( newPortModel != null )
479
- ( ( BaseShaderGraphConstant ) newPortModel . EmbeddedValue ) . Initialize ( ( ( SGGraphModel ) GraphModel ) , nodeReader . ID . LocalPath , portReader . LocalID ) ;
495
+ ( ( BaseShaderGraphConstant ) newPortModel . EmbeddedValue ) . Initialize ( ( ( SGGraphModel ) GraphModel ) , nodeHandler . ID . LocalPath , portReader . LocalID ) ;
480
496
}
481
497
else
482
498
this . AddDataOutputPort ( portReader . LocalID , type , orientation : orientation ) ;
0 commit comments