2013-03-02 3 views
0
GLEW + GLFW를 사용할 때이 문제가 발생하고

은 ... 내가 사용하는 순서는 다음과 같습니다이 GLEW + GLFW 항상 블랙을 "텍스처에 렌더링"

  1. 로드 GLFW과 창
  2. 초기화 GLEW에게 열
  3. 컴파일 쉐이더
  4. 만들기 질감
  5. 만들기 프레임 버퍼

이 내 코드의 모든 흐름입니다 :

if(!glfwInit()) 
{ 
    glfwTerminate(); 
    throw exception("Failed to initialize GLFW"); 
} 

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(m_width, m_height, 0, 0, 0, 0, 32, 0, GLFW_WINDOW)) 
{ 
    throw exception("Failed to open GLFW window."); 
    glfwTerminate(); 
} 

if (glewInit() != GLEW_OK) 
{ 
    throw exception("Failed to initialize GLEW"); 
} 

// shaders... 
compile some shaders.... glCreateShader(), glCompileShader(), glCreateProgram(), glAttachShader() glLinkProgram(), etc... 

// texture 
glGenTextures(1, &m_texture); 
glBindTexture(GL_TEXTURE_2D, m_texture); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 

// frame buffer 
glGenFramebuffers(1, &m_frameBuffer); // IT CRASHES HERE! :-(
glBindFramebuffer(GL_FRAMEBUFFER, m_frameBuffer); 

glBindTexture(GL_TEXTURE_2D, m_texture); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_texture, 0); 

GLenum drawBuffers[ 1 ] = { GL_COLOR_ATTACHMENT0 }; 
glDrawBuffers(1, drawBuffers); 

if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) 
{ 
    throw exception("Problems when creating OpenGL texture in GPU!"); 
} 

이 흐름이, 내 말은, 어떤 충돌되며 예외가 발생하지 않습니다 완벽하게 실행 ...하지만 나는 프레임 버퍼에 무언가를 그리는 모든 것을 다시 그것을 읽을 때 검은 색입니다.

세부 : 나 자신에 의해 창을 만들고는 OpenGL 컨텍스트를 생성하고 ... 모든 것을 완벽하게 작동 : 나는 ... GLFW를 사용하지 않는 것을 제외하고 즉 위에 나는 정확한 단계를 다른 버전! 내 쉐이더가 컴파일되고 실행됩니다. 텍스처가 생성되고, 프레임 버퍼가 만들어지고, 완벽하게 렌더링됩니다 ...하지만 넣을 때 GLFW 텍스처 렌더링이 작동을 멈췄습니다 ... 어떤 생각입니까?

+0

이 거기에, 우리가 얘기하자 일부'glGetError의()'호출을 넣어 : 여기

는 GLFW 및 GLEW의 전체 초기화의 예입니다. – Thomas

+0

GL_INVALID_OPERATION 바로 다음에 GL_INVALID_OPERATION을 얻습니다. glBindFramebuffer() = GL_INVALID_OPERATION 바로 뒤에 GL_INVALID_ENUM을 얻습니다. 다른 모든 것들 GL_NO_ERROR –

+0

왜냐하면 그들은 나에게 오류를 반환하지 않기 때문입니다 ... m_frameBuffer는 예제를 가져옵니다. 모든 것이 잘되어 가고있는 것처럼 값 (= 1)을 반환하지만, 실제로 glGetError()는 그 에로스를 내게주었습니다 ... –

답변

0

으로 컨텍스트를 전환하지 않습니다. glfwMakeContextCurrent (window);

//Init GLFW 
if(!glfwInit()) 
{ 
    std::cout << "ERROR" << std::endl; 
    return(-1); 
} 

//Give hints 
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 
glfwWindowHint(GLFW_VISIBLE, GL_TRUE); 
glfwWindowHint(GLFW_DECORATED, GL_TRUE); 
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); 

#if defined(__APPLE__) 
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
int const DPI = 2; // For retina screens only 
#else 
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_FALSE); 
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE); 
int const DPI = 1; 
# endif 

// Create Wikndow 
window = glfwCreateWindow(screenWidth, screenHeight, "DEMO", NULL, NULL); 
if(window == 0) 
{ 
    std::cout << "ERROR" << std::endl; 
    glfwTerminate(); 
    return(-1); 
} 

//Switch context to use on window 
glfwMakeContextCurrent(window); 

//Init glew 
glewExperimental = GL_TRUE; 
if (glewInit() != GLEW_OK) 
{ 
    std::cout << "ERROR" << std::endl; 
    return(-1); 
} 
관련 문제