2016-11-21 265 views
1

我試圖運行在C++中,打開一個窗口,我的第一個OpenGL圖像,設置背景顏色,並給出了一個標題,從終端在Mac OS XOpenGL的glClearColor總是黑屏

的代碼編譯和鏈接很好。當我運行該程序時,窗口和標題可以正常打開,但背景顏色始終爲黑色。

據我瞭解,功能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; 
} 

回答

5

glClearColor,像所有的OpenGL功能,適用於當前的OpenGL上下文。

您沒有將窗口的上下文設置爲您的調用線程的當前內容,因此您對glClearColor的調用在此處不起作用。添加:

glfwMakeContextCurrent(window); 

在循環之前。

glfwMakeContextCurrent從文檔:

該功能調用線程上指定的窗口當前的OpenGL或OpenGL ES的上下文。一個上下文只能在單個線程上一次生成,而且每個線程一次只能有一個當前上下文。