egl_error = init_egl();
if (!egl_error) {
return 1;
}
一旦拥有了EGL和Xlib对象,就可以开始事件处理循环了。
while (1) {
int keycode;
XEvent xev;
if ( XPending ( xdisplay ) )
if (XCheckWindowEvent(shell->xdisplay, shell->win, global_event_mask, &xev))
process_xevent(shell, xev);
/* if (should_exit) { break; } // set some global flag if you want to exit */
eglMakeCurrent( egl_display, egl_surface, egl_surface, egl_context );
/* Call OpenGL as you see fit */
/* get rendered buffer to the screen */
eglSwapBuffers ( egl_display, egl_surface );
}
// deinitialize
}
1条答案
按热度按时间niknxzdl1#
不,EGL本身不提供Xlib Package 器。您必须自己创建窗口。
这里有一个最小的示例,可以让您开始使用。它引用GLES2,但它也应该与GLES1一起工作。
首先,声明Xlib对象(Display和Window)。
通过
main
函数,您将调用X事件处理程序过程。我已经留下了注解printf
调用,以显示事件值是如何命名的,因此不需要查找文档。如果“事件循环”的概念不清楚,那么我建议阅读有关一般UI事件处理的内容。最后,在main()例程中创建并打开Display/XWindow。
一旦打开显示器,就会创建并显示该窗口。
最后,在main()例程中创建并打开Display/XWindow。
当您有窗口时,初始化EGL。
一旦拥有了EGL和Xlib对象,就可以开始事件处理循环了。
这应该是你开始的第一步。代码是从一个较大的项目中提取的,因此在删除不相关的内容时可能会出现打字错误。
为了总结答案,更准确地说,这里
EGLNativeWindowType
专门用于X11/Xlib.h
报头中的Window
,EGLNativeDisplayType
是Display*
。一种更简单的方法可能是使用
libxcb
,但我没有任何经过测试的样例代码。GLFW library可以作为依赖于操作系统的OpenGL上下文创建例程的有用来源。