2017-05-05 104 views
1

我在OpenGL和GLFW中编写游戏引擎。但是,不知怎的,我的窗户不能关闭。我尝试了很多东西,但没有效果。我的代码有什么问题?窗口不关闭GLFW

我找不到错误的东西 - 对我来说一切似乎都很好。

代码:

int running; 
GLFWwindow* window; 

Window::~Window() 
{ 
    glfwTerminate(); 
} 


Window::Window(int width, int height, const std::string& title) 
: m_width(width), 
m_height(height), 
m_title(title){ 

    glfwInit(); 

    if (!glfwInit()) 

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 
    window = glfwCreateWindow(height, width, __FILE__, NULL, NULL); 
    if (!window) { 
     glfwTerminate(); 

    } 

    running = true; 

} 

void Window::MainLoop() 
{ 

    do 
    { 
     glfwMakeContextCurrent(window); 

     glClearColor(0.2f, 0.3f, 0.3f, 1.0f); 
     glClear(GL_COLOR_BUFFER_BIT); 
     glFlush(); 
     glfwPollEvents(); 

     Draw(); 

     glfwSwapBuffers(window); 

    } 

    while(running); 
} 

void Window::Draw() 
{ 

    glBegin(GL_TRIANGLES); 

    glVertex3f(0.0f, 1.0f, 0.0f); 
    glVertex3f(1.0f,-1.0f, 0.0f); 
    glVertex3f(-1.0f,-1.0f, 0.0f); 
    glEnd(); 
} 

谢谢!

回答

1

有几件事情,但问题似乎是,你从未设置running = false

尝试使你的病情而这样看while(!glfwWindowShouldClose(window));

此外,如果你希望能够通过按下Esc键这应该工作,关闭窗口:while(!glfwWindowShouldClose(window) && glfwGetKey(window_, GLFW_KEY_ESCAPE) != GLFW_PRESS);

还考虑让int running一个bool

而诸如glfwMakeContextCurrent(window);glClearColor(0.2f, 0.3f, 0.3f, 1.0f);之类的东西如果不打算更改它们,则不需要放入循环中。

有关openGL的更多信息,并获得一些基本的理解和工作示例,请考虑阅读https://learnopengl.com/

+0

太好了,谢谢!它可能是不重要的,但是你是否也知道为什么当用标题替换__FILE__时,我得到''没有匹配函数调用glfwCreateWindow'? – user6632515

+0

尝试'title.c_str()'。函数期望C类型字符串= char数组(const char *)。 – Aldarrion