#include
Bool XmbufQueryExtension(
Display *dpy,
Display *dpy,
int *event_base_return,
int *error_base_return);
Status XmbufGetVersion(
Display *dpy,
int *major_version_return,
int *minor_version_return);
int XmbufCreateBuffers(
Display *dpy,
Window window,
int count,
int update_action,
int update_hint,
Multibuffer *buffers_update);
void XmbufDestroyBuffers(
Display *dpy,
Window window);
void XmbufDisplayBuffers(
Display *dpy,
int count,
Multibuffer *buffers,
int min_delay,
int max_delay);
Status XmbufGetWindowAttributes(
Display *dpy,
Window window,
XmbufWindowAttributes *attributes);
void XmbufChangeWindowAttributes(
Display *dpy,
Window window,
unsigned long valuemask,
XmbufSetWindowAttributes *attributes);
Status XmbufGetBufferAttributes(
Display *dpy,
Multibuffer buffer,
XmbufBufferAttributes *attributes);
void XmbufChangeBufferAttributes(
Display *dpy,
Multibuffer buffer,
unsigned long valuemask,
XmbufSetBufferAttributes *attributes);
Status XmbufGetScreenInfo(
Display *dpy,
Drawable drawable,
int *nmono_return,
XmbufBufferInfo **mono_info_return,
int *nstereo_return,
XmbufBufferInfo **stereo_info_return);
Window XmbufCreateStereoWindow(
Display *dpy,
Window parent,
int x,
int y,
unsigned int width,
unsigned int height,
unsigned int border_width,
int depth,
unsigned int class, /* InputOutput, InputOnly*/
Visual *visual,
unsigned long valuemask,
XSetWindowAttributes *attributes,
Multibuffer *left_return,
Multibuffer *right_return);
typedef struct {
int type; /* of event */
unsigned long serial; /* # of last request processed by server */
int send_event; /* true if this came from a SendEvent request */
Display *display; /* Display the event was read from */
Multibuffer buffer; /* buffer of event */
} XmbufUpdateNotifyEvent;
_P_e_r_-_w_i_n_d_o_w _a_t_t_r_i_b_u_t_e_s _t_h_a_t _c_a_n _b_e _g_o_t_:
typedef struct {
int displayed_index; /* which buffer is being displayed */
int update_action; /* Undefined, Background, Untouched, Copied */
int update_hint; /* Frequent, Intermittent, Static */
int window_mode; /* Mono, Stereo */
int nbuffers; /* Number of buffers */
Multibuffer *buffers; /* Buffers */
} XmbufWindowAttributes;
_P_e_r_-_w_i_n_d_o_w _a_t_t_r_i_b_u_t_e_s _t_h_a_t _c_a_n _b_e _s_e_t_:
typedef struct {
int update_hint; /* Frequent, Intermittent, Static */
} XmbufSetWindowAttributes;
_P_e_r_-_b_u_f_f_e_r _a_t_t_r_i_b_u_t_e_s _t_h_a_t _c_a_n _b_e _g_o_t_:
typedef struct {
Window window; /* which window this belongs to */
unsigned long event_mask; /* events that have been selected */
int buffer_index; /* which buffer is this */
int side; /* Mono, Left, Right */
} XmbufBufferAttributes;
_P_e_r_-_b_u_f_f_e_r _a_t_t_r_i_b_u_t_e_s _t_h_a_t _c_a_n _b_e _s_e_t_:
typedef struct {
unsigned long event_mask; /* events that have been selected */
} XmbufSetBufferAttributes;
_P_e_r_-_s_c_r_e_e_n _b_u_f_f_e_r _i_n_f_o _(_t_h_e_r_e _w_i_l_l _b_e _l_i_s_t_s _o_f _t_h_e_m_)_:
typedef struct {
VisualID visualid; /* visual usable at this depth */
int max_buffers; /* most buffers for this visual */
int depth; /* depth of buffers to be created */
} XmbufBufferInfo;
_X_m_b_u_f_Q_u_e_r_y_E_x_t_e_n_s_i_o_n
returns
_T_r_u_e
if the multibuffering/stereo
extension is available on the
given display. If the extension exists, the value of the first event
code (which should be added to the event type constants
_M_u_l_t_i_b_u_f_f_e_r_C_l_o_b_b_e_r_N_o_t_i_f_y
and
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_N_o_t_i_f_y
to get the actual
values) is stored into event_base_return and the value of the first
error code (which should be added to the error type constant
_M_u_l_t_i_b_u_f_f_e_r_B_a_d_B_u_f_f_e_r
to get the actual value) is stored into error_base_return.
_X_m_b_u_f_G_e_t_V_e_r_s_i_o_n
gets the major and minor version numbers of the extension.
The return
value is zero if an error occurs or non-zero if no error happens.
_X_m_b_u_f_C_r_e_a_t_e_B_u_f_f_e_r_s
requests that "count" buffers be
created with the given update_action
and update_hint and be associated with the indicated window. The
number of buffers created is returned (zero if an error occurred)
and buffers_update is filled in with that many Multibuffer identifiers.
_X_m_b_u_f_D_e_s_t_r_o_y_B_u_f_f_e_r_s
destroys the buffers associated
with the given window.
_X_m_b_u_f_D_i_s_p_l_a_y_B_u_f_f_e_r_s
displays the indicated buffers their
appropriate windows within
max_delay milliseconds after min_delay milliseconds have passed.
No two buffers may be associated with the same window or else a Match
error is generated.
_X_m_b_u_f_G_e_t_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s
gets the multibuffering attributes that apply
to all buffers associated
with the given window.
The list of buffers returns may be freed with
_X_F_r_e_e.
Returns non-zero on success and zero if an error occurs.
_X_m_b_u_f_C_h_a_n_g_e_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s
sets the multibuffering attributes
that apply to all buffers associated
with the given window. This is currently limited to the update_hint.
_X_m_b_u_f_G_e_t_B_u_f_f_e_r_A_t_t_r_i_b_u_t_e_s
gets the attributes for the indicated buffer.
Returns non-zero on
success and zero if an error occurs.
_X_m_b_u_f_C_h_a_n_g_e_B_u_f_f_e_r_A_t_t_r_i_b_u_t_e_s
sets the attributes for the indicated buffer.
This is currently limited to the event_mask.
_X_m_b_u_f_G_e_t_S_c_r_e_e_n_I_n_f_o
gets the parameters controlling how
mono and stereo windows may be
created on the screen of the given drawable. The numbers of sets of
visual and depths are returned in nmono_return and nstereo_return. If
nmono_return is greater than zero, then mono_info_return is set to the
address of an array of
_X_m_b_u_f_B_u_f_f_e_r_I_n_f_o
structures describing the
various visuals and depths that may be used. Otherwise,
mono_info_return is set to NULL. Similarly, stereo_info_return is set
according to nstereo_return. The storage returned in mono_info_return
and stereo_info_return may be released by
_X_F_r_e_e.
If no errors are
encounted, non-zero will be returned.
_X_m_b_u_f_C_r_e_a_t_e_S_t_e_r_e_o_W_i_n_d_o_w
creates a stereo window in the same way that
_X_C_r_e_a_t_e_W_i_n_d_o_w
creates a mono window. The buffer ids for the left and right buffers are
returned in left_return and right_return, respectively. If an
extension error handler that returns is installed,
_N_o_n_e
will be returned if the extension is not available on this display.
STRUCTURES
_E_v_e_n_t_s_:
typedef struct {
int type; /* of event */
unsigned long serial; /* # of last request processed by server */
int send_event; /* true if this came from a SendEvent request */
Display *display; /* Display the event was read from */
Multibuffer buffer; /* buffer of event */
int state; /* see Clobbered constants above */
} XmbufClobberNotifyEvent;
DESCRIPTION
The application programming library for the
_X_1_1 _D_o_u_b_l_e_-_B_u_f_f_e_r_i_n_g_, _M_u_l_t_i_-_B_u_f_f_e_r_i_n_g_, _a_n_d _S_t_e_r_e_o _E_x_t_e_n_s_i_o_n
contains the interfaces described below.
With the exception of
_X_m_b_u_f_Q_u_e_r_y_E_x_t_e_n_s_i_o_n,
if any of these routines are
called with a display that does not support the extension, the
ExtensionErrorHandler (which can be set with
_X_S_e_t_E_x_t_e_n_s_i_o_n_E_r_r_o_r_H_a_n_d_l_e_r
and functions the same way as
_X_S_e_t_E_r_r_o_r_H_a_n_d_l_e_r)
will be called and the function will then return.
PREDEFINED VALUES
Update_action field:
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_A_c_t_i_o_n_U_n_d_e_f_i_n_e_d
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_A_c_t_i_o_n_B_a_c_k_g_r_o_u_n_d
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_A_c_t_i_o_n_U_n_t_o_u_c_h_e_d
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_A_c_t_i_o_n_C_o_p_i_e_d
Update_hint field:
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_H_i_n_t_F_r_e_q_u_e_n_t
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_H_i_n_t_I_n_t_e_r_m_i_t_t_e_n_t
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_H_i_n_t_S_t_a_t_i_c
Valuemask fields:
_M_u_l_t_i_b_u_f_f_e_r_W_i_n_d_o_w_U_p_d_a_t_e_H_i_n_t
_M_u_l_t_i_b_u_f_f_e_r_B_u_f_f_e_r_E_v_e_n_t_M_a_s_k
Mono vs. stereo and left vs. right:
_M_u_l_t_i_b_u_f_f_e_r_M_o_d_e_M_o_n_o
_M_u_l_t_i_b_u_f_f_e_r_M_o_d_e_S_t_e_r_e_o
_M_u_l_t_i_b_u_f_f_e_r_S_i_d_e_M_o_n_o
_M_u_l_t_i_b_u_f_f_e_r_S_i_d_e_L_e_f_t
_M_u_l_t_i_b_u_f_f_e_r_S_i_d_e_R_i_g_h_t
Clobber state:
_M_u_l_t_i_b_u_f_f_e_r_U_n_c_l_o_b_b_e_r_e_d
_M_u_l_t_i_b_u_f_f_e_r_P_a_r_t_i_a_l_l_y_C_l_o_b_b_e_r_e_d
_M_u_l_t_i_b_u_f_f_e_r_F_u_l_l_y_C_l_o_b_b_e_r_e_d
Event stuff:
_M_u_l_t_i_b_u_f_f_e_r_C_l_o_b_b_e_r_N_o_t_i_f_y_M_a_s_k
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_N_o_t_i_f_y_M_a_s_k
_M_u_l_t_i_b_u_f_f_e_r_C_l_o_b_b_e_r_N_o_t_i_f_y
_M_u_l_t_i_b_u_f_f_e_r_U_p_d_a_t_e_N_o_t_i_f_y
_M_u_l_t_i_b_u_f_f_e_r_N_u_m_b_e_r_E_v_e_n_t_s
_M_u_l_t_i_b_u_f_f_e_r_B_a_d_B_u_f_f_e_r
_M_u_l_t_i_b_u_f_f_e_r_N_u_m_b_e_r_E_r_r_o_r_s
BUGS
This manual page needs more work.
SEE ALSO
_E_x_t_e_n_d_i_n_g _X _f_o_r _D_o_u_b_l_e _B_u_f_f_e_r_i_n_g_, _M_u_l_t_i_-_B_u_f_f_e_r_i_n_g_, _a_n_d _S_t_e_r_e_o