├── Editor.meta
├── Editor
├── Resources.meta
├── Resources
│ ├── ShaderVariantTool_Main.uxml
│ ├── ShaderVariantTool_Main.uxml.meta
│ ├── ShaderVariantTool_ShaderTable.uxml
│ ├── ShaderVariantTool_ShaderTable.uxml.meta
│ ├── ShaderVariantTool_Style.uss
│ ├── ShaderVariantTool_Style.uss.meta
│ ├── ShaderVariantTool_VariantTable.uxml
│ └── ShaderVariantTool_VariantTable.uxml.meta
├── ShaderVariantTool.cs
├── ShaderVariantTool.cs.meta
├── ShaderVariantTool_BuildProcess.cs
├── ShaderVariantTool_BuildProcess.cs.meta
├── ShaderVariantTool_ComputeProcess.cs
├── ShaderVariantTool_ComputeProcess.cs.meta
├── ShaderVariantTool_Data.cs
├── ShaderVariantTool_Data.cs.meta
├── ShaderVariantTool_Helper.cs
├── ShaderVariantTool_Helper.cs.meta
├── ShaderVariantTool_LogReader.cs
├── ShaderVariantTool_LogReader.cs.meta
├── ShaderVariantTool_ShaderProcess.cs
└── ShaderVariantTool_ShaderProcess.cs.meta
├── LICENSE
├── LICENSE.meta
├── README.md
├── README.md.meta
├── README01.jpg
├── README01.jpg.meta
├── package.json
└── package.json.meta
/Editor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f091c40a6948364489bb93e99eeb18c3
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Editor/Resources.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 732c98c7d204e894c85b5d8a5fc38d42
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_Main.uxml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_Main.uxml.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 84788b029710bec4fb1ca418d727b2ba
3 | ScriptedImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 2
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 | script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
11 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_ShaderTable.uxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_ShaderTable.uxml.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 914c95f50a483e9458a967b993e8a185
3 | ScriptedImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 2
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 | script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
11 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_Style.uss:
--------------------------------------------------------------------------------
1 | .section-spacing
2 | {
3 | padding-bottom: 30px;
4 | }
5 |
6 | .initial-message
7 | {
8 | padding: 10px;
9 | }
10 |
11 | .message-label, .initial-message
12 | {
13 | padding-left: 10px;
14 | -unity-font-style: bold;
15 | color: aqua;
16 | }
17 |
18 | /* Culture setting styles ============================================== */
19 |
20 | #CultureField
21 | {
22 | width: 300px;
23 | padding-bottom: 10px;
24 | }
25 |
26 | /* CSV button styles ============================================== */
27 |
28 | .csv-buttons
29 | {
30 | width: 200px;
31 | }
32 |
33 | /* summary label styles ============================================== */
34 |
35 | .summary-label-content
36 | {
37 | padding-left: 10px;
38 | -unity-font-definition: resource("Fonts/RobotoMono/RobotoMono-Regular.ttf");
39 | width: 90%;
40 | }
41 |
42 | /*
43 | .summary-label-content:hover
44 | {
45 | color: aqua;
46 | background-color: rgb(40,40,40);
47 | }
48 | */
49 |
50 | /* common table styles ============================================== */
51 |
52 | .unity-multi-column-header__column-container
53 | {
54 | -unity-font-style: bold;
55 | -unity-text-align: middle-left;
56 | }
57 |
58 | .unity-multi-column-header__column-container Label
59 | {
60 | white-space: normal;
61 | }
62 |
63 |
64 | .table-label
65 | {
66 | padding: 2px;
67 | padding-left: 10px;
68 | }
69 |
70 | .expanded-row-template
71 | {
72 | width: 100%;
73 | min-width: 100%;
74 | background-color: rgb(46,46,46);
75 |
76 | border-width: 2px;
77 | border-color: rgb(40,40,40);
78 | }
79 |
80 | #CollectionSize
81 | {
82 | background-color: rgb(46,46,46);
83 | }
84 |
85 | .shader-table .shader-table-selected
86 | {
87 | /* background-color: var(--unity-colors-alternated_rows-background); */
88 | background-color: rgb(40,60,60);
89 | color: aqua;
90 | -unity-font-style: bold;
91 | }
92 |
93 | /* shader table styles ============================================== */
94 |
95 | .shader-table
96 | {
97 | width: 100%;
98 | }
99 |
100 | .shader-table, .variant-table
101 | {
102 | border-width: 10px;
103 | }
104 |
105 | .shader-table #unity-checkmark
106 | {
107 | display: none;
108 | }
109 |
110 | .shader-table #unity-content-container
111 | {
112 | align-items: stretch;
113 | }
114 |
115 | .shader-table #unity-content-viewport
116 | {
117 | align-self: flex-start;
118 | }
119 |
120 | MultiColumnTreeView, MultiColumnListView
121 | {
122 | max-height: none;
123 | }
124 |
125 |
126 | /* variant table styles ============================================== */
127 |
128 | .variant-table
129 | {
130 | border-color: rgb(46,46,46);
131 | background-color: rgb(55,55,55);
132 | }
133 |
134 |
135 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_Style.uss.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 8fed4256d2671f94fab4735c26e66652
3 | ScriptedImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 2
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 | script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
11 | disableValidation: 0
12 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_VariantTable.uxml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/Editor/Resources/ShaderVariantTool_VariantTable.uxml.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 56949825b95d81046a7503a15fc9cd29
3 | ScriptedImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 2
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 | script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
11 |
--------------------------------------------------------------------------------
/Editor/ShaderVariantTool.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Linq;
3 | using UnityEditor;
4 | using UnityEngine;
5 | using UnityEngine.UIElements;
6 | using System;
7 | using System.IO;
8 | using System.Text;
9 |
10 | namespace GfxQA.ShaderVariantTool
11 | {
12 | public class ShaderVariantTool : EditorWindow
13 | {
14 | private VisualElement root;
15 | private ScrollView mainScrollView;
16 | private Toggle logToggle;
17 |
18 | [MenuItem("Window/ShaderVariantTool")]
19 | public static void ShowWindow()
20 | {
21 | //ShaderVariantTool wnd = GetWindow();
22 | ShaderVariantTool wnd = CreateWindow(); //Allow to create more instances
23 | wnd.titleContent = new GUIContent("ShaderVariantTool");
24 | wnd.minSize = new Vector2(800, 700);
25 |
26 | //initiate log toggle value
27 | Helper.shouldUpdateLogNextBuildGUI = true;
28 | }
29 |
30 | public void OnGUI()
31 | {
32 | //Update log toggle
33 | Helper.InitiateLogNextBuild();
34 | logToggle.value = SVL.logNextBuild;
35 | }
36 |
37 | public void CreateGUI()
38 | {
39 | root = rootVisualElement;
40 |
41 | //Getting main layout
42 | VisualTreeAsset rootVisualTree = Resources.Load("ShaderVariantTool_Main");
43 | rootVisualTree.CloneTree(root);
44 | mainScrollView = root.Q();
45 |
46 | //Log toggle ==================================================================
47 | logToggle = root.Q(name:"LogToggle");
48 | logToggle.RegisterValueChangedCallback(v =>
49 | {
50 | Helper.SetLogNextBuild(v.newValue);
51 | });
52 |
53 | //Culture Setting ==================================================================
54 |
55 | //Read culture pref
56 | Helper.SetupCultureInfo();
57 |
58 | //DropdownList
59 | DropdownField cultureDropdown = root.Q(name:"CultureField");
60 | cultureDropdown.choices.Clear();
61 | foreach(var cinfo in Helper.cinfo)
62 | {
63 | cultureDropdown.choices.Add(cinfo.DisplayName);
64 | }
65 | cultureDropdown.index = Array.IndexOf(Helper.cinfo,Helper.culture);
66 | cultureDropdown.RegisterValueChangedCallback(v =>
67 | {
68 | Helper.UpdateCultureInfo(v.newValue);
69 | });
70 |
71 | //Message when no CSV found ==================================================================
72 |
73 | //If there is no CSV file available, show an message to hint people to make a build first
74 | if(CSVFileNames == null) GetCSVFileNames();
75 | if(CSVFileNames.Count == 0)
76 | {
77 | //Hide CSV UI
78 | root.Q("HideIfNoCSV").style.display = DisplayStyle.None;
79 |
80 | //Show the message only
81 | root.styleSheets.Add(Resources.Load("ShaderVariantTool_Style"));
82 | Label initialMessage = new Label("No ShaderVariantTool CSV found. Build the player and reopen this tool or click refresh CSV list above.");
83 | initialMessage.AddToClassList("initial-message");
84 | root.Add(initialMessage);
85 |
86 | return;
87 | }
88 |
89 | //CSV buttons ==================================================================
90 |
91 | //Refresh CSV button
92 | Button refreshCSVButton = root.Q