【问题标题】:OpenGL - Samplers in opengl 3.1?OpenGL - opengl 3.1 中的采样器?
【发布时间】:2014-01-21 09:27:32
【问题描述】:

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

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

我可以很好地使用“glGenSamplers”,不会产生错误,而且采样器 ID 似乎也很好。在有效纹理上使用“glBindSampler”时,我收到“GL_INVALID_VALUE​”错误。

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

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

【问题讨论】:

  • 采样器绑定到纹理单元,而不是纹理名称/对象。
  • 为了向后兼容,只需像 API 最初设计的那样设置每个纹理对象的采样器状态。不要在每次使用纹理时都设置它,除非您必须更改它(例如,需要与上次使用 that 纹理时不同的过滤器模式)。

标签: opengl opengl-3


【解决方案1】:

有两种可能:

  1. 您的显卡/驱动程序支持ARB_sampler_objects,在这种情况下支持该功能也就不足为奇了。随意使用。
  2. 该功能仍然存在。在这种情况下,虽然听起来很奇怪,但您不允许使用它。

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

请注意,虽然您通常希望函数来自 ARB 扩展时被命名为 glGenSamplersARB,但此处并非如此,因为这是一个“向后扩展”,提供了存在的选定功能 同样 在硬件的更高版本中无法提供该更高版本的全部功能。

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

【讨论】:

  • 谢谢。我安装了 OpenGL Extensions Viewer,它显示支持 opengl 3.2 和 3.3 的某些功能,包括采样器。
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多