OpenGL - opengl 3.1中的采样器?

时间:2014-01-21 09:27:33

标签: opengl opengl-3

我在我的应用程序中经常使用采样器,一切都运行正常。

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

我可以正常使用'glGenSamplers',不会产生错误,并且采样器ID也很好。在有效纹理上使用'glBindSampler'时,我收到'GL_INVALID_VALUE'错误。

任何人都可以为我清除这个吗?如果opengl 3.1中没有采样器,为什么我可以毫无问题地使用glGenSamplers?

我可以做些什么来提供向后兼容性?我猜我唯一的选择是每次纹理用于渲染时设置纹理参数,如果采样器不可用?

1 个答案:

答案 0 :(得分:6)

有两种可能性:

  1. 您的显卡/驱动程序支持ARB_sampler_objects,在这种情况下,支持该功能并不令人惊讶。随意使用它。
  2. 无论如何都存在这个功能。在这种情况下,听起来很奇怪,你允许使用它。
  3. 检查glGetStringi(GL_EXTENSION, ...)是否在某个索引处返回采样器对象扩展。仅允许使用实现广告为“支持”的扩展的功能 如果你发现一些功能,尽管没有支持,他们可能仍然可以工作,但他们可能不会。这是未定义的。

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

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