23,065 Commits over 1,673 Days - 0.57cph!
Try force full checkout if we force a rebuild
Only make EnvmapProbe dirty on load if it's enabled, fixes infinite loop if loading scene with an envmap disabled
Make shadow fast path opt-in instead of opt-out, makes most common shaders use it by default, fixes shaders with nonstandard vertex shaders like terrain behave properly
Remove PrefabVariableWidget
Make JSON Diffing and Patching logic internal
Fix PrefabVariable overrides passed to clone not working
Restore serialize shouldsave behaviour
Format
Fix prefab instance overrides editor interactions
Editor and UI of prefab instance overrides was broken after refactoring, fixed it again.
Instance overrides/patches now get updated on undo/redo
Cleanup instance patch cache
Remove app bar
Use Inter font globally
Peel everything back
Initial standardized colors
Moved Wizard stuff outside of ProjectSettings namespace into its own
Restore publish and export wizards
Rejig input page categories around
Page -> Category
Get rid of InspectorHeaderSection, make CollapsibleCategory work for anything and uses InspectorHeader
Project settings categories have state cookies
Add JsonPointer (RFC 6901) implementation and tests
Add RFC 6902 compliant JSON diffing / patch generation
Use JsonNode instad of JsonDocument in pointer
Add ApplyPatch functionality
Generate roundtrip tests
Add Test Generator for GameObject hierarchies
Remove Copy & Move operations
I can't make it work there are extremely rare edge cases for enormous diffs (thousands of objects and operations).
The code to support these edge cases was becoming more and more unhinged and illegible.
Can still tackle it later if we really need it.
Add tests for LCS
Work around .net runtime bug in Json.DeepEquals
dotnet/runtime/issues/112769
Clone/Move attempt 2
Move optimization still fails for very large diffs -> disable for now
Cleanup some debug code
Simplify Json Pointer
Object/Pattern detection in json
Smarter pattern matching; Added Patch Generation & Application
Improve handling of nested objects
Prefab Instance Overrides PoC
Remove old version of Json patch (RFC 6902)
Simplify ObjectContext collection
Add MovedObject patch operation, this operation tracks objects that have been reordered or moved to a different container.
Basic tests are passing now
Add complex generated GameObject diff/patch roundtrip tests
Most of them are passing, ordering seems to break sometimes
Some more tests parsing
Parse JSON into custom data structure (tree) for diffing and patch application
All gameobejct tests passing
More variety in test generator
Cleanup test logging
Rename OwnerType -> ParentTyp
Mark some prefab variable stuff as obsolete, to find out what is depending on it
Get rid of more prefab variable code, build is working again
Stop cloning prefabvariables
Mark scene as edited on undo/redo
Add undo for dropping resources onto the inspector
Initial pass on prefab instance overrides
https://files.facepunch.com/lolleko/2025/March/27_12-55-TrainedSpidermonkey.mp4
Add ability to write back instance changes to prefab
Allows for in scene editing of prefabs
https://files.facepunch.com/lolleko/2025/March/27_13-41-DimwittedTilefish.mp4
Untangle and cleanup the existing prefab code
This get's rid of more prefab variable and other prefab related code.
The remaining prefab code is reorganized around the new instance overrides.
Overall this results cleaner and less complex prefab code.
Still need to fix all the tests.
Remove prefab variable UI code
Reexpose some prefab instance override functionality to editor
Move and cleanup write prefab instance to prefab functionality
Cleanup gameobject network flag serialization code
This no longer needs to be handled manually, overrides will make sure either prefabs or gos networking options will be respected.
Docs & formatting
We need to keep prefab variable collections for backwards compatibility
Add legacy path to covert old prefab instances and variables to new instance overrides
This conversion takes place on first load of the old instance.
Fix legacy prefab instances being loaded with incorrect transform
Refactor, everything uses proper inspector headers so it's consistent. Moved some stuff around (https://files.facepunch.com/tony/1b0111b1/8tX5cEkCAD.png)
Handle the job of adding the correct extension
Fix legacy prefab instances being loaded with incorrect transform
Refactor, dumb down the naming
Force adding loaders into a specific format, so they're forced to define path and type
Add Asset.IsProcedural - hide some menu options etc if true
Do a full checkout for a Steam branch build
Do a full checkout for a Steam branch build
Cleanup gameobject network flag serialization code
This no longer needs to be handled manually, overrides will make sure either prefabs or gos networking options will be respected.
Docs & formatting
We need to keep prefab variable collections for backwards compatibility
Add legacy path to covert old prefab instances and variables to new instance overrides
This conversion takes place on first load of the old instance.
Refresh mounts context menu
Fixed subtitle text being incorrect, re-implement OnSave
TitleBar update override calls base
SceneView: don't let camera smoothing block gizmo interactions, Facepunch/sbox-issues#7790
Vulkan: Separate the shared VS/PS/GS dynamic descriptor set into per-stage dynamic sets
Reworks the single uber dynamic descriptor set containing every stage
into 3 much smaller sets for each stage (VS/PS/GS).
This is primarily a backport from the latest Source 2 branch, however
this diverges on materialsystem2, on rendersystemvulkan threading and
quite heavily vfx_vulkan where we use mostly our own compiler code using
DXC instead of Slang.
The main purpose of this is to remove the restrictions of not being able
to use VK_EXT_graphics_pipeline_library with uniform texel buffers,
storage images, storage buffers, storage texel buffers.
Previously the only solution would be forced usage of a static descriptor
set, however that isn't feasible for UGC or an easy to use engine.
The layout now is:
Dynamic set 0 - VS/CS (Would also be used for mesh shaders)
Dynamic set 1 - PS
Dynamic Set 2 - GS
Set 3+ - static sets
The index of static sets remains the same because sets 1/2 are reused
from previously deprecated materialsystem2 owned descriptor sets.
Other changes include:
* VFX_MAX_SAMPLERS: 16 -> 32
* VFX_MAX_UAVS: 8 -> 16
FIXME: CRayTracePipelineVulkan needs to be upgraded but is unused currently
Up SHADER_COMPILER_VERSION to 3 and refuse to load older shaders
scenesystem: All layers get lighting constants, there are buffers that need to always be bound here and there is no overhead
Recompile all shaders
Debug: Spew when a shader doesn't support pipeline library so hitches can be blamed on geometry shaders
Workflow for upload to Steam test branch
Support mount/x/assets/ folder - move simple_color shader
Source refreshing
Make EventSystem use WeakHashSet
Treenode adds itself to EditorEvent
MountsNode, refresh properly, unmounting
Can't workflow_dispatch on a branch
Add SegmentedControl.HasOption
Don't use reflection to populate categories, restore specific layouts for specific project types
Tighter collision matrix, input action panel
Debug: Spew when a shader doesn't support pipeline library so hitches can be blamed on geometry shaders
Rect Lights, Capsule Lights, Line Renderer Light
Greatly improve SSR quality, tweaks
Add Roughness::Sample
Logic for TraceResult.ValidHit was incorrect, fixed now
https://files.facepunch.com/sampavlovic/1b3111b1/0yspbUFy98.png
Maybe don't leave debug prints in and be confused at the extra 2ms
Support creating procedural sound resource from wav file data
scenesystem: All layers get lighting constants, there are buffers that need to always be bound here and there is no overhead
Up SHADER_COMPILER_VERSION to 3 and refuse to load older shaders
Recompile all shaders
Vulkan: Separate the shared VS/PS/GS dynamic descriptor set into per-stage dynamic sets
Reworks the single uber dynamic descriptor set containing every stage
into 3 much smaller sets for each stage (VS/PS/GS).
This is primarily a backport from the latest Source 2 branch, however
this diverges on materialsystem2, on rendersystemvulkan threading and
quite heavily vfx_vulkan where we use mostly our own compiler code using
DXC instead of Slang.
The main purpose of this is to remove the restrictions of not being able
to use VK_EXT_graphics_pipeline_library with uniform texel buffers,
storage images, storage buffers, storage texel buffers.
Previously the only solution would be forced usage of a static descriptor
set, however that isn't feasible for UGC or an easy to use engine.
The layout now is:
Dynamic set 0 - VS/CS (Would also be used for mesh shaders)
Dynamic set 1 - PS
Dynamic Set 2 - GS
Set 3+ - static sets
The index of static sets remains the same because sets 1/2 are reused
from previously deprecated materialsystem2 owned descriptor sets.
Other changes include:
* VFX_MAX_SAMPLERS: 16 -> 32
* VFX_MAX_UAVS: 8 -> 16
FIXME: CRayTracePipelineVulkan needs to be upgraded but is unused currently
Temp: All layers get per view lighting constants (these are probably worthy of a static descriptor set)
Temp: Disable bloom layer - throwing too many errors which makes debugging impossible
Cleaning all existing pages, reduce padding/margins throughout
ProjectSettingsInspector becomes the inspector for `Project`, cleanup
Reexpose some prefab instance override functionality to editor
Move and cleanup write prefab instance to prefab functionality
Catch NRE when navmesh.query is being used before initialization
Ideally these null check shouldn't be necessary.
However, in order to avoid the checks, we would need to be able to create DtNavQuery on scene load.
But this is not possible without major refactoring to recast/detour code, which is something I don't want to start right now.
Add procedural sound creation to sound system
Add SoundFile.Create (temp API)
SoundFile.Load also tries to load from mounting before trying native
Generate test procedural sound when loading sound entries
Remove prefab variable UI code
Start reframing project settings window to be inline in the inspector
Renaming some stuff
Untangle and cleanup the existing prefab code
This get's rid of more prefab variable and other prefab related code.
The remaining prefab code is reorganized around the new instance overrides.
Overall this results cleaner and less complex prefab code.
Still need to fix all the tests.
Fix PanelTransform applying an inverse parent matrix, affectively undoing the transforms of the parent panel.
BEFORE:
https://files.facepunch.com/CarsonKompon/2025/March/31_11-31-SlightIndianpalmsquirrel.mp4
AFTER:
https://files.facepunch.com/CarsonKompon/2025/March/31_12-49-FastQueensnake.mp4
Resolves Facepunch/sbox-issues#6659
Register OnRenderUI outside of conditional so UI can render over any Camera that doesn't have the "Color" Clear Flag. Resolves Facepunch/sbox-issues#7986
Add [Hide] attribute to GoToDefinition and _forceChange as they should not appear in the ActionGraph inspector