FastLED 3.9.15
Loading...
Searching...
No Matches

◆ traverseGridSegment()

template<typename GridVisitor>
void fl::traverseGridSegment ( const vec2f & start,
const vec2f & end,
GridVisitor & visitor )
inline

Traverse a grid segment by selecting the cells that are crossed.

This version will select the fastest integer implementation based on the length of the segment. Most of the time it will call traverseGridSegment16() since segment spans are typically < 256 pixels.

Template Parameters
GridVisitor
Parameters
startstart point
endend point
visitorcalled for each cell visited.

Fully tested.

Definition at line 276 of file traverse_grid.h.

277 {
278 float dx = ABS(end.x - start.x);
279 float dy = ABS(end.y - start.y);
280 float maxRange = MAX(dx, dy);
281
282 // if (maxRange < 256.0f) {
283 // // Use Q8.8 (16-bit signed) if within ±127
284 // traverseGridSegment16(start, end, visitor);
285 // }
286 // else if (maxRange < 16777216.0f) {
287 // // Use Q24.8 (32-bit signed) if within ±8 million
288 // traverseGridSegment32(start, end, visitor);
289 // }
290 // else {
291 // // Fall back to floating-point
292 // traverseGridSegment(start, end, visitor);
293 // }
294
295 if (maxRange < 256.0f) {
296 // Use Q8.8 (16-bit signed) if within ±127
297 traverseGridSegment16(start, end, visitor);
298 } else {
299 // Use Q24.8 (32-bit signed) if within ±8 million
300 traverseGridSegment32(start, end, visitor);
301 }
302}
#define ABS(x)
Definition math_macros.h:45
#define MAX(a, b)
Definition math_macros.h:37
constexpr T * end(T(&array)[N]) noexcept
void traverseGridSegment16(const vec2f &start, const vec2f &end, GridVisitor &visitor)
Traverse a grid segment using fixed-point 8.8 arithmetic.
void traverseGridSegment32(const vec2f &start, const vec2f &end, GridVisitor &visitor)
value_type y
Definition geometry.h:191
value_type x
Definition geometry.h:190

References ABS, end(), MAX, traverseGridSegment16(), traverseGridSegment32(), fl::vec2< T >::x, and fl::vec2< T >::y.

+ Here is the call graph for this function: