OpenGL,GLUT,Cygwin - 未能打开显示器''

时间:2015-04-12 22:37:39

标签: c++ opengl cygwin glut freeglut

我的“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):无法打开显示''”。我尝试添加带有':0.0'值的DISPLAY变量,但有错误“freeglut(/ some / path / to / Debug / butler):无法打开显示':0.0'”

2 个答案:

答案 0 :(得分:3)

在使用Cygwin编译时,你得到的程序是&#34; unix-ish&#34;一种环境。图形由客户端连接到的X服务器完成,图形驱动程序连接到另一端; Cygwin X服务器使用Windows GDI(以及一个非常基线的OpenGL配置文件)作为其后端。错误获取是程序告诉您,它希望能够连接到X服务器,但它无法找到。

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

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

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

答案 1 :(得分:0)

如果您的主要优先事项是在编译后运行它,而不考虑性能,兼容性或可移植性,则可以运行:

startxwin /some/path/to/Debug/butler

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

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