我在我的应用程序中经常使用采样器,一切都运行正常。
问题是,我只能在笔记本电脑上使用opengl 3.1。根据文档,采样器仅在opengl 3.3或更高版本可用,但在这里我有点困惑。
我可以正常使用'glGenSamplers',不会产生错误,并且采样器ID也很好。在有效纹理上使用'glBindSampler'时,我收到'GL_INVALID_VALUE'错误。
任何人都可以为我清除这个吗?如果opengl 3.1中没有采样器,为什么我可以毫无问题地使用glGenSamplers?
我可以做些什么来提供向后兼容性?我猜我唯一的选择是每次纹理用于渲染时设置纹理参数,如果采样器不可用?
答案 0 :(得分:6)
有两种可能性:
ARB_sampler_objects
,在这种情况下,支持该功能并不令人惊讶。随意使用它。检查glGetStringi(GL_EXTENSION, ...)
是否在某个索引处返回采样器对象扩展。仅允许使用实现广告为“支持”的扩展的功能
如果你发现一些功能,尽管没有支持,他们可能仍然可以工作,但他们可能不会。这是未定义的。
请注意,尽管您通常希望该函数在来自ARB扩展时被命名为glGenSamplersARB
,但这不是这种情况,因为这是一个“向后扩展”,它提供了所存在的选定功能<在硬件上的更高版本中,em>相同,无法提供该更高版本的完整功能。
(关于错误代码,请注意Brett Hale的评论)