GLEW+GLFWを使用するときに問題が発生します...使用する順序は次のとおりです。
- GLFWをロードし、ウィンドウを開きます
- Init 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!" );
}
このフローは完全に実行されます。つまり、クラッシュや例外のスローはありません...しかし、フレームバッファーに何かを描画して読み戻すと、すべてが黒くなります。
詳細:GLFWを使用しないことを除いて、上記とまったく同じ手順の別のバージョンがあります...つまり:自分でウィンドウを作成し、OpenGLコンテキストを作成します...すべてが完全に機能します!シェーダーがコンパイルされて正常に実行され、テクスチャが作成され、フレームバッファーが作成され、レンダリングして完全に元に戻します...しかし、GLFWを配置すると、テクスチャへのレンダリングが機能しなくなりました...何か考えはありますか?