JOGL FBObject мультисэмплинг
Я использую JOGL для разработки простого графического движка OpenGL 3D. Прямо сейчас я реализовал простой конвейер рендеринга, который рендерит сцену в FBO, который затем передается шейдеру, который отображает цветную текстуру FBO на экране, дополнительно применяя некоторый эффект постобработки, такой как размытие.
Без использования FBO очень легко включить симпатичный мультисэмплинг с JOGL. Например, поскольку я размещаю свою панель GL внутри Swing, я использую GLJPanel
и создать его так, чтобы включить мультисэмплинг:
GLCapabilities caps = new GLCapabilities(null);
caps.setSampleBuffers(true);
caps.setNumSamples(8);
GLJPanel gljp = new GLJPanel(caps);
Это довольно просто и приводит к приятным результатам. Однако, это не очень полезно, когда геометрия должна сначала быть нарисована в FBO. Лучший способ сделать это - просто прикрепить GL_TEXTURE_2D_MULTISAMPLE к FBO, визуализировать сцену, а затем выполнить мультисэмплинг во фрагментном шейдере второго прохода.
Хотя JOGL предоставляет довольно обширный класс FBObject для помощи в управлении FBO, я не смог найти способ заставить его отображать мультисэмплированную текстуру (он позволяет работать только с TextureAttachment
объекты, которые жестко заданы для работы только с ресурсами TEXTURE_2D). Поэтому я прибег к простому использованию предоставленного FBObject в качестве каркаса, но большую часть работы выполняю с простыми вызовами gl.gl*. Я знаю, что это не случайно или что-то в этом роде, и, возможно, "более чистым" решением было бы TextureAttachment
и создать класс, посвященный многосэмплированным текстурам.
Мне просто интересно - я что-то упустил, или JOGL действительно не поддерживает FBO с многосэмплированными текстурами?
1 ответ
В случае, если кто-то ищет тот же ответ, я на самом деле просто перестал использовать FBObjects, и в настоящее время я использую старый gl.gl*
команды для управления моими кадровыми буферами (включая GBuffer моего нового отложенного рендерера).