2016-08-25 7 views
0

私はhttp://learnopengl.com/でOpenGLを学習していますが、チュートリアルの「hello triangle」の部分にバッファをバインドしようとするとクラッシュしています。以前のC++でのコーディング経験がありますが、何が間違っているかは分かりません。glGenBuffersを呼び出すと、OpenGLがクラッシュする

マイコード:

#include <iostream> 

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

using namespace std; 



const GLuint WIDTH = 800, HEIGHT = 600; 

void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode); 
int initializeWindow(GLFWwindow* window); 
int main() { 

    GLFWwindow* window; 

    cout << "Creating Triangles" << endl; 
    GLfloat triangles[] = { 
      -0.5f, -0.5f, 0.0f, 
      0.5f, -0.5f, 0.0f, 
      0.5f, 0.5f, 0.0f 
    }; 

    cout << "Initialising GLFW" << endl; 
    glfwInit(); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

    cout << "Initialising Window..." << endl; 
    window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", NULL, NULL); 

    cout << "Setting Callback Functions..." << endl; 
    glfwSetKeyCallback(window, key_callback); 

    cout << "Binding Buffers" << endl; 
    GLuint VBO; 
    glGenBuffers(1, &VBO); // <--- Crashing here 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(triangles), triangles, GL_STATIC_DRAW); 

    if (initializeWindow(window) == -1) { 
     return -1; 
    } 

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

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

     glfwSwapBuffers(window); 
    } 

    cout << "Terminating..." << endl; 
    glfwTerminate(); 
    return 0; 
} 

int initializeWindow(GLFWwindow* window) { 

     if (window == NULL) { 
      cout << "Failed to create GLFW window... exiting" << endl; 
      glfwTerminate(); 
      return -1; 
     } 

     glfwMakeContextCurrent(window); 

     glewExperimental = GL_TRUE; 
     if(glewInit() != GLEW_OK) { 
      cout << "Failed to initialize GLEW... exiting" << endl; 
      return -1; 
     } 

     int width, height; 
     glfwGetFramebufferSize(window, &width, &height); 
     glViewport(0, 0, width, height); 

     return 0; 
} 

void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode) { 
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) { 
     glfwSetWindowShouldClose(window, GL_TRUE); 
    } 
} 

私はちょうど一般的な「応答していない」クラッシュ、コンソールにエラーを取得しています。どんな助力も大変ありがとうございます。

答えて

2

ウィンドウの作成直後でgl関数を呼び出す前にinitializeWindowに電話する必要があります。これは、現在のウィンドウをアクティブにしてglewを初期化するために必要です(これらの操作はinitializewindow内で行われます)。

+0

原因のif文の中でウィンドウを初期化しています。ありがとう! –

関連する問題