GLFW不会初始化我的窗口

时间:2017-04-23 00:31:10

标签: c++ window game-engine glfw

我正在尝试按照游戏引擎教程进行操作,当视频运行此代码时,它会打开一个窗口。当我这样做时,它会给出错误信息,以防万一没有创建窗口。

 #include "window.h"

namespace sparky {

namespace graphics {

    Window::Window(const char *title, int width, int height) {
        m_Title = title;
        m_Width = width;
        m_Height = height;
        if (!init())
            glfwTerminate();
    }

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

    bool Window::init()
    {
        if (!glfwInit) {
            std::cout << "Failed To Initialize" << std::endl;
            return false;
        }

        m_Window = glfwCreateWindow(m_Width, m_Height, m_Title, NULL, NULL);

        if (!m_Window)
        {
            std::cout << "Window Not Created" << std::endl;
            return false;
        }

        glfwMakeContextCurrent(m_Window);
        return true;

    }

    bool Window::closed() const
    {
        return glfwWindowShouldClose(m_Window);
    }

    void Window::update() const
    {
        glfwPollEvents();
        glfwSwapBuffers(m_Window);
    }

}

}

这是我在window.cpp中的代码,我得到的窗口没有创建错误行,这是我的window.h。

#pragma once
#include <GLFW/glfw3.h>
#include <iostream>

namespace sparky {

namespace graphics {

    class Window {
    private:
        const char* m_Title;
        int m_Width, m_Height;
        GLFWwindow *m_Window;
        bool m_Closed;
    public:
        Window(const char* title, int width, int height);
        ~Window();
        bool closed() const;
        void update() const;
    private:
        bool init();


    };

}

}

和我的主要班级

#include <GLFW/glfw3.h>
#include <iostream>
#include "src/graphics/window.h"

int main() {

using namespace sparky;
using namespace graphics;

Window window("Sparks Fly", 800, 600);

while (!window.closed()) {
    window.update();
}

system("PAUSE");
return 0;
}

1 个答案:

答案 0 :(得分:0)

你的问题在于这一行:

        if (!glfwInit) {

由于glfwInit是一个库函数,因此它(假设您已正确链接)始终具有不是nullptr的有效地址。因此,!glfwInit会将其更改为false,并在世界范围内谨慎处理if语句。

这可以通过简单地调用函数来修复,而不是将其转换为布尔值:

        if(!glfwInit()) {