Animation: Gaussian Smooth operator for Graph Editor #105635
|
@ -431,8 +431,8 @@ void smooth_fcurve_segment(FCurve *fcu,
|
|||
const int segment_start_x = fcu->bezt[segment->start_index].vec[1][0];
|
||||
for (int i = segment->start_index; i < segment_end_index; i++) {
|
||||
const int sample_index = (int)(fcu->bezt[i].vec[1][0] - segment_start_x) + kernel_size;
|
||||
double filter_result = samples[sample_index] * kernel[0];
|
||||
/* Apply the kernel. */
|
||||
double filter_result = samples[sample_index] * kernel[0];
|
||||
|
||||
for (int j = 1; j <= kernel_size; j++) {
|
||||
Sybren A. Stüvel
commented
What do you think would be faster? The current approach? Or halving the loop and avoiding the call to
What do you think would be faster? The current approach? Or halving the loop and avoiding the call to `abs(j)`?
```c
double filter_result = samples[sample_index] * kernel[0];
for (int j = 1; j <= kernel_size; j++) {
const double kernel_value = kernel[j];
filter_result += samples[sample_index + j] * kernel_value;
filter_result += samples[sample_index - j] * kernel_value;
}
```
|
||||
const double kernel_value = kernel[j];
|
||||
filter_result += samples[sample_index + j] * kernel_value;
|
||||
|
|
|
@ -195,7 +195,7 @@ static void graph_slider_exit(bContext *C, wmOperator *op)
|
|||
return;
|
||||
}
|
||||
|
||||
if (gso->operator_data) {
|
||||
if (gso->free_operator_data != NULL) {
|
||||
gso->free_operator_data(gso->operator_data);
|
||||
Sybren A. Stüvel
commented
I think it's better to do a It also simplifies the API, in that, regardless of any other field, the function is simply called when it's not- I think it's better to do a `NULL` check on `gso->free_operator_data` itself. Calling `gso->free_operator_data(...)` is guaranteed to crash if that pointer is `NULL`, whereas `gso->free_operator_data(NULL)` might be fine, depending on the implementation of that function.
It also simplifies the API, in that, regardless of any other field, the function is simply called when it's not-`NULL`.
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
This comment should swap with the line above it, as
double filter_result = samples[sample_index] * kernel[0];
is already part of applying the kernel.