linux上使用glx例子,c++ - X11 / GLX - 全屏模式? - 堆栈内存溢出
时间: 2023-06-26 09:05:03 浏览: 180
这个问题的原因可能是程序中存在堆栈溢出的情况。可以使用工具如Valgrind来检查程序的内存使用情况,以便找出问题所在。
另外,如果您想在全屏模式下使用GLX,可以使用以下步骤:
1. 打开显示设备。
2. 创建一个窗口并将其设置为全屏模式。
3. 创建一个OpenGL上下文并将其与窗口关联。
4. 绘制图形。
5. 关闭OpenGL上下文和窗口。
以下是一个简单的示例程序:
```
#include <X11/Xlib.h>
#include <GL/glx.h>
int main() {
Display *display = XOpenDisplay(NULL);
Window root = DefaultRootWindow(display);
GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
XVisualInfo *vi = glXChooseVisual(display, 0, att);
GLXContext ctx = glXCreateContext(display, vi, NULL, GL_TRUE);
Colormap cmap = XCreateColormap(display, root, vi->visual, AllocNone);
XSetWindowAttributes swa;
swa.colormap = cmap;
swa.event_mask = ExposureMask | KeyPressMask;
Window win = XCreateWindow(display, root, 0, 0, 800, 600, 0, vi->depth, InputOutput, vi->visual, CWColormap | CWEventMask, &swa);
XMapWindow(display, win);
XStoreName(display, win, "My GLX Window");
glXMakeCurrent(display, win, ctx);
// 绘制图形
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glXSwapBuffers(display, win);
sleep(5); // 等待5秒钟
glXMakeCurrent(display, None, NULL);
glXDestroyContext(display, ctx);
XDestroyWindow(display, win);
XCloseDisplay(display);
return 0;
}
```
这个程序将创建一个800x600的窗口,并在其中绘制一个黑色的背景。窗口将在5秒钟后关闭。请注意,此示例程序仅用于演示目的,实际应用程序可能需要更多的代码来处理输入事件、渲染3D场景等。
阅读全文