Windows 同一台机器上不同的GLTextureStrage2D实现具有不同的行为

Windows 同一台机器上不同的GLTextureStrage2D实现具有不同的行为,windows,ubuntu,opengl-es,angle,mesa,Windows,Ubuntu,Opengl Es,Angle,Mesa,我正在调用glTextureStorage2D在我的引擎中生成一个帧缓冲区。我在windows上使用Google的Angle,在同一台机器上运行的ubuntu上使用libglfw3 dev&libgles2 mesa dev 在这两种平台上创建8位RGBA纹理都很好,但更高位深度的格式,如GL_RGBA32F、GL_RGBA16F、GL_RGBA16F、GL_RGB10_A2、GL_RGBA16I和GL_R11F_G11F_B10F等,在Ubuntu和检查(使用RenderDoc)时会自动失败,

我正在调用glTextureStorage2D在我的引擎中生成一个帧缓冲区。我在windows上使用Google的Angle,在同一台机器上运行的ubuntu上使用libglfw3 dev&libgles2 mesa dev

在这两种平台上创建8位RGBA纹理都很好,但更高位深度的格式,如GL_RGBA32F、GL_RGBA16F、GL_RGBA16F、GL_RGB10_A2、GL_RGBA16I和GL_R11F_G11F_B10F等,在Ubuntu和检查(使用RenderDoc)时会自动失败,似乎默认返回到标准RGBA纹理

我感兴趣的是确定在任何给定的平台上,纹理格式是否可用,以及为什么我使用的库集似乎不支持这些格式,而机器显然能够支持它们。我知道“glGetInternalformativ”存在于更新的gl实现中,但这不太可能在我想要测试的低规格机器上可用

我试着安装'libgles3 mesa dev',但那不存在,而且,gles3的头都在那里,一切都在运行,只是默默地无法创建我想要的纹理格式。
任何关于为什么会出现这种情况的提示都将不胜感激。

所有图像格式都是“可用”的,因为实现没有机会不工作。你会得到一个有效的纹理。所需的图像格式(GL ES可能不同于桌面GL)需要提供格式所述的内容。但基本上就是这样;没有办法知道更多了,谢谢你,尼科尔。我想我可能已经找到了一种方法来确定纹理是否为请求的格式:“glGetTexLevelParameteriv(GL_texture_2D,0,GL_texture_INTERNAL_format,&actual_format);”然后对照glTextureStorage2D使用的值进行检查。所有图像格式都是“可用”的,从某种意义上说,实现没有机会不工作。你会得到一个有效的纹理。所需的图像格式(GL ES可能不同于桌面GL)需要提供格式所述的内容。但基本上就是这样;没有办法知道更多了,谢谢你,尼科尔。我想我可能已经找到了一种方法来确定纹理是否为请求的格式:“glGetTexLevelParameteriv(GL_texture_2D,0,GL_texture_INTERNAL_format,&actual_format);”然后对照用于glTextureStorage2D的值检查。