我正在尝试在C++中运行我的第一个opengl程序,该程序从Mac OS X上的Terminal打开一个窗口,设置背景色并给出标题。

该代码编译并链接正常。当我运行程序时,窗口和标题可以很好地打开,但是背景颜色始终为黑色。

据我了解,函数glClearColor设置了背景色。但是,无论我将什么参数传递给函数,窗口的背景颜色始终为黑色。

如果有人可以向我解释我犯了什么错误,我将不胜感激。谢谢,下面是代码:

#include <iostream>

#define GLEW_STATIC
#include <GL/glew.h>

#include <GLFW/glfw3.h>

const GLint WIDTH = 800, HEIGHT = 600;

int main()
{
    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Learn OpenGL", nullptr, nullptr);

    int screenWidth, screenHeight;
    glfwGetFramebufferSize(window, &screenWidth, &screenHeight);

    if(nullptr == window)
    {
        std::cout << "Failed to create GLFW window" << '\n';
        glfwTerminate();

        return -1;
    }

    glewExperimental = GL_TRUE;
    GLenum err=glewInit();

    if(err != glewInit())
    {
        std::cout << "Failed to initialize GLEW" << '\n';

        return -1;
    }

    glViewport(0, 0, screenWidth, screenHeight);

    while(!glfwWindowShouldClose(window))
    {
        glfwPollEvents();

        glClearColor(0.2f, 0.2f, 0.9f, 0.5f);
        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);
    }

    glfwTerminate();

    return 0;
}

最佳答案

像所有OpenGL函数一样,glClearColor可在当前OpenGL上下文中使用。

您没有将窗口的上下文设置为调用线程的当前上下文,因此对glClearColor的调用在此没有任何作用。加:

glfwMakeContextCurrent(window);

在循环之前。

glfwMakeContextCurrent文档:

关于c++ - OpenGL glClearColor始终使黑屏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40716375/

10-12 14:14