我正在使用JOGL开发一个简单的 OpenGL 3D 图形引擎。现在,我已经实现了一个简单的渲染管道,它将场景渲染到 FBO 上,然后将其传递给着色器,将 FBO 的颜色纹理渲染到屏幕上,可以选择应用一些后期处理效果,例如模糊。
在不使用 FBO 的情况下,使用 JOGL 很容易实现美观的多重采样。例如,因为我在 Swing 中托管我的 GL 面板,所以我使用 aGLJPanel
并像这样创建它,以启用多重采样:
GLCapabilities caps = new GLCapabilities(null);
caps.setSampleBuffers(true);
caps.setNumSamples(8);
GLJPanel gljp = new GLJPanel(caps);
这非常简单,并且会产生漂亮的结果。但是,当必须首先将几何图形绘制到 FBO 时,这并不是很有用。最好的方法是在 FBO 上附加一个 GL_TEXTURE_2D_MULTISAMPLE,渲染场景,然后在第二遍的片段着色器中执行多重采样。
尽管 JOGL 提供了一个相当广泛的FBObject类来帮助管理 FBO,但我没有找到一种方法让它渲染到多采样纹理(它只允许使用TextureAttachment
对象,这些对象被硬编码为只能使用 TEXTURE_2D 资源)。因此,我只使用提供的 FBObject 作为骨架,但使用普通 gl.gl* 调用完成大部分工作。我知道这不是 hacky 或任何东西,也许一个“更清洁”的解决方案只是扩展TextureAttachment
和创建一个专用于多采样纹理的类。
我只是想知道 - 我是否遗漏了什么,或者 JOGL 真的不支持具有多重采样纹理的 FBO?