首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在X11窗口缓冲区中出现许多多边形是否会减慢其他图形用户界面元素的绘制速度?

在X11窗口缓冲区中出现许多多边形是否会减慢其他图形用户界面元素的绘制速度?
EN

Stack Overflow用户
提问于 2019-06-03 05:22:30
回答 1查看 92关注 0票数 0

我们正在开发一个遗留的X-Windows/Motif应用程序,以多边形的形式显示实时空中交通(航班)和对流天气。该应用程序是双缓冲的,后台缓冲区包含地图元素和天气多边形,前台缓冲区显示航班信息。每200毫秒循环,在用飞行数据更新前台缓冲器之前,后台缓冲器被复制到前台缓冲器。

我们发现,当多边形可见时,画布上飞行符号的绘制在时间上的变化要大得多。因此,应该花费微秒的时间有时会超过100毫秒,这意味着GUI无法在200毫秒的循环中完成其任务。

我们在远程桌面(X2Go)上运行应用程序,尽管存在大量压缩,但这无疑使问题变得更加明显。

我对实际的多边形绘制代码进行了计时,它只需要4-6毫秒。但是多边形的存在似乎对其他元素的绘制产生了巨大的影响,比如飞行符号。因此,在600个符号中,大多数需要几个微秒,而6-8个符号在200毫秒的循环中每个符号需要100毫秒。这会导致应用程序变得不可用。

下面的代码显示了多边形是如何绘制的(每个),以及每个飞行符号是如何作为字符绘制的。

代码语言:javascript
复制
void
draw_lines(draw_window win_ptr, color color_ptr,
    XPoint *const points, const int npoints, const int thickness)
{
    x_draw_window  *draw = (x_draw_window *) win_ptr;
    GC color = (GC) color_ptr;

    if (thickness > 0)
    {
        XSetLineAttributes(draw->display, color, thickness, LineSolid,
            CapNotLast, JoinRound);
    }
    else
    {
        XSetLineAttributes(draw->display, color, 1, LineSolid,
             CapNotLast, JoinRound);
    }
    XDrawLines(draw->display, draw->window, color, points, npoints,
        CoordModeOrigin);
    return;
 }

void
draw_text(draw_window win_ptr, color color_ptr,
    char *font, int x, int y, char *text)
{
    x_draw_window  *draw;
    GC color;
    XTextItem t_item;
    unsigned long valuemask;
    XGCValues values;

    draw = (x_draw_window *) win_ptr;
    color   = (GC) color_ptr;

    t_item.chars = text;
    t_item.nchars = strlen(text);
    t_item.delta = 0;
    t_item.font = None;

    valuemask = GCFont;
    values.font = (Font)font;
    XChangeGC(draw->display, color, valuemask, &values);

    if (text != NULL && strcmp(text, "\0"))
    {
        XDrawText(draw->display, draw->window, color, x, y, &t_item, 1);
    }
}

我的问题是给任何了解Xlib内部原理的人……当同一缓冲区中的其他地方有数百个多边形时,完成XDrawText的时间可能会因数量级而变化,这是可以预期的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-03 21:34:16

根据使用类似应用程序的经验,您可以通过避免对GC的重复更改来加速应用程序。相反,可以创建许多预定义的只读GC,并将它们用于绘图请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56419035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档