我从GtkWidget派生出自己的小部件类型,以便将其用作OpenGL的绘图面。为了让OpenGL控制底层的X11窗口,我需要禁用小部件的双重缓冲--否则整个呈现结果将由GTK的缓冲区交换来绘制。
但是,gtk_widget_set_double_buffered和"double-buffered"属性在当前版本的GTK+3中已经被废弃,因为它们太依赖于平台。
是否有一种方法可以在GDK或X11级别上禁用双重缓冲?
发布于 2021-12-24 08:48:35
这是个很老的问题,但我试试看。
在任何稍微晚一点的上下文中(即GTK+ >= 3.16,现在已经超过6年了),我想最好的解决方案是避免滚动自己的OpenGL小部件,而只使用Gtk.GLArea:https://docs.gtk.org/gtk3/class.GLArea.html
或者,如果您碰巧被一个古老的GTK+版本所困,可能是在嵌入式设备上,那么除了gtk_widget_set_double_buffered (也请参阅buffered.html)之外,没有太多的选项:这不会设置任何X11/Xorg窗口标志或类似的东西,而只是将GTK+的内部事件处理更改为将抽签调用发送到屏幕外缓冲区,或者直接设置到可见表面。
请注意,这个屏幕外缓冲区与任何涉及X或OpenGL的缓冲区都是完全独立的。
https://stackoverflow.com/questions/31557168
复制相似问题