3

我收到此错误:

“访问冲突执行位置 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 );

    ...
}
4

2 回答 2

7

GLEW 在使用核心 OpenGL 配置文件时存在已知问题。您可以使用GLEW 变通方法,也可以放弃 GLEW 用于实际工作的扩展加载程序

于 2013-03-01T20:45:38.277 回答
1

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

于 2015-03-02T16:06:45.610 回答