【问题标题】:Usage of GL_ARB_clear_texture throws access violation exception使用 GL_ARB_clear_texture 会引发访问冲突异常
【发布时间】:2013-08-20 19:03:46
【问题描述】:

我使用 OpenGL 4.3(核心)。我的显卡是支持 OpenGL 4.3 的 NVidia Quadro4000。我决定尝试glClearTexImage() 函数。我将 GLEW 从 1.9.0 更新到 1.10.0,它映射了这个方法。 当输入 glClearTexImage 行时,Visual Studio 会抛出以下异常:

“XXXX_XXXX.exe:0xC0000005 中 0x757AC9F5 处未处理的异常:执行位置 0x00000000 的访问冲突。”

代码很简单:

//...Here the texture is created....

    GLuint clearColor = 0;
glBindTexture   (_target,newTex);
glClearTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_BYTE, &clearColor);

【问题讨论】:

    标签: opengl


    【解决方案1】:

    检查glClearTexImage的值,例如

    printf("%p\n", glClearTexImage);
    

    它最有可能是 NULL。如果是这样,请检查 GLEW_ARB_clear_texture - 它肯定也会为 0。

    【讨论】:

    • 是的,它是 00000000... 但我不明白。扩展文档说它是针对 OpenGL 4.3 编写的。我有 4.3 那么为什么扩展不可用?
    • 'written against opengl 4.3' 表示此扩展需要存在 opengl 4.3。您正在尝试相反 - 没有人向您保证您的显卡/驱动程序支持此特定扩展(以及任何其他扩展)。您必须检查 GL_EXTENSIONS 字符串或 GLEW_* 变量,以确保您有扩展 - 只有这样您才能使用它。
    • @keltar:不,它没有。例如,ARB_enhanced_layouts 是“针对 OpenGL 4.3 编写的”,但它明确要求仅“OpenGL 3.1 和 GLSL 1.40 或更高版本”。
    • 好吧,就这样吧。它使用了特定版本中的一些假设和定义。在某些时候,一些扩展可能会合并到新的规范版本中——在这种情况下,可能会跳过扩展存在检查。但是,使用特定的 GL 版本需要特殊的初始化阶段 - 坚持使用低版本并使用您需要的扩展可能会更容易。
    【解决方案2】:

    没有版本驱动程序支持任何最新的 OpenGL 4.4 功能。您将获得最接近的是 NVIDIA 的 beta 驱动程序。

    另外,如果你要使用一个函数,你应该先检查一下核心版本/扩展是否可用。

    【讨论】:

    猜你喜欢
    • 2015-12-08
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2017-01-01
    相关资源
    最近更新 更多