0
GLEW + GLFW를 사용할 때이 문제가 발생하고
은 ... 내가 사용하는 순서는 다음과 같습니다이 GLEW + GLFW 항상 블랙을 "텍스처에 렌더링"
- 로드 GLFW과 창
- 초기화 GLEW에게 열
- 컴파일 쉐이더
- 만들기 질감
- 만들기 프레임 버퍼
이 내 코드의 모든 흐름입니다 :
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 텍스처 렌더링이 작동을 멈췄습니다 ... 어떤 생각입니까?
이 거기에, 우리가 얘기하자 일부'glGetError의()'호출을 넣어 : 여기
는 GLFW 및 GLEW의 전체 초기화의 예입니다. – ThomasGL_INVALID_OPERATION 바로 다음에 GL_INVALID_OPERATION을 얻습니다. glBindFramebuffer() = GL_INVALID_OPERATION 바로 뒤에 GL_INVALID_ENUM을 얻습니다. 다른 모든 것들 GL_NO_ERROR –
왜냐하면 그들은 나에게 오류를 반환하지 않기 때문입니다 ... m_frameBuffer는 예제를 가져옵니다. 모든 것이 잘되어 가고있는 것처럼 값 (= 1)을 반환하지만, 실제로 glGetError()는 그 에로스를 내게주었습니다 ... –