Inline get_color_at_offset(). Delete unnecessary check.
This commit is contained in:
parent
3f975965e9
commit
dc1940d3e8
2 changed files with 44 additions and 49 deletions
|
@ -112,54 +112,6 @@ Color ColorRamp::get_color(int pos) const {
|
|||
return Color(0,0,0,1); //TODO: Maybe throw some error instead?
|
||||
}
|
||||
|
||||
Color ColorRamp::get_color_at_offset(float p_offset) {
|
||||
|
||||
if (points.empty())
|
||||
return Color(0,0,0,1);
|
||||
|
||||
if (points.size() == 1)
|
||||
return points[0].color;
|
||||
|
||||
if(!is_sorted)
|
||||
{
|
||||
points.sort();
|
||||
is_sorted = true;
|
||||
}
|
||||
|
||||
//binary search
|
||||
int low = 0;
|
||||
int high = points.size() -1;
|
||||
int middle;
|
||||
|
||||
while( low <= high )
|
||||
{
|
||||
middle = ( low + high ) / 2;
|
||||
Point& point = points[middle];
|
||||
if( point.offset > p_offset ) {
|
||||
high = middle - 1; //search low end of array
|
||||
} else if ( point.offset < p_offset) {
|
||||
low = middle + 1; //search high end of array
|
||||
} else {
|
||||
return point.color;
|
||||
}
|
||||
}
|
||||
|
||||
//return interpolated value
|
||||
if (points[middle].offset>p_offset)
|
||||
{
|
||||
middle--;
|
||||
}
|
||||
int first=middle;
|
||||
int second=middle+1;
|
||||
if(second>=points.size())
|
||||
return points[points.size()-1].color;
|
||||
if(first<0)
|
||||
return points[0].color;
|
||||
Point& pointFirst = points[first];
|
||||
Point& pointSecond = points[second];
|
||||
return pointFirst.color.linear_interpolate(pointSecond.color, (p_offset-pointFirst.offset)/(pointSecond.offset - pointFirst.offset));
|
||||
}
|
||||
|
||||
int ColorRamp::get_points_count() const {
|
||||
return points.size();
|
||||
}
|
||||
|
|
|
@ -47,7 +47,50 @@ public:
|
|||
void set_colors(const Vector<Color>& colors);
|
||||
Vector<Color> get_colors() const;
|
||||
|
||||
Color get_color_at_offset(float offset);
|
||||
_FORCE_INLINE_ Color get_color_at_offset(float p_offset) {
|
||||
|
||||
if (points.empty())
|
||||
return Color(0,0,0,1);
|
||||
|
||||
if(!is_sorted)
|
||||
{
|
||||
points.sort();
|
||||
is_sorted = true;
|
||||
}
|
||||
|
||||
//binary search
|
||||
int low = 0;
|
||||
int high = points.size() -1;
|
||||
int middle;
|
||||
|
||||
while( low <= high )
|
||||
{
|
||||
middle = ( low + high ) / 2;
|
||||
Point& point = points[middle];
|
||||
if( point.offset > p_offset ) {
|
||||
high = middle - 1; //search low end of array
|
||||
} else if ( point.offset < p_offset) {
|
||||
low = middle + 1; //search high end of array
|
||||
} else {
|
||||
return point.color;
|
||||
}
|
||||
}
|
||||
|
||||
//return interpolated value
|
||||
if (points[middle].offset>p_offset)
|
||||
{
|
||||
middle--;
|
||||
}
|
||||
int first=middle;
|
||||
int second=middle+1;
|
||||
if(second>=points.size())
|
||||
return points[points.size()-1].color;
|
||||
if(first<0)
|
||||
return points[0].color;
|
||||
Point& pointFirst = points[first];
|
||||
Point& pointSecond = points[second];
|
||||
return pointFirst.color.linear_interpolate(pointSecond.color, (p_offset-pointFirst.offset)/(pointSecond.offset - pointFirst.offset));
|
||||
}
|
||||
|
||||
int get_points_count() const;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue