我在应用程序中经常使用采样器,并且一切正常。
问题是,我只能在笔记本电脑上使用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的注释)