使用GLFW + GLEW时glGenFramebuffers()访问冲突

时间:2013-03-01 20:00:33

标签: opengl framebuffer glew fbo glfw

我收到此错误:

  

“访问冲突执行位置0x00000000。”

当我在Windows上使用GLFW + GLEW时。

我正在使用Windows 7.我也有自己的实现(从头开始)创建窗口,初始化OpenGL上下文,初始化GLEW等等......一切正常。所以当然我的显卡具有帧缓冲功能,驱动程序的一切都很好......问题只发生在我尝试使用GLFW时。

有什么建议吗?

代码:

void start()
{
    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" );
    }

    // 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 );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );

    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 );

    ...
}

2 个答案:

答案 0 :(得分:7)

GLEW在使用核心OpenGL配置文件时遇到了问题。您可以使用the GLEW workaround或放弃GLEW作为extension loaders that actually work

答案 1 :(得分:1)

我只是偶然发现了同样的问题。 解决方案:使用glGenFramebuffers的instad使用“glGenFramebuffersEXT”并打开 任何其他与帧缓冲区有关系的函数总是将“EXT”放在它的末尾,它应该可以工作。问题是在这里,ARB版本和EXT版本有两个版本的扩展名,如果你不写“EXT”,你使用的是“ARB”版本,它几乎都是相同的,但它是一部分 更新gl版本的核心配置文件。所以为了兼容,总是使用函数的“EXT”版本: - )