Commit Graph

172 Commits

Author SHA1 Message Date
Frank
7f9da309c9 const const const
adding hints for the compiler for optimization.
In case your custom build complains about "const", just remove the keyword. based on e82f38e277, but going further :-)

* "const" class functions : function does not modify any class attributes ( --> "this" becomes const)

* __attribute__((pure)) :  function return value depends only on the parameters and/or global variables. The function does not modify any global or static variables.
* __attribute__((const)) : function only examines arguments (no globals), and has no effects except the return value. This slightly more strict than "pure"
* hot: tells the compiler "this functions is called very often"
* cold: the opposite of hot
2024-08-07 14:58:38 +02:00
Frank
273154db76 drawArc speedup (Circle mapping mode)
* Optimize drawArc to skip pixels that are off-screen or outside the circle's bounding box. Also move repeating calculations out of the inner loop.

testcase 64x64 : 8fps --> 33 fps :-)
2024-08-06 18:13:59 +02:00
Frank
42919f9daf blob effect improvements, and a dirty hack for HUB75 double buffer
* mode_2Dfloatingblobs() improvements for large panels
* Segment::fillCircle() speed optimizations
* HUB75 hack (disabled by default): skip first fill(BLACK) when using double buffering (as the buffer gets cleared after each frame)
2024-08-06 15:53:46 +02:00
Frank
5240c3450b Segment drawing optimizations (FASTPATH only)
* cache width, height, and a few more values that are normally re-calculated for each pixel
* make normal sPC a bit faster
* Segment::fade_out() optimization

--> only active in FASTPATH mode, to preserve flash on small devices (8266)
--> code still needs some polishing
--> up to 20% speedup with some 2D effects (esp32,  flash qio 80Mhz, -O2)
2024-08-05 21:30:25 +02:00
Frank
9bcc5da132 code cleanup
- removed commented-out code
- reduced blank lines
2024-07-16 20:48:15 +02:00
Frank
7a83f1759d removed a/b testing via Reverse X (segment option) 2024-07-16 20:26:52 +02:00
Frank
96584c6c70 better rounding 2024-07-16 15:13:05 +02:00
Frank
e3d27de395 better handling of perspective
drawLine parameter "depth" shortens a line by a fraction - useful for VP perspective (vanishing point)
2024-07-16 13:27:56 +02:00
Frank
6aaf7a908d more sPC optimizations
* made setPixelColorXY_fast private
* optimized Segment::fill() to use setPixelColorXY_fast
* "bar" 1D expand optimization
2024-07-14 23:49:37 +02:00
Frank
dddd1574ec (experimental) setPixelColorXY_fast speedup by setPixelColorXY_fast
* adding a _fast_ variant of SetPixelColorXY, that does not perform any error checking.
* drawLine uses the fast setPixelColor variant (bresenham algo only)
* for TESTING: segment option "reverse" switches back to the "original slow" code.
surely needs some more optimization and improvements.

First test on GEQ 3D shows 10%-30% speedup
2024-07-14 14:11:11 +02:00
Troy
52130e176c Merge branch 'mdev' into 3DGEQ 2024-07-12 22:10:39 -04:00
Troy
ce8f01bf90 Bugfixed GEQ 3D
Bug fixes after lots of testing, better settings, etc.

Big thanks to @netmindz  for restructuring the code.

Add rough distance stop to Segment::drawLine()
2024-07-12 22:03:33 -04:00
Frank
346914b965 setPixelColorXY small optimizations
Caching a few segment vars gives a 5% speedup on big setups.

Its 2024, and compilers are still stupid :-P
2024-07-13 01:37:43 +02:00
Frank
c07658a7cb post-merge
* fix drawLine prototype
* a few more "inline"
* typo
2024-06-26 23:41:38 +02:00
Blaz Kristan
2aad3f5356 Antialiased line & circle 2024-06-26 22:40:59 +02:00
Frank
6c93250cd8 small improvement
addPixelColorXY() is actually the same code as color_add()
2024-04-20 23:24:27 +02:00
Frank
d0f018586e bugfix
comparing uint32_t to fastled CRGB does not work.
2024-04-20 22:42:26 +02:00
Frank
e886ece189 Segment::setPixelColorXY optimization
use a shortcut when the segment is "simple" and just a single pixel needs to be set on HW level.
2024-04-20 22:02:15 +02:00
Frank
93b8c63e2b post PR3904 fixes and improvements
* fix compiler warnings (uninitialized vars, ambiguous  functions calls)
* restore some lost function prototypes
* avoid negative pixel indices
* only use "fast" color_add when there is no risk of  "overshooting" results
* minor optimizations
2024-04-18 21:09:14 +02:00
Blaž Kristan
48c64aecff Merge pull request #3904 from DedeHai/FX_fcn_improvements
added improvements to color scaling and blurring
2024-04-18 19:26:57 +02:00
netmindz
0f79e9b7ff Merge pull request #124 from netmindz/auto-playlist
New Usermod - Auto Playlist
2024-04-16 22:38:56 +01:00
Frank
019cafc5e0 report out-of-memory situations to the user 2024-04-16 19:10:46 +02:00
Troy
6e23b09a93 Update FX_2Dfcn.cpp
removed temp debugging
2024-04-04 21:46:35 -04:00
Troy
22be977df8 IfDefs to quiet some other debug lines during debugging. 2024-03-25 12:19:13 -04:00
Troy
5ff44755d8 calculations based on normalized FFT results 2024-03-25 08:19:05 -04:00
Frank
8905992a89 code spell checking - part4 (MM specific) 2023-12-15 00:14:57 +01:00
Ewoud
0092e49eb3 GFX/Preview done right if > 4096 pixels + unlimited virtual pixels in 2d 2023-10-24 16:58:35 +02:00
Frank
9a3a97eff1 pre-merge
cleanup:
- version increase
- clean up debug messages
- minor fixes in platformio.ini
- fix compilation with -D WLED_DISABLE_2D

helping the compiler to optimize:
- a few more __attribute__((pure))
- fx.cpp marked a few local functions as "static"
2023-07-13 19:58:48 +02:00
Frank
3295579e05 jsonToPixels robustness
avoid string overflow when constructing filename
2023-07-13 18:36:11 +02:00
Frank
0fb5edc4a2 robustness improvements from upstream
(from upstream alt-buffer branch)
* prevent drawing into inactive segments
* robustness improvements for transitions
2023-07-13 18:34:46 +02:00
Frank
a45306b141 blur speedup
it seems that SEGMENT.blur() is the main bottleneck for many 2D effects.

This change optimizes performance of the function:
* avoid to re-write unchanged pixels
* early exit when blur_amount == 0 (=nothing to do)
* use _fast_ types where possible

I've seen up to 20% speedup with this change.
2023-07-08 20:06:52 +02:00
Frank
582b96f846 robustness improvements
* handling of stop = 0 when calculating sizes (avoid unsigned underflow)
* make sure groupLength() is never zero (to avoid div/0)
* gapmaps: check for "(gapSize > 0)" added.

not sure if all the checks are 100% needed, but they will improve robustness in corner cases.
2023-06-21 13:30:40 +02:00
Frank
310daa61a8 improve segment code robustness
* Avoid uint16 underflow in width() and height(): stop > start is possible, and means "inactive segment".

* use size_t for ledsrgbSize, _dataLen and _usedSegmentData -  uint16_t could overflow in some situations.

* try to catch attempts to allocate zero bytes (inactive segment => size 0)
2023-06-21 01:43:26 +02:00
Frank
3127c60b41 Merge branch 'mdev' into audio_fastpath 2023-06-15 20:54:57 +02:00
Ewoud
117dd52ce4 Ledmap 1D / no width/height 2023-06-15 11:29:41 +02:00
Ewoud
5c7937507b Bug fix segment view, use ledmapMaxSize (TroyHack) 2023-06-08 19:24:37 +02:00
Ewoud
8d43af6acc Bug fix segment view, use ledmapMaxSize (TroyHack) 2023-06-08 18:34:10 +02:00
TroyHacks
143f84238f WLED_DEBUG_MAPS flag added 2023-06-06 19:44:02 -04:00
Frank
dc77c172b2 Merge branch 'mdev' into audio_fastpath 2023-06-01 22:59:20 +02:00
Frank
f300ffdbe9 debug out: flush serial buffer after dumping out ledmap. 2023-06-01 22:57:15 +02:00
Frank
1daeecc7dd Merge branch 'mdev' into audio_fastpath 2023-05-30 20:44:10 +02:00
Frank
9cb6189611 minor speedup for 2D
* robustness: Segment::height() should never return 0
* Segment::XY(), Segment::virtualWidth() and Segment::virtualHeight() declared inline in fx.h. The compiler will always inline these functions now, avoiding overhead of call/return. "Knowing" the function body might also enable other optimizations.
--> up to 10% speedup in 2D effects.
2023-05-26 23:12:49 +02:00
Frank
fc193408d8 (experimental) use malloc/realloc for customMappingTable
if this works better, we should cherry-pick it into mdev.
2023-05-21 19:38:04 +02:00
Ewoud
22decaa0d6 segment.leds refactor (wip)
rename leds to ledsrgb
2023-05-19 15:25:26 +02:00
Ewoud
175375e30d Merge branch 'mdev' into audio_fastpath 2023-05-16 16:02:47 +02:00
Ewoud
21c7347296 Minimal (de)allocs on customMappingTable (only grow, not shrink) 2023-05-16 15:13:30 +02:00
Ewoud
d6bc9967d0 Support for large ledmaps
optimize jMapC, enumerateLedmaps and deserializeMap
2023-05-16 13:12:30 +02:00
Frank
6d23eb6874 improve robustness when heap is low
* customMappingTable: allocate using calloc instead of new (new will throw exception if nor enough heap)
* fixing a few minor memory leaks
* ws.cpp: catch out-of-memory in sendLiveLedsWs
* ws.cpp: change interval to 80ms (120 ws very slow...)
2023-05-15 21:15:24 +02:00
Ewoud
fede3dd54c Merge remote-tracking branch 'upstream/main' into mdev 2023-05-11 17:39:12 +02:00
Frank
f69142d5be optimization for AA setPixelColorXY() 2023-04-30 19:09:38 +02:00