2016-11-21 2 views
1

黒い画面を作るOpenGLのglClearColorいつものMac OS X上で私はターミナルから、背景色を設定し、ウィンドウを開き、C++、中に私の最初のOpenGLのプログラムを実行しようとしている、とタイトルを与えてい

コードがコンパイルされ、うまくリンクされます。プログラムを実行するとウィンドウとタイトルは正常に開きますが、背景色は常に黒です。

機能glClearColorは背景色を設定していると私は理解しています。しかし、関数に渡すパラメータにかかわらず、ウィンドウの背景色は常に黒です。

誰かが私にどのようなエラーを説明することができれば、私は非常に感謝します。すべてのOpenGLの機能と同様に、現在のOpenGLコンテキストで動作し、

#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:以下のおかげとは、コードです。

呼び出し元のスレッドのウィンドウのコンテキストを現在のスレッドに設定していないため、glClearColorへの呼び出しでは何も行われません。追加:

glfwMakeContextCurrent(window); 

ループの前に追加します。

glfwMakeContextCurrentドキュメントから:

この関数は、呼び出し元のスレッドで指定されたウィンドウの現在ののOpenGLまたはOpenGL ESコンテキストになります。コンテキストは、一度に1つのスレッドでのみ現在の状態にすることができ、各スレッドは一度に1つの現在のコンテキストのみを持つことができます。

関連する問題