Interface GLFBODrawable
-
- All Superinterfaces:
GLDrawable
,NativeSurfaceHolder
- All Known Subinterfaces:
GLFBODrawable.Resizeable
,GLOffscreenAutoDrawable.FBO
public interface GLFBODrawable extends GLDrawable
Platform-independentGLDrawable
specialization, exposingFBObject
functionality.A
GLFBODrawable
is uninitialized until aGLContext
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 firstmakeCurrent()
call. On-/offscreen bits are valid aftersetRealized(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.Colorbuffer
s with oneframebuffer
. 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.Colorbuffer
s and/orframebuffer
is performed either in thecontext current hook
or whenswapping buffers
, whatever comes first.
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interface
GLFBODrawable.Resizeable
ResizeableGLFBODrawable
specialization
-
Field Summary
Fields Modifier and Type Field Description static int
FBOMODE_USE_TEXTURE
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description FBObject.Colorbuffer
getColorbuffer(int bufferName)
Returns the namedFBObject.Colorbuffer
instance.FBObject
getFBObject(int bufferName)
If MSAA is being used andGL.GL_FRONT
is requested, the internalFBObject
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 theFBObject
.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 usingdouble buffering
.void
setNumSamples(GL gl, int newSamples)
Set the number of sample buffers if using MSAAvoid
setTextureUnit(int unit)
-
Methods inherited from interface com.jogamp.opengl.GLDrawable
createContext, getChosenGLCapabilities, getFactory, getGLProfile, getHandle, getNativeSurface, getRequestedGLCapabilities, getSurfaceHeight, getSurfaceWidth, isGLOriented, isRealized, setRealized, swapBuffers, toString
-
-
-
-
Field Detail
-
FBOMODE_USE_TEXTURE
static final int FBOMODE_USE_TEXTURE
- See Also:
- Constant Field Values
-
-
Method Detail
-
isInitialized
boolean isInitialized()
- Returns:
true
if initialized, i.e. aGLContext
is bound and made current once, otherwisefalse
.
-
setFBOMode
void setFBOMode(int modeBits) throws IllegalStateException
Set the FBO mode bits used for FBO creation.Default value is:
FBOMODE_USE_TEXTURE
.If
GLRendererQuirks.BuggyColorRenderbuffer
is set,FBOMODE_USE_TEXTURE
is always added at initialization.- Parameters:
modeBits
- custom FBO mode bits likeFBOMODE_USE_TEXTURE
.- Throws:
IllegalStateException
- if already initialized, seeisInitialized()
.
-
getFBOMode
int getFBOMode()
- Returns:
- the used FBO mode bits, mutable via
setFBOMode(int)
-
resetSize
void resetSize(GL gl) throws GLException
Notify this instance about upstream size change to reconfigure theFBObject
.- Parameters:
gl
- GL context object bound to this drawable, will be made current during operation. A prev. current context will be make current after operation.- Throws:
GLException
- if resize operation failed
-
getTextureUnit
int getTextureUnit()
- Returns:
- the used texture unit
-
setTextureUnit
void setTextureUnit(int unit)
- Parameters:
unit
- the texture unit to be used
-
setNumSamples
void setNumSamples(GL gl, int newSamples) throws GLException
Set the number of sample buffers if using MSAA- Parameters:
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 size- Throws:
GLException
- if resetting the FBO failed
-
getNumSamples
int getNumSamples()
- Returns:
- the number of sample buffers if using MSAA, otherwise 0
-
setNumBuffers
int setNumBuffers(int bufferCount) throws IllegalStateException, GLException
Sets the number of buffers (FBO) being used if usingdouble buffering
.If
double buffering
is not chosen, this is a NOP.Must be called before
initialization
, otherwise an exception is thrown.- Returns:
- the new number of buffers (FBO) used, maybe different than the requested
bufferCount
(see above) - Throws:
IllegalStateException
- if already initialized, seeisInitialized()
.GLException
-
getNumBuffers
int getNumBuffers()
- Returns:
- the number of buffers (FBO) being used. 1 if not using
double buffering
, otherwise ≥ 2, depending onsetNumBuffers(int)
.
-
getFBObject
FBObject getFBObject(int bufferName) throws IllegalArgumentException
If MSAA is being used andGL.GL_FRONT
is requested, the internalFBObject
sample sink
is being returned.- Parameters:
bufferName
-GL.GL_FRONT
andGL.GL_BACK
are valid buffer names- Returns:
- the named
FBObject
- Throws:
IllegalArgumentException
- if an illegal buffer name is being used
-
getColorbuffer
FBObject.Colorbuffer getColorbuffer(int bufferName) throws IllegalArgumentException
Returns the namedFBObject.Colorbuffer
instance.If MSAA is being used, only the
GL.GL_FRONT
buffer is accessible and an exception is being thrown ifGL.GL_BACK
is being requested.Depending on the
fbo mode
the resultingFBObject.Colorbuffer
is either aFBObject.TextureAttachment
ifFBOMODE_USE_TEXTURE
is set, otherwise aFBObject.ColorAttachment
. SeeFBObject.Colorbuffer.isTextureAttachment()
.- Parameters:
bufferName
-GL.GL_FRONT
andGL.GL_BACK
are valid buffer names- Returns:
- the named
FBObject.Colorbuffer
- Throws:
IllegalArgumentException
- if using MSAA andGL.GL_BACK
is requested or an illegal buffer name is being used
-
-