在启动时,我分配:u32 *pixel_buffer = calloc(width * height, 4);
我希望将其缩放到窗口的当前宽度和高度。我的尝试:
- 使用
XCreateImage/XPutImage
在启动时正确呈现 窗口尺寸与像素缓冲区的尺寸匹配。上 窗口大小调整 但是,缓冲区的内容不会缩放,并且 多余的空间用黑色填充(背景的值 我为窗口设置的像素) - 使用
XPutImage
Pixmap
。然后每次循环迭代,使用XRenderCreatePicture
关于这个Pixmap
和Window
和XRenderComposite
他们。这只会产生黑屏。
有什么建议吗?
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);