Top Description Fields Constructors Methods
org.lwjgl.opengl

public Class EXTFramebufferMultisample

extends Object
Class Inheritance
Imports
org.lwjgl.system.*

Native bindings to the EXT_framebuffer_multisample extension.

This extension extends the EXT_framebuffer_object framework to enable multisample rendering.

The new operation RenderbufferStorageMultisampleEXT() allocates storage for a renderbuffer object that can be used as a multisample buffer. A multisample render buffer image differs from a single-sample render buffer image in that a multisample image has a number of SAMPLES that is greater than zero. No method is provided for creating multisample texture images.

All of the framebuffer-attachable images attached to a framebuffer object must have the same number of SAMPLES or else the framebuffer object is not "framebuffer complete". If a framebuffer object with multisample attachments is "framebuffer complete", then the framebuffer object behaves as if SAMPLE_BUFFERS is one.

In traditional multisample rendering, where DRAW_FRAMEBUFFER_BINDING_EXT is zero and SAMPLE_BUFFERS is one, the GL spec states that "the color sample values are resolved to a single, displayable color each time a pixel is updated." There are, however, several modern hardware implementations that do not actually resolve for each sample update, but instead postpones the resolve operation to a later time and resolve a batch of sample updates at a time. This is OK as long as the implementation behaves "as if" it had resolved a sample-at-a-time. Unfortunately, however, honoring the "as if" rule can sometimes degrade performance.

In contrast, when DRAW_FRAMEBUFFER_BINDING_EXT is an application-created framebuffer object, MULTISAMPLE is enabled, and SAMPLE_BUFFERS is one, there is no implicit per-sample-update resolve. Instead, the application explicitly controls when the resolve operation is performed. The resolve operation is affected by calling BlitFramebufferEXT (provided by the EXT_framebuffer_blit extension) where the source is a multisample application-created framebuffer object and the destination is a single-sample framebuffer object (either application-created or window-system provided).

This design for multisample resolve more closely matches current hardware, but still permits implementations which choose to resolve a single sample at a time. If hardware that implementes the multisample resolution "one sample at a time" exposes EXT_framebuffer_multisample, it could perform the implicit resolve to a driver-managed hidden surface, then read from that surface when the application calls BlitFramebufferEXT.

Another motivation for granting the application explicit control over the multisample resolve operation has to do with the flexibility afforded by EXT_framebuffer_object. Previously, a drawable (window or pbuffer) had exclusive access to all of its buffers. There was no mechanism for sharing a buffer across multiple drawables. Under EXT_framebuffer_object, however, a mechanism exists for sharing a framebuffer-attachable image across several framebuffer objects, as well as sharing an image between a framebuffer object and a texture. If we had retained the "implicit" resolve from traditional multisampled rendering, and allowed the creation of "multisample" format renderbuffers, then this type of sharing would have lead to two problematic situations:

By using the BlitFramebufferEXT from EXT_framebuffer_blit as an explicit resolve to serialize access to the multisampled contents and eliminate the implicit per-sample resolve operation, we avoid both of these problems.

Promoted to core in OpenGL 3.0.

Field Summary

Modifier and TypeField and Description
public static final int
GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT

Returned by CheckFramebufferStatusEXT.

public static final int
GL_MAX_SAMPLES_EXT

Accepted by the pname parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev.

public static final int
GL_RENDERBUFFER_SAMPLES_EXT

Accepted by the pname parameter of GetRenderbufferParameterivEXT.

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
public static native void
glRenderbufferStorageMultisampleEXT(int target, int samples, int internalformat, int width, int height)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXTback to summary
public static final int GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT

Returned by CheckFramebufferStatusEXT.

GL_MAX_SAMPLES_EXTback to summary
public static final int GL_MAX_SAMPLES_EXT

Accepted by the pname parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev.

GL_RENDERBUFFER_SAMPLES_EXTback to summary
public static final int GL_RENDERBUFFER_SAMPLES_EXT

Accepted by the pname parameter of GetRenderbufferParameterivEXT.

Constructor Detail

EXTFramebufferMultisampleback to summary
protected EXTFramebufferMultisample()

Method Detail

glRenderbufferStorageMultisampleEXTback to summary
public static native void glRenderbufferStorageMultisampleEXT(int target, int samples, int internalformat, int width, int height)