22,795 Commits over 1,642 Days - 0.58cph!
You can now specify the preview type for certain Output variables on a Subgraph so changes can be reflected in the Preview window.
https://files.facepunch.com/CarsonKompon/2025/January/21_12-51-DifferentAmericanbulldog.mp4
Vulkan 1.2 is minimum requirement, device support remains the same. We already required several extensions that are core in 1.2 such as descriptor indexing
Shaders compiler uses scalar layout instead of std140/std430 layout (VK_EXT_scalar_block_layout is core in 1.2)
This is a much less confusing layout for structures in HLSL, allowing for
tighter packing and generally matching their C++/C# counter parts.
e.g:
```hlsl
struct T {
float a_float;
float3 b_float3;
}
```
The size of struct T was previously 32 bytes with GL layout and is now 16 bytes.
The offset of b_float3 was previously 16 bytes and is now 4 bytes with scalar layout.
More info on rules (previously GL, new Scalar)
microsoft/DirectXShaderCompiler/blob/main/docs/SPIR-V.rst#memory-layout-rules
https://maraneshi.github.io/HLSL-ConstantBufferLayoutVisualizer/
FunctionResult node generates inputs before creating connections to ensure connections are always deserialized correctly
PlugInfo correctly uses property name if no [Title] attribute
Refactor Result node into an abstract BaseResult class which Result and now FunctionResult can both inherit
Clean up TextureControlWidget
Add Color.Rgba16 (half based color)
Add Bitmap class
More bitmap stuff
Implement GameSettingsModal
Fixed NRE when FunctionResult name is left null
Subgraphs no longer attempt to generate a .shader file, and will run error checks in the graph on Save
FunctionResult Inputs now maintain connections upon being regenerated
Add GameSettingsEntry.Default since we'll want to give the controls default values
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
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
Added SoundscapeTrigger.Volume so you can control the volume of a Soundscape from the component
Added more property/enum docs to SoundscapeTrigger and gave TriggerType entries [Icon]
Standardize internal way to async replace placeholder textures
Add Sandbox.Utility.ForAsync
TextureGenerators are async
Fixed a bug where calling GameObject.GetPrefab could network spawn game objects. Never network spawn game objects if its scene is a PrefabScene.
Merge branch 'master' of sbox
New Clothing - Headphones
https://files.facepunch.com/daniel/1b2011b1/0OyFzoEgI6.png
LODs and Human aswell
CommandList.GetRenderTarget with SizeFactor, don't allocate DepthTexture for it since it's not being used anywhere yet
Overlay is considered a game layer since it draws to color, fixes depth prepass for overlays, remove overlay prepass from renderpipeline_standard
Optimze Pixmap.FromTexture (don't swizzle the format 3 times)
4096x4096 339ms -> 115ms
2048x2048 90ms -> 50ms
1024x1024 20ms -> 10ms
Bottleneck is going to be the data read from GPU -> CPU, not much else to do
Fixed an issue where FromHost sync vars could get stomped. Optimized delta snapshot updates - we no longer need to even try to process networked objects we don't own. Fixes Facepunch/sbox-issues#7261
Security check in snapshot processing - don't process snapshots we receive for an object if the source connection doesn't own it and isn't the host
Force add compiled VR menu scene
Stop "Create Sound Event" pranking people by opening to the wrong directory, resolves Facepunch/sbox-issues#7421
Move VRSceneSwitcher + add warning and move back to OnAwake, recompile main menu
In VR, menu defaults to having VR tag enabled
Merge branch 'master' into jsonfree-clone
In VR, menu defaults to having VR tag enabled
Move VRSceneSwitcher + add warning and move back to OnAwake, recompile main menu
Stop "Create Sound Event" pranking people by opening to the wrong directory, resolves Facepunch/sbox-issues#7421
Force add compiled VR menu scene
Fixed an issue where FromHost sync vars could get stomped. Optimized delta snapshot updates - we no longer need to even try to process networked objects we don't own. Fixes Facepunch/sbox-issues#7261
Remove unintended file change
Clear clone type cache on HotReload & GameShutdown
Documentation
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
Add TextureGenerator boilerplate
TextureControlWidget poc
Fix NRE in SpriteRenderer when texture is null
TextureControlWidget creates a child ResourceControlWidget instead of trying to be one
Speed up Pixmap.FromTexture ( there's got to be a faster way than this come on)
Draw texture preview
Optimze Pixmap.FromTexture (don't swizzle the format 3 times)
4096x4096 339ms -> 115ms
2048x2048 90ms -> 50ms
1024x1024 20ms -> 10ms
Bottleneck is going to be the data read from GPU -> CPU, not much else to do
Don't run morph code when using vertex cache
Fix incorrect offset to CalculateMorphSubrectData
Define MORPH_TEXTURE_ATLAS_WIDTH as g_nMorphTextureAtlasWidth when in compute
Compute morphs, normals and tangents in skinning compute shader
Overlay is considered a game layer since it draws to color, fixes depth prepass for overlays, remove overlay prepass from renderpipeline_standard
CommandList.GetRenderTarget with SizeFactor, don't allocate DepthTexture for it since it's not being used anywhere yet
Decode cached vertex normals and tangents
Don't call CalculateInstancingObjectToWorldMatrix when using D_CS_VERTEX_ANIMATION, it's already calculated in the cache
Automatically detect if a type can be copied for cloning.
Cleaneup clone reflection code
Remove clone interface and attribute
Add another test
Add another test
Format
Add SV_VertexID to VS_INPUT, this can be used for indexing vertex cache instead of using D_MORPH nVertexIndex
New Clothing - Headphones
https://files.facepunch.com/daniel/1b2011b1/0OyFzoEgI6.png
LODs and Human aswell
Fixed a bug where calling GameObject.GetPrefab could network spawn game objects. Never network spawn game objects if its scene is a PrefabScene.
Merge branch 'master' of sbox
Possible fix for fragile tests
Restore old TypeLibrary at end of SerializeTest
Move VR scene switcher logic into OnStart
Add support for custom specialised asset pickers per-resource type via AssetPickerAttribute
Add SimplePicker, use for shaders until we get something better so that's not awful to use
https://files.facepunch.com/solw/2025/January/20_13-12-GentlePinkriverdolphin.png
Merge branch 'master' into jsonfree-clone
Fix cloning types that do not have public parameter less constructors
Simplify clone. Implement DeepClone for built-in types, for custom types fallback to JSON
Add support for custom specialised asset pickers per-resource type via AssetPickerAttribute
Add SimplePicker, use for shaders until we get something better so that's not awful to use
https://files.facepunch.com/solw/2025/January/20_13-12-GentlePinkriverdolphin.png
Move VR scene switcher logic into OnStart
Add [CopyToClone] attribute to allow fast path clone of structs that don't hold any references (ParticleFloat, Curve, Vector...)
Restore old TypeLibrary at end of SerializeTest
Possible fix for fragile tests
Humans/animgraph: added Sprint_N (+ temp derived NE/NW)
Humans: small tweak to Sprint_N + export the copy of the graph assigned to Humans
Refactor GameObject serialization tests a little
A couple of object cloning edge case tests
CloneActionGraphProperty test
Add CloneActionGraphSceneReference test
Pull tests from master
DeppClone all reference types
Refactor GameObject serialization tests a little
A couple of object cloning edge case tests
CloneActionGraphProperty test
Add CloneActionGraphSceneReference test
Add CloneActionGraphSceneReference test