如何使用 Xlib/XRender 渲染缩放像素缓冲区

How to Render a Scaled Pixel Buffer with Xlib/XRender

启动时我分配:u32 *pixel_buffer = calloc(width * height, 4);

我希望将其渲染为 window 的当前宽度和高度。我的尝试:

  1. 使用 XCreateImage/XPutImage 在启动时正确呈现 window 尺寸与像素缓冲区的尺寸匹配。在 window resize 但是,缓冲区的内容不会缩放并且 多余的space用黑色填充(背景值 我为 window)
  2. 设置的像素
  3. XPutImage来一个Pixmap。然后每次循环迭代,使用 XRenderCreatePicture 在这个 PixmapWindowXRenderComposite 他们。这只会产生黑屏。

有什么建议吗?

XPutImage(display, pixmap, default_gc, x_image, 
        0, 0, 0, 0, pixel_buffer_width, pixel_buffer_height);

Picture src_pict = XRenderCreatePicture(display, pixmap, pic_format, 0, &pic_attributes);
Picture dst_pict = XRenderCreatePicture(display, window, pic_format, 0, &pic_attributes);

double x_scale = pixel_buffer_width / window_width;
double y_scale = pixel_buffer_height / window_height;
XTransform transform_matrix = {{
  {XDoubleToFixed(x_scale), XDoubleToFixed(0), XDoubleToFixed(0)},
  {XDoubleToFixed(0), XDoubleToFixed(y_scale), XDoubleToFixed(0)},
  {XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1.0)}  
}};
XRenderSetPictureTransform(display, src_pict, &transform_matrix);

XRenderComposite(display, PictOpSrc, src_pict, 0, dst_pict, 
                0, 0, 0, 0, 0, 0,
                window_width, window_height);