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 моего нового отложенного рендерера).

Другие вопросы по тегам