2011-12-02 3 views
1

컴파일 중이지만로드되지 않는 OpenGLBook (openglbook.com)의 코드가 있습니다. 나는 그것이 왜 로딩되지 않는 지 전혀 모른다. 이 코드는 다음과 같다 :OpenGL 창이 열려 있지 않습니다.

MAIN.CPP

#include "main.h" 

/// Methods 
/// ----------------------------- 

int main(int argc, char* argv[]) 
{ 
    Initialize(argc, argv); 

    glutMainLoop(); 

    exit(EXIT_SUCCESS); 
} 

main.h

#ifndef main_h 
#define main_h 

#include <cstdlib> 
#include <cstdio> 
#include <cstring> 
#include <GL/glew.h> 
#include <GL/freeglut.h> 

#define WINDOW_TITLE_PREFIX "CHAPTER 1" 

void Initialize(int, char*[]); 
void InitWindow(int, char*[]); 
void ResizeFunction(int, int); 
void RenderFunction(void); 

#endif 

functions.cpp

#include "main.h" 

int CurrentWidth = 800, 
    CurrentHeight = 600, 
    WindowHandle = 0; 

void Initialize(int argc, char* argv[]) 
{ 
    InitWindow(argc, argv); 

    fprintf(
     stdout, 
     "INFO: OpenGL Version: %s\n", 
     glGetString(GL_VERSION) 
     ); 

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
} 

void InitWindow(int argc, char* argv[]) 
{ 
    glutInit(&argc, argv); 

    glutInitContextVersion(4, 2); 
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE); 
    glutInitContextProfile(GLUT_CORE_PROFILE);</pre> 

    glutSetOption(
     GLUT_ACTION_ON_WINDOW_CLOSE, 
     GLUT_ACTION_GLUTMAINLOOP_RETURNS 
     ); 

    glutInitWindowSize(CurrentWidth, CurrentHeight); 

    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 

    WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX); 

    if(WindowHandle < 1) { 
     fprintf(
      stderr, 
      "ERROR: Could not create a new rendering window.\n" 
      ); 
     exit(EXIT_FAILURE); 
    } 

    glutReshapeFunc(ResizeFunction); 
    glutDisplayFunc(RenderFunction); 

} 

void ResizeFunction(int Width, int Height) 
{ 
    CurrentWidth = Width; 
    CurrentHeight = Height; 
    glViewport(0, 0, CurrentWidth, CurrentHeight); 
} 

void RenderFunction(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glutSwapBuffers(); 
    glutPostRedisplay(); 
} 

Visual Studio 2010에서 .exe를 컴파일하고 실행하려고해도 아무 일도 일어나지 않습니다. OpenGL 창이 열리지 않습니다. Visual Studio는 약 2 초 동안 무언가를 실행하는 것처럼 작동 한 다음 정상 상태로 돌아갑니다.

+0

그런데 render 함수에서'glutPostRedisplay'를 호출하지 마십시오. 만약 당신이 정말로 계속 업데이트를 원한다면 (대부분의 경우처럼 완전히 불필요한 경우), glutIdleFunc를 사용하십시오. –

+0

명령 줄에 메시지가 표시됩니까? 실행 파일을 직접 실행하고 명령 줄의 모양을 확인하십시오. –

답변

3
glutInitContextVersion(4, 2); 

현재 그래픽 드라이버가 실제로 OpenGL 4.2를 지원합니까? 그렇지 않으면 윈도우 생성이 실패합니다. 4.2는 여전히 새로운 것입니다. 대신 4.1을 시도하십시오.

+0

고마워요! 그게 문제라고 생각조차하지 못했습니다. 이제 튜토리얼 2 장으로 넘어갈 수 있습니다! –

1

디버깅을 시도하십시오! 주 기능에 중단 점을 놓고 프로그램이 종료 될 때까지 단계별로 실행하십시오.

Nicol Bolas 언급했듯이 OpenGL 4.2를 지원하는 그래픽 카드가 없을 수도 있습니다. AMD 또는 nVidia의 웹 사이트에서 그래픽 카드가 OpenGL 4.2를 지원하는지 확인하십시오. 그렇지 않은 경우, 다음 행을 카드가 지원하는 버전으로 변경하십시오.

glutInitContextVersion(4, 2); 
관련 문제