e_comp_object_map_update(ec->frame);
- vp = &ec->comp_data->scaler.buffer_viewport;
- if (vp->buffer.src_width == wl_fixed_from_int(-1)) return;
-
cdata = ec->comp_data;
+ vp = &cdata->scaler.buffer_viewport;
+ if ((vp->buffer.src_width == wl_fixed_from_int(-1)) &&
+ (!cdata->viewport_transform))
+ return;
+
sdata = ec->comp_data->sub.data;
if (sdata)
{
ec->comp_data->width_from_viewport,
ec->comp_data->height_from_viewport);
- x1 = wl_fixed_to_int(vp->buffer.src_x);
- y1 = wl_fixed_to_int(vp->buffer.src_y);
- x2 = wl_fixed_to_int(vp->buffer.src_x + vp->buffer.src_width);
- y2 = wl_fixed_to_int(vp->buffer.src_y + vp->buffer.src_height);
+ if (vp->buffer.src_width == wl_fixed_from_int(-1))
+ {
+ x1 = 0;
+ y1 = 0;
+ x2 = cdata->width_from_buffer;
+ y2 = cdata->height_from_buffer;
+ }
+ else
+ {
+ x1 = wl_fixed_to_int(vp->buffer.src_x);
+ y1 = wl_fixed_to_int(vp->buffer.src_y);
+ x2 = wl_fixed_to_int(vp->buffer.src_x + vp->buffer.src_width);
+ y2 = wl_fixed_to_int(vp->buffer.src_y + vp->buffer.src_height);
+ }
e_util_transform_texcoord_set(cdata->viewport_transform, 0, x1, y1);
e_util_transform_texcoord_set(cdata->viewport_transform, 1, x2, y1);