如何将 shm pixmap 与 xcb 一起使用?

2024-03-05

我尝试学习如何使用 xcb 库中的共享内存像素图。你们中有人有这方面的经验并想分享示例代码和/或信息吗?这会很有帮助。

Thanks


经过一些研究,我发现了如何在 xcb 中使用共享内存像素图。

这是我的测试代码:

#include <stdlib.h>
#include <stdio.h>

#include <sys/ipc.h>
#include <sys/shm.h>

#include <xcb/xcb.h>
#include <xcb/shm.h>
#include <xcb/xcb_image.h>


#define WID 512
#define HEI 512



int main(){
    xcb_connection_t*       connection;
    xcb_window_t            window;
    xcb_screen_t*           screen;
    xcb_gcontext_t          gcontext;
    xcb_generic_event_t*    event;

    uint32_t value_mask;
    uint32_t value_list[2];

    //connect to the X server and get screen

    connection = xcb_connect(NULL, NULL);
    screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data;

    //create a window

    value_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
    value_list[0] = screen->black_pixel;
    value_list[1] = XCB_EVENT_MASK_EXPOSURE;

    window = xcb_generate_id(connection);

    xcb_create_window(
        connection,            
        screen->root_depth,  
        window,    
        screen->root,    
        0, 0,         
        WID, HEI,    
        0,              
        XCB_WINDOW_CLASS_INPUT_OUTPUT,   
        screen->root_visual,    
        value_mask, value_list  
    );

    //create a graphic context

    value_mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
    value_list[0] = screen->black_pixel;
    value_list[1] = 0;

    gcontext = xcb_generate_id(connection);
    xcb_create_gc(connection, gcontext, window, value_mask, value_list);

    //map the window onto the screen

    xcb_map_window(connection, window);
    xcb_flush(connection);


    //Shm test
    xcb_shm_query_version_reply_t*  reply;
    xcb_shm_segment_info_t          info;

    reply = xcb_shm_query_version_reply(
        connection,
        xcb_shm_query_version(connection),
        NULL
    );

    if(!reply || !reply->shared_pixmaps){
        printf("Shm error...\n");
        exit(0);
    }

    info.shmid   = shmget(IPC_PRIVATE, WID*HEI*4, IPC_CREAT | 0777);
    info.shmaddr = shmat(info.shmid, 0, 0);

    info.shmseg = xcb_generate_id(connection);
    xcb_shm_attach(connection, info.shmseg, info.shmid, 0);
    shmctl(info.shmid, IPC_RMID, 0);

    uint32_t* data = info.shmaddr;

    xcb_pixmap_t pix = xcb_generate_id(connection);
    xcb_shm_create_pixmap(
        connection,
        pix,
        window,
        WID, HEI,
        screen->root_depth,
        info.shmseg,
        0
    );

    int i = 0;
    while(1){
        usleep(10000);

        data[i] = 0xFFFFFF;
        i++;

        xcb_copy_area(
            connection,
            pix,
            window,
            gcontext,
            0, 0, 0, 0,
            WID, HEI
        );

        xcb_flush(connection);
    }

    xcb_shm_detach(connection, info.shmseg);
    shmdt(info.shmaddr);

    xcb_free_pixmap(connection, pix);

    xcb_destroy_window(connection, window);
    xcb_disconnect(connection);

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 shm pixmap 与 xcb 一起使用? 的相关文章

  • 如何指定显示?

    当我通过 SSH 运行一些程序时 例如firefox 我收到一个错误 Error no display specified 我想打开许多显示器 仍然显示stdout每个程序的 最初的问题 如何指定显示以获得多显示节目 Pablo Santa
  • FFT 的窗口大小与数据长度

    我正在尝试对流音频数据进行快速频谱分析以捕获元音 类似于 JLip sync 使用 PyAudio 在短时间内 0 0625 秒 捕获小块 1024 的语音数据 使用 numpy fft 进行分析 并使用 numpy hanning 窗口消
  • 如何检测并突出显示鼠标悬停时的矩形

    我在 C net 中创建了一个 Windows 应用程序控件 以图形模式显示一些对象 为此 我根据列表中的项目数量创建了一个矩形 并使用 Control OnPaint 事件将其绘制在控件上 现在 如果鼠标悬停在该矩形上 我想突出显示该矩形
  • FLTK 1.4 小部件位置 w.r.t. X11 根窗口?

    context 我正在和其他人一起编码参考系统 http refpersys org C 17 上的 GPLv3 项目gitlab https gitlab com bstarynk refpersys适用于 GNU Linux x86 6
  • 多处理中的共享内存

    我有三个大清单 第一个包含位数组 模块位数组 0 8 0 另外两个包含整数数组 l1 bitarray 1 bitarray 2 bitarray n l2 array 1 array 2 array n l3 array 1 array
  • 使用Javascript自动打开弹出新窗口[重复]

    这个问题在这里已经有答案了 如何使用Javascript加载页面时打开弹出新窗口 我希望 当网站加载时 它会自动打开弹出新窗口 我使用以下内容 不行 尝试这个
  • 使用 X11 窗口的 R 脚本仅打开一秒钟

    我正在通过 Linux Mint 16 命令行运行 R 脚本 它包含我想在窗口中显示的箱线图 所以我使用 x11 函数来创建该窗口 这是我的代码 testdata lt data frame sample 1 1000 size 100 r
  • 关闭主窗口时 WPF 应用程序不会关闭

    我习惯了在 Visual Studio 中进行 WinForms 编程 但我想尝试一下 WPF 我向我的项目添加了另一个窗口 名为 Window01 主窗口称为MainWindow 之前public MainWindow 构造函数我声明Wi
  • 如何使用 MVVM 打开和关闭新 Windows?

    对于 MVVM 和 WPF 什么是处理打开和关闭新窗口和对话框的好 直接方法 打开和关闭应该由 ViewModel 驱动 对吗 但 ViewModel 不应该知道视图 我通常为此使用接口 例如 如果我想在单独的窗口中编辑记录 我有一个接口
  • 寻求有关共享内存锁定问题的文章

    我正在审查一些代码并对所使用的技术感到怀疑 在Linux环境中 有两个进程附加多个 共享内存段 第一个进程定期加载新的集合 要共享的文件 并将共享内存ID shmid 写入 主 共享内存段中的一个位置 第二道工序 不断读取这个 主 位置并使
  • pyspark.sql.functions.window 函数的“startTime”参数和 window.start 有何作用?

    示例如下 df spark createDataFrame 1 2017 05 15 23 12 26 2 5 1 2017 05 09 15 26 58 3 5 1 2017 05 18 15 26 58 3 6 2 2017 05 15
  • MacVim:跨窗口共享命名寄存器?

    我想跨 MacVim 窗口共享命名寄存器缓冲区 就像我在单个实例中跨缓冲区一样 换句话说 假设我标记了一个位置 m 然后去其他地方 我将一些文本拉入寄存器 a 从当前点到 m a m 然后我转到另一个窗口 不 我不是指同一窗口中的另一个分割
  • Python 多处理类内共享字典

    我想了解多处理和管理器如何工作以共享内存 我有一堂课 在课堂上创建了一本字典 init我想使用多处理来调用填充字典的类函数 每个进程添加不同的键 import multiprocessing as mp from multiprocessi
  • 拖动调整大小手柄时多次触发调整大小事件

    我希望这个 jQuery 插件能够工作 但它没有 http andowebsit es blog noteslog com post how to fix the resize event in ie http andowebsit es
  • Selenium Web 驱动程序如何知道新窗口何时打开,然后恢复执行

    我在使用 Selenium Web 驱动程序自动化 Web 应用程序时遇到问题 该网页有一个按钮 单击该按钮会打开一个新窗口 当我使用以下代码时 它会抛出OpenQA Selenium NoSuchWindowException No wi
  • 确定矩形在窗口内是否可见

    我想确定窗口内的矩形是否完全可见 我找到了 RectVisible 但该函数确定矩形的任何部分是否可见 我想知道整个矩形是否可见 有没有这方面的功能 首先通过使用将系统剪切区域 窗口的可见区域 变成一个区域GetRandomRgn http
  • 如何获取内核转储中Section对象的内容

    来自 3thParty 供应商的节对象被命名为rpsPdf10 mutex它的预期用途是通过向信号量写入布尔标志来模拟信号量 使用 LiveKd 并在 SO 的大量帮助下 我发出了以下命令试图获取此部分对象的详细信息 0 kd gt pro
  • 使用window.open、document.open和document.write来显示XML(XML渲染消失了)

    这与另一个问题相关 但是not重复的 它涉及我已陷入僵局的拟议解决方案 我有以下代码 用于读取 XML 进行更改 打开一个窗口并将 XML 写入文档 问题是内容没有呈现为 XML 有什么方法可以设置内容类型等 让浏览器将内容处理为 XML
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • 在VB6中等待进程退出后恢复窗口

    我在win7 64位操作系统中使用VB6 此应用程序是从 xp 迁移的 Me WindowState vbMinimized WaitForProcess Shell launchapp vbNormalFocus Me WindowSta

随机推荐