gpt4 book ai didi

c++ - xcb 鼠标移动导致输入滞后

转载 作者:行者123 更新时间:2023-11-28 07:20:11 24 4
gpt4 key购买 nike

我已经用 XCB 作为后端(当然是 GLX 的 xlib)编写了一些基本的 OpenGL 应用程序,并且在我编写的每个测试中,当我将鼠标移到窗口上时,它会导致所有输入都得到某种“缓冲”并且仅在一段时间后响应事件(取决于输入的多少)。

我正在调用 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;
}

最佳答案

您的问题是,您在两次调用 xcb_poll_for_event 之间调用 glXSwapBuffers。因此每次屏幕刷新您只能处理一条消息。

除了多线程解决方案之外,您可以简单地处理事件,直到 xcb_poll_for_event 返回零。处理完所有未决事件后,您可以返回渲染。

关于c++ - xcb 鼠标移动导致输入滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19613790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com