2012-11-15 3 views
0

OpenGL을 배우고 있으며 어떤 이유로 프로그램이 삼각형을 그리지 않습니다. 여기 코드는 다음과 같습니다seg 오류를주는 OpenGL 프로그램

#include <stdio.h> 
#include <stdlib.h> 
#include <GL/glew.h> 
#include <GL/glfw.h> 
#include <glm/glm.hpp> 

using namespace glm; 

int main() 
{ 
    if(!glfwInit()) 
    { 
     fprintf(stderr, "Failed to initialize GLFW\n"); 
     return -1; 
    } 

    glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3); 
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 

    if(!glfwOpenWindow(1080, 720, 0, 0, 0, 0, 32, 0, GLFW_WINDOW)) 
    { 
     fprintf(stderr, "Failed to open GLFW window\n"); 
     glfwTerminate(); 
     return -1; 
    } 

    if(glewInit() != GLEW_OK) 
    { 
     fprintf(stderr, "Failed to initialize GLEW\n"); 
     return -1; 
    } 

    GLuint VertexArrayID; 
    glGenVertexArrays(1, &VertexArrayID); 
    glBindVertexArray(VertexArrayID); 

    static const GLfloat g_vertex_buffer_data[] = { 
     -1.0f, -1.0f, 0.0f, 
     1.0f, -1.0f, 0.0f, 
     0.0f, 1.0f, 0.0f, 
    }; 

    GLuint vertexBuffer; 
    glGenBuffers(1, &vertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW); 

    glfwSetWindowTitle("Tutorial 01"); 

    glfwEnable(GLFW_STICKY_KEYS); 

    do 
    { 
     glEnableVertexAttribArray(0); 
     glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); 
     glVertexAttribPointer(
      0, 
      3, 
      GL_FLOAT, 
      GL_FALSE, 
      0, 
      (void*)0 
     ); 

     glDrawArrays(GL_TRIANGLES, 0, 3); 

     glDisableVertexAttribArray(0); 

     glfwSwapBuffers(); 
    } 

    while(glfwGetKey(GLFW_KEY_ESC) != GLFW_PRESS && 
      glfwGetWindowParam(GLFW_OPENED)); 
} 

디버깅 로그 :

Debugger name and version: GNU gdb (GDB) 7.5 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:11 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:17 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:18 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:19 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:20 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:22 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:29 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:36 
Program received signal SIGSEGV, Segmentation fault. 
In ??()() 
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:36 
Debugger finished with status 0 
+2

당신이 그것을 breakpointing과 충돌 위치를보고 시도? –

+0

프로그램의 시작 부분에'stderr '에 뭔가를 인쇄 해 보았습니까?'stderr'에 * 읽은 것들을 읽을 수 있는지 확인하기 위해서입니까? –

+0

DJ가 말한대로했는데, 36 행의 seg 오류입니다. glGenVertexArrays (1, & VertexArrayID); 이제 질문은 왜 이런 일이 일어나고 어떻게 해결할 수 있느냐입니다. –

답변

0

glewInit() 후 명시 적 버전 검사를 수행합니다

if(!GLEW_VERSION_3_3) 
{ 
    fprintf(stderr, "Insuffcient GL version!\n"); 
    return -1; 
}