首页 > 解决方案 > 有没有什么方法可以生成渲染缓冲区对象和帧缓冲区对象而不在 openGL 中创建窗口?

问题描述

我的 opengl 程序创建一个 glwindow,绘制图像,捕获像素并保存为图像文件。它适用于我的笔记本电脑,但是当我在非显示 linux ssh 服务器中运行程序时出现 freeglut 错误(无法打开显示。)。我相信“glCreateWindow”会发生该错误,但我无法在不创建窗口的情况下生成 Renderbuffer 或 Framebuffer。

glutInit(&myargc, myargv);
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
glutInitWindowPosition( 50, 50 );
glutInitWindowSize( WIDTH, HEIGHT );
main_window = glutCreateWindow("__Window__"); // CreateWindow

glewInit();

glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WIDTH, HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, 0);

LOG(INFO) << "0";
glGenRenderbuffers(1, &depth);
LOG(INFO) << "1";
glBindRenderbuffer(GL_RENDERBUFFER, depth);

如果我在非显示 linux ssh 服务器中运行此代码,错误消息会显示“freeglut:无法打开显示”。

如果我跳过创建窗口,

// main_window = glutCreateWindow("__Window__"); // skip this code

LOG 输出只有 0 则发生分段错误,这意味着它无法在没有窗口的情况下生成渲染缓冲区。

标签: c++opengl

解决方案


推荐阅读