OpenGL、GLUT、Cygwin - 无法打开显示“”

Posted

技术标签:

【中文标题】OpenGL、GLUT、Cygwin - 无法打开显示“”【英文标题】:OpenGL, GLUT, Cygwin - failed to open display '' 【发布时间】:2015-04-12 22:37:39 【问题描述】:

我的“CMakeList.txt”文件

cmake_minimum_required(VERSION 3.1)
project(butler)

#########################################################
# FIND GLUT
#########################################################

find_package(GLUT REQUIRED)
include_directories($GLUT_INCLUDE_DIRS)
link_directories($GLUT_LIBRARY_DIRS)
add_definitions($GLUT_DEFINITIONS)
if(NOT GLUT_FOUND)
    message(ERROR " GLUT not found!")
endif(NOT GLUT_FOUND)
#########################################################
# FIND OPENGL
#########################################################
find_package(OpenGL REQUIRED)
include_directories($OpenGL_INCLUDE_DIRS)
link_directories($OpenGL_LIBRARY_DIRS)
add_definitions($OpenGL_DEFINITIONS)
if(NOT OPENGL_FOUND)
    message(ERROR " OPENGL not found!")
endif(NOT OPENGL_FOUND)

set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")

set(SOURCE_FILES main.cpp)
add_executable(butler $SOURCE_FILES)
target_link_libraries(butler $OPENGL_LIBRARIES $GLUT_LIBRARY )

还有一些来自互联网的例子:

#include <windows.h>
#include <cstdlib>
#include "GL/glut.h"

float clr = 0.2;

void display() 
    glClear(GL_COLOR_BUFFER_BIT);

    clr += 0.1;
    if (clr > 1.0)
        clr = 0;
    glBegin(GL_POLYGON);
    
        glColor3f(clr, clr, clr);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    
    glEnd();

    glFlush();


// Main execution  function
int main(int argc, char *argv[]) 
    glutInit(&argc, argv);      // Initialize GLUT
    glutCreateWindow("win1");   // Create a window 1
    glutDisplayFunc(display);   // Register display callback
    glutCreateWindow("win2");   // Create a window 2
    glutDisplayFunc(display);   // Register display callback

    glutMainLoop();             // Enter main event loop

我有错误:“freeglut (/some/path/to/Debug/butler): failed to open display ''”。我尝试使用 ':0.0' 值添加 DISPLAY 变量,但出现错误“freeglut (/some/path/to/Debug/butler): failed to open display ':0.0'”

【问题讨论】:

听起来你没有运行 X 服务器,或者它运行的不是 ":0.0"。 我可以在没有 X 服务器的情况下运行这个程序吗?我不完全理解什么是“X 服务器”。前段时间我在 VisualStudio2010 中编写了相同的代码,它工作正常。现在我安装了 CLion + Cygwin 并开始了“有趣的轮播”。 【参考方案1】:

使用 Cygwin 编译程序时,您会得到一个“unix-ish”类型的环境。图形由客户端连接到一端的 X 服务器完成,图形驱动程序连接到另一端; Cygwin X 服务器使用 Windows GDI(和一个非常基线的 OpenGL 配置文件)作为其后端。错误 get 是程序告诉您,它希望能够连接到 X 服务器,但找不到。

当涉及到 Windows 上的 OpenGL 时,你不应该使用它!

在构建使用 OpenGL 的程序时: 不要使用 Cygwin 工具链!

改为使用针对本机 Windows 图形 API 的 MinGW 工具链;您还需要相关库的适当构建。您可以在 Cygwin 环境中安装 MinGW 工具链,但我个人更喜欢独立安装。

【讨论】:

【参考方案2】:

如果您的首要任务只是让它在编译后运行,而不考虑性能、兼容性或可移植性,您可以运行:

startxwin /some/path/to/Debug/butler

在 Cygwin 终端中(假设您安装了 xinit Cygwin 软件包,per the documentation)。

这会以“多窗口”模式启动 X 服务器并运行您的程序。一旦您的程序退出,它将停止 X 服务器并进行清理。

【讨论】:

以上是关于OpenGL、GLUT、Cygwin - 无法打开显示“”的主要内容,如果未能解决你的问题,请参考以下文章

如何通过openGL或Glut检查窗口是不是打开

OpenGL/Glut 无法在其上绘制 [

Mac 上的 OpenGL/GLUT 应用程序无法获得焦点 [关闭]

C++ OpenGL/Glut 无法绘制

无法使用 Glut 或 OpenGL 显示 PNG

OpenGL glut库