🎮 Game

A library package scaffold for Shader Graph Plus. The Game project only contains compiler metadata and global using directives, no runtime systems or gameplay code.

🔧 Editor

Adds a shader graph editor to s&box. Creators get a window to build shaders from nodes, manage blackboard parameters and preview results. The code is a large set of editor UI, node definitions, JSON serialization and a compiler that emits HLSL and optional post processing components.

🐞 Possible Bugs

Editor/Internal/NodeEditorPlus/Blackboard/BlackboardView/BlackboardView.cs
DeleteParameter checks 'if (parameter != null) return', so it exits on valid input and never deletes a real parameter.
Editor/ShaderGraphPlus/Compiler/VoidFunctionInfo.cs
GetHashCode iterates TargetResults without a null check, so it throws a NullReferenceException when TargetResults is null, including on default-initialized structs or when constructed with a null list.
Editor/ShaderGraphPlus/Nodes/Math/MathConstantsNode.cs
FOURPI maps to "0.78539816339f" which is PI/4, not 4*PI, so the node emits the wrong constant value and define.
Editor/ShaderGraphPlus/ProjectConverter/Node Core/FunctionResultConvert.cs
Convert unconditionally throws NotImplementedException, so converting a FunctionResult node always fails at runtime.
Editor/ShaderGraphPlus/ProjectConverter/Nodes/BranchConvert.cs
BranchNodeConvert.Convert unconditionally throws NotImplementedException, so encountering a VanillaNodes.Branch node will crash the conversion.
Editor/ShaderGraphPlus/ShaderGraphPlusJsonUpgrader.cs
If an upgrader throws, the finally block still writes json[Version] to the failing method’s version then breaks, so the stored version is advanced despite the upgrade not being applied.
Editor/ShaderGraphPlus/Widgets/ControlWidgets/FeatureReferenceControlWidget.cs
GetDropdownValues dereferences Graph.Parameters after the constructor sets Graph to null and returns, so it will throw a NullReferenceException.
The constructor unconditionally returns after setting Graph to null, so it never initializes Graph or sets the default property value and the widget is non-functional.
Editor/Utilities/Parse.cs
float.Parse is called without InvariantCulture, so inputs like '1.5,2.5' fail on locales that use comma decimals.