Opengl 使用GL_ARB_clear_纹理引发访问冲突异常

Opengl 使用GL_ARB_clear_纹理引发访问冲突异常,opengl,Opengl,我使用OpenGL 4.3(core)。我的视频卡是支持OpenGL 4.3的NVidia Quadro4000。我决定尝试()函数。我将GLEW从1.9.0更新为1.10.0,其中映射了此方法。 当输入glClearTexImage行时,Visual Studio引发以下异常: “XXXXX\u XXXX.exe中0x757AC9F5处未处理的异常:0xC0000005:访问冲突执行位置0x00000000。” 代码很简单: //...Here the texture is created..

我使用OpenGL 4.3(core)。我的视频卡是支持OpenGL 4.3的NVidia Quadro4000。我决定尝试()函数。我将GLEW从1.9.0更新为1.10.0,其中映射了此方法。 当输入glClearTexImage行时,Visual Studio引发以下异常:

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

代码很简单:

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

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

没有版本驱动程序支持任何最新的OpenGL 4.4功能。你将得到的最接近的是NVIDIA的测试版驱动程序


此外,如果要使用函数,应首先检查核心版本/扩展是否可用。

检查glClearTexImage的值,例如

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

它很可能是空的。如果是这样,请检查GLEW_ARB_clear_纹理-当然它也会是0。

规范实际上是这样说的:此扩展是针对OpenGL 4.3(核心配置文件)编写的@MichaelIV:这并不意味着它是OpenGL 4.3或B的一部分)是自动可用的。“书面反对”的意思是如何反对。扩展名基本上是diff文件;他们在某些特定的规范中说明了要更改的内容。是的,它是00000000。。。但是我不明白。扩展文档说它是针对OpenGL 4.3编写的。我有4.3,所以为什么扩展不可用?“针对OpenGL 4.3编写”说这个扩展需要OpenGL 4.3存在。你的做法正好相反——没有人向你保证你的图形卡/驱动程序支持这个特定的扩展(以及其他任何扩展)。您必须检查GL_扩展字符串或GLEW_*变量,以确保您有扩展-只有这样您才能使用它。@keltar:不,它没有。例如,是“针对OpenGL4.3编写的”,但它明确要求仅“OpenGL3.1和GLSL1.40或更高版本”。它使用特定版本中的一些假设和定义。在某些时候,一些扩展可能会合并到新的规范版本中——在这种情况下,可能会跳过扩展存在性检查。然而,使用特定的GL版本需要特殊的初始化阶段——使用低版本和只使用您需要的扩展可能更容易。