我在应用程序中经常使用采样器,并且一切正常。

问题是,我只能在笔记本电脑上使用opengl 3.1。根据文档,采样器仅在opengl 3.3或更高版本上可用,但在这里我感到有些困惑。

我可以很好地使用'glGenSamplers',不会产生任何错误,并且采样器ID也很好。在有效纹理上使用'glBindSampler'时,出现'GL_INVALID_VALUE'错误。

谁能为我解决这个问题?如果opengl 3.1中没有采样器,为什么我可以毫无问题地使用glGenSamplers?

我该怎么做才能提供向后兼容性?我猜我唯一的选择是,如果没有采样器,则每次使用纹理进行渲染时都要设置纹理参数?

最佳答案

有两种可能性:

  • 您的图形卡/驱动程序支持ARB_sampler_objects,在这种情况下支持该功能就不足为奇了。随意使用它。
  • 该功能仍然存在。在这种情况下,听起来很奇怪,您被不允许使用

  • 检查glGetStringi(GL_EXTENSION, ...)是否在某个索引处返回采样器对象扩展。仅允许使用实现中广告为“受支持”的扩展中的功能。
    如果您找到了一些不受支持的功能,它们可能仍然可以工作,但也可能无法工作。它是未定义的。

    请注意,尽管您通常希望函数来自ARB扩展名时被命名为glGenSamplersARB,但这不是这种情况,因为这是一个“向后扩展”,提供了选定的功能,在硬件的更高版本中具有相同的功能。无法提供该更高版本的完整功能。

    (关于错误代码,请注意Brett Hale的注释)

    10-08 11:25