You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何配置为百万色的XQuartz会列出64个Visual?

X11 Visual 相关问题解答

测试代码

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>

int main() {
    Display *display;
    XVisualInfo vinfo_template = {0};
    XVisualInfo *vinfo;
    int n, screen;

    display = XOpenDisplay(NULL);
    if (display == NULL) {
        fprintf(stderr, "Unable to open X display\n");
        return 1;
    }

    screen = DefaultScreen(display);

    // Use an empty template to get all available visuals
    vinfo_template.screen = screen;
    vinfo = XGetVisualInfo(display, VisualScreenMask, &vinfo_template, &n);

    if (vinfo != NULL) {
        printf("Available visuals:\n");
        for (int i = 0; i < n; i++) {
            printf("Visual %d: Class: %d, Depth: %d\n", i,
                   vinfo[i].class, vinfo[i].depth);
        }
        XFree(vinfo);
    } else {
        printf("No visuals found\n");
    }

    XCloseDisplay(display);
    return 0;
}

测试场景

在FreeBSD运行该程序,连接到配置为支持百万色的MacOS XQuartz X服务器时,得到64条Class为4(即TrueColor类)、深度为24的Visual记录。

问题解答

1. 为何会出现64个不同的Visual?

这些Visual的核心属性(类、深度)一致,但**颜色通道掩码(red_mask、green_mask、blue_mask)**或其他次要属性存在差异。X11规范允许同一类、同一深度下存在多个Visual实例,只要它们的颜色编码方式不同。64的数量通常对应不同的RGB通道位分配组合,或是XQuartz为适配不同应用需求、内部渲染路径生成的配置变体。

2. TrueColor为只读类型,按理应该仅存在一个Visual,实际为何不是如此?

TrueColor的“只读”指的是其对应的颜色映射(Colormap)是只读的,应用无法修改颜色条目,但这和Visual的数量没有关联。X11标准并未限制同一屏幕上TrueColor Visual的数量,只要它们的颜色编码逻辑有区别就可以共存。XQuartz这样实现主要是为了兼容对颜色掩码有特定要求的旧应用,或是满足内部渲染机制的需要。

3. 开发纯X11应用(无GLX)时,应从这64个Visual中选择哪一个?

优先使用默认屏幕的默认Visual,可以通过DefaultVisual(display, screen)直接获取。这是X服务器推荐的标准配置,能保证最佳的兼容性和渲染性能。如果你的应用有特定的颜色掩码需求,也可以筛选符合条件的Visual,但绝大多数纯X11应用使用默认Visual就足够。

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:56:01