Create a new internal/colormshader package that owns the color matrix
shader generation, fully independent of internal/builtinshader. It has
its own shader template with ColorM logic baked in, its own
Filter/Address types, and a go:generate pipeline producing defs.go.
This removes the useColorM dimension from internal/builtinshader,
reducing it from 18 shader variants to 9. The colorm package now
imports only colormshader (not builtinshader) for shader sources,
preparing for the v2/v3 split where v2's colorm cannot access v3's
builtinshader.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Create a new internal/colormshader package that owns the color matrix
shader generation, fully independent of internal/builtinshader. It has
its own shader template with ColorM logic baked in, its own
Filter/Address types, and a go:generate pipeline producing defs.go.
This removes the useColorM dimension from internal/builtinshader,
reducing it from 18 shader variants to 9. The colorm package now
imports only colormshader (not builtinshader) for shader sources,
preparing for the v2/v3 split where v2's colorm cannot access v3's
builtinshader.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
NSString's length returns UTF-16 code unit count, not UTF-8 byte
count. Use lengthOfBytesUsingEncoding: with NSUTF8StringEncoding
instead.
Updates ebitengine/purego#438
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Now every call of ColorMode creates a closure to access the main
thread, and this allocates a lot of heap objects.
This change uses atomic values instead of closures.
As (*UserInterface).getInitMonitor could be invoked from
(*UserInterface).updateInputStateForFrame, this could cause a deadlock.
This change fixes the issue by not using the mutex at getInitMonitor.
The mutex usage itself should be reduced more.
Closes#3402
The database items with "Mac OS X" are for HID devices, while "iOS"
are for GC devices. In the near future, macOS should treat GC devices
in Ebitengine, especially for vibrations.
Updates #2014
Updates #2015
With some devices, anomalous wheel values unexpectedly come. These
cause sudden spikes and/or rapid reversals.
This change fixes this issue by detecting and ignoring them.
Closes#3390