2014-06-16 6 views
4

이 응용 프로그램을 VS13에서 컴파일하려고합니다. 나는이 방법으로 모든 라이브러리 링크 :이 코드를 실행하면 glew-1.10.0에서 glew32.lib를 \ lib 디렉토리 릴리스 \ Win32에서 디버그 연결 glfw3과 같은 폴더에 넣어 glew32.dll는glTexImage3D가 예외를 throw합니다.

는 던졌습니다 \ glTexImage3D의 예외; "액세스 위반 실행 위치 0x00000000"이라고 표시됩니다.

#include <GL/glew.h> 
#include <GL/glfw3.h> 

#include <cstdlib> 
#include <iostream> 

GLenum volumeTexture; 

int main() { 
    // Initialize GLFW 
    if (!glfwInit()) { 
     std::cerr << "Failed to initialize GLFW! I'm out!" << std::endl; 
     exit(-1); 
    } 

    glewExperimental = GL_TRUE; 
    GLenum err = glewInit(); 

    if (GLEW_OK != err) 
    { 
     /* Problem: glewInit failed, something is seriously wrong. */ 
     fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); 

    } 

    // Use red to clear the screen 
    glClearColor(1, 0, 0, 1); 
    glGenTextures(1, &volumeTexture); 
    glBindTexture(GL_TEXTURE_3D, volumeTexture); 

    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); 
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); 
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER); 
    glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 256, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 

나는 오류가 나는

glTexImage3D = (PFNGLTEXIMAGE3DPROC) wglGetProcAddress("glTexImage3D"); 

를 추가하지만 내가 연결 건가요 나중에 같은 예외가 glGenFramebuffers를 실행할 때 (나는 내가 glTexImage3D 라인을 코멘트 경우에도 그것을 얻을) 경우 해결 것으로 나타났습니다 뭔가 잘못된 방식으로?

+0

GL은 C API이므로 예외를 발생시키지 않습니다. 예를 들어,'NULL' 포인터로 표현 된 함수를 호출하려하지만 다른 것이면 OS에서 예외가 발생할 수 있습니다. –

답변

3

시퀀스가 ​​잘못되었습니다.

glewInit()은 현재 작업을 수행하기 위해 현재 GL 컨텍스트가 필요합니다. 현재 컨텍스트가 없으면 엔트리 포인트에 대해 GL을 쿼리 할 수 ​​없으며 모든 함수 포인터 (예 : glTexImage3D())를 NULL로 설정합니다.

glfwInit()아니요. GL 컨텍스트를 만들거나 최신 컨텍스트로 만들지 마십시오.

glfwCreateWindow()glfwMakeContextCurrent()이 필요합니다.

관련 문제