【问题标题】:Opengl using freeglut on linux shows only a transparent window在 linux 上使用 freeglut 的 Opengl 只显示一个透明窗口
【发布时间】:2021-02-03 01:16:37
【问题描述】:

我正在尝试在 linux mint 20 上使用 freeglut3 来做一些基本的 openGL(我的老师强迫我在 c++ 中使用 glut/freeglut)。我只是想在屏幕上显示一个黑色窗口,但只显示一个透明窗口,并且在显示分段错误(核心转储)之前它不会关闭

这是我的代码

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

void init()
{
    glClearColor(1, 0, 0, 1);
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    glFlush();
    glutSwapBuffers();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutInitWindowPosition(300, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("Linux TEST");
    glutDisplayFunc(display);
    init();
    glutMainLoop();
}

我正在使用g++ main.cpp -lGL -lGLU -lglut编译代码

这是的输出

【问题讨论】:

  • 您在对glClearColor(1, 0, 0, 0) 的调用中指定了零的alpha 值。请改用glClearColor(1, 0, 0, 1)
  • @G.M.尝试了同样的结果

标签: c++ linux opengl glut freeglut


【解决方案1】:

您正在使用...创建双缓冲上下文

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

但你从不打电话给glutSwapBuffers。将您的 display 函数更改为...

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    glFlush();
    glutSwapBuffers();
}

【讨论】:

  • Screenshot 试过但没有成功
  • 添加对glutSwapBuffers的调用给了我预期的结果,所以我不确定还有什么可以推荐的。
  • 你在 Windows 上吗?在 Windows 上此代码有效,但在 linux 上无效
  • 不,我在 Suse Linux 上使用旧的 Nvidia 卡(Nouveau 驱动程序)和 libglut.so.3。
  • 我也安装了 libglut.so.3。您如何构建程序?你用 cmake 吗? (我不认为这是一个解决方案,我只是好奇)
猜你喜欢
  • 1970-01-01
  • 2017-04-02
  • 2012-03-18
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
相关资源
最近更新 更多