BadMatch X_CreateWindow无法用visual通道创建窗口画图

本文档记录了在使用X11渲染扩展创建窗口时遇到的BadMatch错误。通过检查代码和X Server日志,发现问题可能出在视觉类型和屏幕深度的不匹配。调整配置文件`/etc/X11/xorg.conf.d/hi3716-fb.conf`的默认深度为32位后,X Server启动报错,找不到可用屏幕。日志显示FBDEV模块加载失败,原因是给定的权重与深度(32位)不一致。最终,问题定位到fbdev模块的配置问题。
摘要由CSDN通过智能技术生成

上周花了两天时间,一直搞不懂为什么,今天接着弄,终于了解了点原因。先上我的测试例子:

 

 #include <stdio.h>
 #include <stdlib.h>
 #include <X11/Xlib.h>
 
 #include <X11/extensions/Xrender.h> //licl2012-06-05

 #define WINDOW_SIZE 200
 int main (int argc, char *argv[])
 {
  Display              *dpy;
  XSetWindowAttributes attributes;
  Window               win;
  GC                   gc;
  XKeyEvent event;
  int   i;
 
  int   nvi;//licl2012-06-05
  int   j;//licl2012-06-05
  XRenderPictFormat *format;//licl2012-06-05
  Visual  *visual = NULL;//licl2012-06-05
  XVisualInfo  *xvi;//licl2012-05-30
  XVisualInfo  temp;//licl2012-05-30

  // ... X Server.... X Server ......
  dpy = XOpenDisplay(NULL);

  // .. 200X200 .......
  attributes.background_pixel = XWhitePixel(dpy, 0); 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  temp.screen = DefaultScreen(dpy);
  temp.depth  = 32;
  temp.class  = TrueColor; 
 
  if ((xvi = XGetVisualInfo (dpy,
        VisualScreenMask |
        VisualDepthMask |
        VisualClassMask,
        &temp,
        &nvi)) == NULL)
        {
         printf(" failed geting VisualInfo\n");
         }
         else{
         printf(" succeeded geting VisualInfo\n");
          }
 
  for (j = 0; j < nvi; j++)
    {
     
     printf("  %3d: visual 0x%lx class %d (%s) depth %d\n",
             j,
             xvi[j].visualid,
             xvi[j].class,
             xvi[j].class == TrueColor ? "TrueColor" : "unknown",
             xvi[j].depth);
     
     
      format = XRenderFindVisualFormat (dpy, xvi[j].visual);
      if (format->type == PictTypeDirect && format->direct.alphaMask)
    {
      visual = xvi[j].visual;
      printf(" succeeded geting rgba visual\n");
      break;
    }
    }
 
 
 
 
 
 
 
 
 
  win = XCreateWindow(dpy, XRootWindow(dpy, 0),
      0, 0, WINDOW_SIZE, WINDOW_SIZE, 0,
      32,//DefaultDepth(dpy, 0),
      InputOutput,
      //DefaultVisual(dpy, 0),
      visual,
      CWBackPixel,&attributes);
  // .......
  XSelectInput(dpy, win, ExposureMask | KeyPressMask );
  // .......
  gc = XCreateGC(dpy, win, 0, NULL);
  //Map ..
  XMapWindow(dpy, win);
  // .......... Expose ... KeyPress ..
  while(1)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值