public interface GLFBODrawable extends GLDrawable
GLDrawable specialization,
exposing FBObject functionality.
A GLFBODrawable is uninitialized until a GLContext is bound
and made current the first time, hence only then it's capabilities fully reflect expectations,
i.e. color, depth, stencil and MSAA bits will be valid only after the first makeCurrent() call.
On-/offscreen bits are valid after setRealized(true).
MSAA is used if requested.
Double buffering is used if requested.
In MSAA mode, it always uses the implicit 2nd framebuffer sink.
Hence double buffering is always the case w/ MSAA.
In non MSAA a second explicit framebuffer is being used.
This method allows compliance w/ the spec, i.e. read and draw framebuffer selection
and double buffer usage for e.g. glReadPixels(..).
This method also allows usage of both textures seperately.
It would be possible to implement double buffering simply using
FBObject.Colorbuffers with one framebuffer.
This would require mode selection and hence complicate the API. Besides, it would
not support differentiation of read and write framebuffer and hence not be spec compliant.
Actual swapping of the FBObject.Colorbuffers and/or framebuffer
is performed either in the context current hook
or when swapping buffers, whatever comes first.
| Modifier and Type | Interface and Description |
|---|---|
static interface |
GLFBODrawable.Resizeable
Resizeable
GLFBODrawable specialization |
| Modifier and Type | Field and Description |
|---|---|
static int |
FBOMODE_DEFAULT
Deprecated.
Use dedicated values, e.g.
FBOMODE_USE_TEXTURE. |
static int |
FBOMODE_USE_DEPTH
Deprecated.
Use
GLCapabilities.setDepthBits(int), this bit is w/o function now. |
static int |
FBOMODE_USE_TEXTURE
|
| Modifier and Type | Method and Description |
|---|---|
FBObject.Colorbuffer |
getColorbuffer(int bufferName)
Returns the named
FBObject.Colorbuffer instance. |
FBObject |
getFBObject(int bufferName)
If MSAA is being used and
GL.GL_FRONT is requested,
the internal FBObject sample sink is being returned. |
int |
getFBOMode() |
int |
getNumBuffers() |
int |
getNumSamples() |
int |
getTextureUnit() |
boolean |
isInitialized() |
void |
resetSize(GL gl)
Notify this instance about upstream size change
to reconfigure the
FBObject. |
void |
setFBOMode(int modeBits)
Set the FBO mode bits used for FBO creation.
|
int |
setNumBuffers(int bufferCount)
Sets the number of buffers (FBO) being used if using
double buffering. |
void |
setNumSamples(GL gl,
int newSamples)
Set the number of sample buffers if using MSAA
|
void |
setTextureUnit(int unit) |
createContext, getChosenGLCapabilities, getFactory, getGLProfile, getHandle, getNativeSurface, getRequestedGLCapabilities, getSurfaceHeight, getSurfaceWidth, isGLOriented, isRealized, setRealized, swapBuffers, toStringstatic final int FBOMODE_USE_TEXTURE
static final int FBOMODE_USE_DEPTH
GLCapabilities.setDepthBits(int), this bit is w/o function now.static final int FBOMODE_DEFAULT
FBOMODE_USE_TEXTURE.boolean isInitialized()
true if initialized, i.e. a GLContext is bound and made current once, otherwise false.void setFBOMode(int modeBits)
throws IllegalStateException
See FBOMODE_USE_TEXTURE.
If GLRendererQuirks.BuggyColorRenderbuffer is set,
FBOMODE_USE_TEXTURE is always added at initialization.
modeBits - custom FBO mode bits like FBOMODE_USE_TEXTURE.IllegalStateException - if already initialized, see isInitialized().int getFBOMode()
setFBOMode(int)void resetSize(GL gl) throws GLException
FBObject.gl - GL context object bound to this drawable, will be made current during operation.
A prev. current context will be make current after operation.GLException - if resize operation failedint getTextureUnit()
void setTextureUnit(int unit)
unit - the texture unit to be usedvoid setNumSamples(GL gl, int newSamples) throws GLException
gl - GL context object bound to this drawable, will be made current during operation.
A prev. current context will be make current after operation.newSamples - new sample sizeGLException - if resetting the FBO failedint getNumSamples()
int setNumBuffers(int bufferCount)
throws GLException
double buffering.
If double buffering is not chosen, this is a NOP.
Must be called before initialization, otherwise an exception is thrown.
bufferCount (see above)IllegalStateException - if already initialized, see isInitialized().GLExceptionint getNumBuffers()
double buffering,
otherwise ≥ 2, depending on setNumBuffers(int).FBObject getFBObject(int bufferName) throws IllegalArgumentException
GL.GL_FRONT is requested,
the internal FBObject sample sink is being returned.bufferName - GL.GL_FRONT and GL.GL_BACK are valid buffer namesFBObjectIllegalArgumentException - if an illegal buffer name is being usedFBObject.Colorbuffer getColorbuffer(int bufferName) throws IllegalArgumentException
FBObject.Colorbuffer instance.
If MSAA is being used, only the GL.GL_FRONT buffer is accessible
and an exception is being thrown if GL.GL_BACK is being requested.
Depending on the fbo mode the resulting FBObject.Colorbuffer
is either a FBObject.TextureAttachment if FBOMODE_USE_TEXTURE is set,
otherwise a FBObject.ColorAttachment.
See FBObject.Colorbuffer.isTextureAttachment().
bufferName - GL.GL_FRONT and GL.GL_BACK are valid buffer namesFBObject.ColorbufferIllegalArgumentException - if using MSAA and GL.GL_BACK is requested or an illegal buffer name is being usedCopyright 2010 JogAmp Community.