我已经编写了一些基本的 OpenGL 应用程序,使用 XCB 作为后端(当然是用于 GLX 的 xlib),并且在我编写的每个测试中,当我将鼠标移到窗口上时,它会导致所有输入都得到某种“缓冲”并且只响应一段时间后的事件(取决于输入的数量)。
我正在调用 xcb_poll_events 并以这种方式获取事件信息,然后将其加载到自定义事件类中,但这在我的旧 xlib 实现中从来没有慢过。
什么可能导致这种滞后?
事件轮询:
Event_c system_class::poll_for_event(){
Event_c temp;
xcb_generic_event_t *event;
event = xcb_poll_for_event(this->connection_xcb);
if(!event)
return temp;
switch(event->response_type){
handle events...
}
free(event);
return temp;
}
和测试应用程序中的事件循环:
int main(int argc, char *argv[]){
init stuff...
system_class app;
window_class window;
Event_c event;
while(running){
event = app.poll_for_event();
if(event.detail){
handle user input...
}
window.swap_buffers(); // just calls glXSwapBuffers
}
return 0;
}