X11rdp: fix for composite on screen delay and fixes for shared memory order
This commit is contained in:
parent
538763e144
commit
cd93db2c98
@ -39,6 +39,8 @@ extern ScreenPtr g_pScreen; /* from rdpmain.c */
|
||||
extern Bool g_wrapPixmap; /* from rdpmain.c */
|
||||
extern int g_can_do_pix_to_pix; /* from rdpmain.c */
|
||||
extern int g_do_dirty_os; /* in rdpmain.c */
|
||||
extern int g_do_dirty_ons; /* in rdpmain.c */
|
||||
extern rdpPixmapRec g_screenPriv; /* in rdpmain.c */
|
||||
extern int g_do_glyph_cache; /* in rdpmain.c */
|
||||
extern int g_doing_font; /* in rdpmain.c */
|
||||
extern int g_do_composite; /* in rdpmain.c */
|
||||
@ -766,9 +768,18 @@ rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
|
||||
if (pDstWnd->viewable)
|
||||
{
|
||||
post_process = 1;
|
||||
rdpup_get_screen_image_rect(&id);
|
||||
got_id = 1;
|
||||
LLOGLN(10, ("rdpComposite: screen"));
|
||||
if (g_do_dirty_ons)
|
||||
{
|
||||
LLOGLN(10, ("rdpComposite: getting dirty"));
|
||||
g_screenPriv.is_dirty = 1;
|
||||
pDirtyPriv = &g_screenPriv;
|
||||
dirty_type = g_doing_font ? RDI_IMGLL : RDI_IMGLY;
|
||||
}
|
||||
else
|
||||
{
|
||||
rdpup_get_screen_image_rect(&id);
|
||||
got_id = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -826,6 +826,8 @@ rdpGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
||||
LLOGLN(10, ("rdpGlyphs: op %d xSrc %d ySrc %d maskFormat %p",
|
||||
op, xSrc, ySrc, maskFormat));
|
||||
|
||||
LLOGLN(10, ("rdpGlyphs: g_do_glyph_cache %d", g_do_glyph_cache));
|
||||
|
||||
if (g_do_glyph_cache && rdpGlyphCheck(nlists, lists, glyphs))
|
||||
{
|
||||
g_doing_font = 2;
|
||||
|
@ -47,7 +47,7 @@ DeviceIntPtr g_keyboard = 0;
|
||||
int g_can_do_pix_to_pix = 0;
|
||||
|
||||
int g_do_dirty_os = 1; /* delay remoting off screen bitmaps */
|
||||
int g_do_dirty_ons = 0; /* delay remoting screen */
|
||||
int g_do_dirty_ons = 1; /* delay remoting screen */
|
||||
int g_do_glyph_cache = 0; /* rdpup.c may set this */
|
||||
int g_do_alpha_glyphs = 1;
|
||||
int g_do_composite = 0; /* rdpup.c may set this */
|
||||
|
@ -1113,8 +1113,8 @@ rdpup_process_msg(struct stream *s)
|
||||
in_uint32_le(s, y);
|
||||
in_uint32_le(s, cx);
|
||||
in_uint32_le(s, cy);
|
||||
LLOGLN(10, (" %d %d %d %d", x, y, cx ,cy));
|
||||
LLOGLN(10, (" rect_id %d rect_id_ack %d", g_rect_id, g_rect_id_ack));
|
||||
LLOGLN(10, ("rdpup_process_msg: %d %d %d %d", x, y, cx ,cy));
|
||||
LLOGLN(10, ("rdpup_process_msg: rect_id %d rect_id_ack %d", g_rect_id, g_rect_id_ack));
|
||||
|
||||
box.x1 = x;
|
||||
box.y1 = y;
|
||||
@ -1122,7 +1122,7 @@ rdpup_process_msg(struct stream *s)
|
||||
box.y2 = box.y1 + cy;
|
||||
|
||||
RegionInit(®, &box, 0);
|
||||
LLOGLN(10, ("< %d %d %d %d", box.x1, box.y1, box.x2, box.y2));
|
||||
LLOGLN(10, ("rdpup_process_msg: %d %d %d %d", box.x1, box.y1, box.x2, box.y2));
|
||||
RegionSubtract(g_shm_reg, g_shm_reg, ®);
|
||||
RegionUninit(®);
|
||||
|
||||
@ -2088,14 +2088,17 @@ rdpup_send_area(struct image_data *id, int x, int y, int w, int h)
|
||||
box.y1 = y;
|
||||
box.x2 = box.x1 + w;
|
||||
box.y2 = box.y1 + h;
|
||||
LLOGLN(10, ("rdpup_send_area: 1 x %d y %d w %d h %d", x, y, w, h));
|
||||
safety = 0;
|
||||
while (RegionContainsRect(g_shm_reg, &box))
|
||||
{
|
||||
rdpup_end_update();
|
||||
/* instread of rdpup_end_update, call rdpup_send_pending */
|
||||
rdpup_send_pending();
|
||||
rdpup_begin_update();
|
||||
safety++;
|
||||
if (safety > 100)
|
||||
{
|
||||
LLOGLN(0, ("rdpup_send_area: shmem timeout"));
|
||||
break;
|
||||
}
|
||||
if (sck_can_recv(g_sck, 100))
|
||||
@ -2125,6 +2128,7 @@ rdpup_send_area(struct image_data *id, int x, int y, int w, int h)
|
||||
out_uint16_le(g_out_s, 60);
|
||||
out_uint16_le(g_out_s, size);
|
||||
g_count++;
|
||||
LLOGLN(10, ("rdpup_send_area: 2 x %d y %d w %d h %d", x, y, w, h));
|
||||
out_uint16_le(g_out_s, x);
|
||||
out_uint16_le(g_out_s, y);
|
||||
out_uint16_le(g_out_s, w);
|
||||
|
Loading…
Reference in New Issue
Block a user