22,795 Commits over 1,642 Days - 0.58cph!
Added net_fakepacketloss ConVar for testing (0-100%). Fixed an issue where if a delta snapshot was received before an object was created on the client-side, it would remember the state wrongly. Fixed an issue with Network Refresh messages where, if arriving late, could overwrite Sync Vars with the wrong values
Packet loss test command - send invalid snapshot ids back in ack, dont process them
Add Bitmap.ToFormat( ImageFormat format )
Removed unused from InputContext
Prompt to save current graph (if dirty) when pressing the Forward/Back/Home buttons
Fixed Cloud Browser @installed tag not being filterable by query
Add [Hide] to TextureCoord.Title override
Minor MainWindow refactor so .shdrgrph files arent recognized as Sub-Graphs mistakenly
Add Texture.GetBitmap
Simple texture compiling from managed
FloatControlWidget keeps the drag delta intact, fixes janky drag on int controls
Add Texture.LoadAsync using AsyncResourceLoader
Add TexturePicker
Add PickerOptions.InitialSearchText, populate from native params
TexturePicker uses InitialSearchText so it starts filtered to _normal/_ao/etc where that's handy
When dragging multiple GameObjects onto a ListControlWidget of Components, get the first component from each GameObject similarly to if we were to drag them each individually.
Move file
Match old (incorrect) GameObject enabled state handling during cloning, some games rely on that
Improvements to how delta snapshots are stored. Make sure we apply all snapshots so long as the last processed value for an entry has an older snapshot id.
Match old clone behavior and clone properties in alphabetical order, some games rely on that 💀
Add clone tests to master
Add more ResourceCompiler functionality
Managed can override compiling of any resource
Don't try to use shaderFloat16 either since this is only avaliable on gtx1660+
don't require everyone to have a raytracing capable gpu (:
Use descriptor set for vertex cache so that it doesn't need to be set with an attribute (which would be set too early if resize is needed)
Wrap IResourceCompilerContext
Find "$compiler" in resource json and launch compiler
Resize vertex cache buffer when out of space
Use remaining bytes in extra shader data to hold base vertex cache offset, add another vertex id lookup buffer relative to meshes vertex buffer size offsets - this allows correct indexing into cached vertices while remaining backwards compatible
Compile shaders
Add TextureGenerator boilerplate
TextureControlWidget poc
Fix NRE in SpriteRenderer when texture is null
TextureControlWidget creates a child ResourceControlWidget instead of trying to be one
Draw texture preview
Standardize internal way to async replace placeholder textures
Add Sandbox.Utility.ForAsync
TextureGenerators are async
Add IPopupEditor<T>, EditorUtility.OpenControlSheet looks for this interface when creating a popup
Rename ControlSheetPopup to PopupEditor, make more modular so we can override important bits
Add TextureEditorPopup
Clean up TextureControlWidget
Add Color.Rgba16 (half based color)
Add Bitmap class
More bitmap stuff
Bitmap draw and bitmap pen
Bitmap drawing fixes
Bitmap clone, IDisposable, IValid
Remove baked lighting ToolsVis, they're nigh useless for us now, the one we actually use is a near duplicate of Diffuse toolsvis
Remove all references to lightmapping combos, they're still available on vertex shader for lightmapping uv input though, PS stubs it out on specialization
Start bindless lightmaps & light probe volume
Bindless Lightmaps use cbuffer directly for indices instead of setting texture parameters, lightmapping conditionals use constants instead of combos now
Bindless Light Probe Volumes
Actually bind bindless lightmaps
Final adjustments, vertex shaders still use lightmapping combo, take out rest of lightingTerms.vDBG_BakedLighting
Spritecard tries to sample lightmaps from vertex shader which isnt what we want, remove dynamic combo rules for lightmaps
Bakeresourcehelper which is used on tools has duplicated LPV constants code, make it use same path that's used for bindless
Remove BATCH_FLAGS_HAS_BAKED_LIGHTING_FROM_VERTEX_STREAM ( unused ) and BATCH_FLAGS_CONTROLLING_COMBO_CHANGES (bullshit now)
Mark bindless lightmaps and LPVs as used, might not be needed but making sure
Update shaders with bindless lightmaps
Double Clicking a Subgraph Node instantly opens the Subgraph
Implemented the file history forward and back buttons when navigating through multiple ShaderGraphs in the same window
https://files.facepunch.com/CarsonKompon/2025/January/21_18-29-MidnightblueSandbarshark.mp4
Remove BATCH_FLAGS_HAS_BAKED_LIGHTING_FROM_VERTEX_STREAM ( unused ) and BATCH_FLAGS_CONTROLLING_COMBO_CHANGES (bullshit now)
Mark bindless lightmaps and LPVs as used, might not be needed but making sure
Enable vulkan 1.2 features (scalarBlockLayout, bda, descriptor indexing, etc.) instead of using all the extensions
Revert "Catch null typedescriptor when cloning"
This reverts commit 04c9f070c908428fd86eea9cbe8355e15aa069c5.
Revert "Reduce JSON usage in GameObject.Clone (#1781)"
This reverts commit 3975bc70bb23755766f1767725aab376864a5260.
Bakeresourcehelper which is used on tools has duplicated LPV constants code, make it use same path that's used for bindless
Subgraph "Add To Node Library" adds the subgraph to the Create Node menu so they can be easily accessed.
https://files.facepunch.com/CarsonKompon/2025/January/21_16-51-HardVampirebat.mp4
Add ConVarFlags.GameSetting
Add internal TypeLibrary.GetMembersWithAttribute<T>
Add EditorUtility.CreateTypeLibrary( CompilerOutput[] )
Publisher: after compiling a game, create new TypeLibrary, load in the game's assemblies, and search for ConVars marked with ConVarFlags.GameSetting, include in metadata when publishing
Add GameSettingsEntry.Default since we'll want to give the controls default values
Implement GameSettingsModal
Add LaunchArguments.GameSettings, apply them when saving new game settings from menu, and run them when we've succesfully opened a game
Icon support for game settings dropdown options, use SwitchControl instead of Checkbox
Add Reset to Default button in GameSettingsModal
Better looking DropDown, reduced default max range, restore saved launch arguments when re-opening modal
Fix error when deserializing SubgraphNodes
SubgraphNode now uses the Title, Description, and Icon from the referenced Subgraph
SubgraphNode now generates inputs from any Parameter nodes in the subgraph, with default names for any without.
SubgraphNodes now generate output plugs from the FunctionResult node in the references Subgraph
https://files.facepunch.com/CarsonKompon/2025/January/21_16-23-CoordinatedEastsiberianlaika.png
Better looking DropDown, reduced default max range, restore saved launch arguments when re-opening modal
Add Reset to Default button in GameSettingsModal
Subgraphs have Title, Description, Category, Icon and Add To Node Library properties. To be used for the created node
Added SubgraphNode which references a .shdrfunc. Results in graph errors if the references graph cannot be found or the references graph has errors
Dragging a .shdrfunc asset into a ShaderGraph will create a Subgraph Node referencing the dragged asset
Catch null typedescriptor when cloning
Bitmap clone, IDisposable, IValid
Can change Preview Blend Mode/Shading Model/Domain in Subgraphs
Implemented all other preview types for FunctionResult
Fix GraphCompiler failing when using Unlit in Subgraphs
Icon support for game settings dropdown options, use SwitchControl instead of Checkbox
Bitmap draw and bitmap pen
Reduce JSON usage in GameObject.Clone (#1781)
We no longer converts the complete GameObject to and from JSON for cloning.
JSON is only used as a last resort for complex properties we cannot clone directly.
Should result in 1.5 to 3 times faster clones (depends on object size).
Add LaunchArguments.GameSettings, apply them when saving new game settings from menu, and run them when we've succesfully opened a game