20 for (i = 0; i < 4; i++) {
21 float v1[2],
v2[2], cur_cross;
24 prev = (4 + i - 1) % 4;
30 if (
fabsf(cur_cross) <= FLT_EPSILON) {
37 else if (
cross * cur_cross < 0.0f) {
72 if (input->get_flags().is_constant_operation) {
113 r_area = preferred_area;
142 const rcti &output_area,
145 if (input_idx == 0) {
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE float cross_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
ATTR_WARN_UNUSED_RESULT const BMVert * v2
virtual const float * get_constant_elem()=0
NodeOperation contains calculation logic.
NodeOperation * get_input_operation(int index)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
virtual void determine_canvas(const rcti &preferred_area, rcti &r_area)
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override
Get input operation area being read by this operation on rendering given output area.
PlaneCornerPinMaskOperation()
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
void init_data() override
PlaneCornerPinWarpImageOperation()
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override
Get input operation area being read by this operation on rendering given output area.
void init_data() override
virtual void calculate_corners(const float corners[4][2], bool normalized, int sample)
void calculate_corners(const float corners[4][2], bool normalized, int sample) override
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override
Get input operation area being read by this operation on rendering given output area.
@ Vector
Vector data type.
ccl_device_inline float cross(const float2 a, const float2 b)
constexpr int LOWER_RIGHT_CORNER_INDEX
constexpr int LOWER_LEFT_CORNER_INDEX
constexpr int UPPER_RIGHT_CORNER_INDEX
constexpr rcti COM_CONSTANT_INPUT_AREA_OF_INTEREST
static void read_input_corners(NodeOperation *op, const int first_input_idx, float r_corners[4][2])
static bool check_corners(float corners[4][2])
constexpr int UPPER_LEFT_CORNER_INDEX
static void set_default_corner(const int corner_idx, float r_corner[2])