【发布时间】:2011-04-06 00:26:57
【问题描述】:
我正在使用 X11,当我运行我的程序时,窗口显示正常,但是当我退出时,控制台中会输出以下错误:
XIO:X 服务器上的致命 IO 错误 11(资源暂时不可用) ":0.0" 在 58 个请求(58 个已知已处理)后剩余 0 个事件。
我查看了文档,但找不到任何关于这实际上意味着什么的信息。
【问题讨论】:
-
那个 paDisplay 类看起来很奇怪。为什么要让一切都是静态的?它使用 OpenGL 的方式也是多方面的。例如,GL 上下文可能会被程序的其他部分取消绑定/重新绑定,因此 glXMakeCurrent 应该在任何处理 OpenGL 的函数之前调用,或者更好的是,OpenGL 上下文应该由单独的类管理。 initOpenGL 函数执行在显示函数中由渲染代码完成的工作。设置视口和投影是渲染的一部分,而不是窗口设置!
-
我将所有内容都设为静态,因为它更像是函数和变量的集合,而不是类。 IE。在我的程序中,您不能创建多个窗口。并且 OpenGL 上下文将始终在程序运行的整个持续时间内绑定。但我确实认为你的想法很好,只是将事物分开更多,以使其更具可读性和结构良好。你是说设置 vierport 和投影应该移动到 paDisplay::stepBegin() 函数。抱歉,看起来很糟糕,我只是想从主程序中隐藏大部分复杂代码。
-
我刚刚尝试将视口和投影功能移动到渲染中,但问题仍然存在。究竟发生的是窗口创建成功,但里面什么都没有显示,它不是白色,只是窗口后面的东西仍然存在于里面。
-
那么,使用命名空间而不是类,这就是他们发明的目的。您的“私有”功能将成为仅在模块中可见的“静态”功能。关于在 initOpenGL 中移动代码:这只是为了简洁的风格和保持代码(以及一旦使用精细的渲染方法)你的头脑清醒。最后但同样重要的是:我没有看到实际调用了 setpBegin 和 stepEnd 函数。
-
它们在主循环中被调用。我只是将所有内容分成一个窗口,一个渲染器,然后一个处理所有内容的显示器,我得到一个不同的错误:致命 IO 错误 104(对等方重置连接)。如果我知道是什么功能导致了它,那将非常有用?你知道哪里列出了错误,xlib 文档感觉有点瘦。