将OpenGL帧缓冲区对象与Qt(QOpenGLWidget)一起使用,绘制到帧缓冲区时如何禁用多重采样
Posted
技术标签:
【中文标题】将OpenGL帧缓冲区对象与Qt(QOpenGLWidget)一起使用,绘制到帧缓冲区时如何禁用多重采样【英文标题】:Using OpenGL frame buffer objects with Qt (QOpenGLWidget), how to disable multisampling when drawing to frame buffer 【发布时间】:2017-07-14 18:21:34 【问题描述】:正如标题所示,我使用 Qt 进行 OpenGL 绘图,并且使用 QOpenGLWidget,我可以使用 QSurfaceFormat 的 setSamples() 函数为主屏幕缓冲区打开多重采样。这工作正常,看起来很不错。但是,我还在后台绘制到自定义帧缓冲区(使用 glGenFramebuffers、glBindFramebuffer() 等),我不想要抗锯齿(因为它使用颜色编码进行选择以进行绘制),但似乎以某种方式从主 QOpenGLWidget 继承多重采样。关于如何禁用它,在主窗口中使用多重采样但不在我自己的自定义屏幕外帧缓冲区中的任何想法?
【问题讨论】:
【参考方案1】:使用glEnable/Disable(GL_MULTISAMPLE)
启用或禁用多重采样渲染。此状态不是帧缓冲区状态的一部分;这是常规的上下文状态。因此,即使您切换帧缓冲区,该状态也不会受到影响。
此外,如果您附加的图像没有多个样本,则多样本启用/禁用开关没有任何意义。如果您正在为非多重采样渲染创建图像,则没有理由使用多个样本创建它们。所以创建单样本图像。
【讨论】:
【参考方案2】:好吧,在我的 OpenGL 代码中找不到禁用或避免它的方法,但是如果我将默认格式设置为 0 个样本,并且 QOpenGLWidget 的格式设置为 2/4/8/whatever,那么帧缓冲区对象在创建时不会使用抗锯齿。
【讨论】:
以上是关于将OpenGL帧缓冲区对象与Qt(QOpenGLWidget)一起使用,绘制到帧缓冲区时如何禁用多重采样的主要内容,如果未能解决你的问题,请参考以下文章