com.threed.jpct
Class FrameBuffer
java.lang.Object
com.threed.jpct.FrameBuffer
- All Implemented Interfaces:
- java.io.Serializable
- public class FrameBuffer
- extends java.lang.Object
- implements java.io.Serializable
The FrameBuffer class provides a buffer into which jPCT renders the scene.
The result is basically an Image which could be displayed or modified even
further using some post-processing. The FrameBuffer's constructor
automatically distinguishes between JAVA2 and earlier versions. JAVA2 and
higher will use a BufferedImage as FrameBuffer while JAVA1.1 will use a
MemoryImageSource. When using support for OpenGL hardware rendering only, the
image is not rendered into the FrameBuffer's internal pixel-array but
directly into the video-RAM of the graphics card. Therefor, some methods
within this class will execute quite slow if they have to access the VRAM.
This will be mentioned in these methods.
- See Also:
- Serialized Form
Field Summary |
static int |
BLITTING_TARGET_BACK
Blitting is done into the back buffer. |
static int |
BLITTING_TARGET_FRONT
Blitting is done into the front buffer. |
static boolean |
BOUNDINGBOX_NOT_USED
Don't use a 2D bounding box. |
static boolean |
BOUNDINGBOX_USED
Use a 2D bounding box for speeding up blitting (only useful when the
rendered scene doesn't cover the whole framebuffer) |
static int |
BUFFER_ACCESS_COMBINED
Access the framebuffer in one way (default)... |
static int |
BUFFER_ACCESS_SPLITTED
Access the framebuffer in another way)... |
static int |
BUFFEREDIMAGE
The type of this FrameBuffer is a BufferedImage (JAVA2) |
static int |
MEMORYIMAGESOURCE
The type of this FrameBuffer is a MemoryImageSource (JAVA1.1) |
static boolean |
OPAQUE_BLITTING
2D texture-blitting into the framebuffer is done by copying the source
1-to-1 into the destination bitmap |
static int |
SAMPLINGMODE_GL_AA_2X
Use 2x anti aliasing when using the OpenGL renderer. |
static int |
SAMPLINGMODE_GL_AA_4X
Use 4x anti aliasing when using the OpenGL renderer. |
static int |
SAMPLINGMODE_HARDWARE_ONLY
A special sampling mode that indicates, that no software rendering will
be used on this framebuffer. |
static int |
SAMPLINGMODE_NORMAL
Normal sampling mode (1-to-1) |
static int |
SAMPLINGMODE_OGSS
Use 2x2 oriented grid oversampling (FSAA using supersampling) for the
software renderer. |
static int |
SAMPLINGMODE_OGSS_FAST
Use 1.5x1.5 oriented grid oversampling (FSAA using supersampling) for the
software renderer. |
static int |
SAMPLINGMODE_OGUS
Use 0.5x0.5 oriented grid undersampling (to upsample an image rendered at
a lower resolution) |
static java.lang.String |
SUPPORT_FOR_RGB_SCALING
Use this to check if all the currently enabled renderers support
RGB-scaling |
static java.lang.String |
SUPPORT_FOR_SHADOW_MAPPING
Use this to check if all the currently enabled renderers support shadow
mapping |
static java.lang.Object |
SYNCHRONIZER
An Object to which jPCT synchronizes all critical calls to Display, Mouse
and Keyboard from LWJGL to. |
static boolean |
TRANSPARENT_BLITTING
2D texture-blitting into the framebuffer is done by copying the source
into the destination bitmap only at places where the sources bitmap has
none-zero color-values. |
Constructor Summary |
FrameBuffer(int x,
int y,
int oversample)
Creates a new framebuffer with a width of x and a height of y using the
given samplingmode. |
Method Summary |
void |
addPostProcessor(IPostProcessor proc)
Adds an IPostProcessor to run a post processing on the framebuffer. |
void |
blit(int[] src,
int srcWidth,
int srcHeight,
float srcX,
float srcY,
float destX,
float destY,
float width,
float height,
boolean transparent)
Copies a part of a bitmap (taken from an int[] containing pixels in
RGB-format and with no alpha) into the framebuffer. |
void |
blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float width,
float height,
boolean transparent)
Copies a part of a bitmap (taken from a Texture in this case) into the
framebuffer. |
void |
blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float sourceWidth,
float sourceHeight,
float destWidth,
float destHeight,
int transValue,
boolean additive)
Special version of blit() that allows for scaling, i.e. it doesn't make
1-to-1 copies but can up- or down-scale. |
void |
blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float sourceWidth,
float sourceHeight,
float destWidth,
float destHeight,
int transValue,
boolean additive,
java.awt.Color addColor)
Special version of blit() that allows for scaling, i.e. it doesn't make
1-to-1 copies but can up- or down-scale. |
void |
blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float sourceWidth,
float sourceHeight,
float destWidth,
float destHeight,
int transValue,
boolean additive,
RGBColor addColor)
Method to maintain compatibility with jPCT-AE. |
void |
clear()
Clears the framebuffer, the optiZ-buffer, the hsr-buffer and the regular
z-buffer if required. |
void |
clear(java.awt.Color col)
Clears the framebuffer, the optiZ-buffer, the hsr-buffer and the regular
z-buffer if required. |
void |
clear(int rgb)
The same as clear(<Color>) but with an int-value instead of a color
instance. |
void |
clearColorBufferOnly(java.awt.Color col)
Clears only the color bufferr, not the depth buffer. |
void |
clearZBufferOnly()
Clears only the ZBuffer, not the color buffer. |
void |
disableRenderer(int renderer)
Disables a renderer for this framebuffer. |
void |
display()
The same as displayGLOnly. |
void |
display(java.awt.Graphics g)
Displays the output Image onto the component with the given Graphics
context. |
void |
display(java.awt.Graphics g,
int yOffset)
Displays the output Image onto the component with the given Graphics
context. |
void |
display(java.awt.Graphics g,
int xOffset,
int yOffset)
Displays the output Image onto the component with the given Graphics
context. |
void |
displayGLOnly()
Displays the output image produced by OpenGL compatible hardware if
OpenGL rendering is in use. |
void |
dispose()
Has to be called before this FrameBuffer won't be used anymore to do some
clean up work. |
java.awt.Canvas |
enableGLCanvasRenderer()
Enables an OpenGL renderer that will render into a canvas. |
void |
enableRenderer(int renderer)
Enables a renderer (OpenGL or software) in OpenGL-lighting mode.
|
void |
enableRenderer(int renderer,
int mode)
Enables a renderer (OpenGL or software) in the desired mode. |
void |
flush()
Does nothing. |
void |
flushBlittingPipeline()
Flushes the blitting pipeline by executing the buffered blits. |
java.awt.Graphics |
getGraphics()
Returns the Graphics object of the output buffer to allow the use of
JAVA's standard graphic methods on the rendered image (like drawString).
|
int |
getHeight()
The same as getOutputHeight(). |
java.lang.Long |
getID()
Returns a unique ID for this FrameBuffer. |
java.lang.Object |
getLock()
Returns the lock object for the frame buffer. |
int |
getMaxTextureSize()
Gets the maximum texture size that the current renderers support. |
float |
getMiddleX()
Returns the x-coord of the midpoint of the framebuffer. |
float |
getMiddleY()
Returns the y-coord of the midpoint of the framebuffer. |
java.awt.Image |
getOutputBuffer()
Returns the Image that represents the output-buffer of the framebuffer.
|
int |
getOutputHeight()
Returns the height of the framebuffer. |
int |
getOutputWidth()
Returns the width of the framebuffer. |
int[] |
getPixels()
Returns the raw pixel-data. |
int |
getSamplingMode()
Returns the used sampling mode for this framebuffer. |
int |
getType()
Returns the type of this FrameBuffer. |
static VideoMode[] |
getVideoModes(int renderer)
Static method to get the video modes a renderer (i.e. the hardware it's
running on) supports. |
int |
getWidth()
The same as getOutputWidth(). |
boolean |
isInitialized()
Checks if the FrameBuffer and all its enabled renderers have been
initialized correctly. |
void |
optimizeBufferAccess()
This method tries to pick the most optimal buffer access mode for the
system jPCT is currently running on. |
void |
refresh()
Forces the framebuffer to update its content with what's in the
pixels-array. |
void |
removeAllPostProcessors()
Removes all post processors from the framebuffer. |
void |
removeClippingPlane(int number)
Removes an additional clipping plane. |
void |
removePostProcessor(IPostProcessor proc)
Removes a post processor from the framebuffer. |
void |
removeRenderTarget()
Removes the render target from the framebuffer. |
void |
resize(int width,
int height)
Does a resize of the FrameBuffer in case that the output window's size
has changed. |
void |
runPostProcessors()
Runs all post processors that have been added to this framebuffer. |
void |
setBlittingShader(GLSLShader shader)
Sets a shader that should be used for blitting instead of the fixed
function pipeline. |
void |
setBlittingTarget(int target)
Sets the blitting target to either the front (default) or the back
buffer. |
void |
setBoundingBoxMode(boolean bmode)
Sets the bounding box mode for the framebuffer. |
void |
setBufferAccess(int mode)
When using the software renderer, the framebuffer can be accessed in
different ways. |
void |
setClippingPlane(int number,
Plane plane)
Sets an additional clipping plane. |
void |
setPaintListener(IPaintListener listener)
Adds a listener to all currently used renderers. |
void |
setPaintListenerState(boolean isActive)
Sets the state of the paint listener. |
void |
setRenderTarget(int texID)
Sets the render target of the framebuffer to a texture. |
void |
setRenderTarget(int texID,
int left,
int top,
int right,
int bottom,
boolean clearAll)
Sets the render target of the framebuffer to a texture. |
void |
setRenderTarget(Texture tex)
Sets the render target of the framebuffer to a texture. |
void |
setRenderTarget(Texture tex,
int left,
int top,
int right,
int bottom,
boolean clearAll)
Sets the render target of the framebuffer to a texture. |
void |
setVirtualDimensions(int width,
int height)
This has a meaning only if a render target has been set. |
boolean |
supports(java.lang.String feature)
Checks if a feature is supported by all the renderers of this
framebuffer. |
void |
sync()
Does nothing. |
void |
update()
Updates the output buffer of the framebuffer with the new data from the
backbuffer. |
boolean |
usesRenderer(int renderer)
Tests if the given renderer is used by this framebuffer. |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
MEMORYIMAGESOURCE
public static final int MEMORYIMAGESOURCE
- The type of this FrameBuffer is a MemoryImageSource (JAVA1.1)
- See Also:
- Constant Field Values
BUFFEREDIMAGE
public static final int BUFFEREDIMAGE
- The type of this FrameBuffer is a BufferedImage (JAVA2)
- See Also:
- Constant Field Values
SAMPLINGMODE_GL_AA_4X
public static final int SAMPLINGMODE_GL_AA_4X
- Use 4x anti aliasing when using the OpenGL renderer. Don't use this on a
framebuffer that's supposed to be used by the software renderer.
- See Also:
- Constant Field Values
SAMPLINGMODE_GL_AA_2X
public static final int SAMPLINGMODE_GL_AA_2X
- Use 2x anti aliasing when using the OpenGL renderer. Don't use this on a
framebuffer that's supposed to be used by the software renderer.
- See Also:
- Constant Field Values
SAMPLINGMODE_OGSS
public static final int SAMPLINGMODE_OGSS
- Use 2x2 oriented grid oversampling (FSAA using supersampling) for the
software renderer. This mode shouldn't be used for the OpenGL renderer.
- See Also:
- Constant Field Values
SAMPLINGMODE_OGSS_FAST
public static final int SAMPLINGMODE_OGSS_FAST
- Use 1.5x1.5 oriented grid oversampling (FSAA using supersampling) for the
software renderer. This mode shouldn't be used for the OpenGL renderer.
This mode is faster then "normal" 2x2 oversampling, but image quality is
a bit lower.
- See Also:
- Constant Field Values
SAMPLINGMODE_OGUS
public static final int SAMPLINGMODE_OGUS
- Use 0.5x0.5 oriented grid undersampling (to upsample an image rendered at
a lower resolution)
- See Also:
- Constant Field Values
SAMPLINGMODE_NORMAL
public static final int SAMPLINGMODE_NORMAL
- Normal sampling mode (1-to-1)
- See Also:
- Constant Field Values
SAMPLINGMODE_HARDWARE_ONLY
public static final int SAMPLINGMODE_HARDWARE_ONLY
- A special sampling mode that indicates, that no software rendering will
be used on this framebuffer. OpenGL support will work with any other
sampling mode though (but the sampling modes may not affect the OpenGL
output).
- See Also:
- Constant Field Values
BOUNDINGBOX_USED
public static final boolean BOUNDINGBOX_USED
- Use a 2D bounding box for speeding up blitting (only useful when the
rendered scene doesn't cover the whole framebuffer)
- See Also:
- Constant Field Values
BOUNDINGBOX_NOT_USED
public static final boolean BOUNDINGBOX_NOT_USED
- Don't use a 2D bounding box. This mode should be used for indoor
rendering.
- See Also:
- Constant Field Values
OPAQUE_BLITTING
public static final boolean OPAQUE_BLITTING
- 2D texture-blitting into the framebuffer is done by copying the source
1-to-1 into the destination bitmap
- See Also:
- Constant Field Values
TRANSPARENT_BLITTING
public static final boolean TRANSPARENT_BLITTING
- 2D texture-blitting into the framebuffer is done by copying the source
into the destination bitmap only at places where the sources bitmap has
none-zero color-values.
- See Also:
- Constant Field Values
SUPPORT_FOR_RGB_SCALING
public static final java.lang.String SUPPORT_FOR_RGB_SCALING
- Use this to check if all the currently enabled renderers support
RGB-scaling
- See Also:
Lights.setRGBScale(int)
,
supports(java.lang.String)
,
Constant Field Values
SUPPORT_FOR_SHADOW_MAPPING
public static final java.lang.String SUPPORT_FOR_SHADOW_MAPPING
- Use this to check if all the currently enabled renderers support shadow
mapping
- See Also:
supports(java.lang.String)
,
Constant Field Values
BUFFER_ACCESS_COMBINED
public static final int BUFFER_ACCESS_COMBINED
- Access the framebuffer in one way (default)...
- See Also:
setBufferAccess(int)
,
Constant Field Values
BUFFER_ACCESS_SPLITTED
public static final int BUFFER_ACCESS_SPLITTED
- Access the framebuffer in another way)...
- See Also:
setBufferAccess(int)
,
Constant Field Values
BLITTING_TARGET_FRONT
public static final int BLITTING_TARGET_FRONT
- Blitting is done into the front buffer. This is default
- See Also:
- Constant Field Values
BLITTING_TARGET_BACK
public static final int BLITTING_TARGET_BACK
- Blitting is done into the back buffer. This only affects blitting when
the software renderer is used with over-/undersampling. For any other
configuration, is the same as BLITTING_TARGET_FRONT.
- See Also:
- Constant Field Values
SYNCHRONIZER
public static final java.lang.Object SYNCHRONIZER
- An Object to which jPCT synchronizes all critical calls to Display, Mouse
and Keyboard from LWJGL to. These classes are not thread safe, therefor
it's required to avoid creating the Keyboard while creating the display
(for example). If you ever do such things from other threads or are using
jPCT's AWTGLRenderer or its build-in multithreading support, make sure to
synchronize to this object when you are calling critical Keyboard-,
Mouse- or Diplay-methods.
Of course, all this only applies to the hardware renderers.
FrameBuffer
public FrameBuffer(int x,
int y,
int oversample)
- Creates a new framebuffer with a width of x and a height of y using the
given samplingmode. For software rendering, the framebuffer can be of any
size. For OpenGL, a size supported by the OpenGL compatible hardware one
is using is required.
- Parameters:
x
- the width of the framebuffery
- the height of the framebufferoversample
- the samplingmode- See Also:
SAMPLINGMODE_OGSS
,
SAMPLINGMODE_OGSS_FAST
,
SAMPLINGMODE_OGUS
,
SAMPLINGMODE_NORMAL
,
SAMPLINGMODE_HARDWARE_ONLY
,
SAMPLINGMODE_GL_AA_2X
,
SAMPLINGMODE_GL_AA_4X
,
getVideoModes(int)
getID
public java.lang.Long getID()
- Returns a unique ID for this FrameBuffer.
- Returns:
- Long the ID
getVideoModes
public static VideoMode[] getVideoModes(int renderer)
- Static method to get the video modes a renderer (i.e. the hardware it's
running on) supports. This is useful for initializing the OpenGL renderer
and the FrameBuffer. The z-buffer depth of the returned modes is taken
from the z-buffer setting in Config and NOT from the driver of the video
card, because the used OpenGL binding doesn't return this value
anymore...so it's basically 'guessing' here... The software renderer
doesn't have video modes, so it will return an empty array.
- Parameters:
renderer
- the renderer (only IRenderer.RENDERER_OPENGL makes sense at
the moment)
- Returns:
- the supported video modes
- See Also:
IRenderer
,
Config.glColorDepth
,
Config.glZBufferDepth
,
Config.glRefresh
isInitialized
public boolean isInitialized()
- Checks if the FrameBuffer and all its enabled renderers have been
initialized correctly. This is useful to check if OpenGL support has been
enabled succesfully and if the desired videomode has been set.
When using the AWTGLRenderer, this method will return false until the
first drawing (attempt) took place.
- Returns:
- true, if the FrameBuffer is fine. Otherwise false.
setBlittingTarget
public void setBlittingTarget(int target)
- Sets the blitting target to either the front (default) or the back
buffer. This is required to allow blitting into the background of an
over- or undersampled frame buffer. Any other configuration doesn't need
this.
- Parameters:
target
- the blitting target- See Also:
BLITTING_TARGET_FRONT
,
BLITTING_TARGET_BACK
setBlittingShader
public void setBlittingShader(GLSLShader shader)
- Sets a shader that should be used for blitting instead of the fixed
function pipeline.
- Parameters:
shader
- the shader, default is null
enableRenderer
public void enableRenderer(int renderer)
- Enables a renderer (OpenGL or software) in OpenGL-lighting mode.
OpenGL-lighting mode is the recommended mode for the software as well as
for the hardware renderer. However, jPCT constructs every new FrameBuffer
as software/legacy for compatibility reasons. It is possible to use the
software renderer as well as the OpenGL renderer on a single framebuffer
at the same time, but it's not advised to do so, because this will
disable some optimizations that are else made in case OpenGL is used
(like T&L optimizations and triangle strips). To enable OpenGL without
supporting the software renderer, the software renderer has to be
disabled after enabling OpenGL.
Important: NEVER change the renderer from outside the thread that is
doing the rendering if you intend to use the OpenGL renderer, because
this will cause your application to crash. This is a "feature" of LWJGL,
so there's nothing jPCT can do about it.
- Parameters:
renderer
- the renderer that should be used to render this framebuffer- See Also:
disableRenderer(int)
,
enableRenderer(int, int)
,
IRenderer
enableGLCanvasRenderer
public java.awt.Canvas enableGLCanvasRenderer()
- Enables an OpenGL renderer that will render into a canvas. For
compatibility reasons, jPCT constructs every new FrameBuffer as
software/legacy. It is possible to use the software renderer as well as
the OpenGL renderer on a single framebuffer at the same time, but it's
not advised to do so, because this will disable some optimizations that
are else made in case OpenGL is used (like T&L optimizations and triangle
strips). To enable OpenGL without supporting the software renderer, the
software renderer has to be disabled after enabling OpenGL.
Using this renderer affects the behaviour of getPixels() and supports(),
which will only return after the Canvas has been repainted. If this never
happens for whatever reason, they'll never return!
- Returns:
- the Canvas
- See Also:
disableRenderer(int)
,
enableRenderer(int)
,
enableGLCanvasRenderer()
,
AWTGLRenderer
enableRenderer
public void enableRenderer(int renderer,
int mode)
- Enables a renderer (OpenGL or software) in the desired mode. For
compatibility reasons, jPCT constructs every new FrameBuffer as
software/opengl-alike. It is possible to use the software renderer as
well as the OpenGL renderer on a single framebuffer at the same time, but
it's not advised to do so, because this will disable some optimizations
that are else made in case OpenGL is used (like T&L optimizations and
triangle strips). To enable OpenGL without supporting the software
renderer, the software renderer has to be disabled after enabling OpenGL.
Important: NEVER change the renderer from outside the thread that is
doing the rendering if you intend to use the OpenGL renderer, because
this will cause your application to crash. This is a "feature" of LWJGL,
so there's nothing jPCT can do about it.
- Parameters:
renderer
- the renderer that should be used to render this framebuffermode
- the mode the renderer should use- See Also:
disableRenderer(int)
,
enableRenderer(int)
,
IRenderer
setRenderTarget
public void setRenderTarget(int texID)
- Sets the render target of the framebuffer to a texture. From here on, all
rendering is done into that texture instead of the actual framebuffer.
The texture has to be smaller or equal to the framebuffer, when FBO are
not used/available. Rendering into a texture can be slow on some hardware
like Intel onboard chipsets.
While the software renderer do support render targets, it can't run a
post processor on them.
Make sure that the texture you are using as render target doesn't use mip
mapping.
While possible, it's not recommended to blit into a render target.
- Parameters:
texID
- the ID of the texture to render into.- See Also:
Config.glUseFBO
,
Config.glFlipRenderTargets
setRenderTarget
public void setRenderTarget(int texID,
int left,
int top,
int right,
int bottom,
boolean clearAll)
- Sets the render target of the framebuffer to a texture. From here on, all
rendering is done into that texture instead of the actual framebuffer.
The texture has to be smaller or equal to the framebuffer, when FBO are
not used/available. Rendering into a texture can be slow on some hardware
like Intel onboard chipsets.
This is a special purpose version of this method that allows to define a
border that isn't affected by the rendering. The software renderer
doesn't support this border and ignores it.
Make sure that the texture you are using as render target doesn't use mip
mapping.
While possible, it's not recommended to blit into a render target.
- Parameters:
texID
- the ID of the texture to render into.left
- the width of the left bordertop
- the width of the upper borderright
- the width of the right borderbottom
- the width of the lower borderclearAll
- if true, the border won't affect the clearing of texture. If
set to false, it will.- See Also:
Config.glUseFBO
,
Config.glFlipRenderTargets
setRenderTarget
public void setRenderTarget(Texture tex)
- Sets the render target of the framebuffer to a texture. From here on, all
rendering is done into that texture instead of the actual framebuffer.
The texture has to be smaller or equal to the framebuffer, when FBO are
not used/available. Rendering into a texture can be slow on some hardware
like Intel onboard chipsets. While the software renderer do support
render targets, it can't run a post processor on them.
Make sure that the texture you are using as render target doesn't use mip
mapping.
While possible, it's not recommended to blit into a render target.
- Parameters:
tex
- the texture to render into- See Also:
Config.glUseFBO
,
Config.glFlipRenderTargets
setRenderTarget
public void setRenderTarget(Texture tex,
int left,
int top,
int right,
int bottom,
boolean clearAll)
- Sets the render target of the framebuffer to a texture. From here on, all
rendering is done into that texture instead of the actual framebuffer.
The texture has to be smaller or equal to the framebuffer, when FBO are
not used/available. Rendering into a texture can be slow on some hardware
like Intel onboard chipsets. While the software renderer do support
render targets, it can't run a post processor on them. A texture assigned
as a render target will automatically treated as non-mipmapped. This is a
special purpose version of this method that allows to define a border
that isn't affected by the rendering. The software renderer doesn't
support this border and ignores it.
While possible, it's not recommended to blit into a render target.
- Parameters:
tex
- the texture to render intoleft
- the width of the left bordertop
- the width of the upper borderright
- the width of the right borderbottom
- the width of the lower borderclearAll
- if true, the border won't affect the clearing of texture. If
set to false, it will.- See Also:
Config.glUseFBO
,
Config.glFlipRenderTargets
removeRenderTarget
public void removeRenderTarget()
- Removes the render target from the framebuffer. After this, all rendering
is done into the framebuffer again. If no render target has been set,
this method does nothing.
setVirtualDimensions
public void setVirtualDimensions(int width,
int height)
- This has a meaning only if a render target has been set. By default the
fov calculations will use the render target's dimensions. With this, you
can set some other dimensions.
- Parameters:
width
- the virtual width of the render targetheight
- the virtual height of the render target
addPostProcessor
public void addPostProcessor(IPostProcessor proc)
- Adds an IPostProcessor to run a post processing on the framebuffer. This
isn't done automatically but has to be triggered by the application by
calling runPostProcessors() on this framebuffer. Enabling or disabling
renderers on this framebuffer causes all post processors to be disposed
and then removed from this framebuffer.
- Parameters:
proc
- the post processor- See Also:
runPostProcessors()
,
IPostProcessor
removePostProcessor
public void removePostProcessor(IPostProcessor proc)
- Removes a post processor from the framebuffer. The processor will be
disposed and then removed.
- Parameters:
proc
- The post processor to be removed- See Also:
IPostProcessor
removeAllPostProcessors
public void removeAllPostProcessors()
- Removes all post processors from the framebuffer. The processors will be
disposed and then removed.
- See Also:
IPostProcessor
runPostProcessors
public void runPostProcessors()
- Runs all post processors that have been added to this framebuffer. A post
processor is an implementation of the IPostProcessor interface and may or
may not support hardware and software renderer. The processing is done on
the framebuffer's back buffer in its current state, i.e. if you run it
before blitting, the blitting won't be affected. If you run it
afterwards, it will.
- See Also:
IPostProcessor
setPaintListener
public void setPaintListener(IPaintListener listener)
- Adds a listener to all currently used renderers. The listener will be
notified before the renderer starts to paint polygons and after it has
finished.
- Parameters:
listener
- IPaintListener the listener or null to clear it
setPaintListenerState
public void setPaintListenerState(boolean isActive)
- Sets the state of the paint listener. If set to false, it won't be called
even if assigned. The setting applies to all paint listeners on the
currently acitve renderers. If you change a renderer, the new one will
start with an active state regardless of this setting.
- Parameters:
isActive
- is it active or sleeping?
disableRenderer
public void disableRenderer(int renderer)
- Disables a renderer for this framebuffer. Disabling all renderers doesn't
make much sense, so usually one will disable the renderer that is not in
use at the moment (software if OpenGL is used and vice versa). After
enabling OpenGL, it is advised to disable the software renderer. While it
is possible to enable both, the software renderer will disable some
optimization that may be used in case of "OpenGL only" (like T&L
optimizations and triangle strips).
- Parameters:
renderer
- the renderer- See Also:
IRenderer
dispose
public void dispose()
- Has to be called before this FrameBuffer won't be used anymore to do some
clean up work. For example, if you are reusing a buffer variable to
assign a new FrameBuffer for it, dispose the former one before doing so.
Java2 would allow to use a weak reference to handle this better, but jPCT
is 1.1 compatible, so...
usesRenderer
public boolean usesRenderer(int renderer)
- Tests if the given renderer is used by this framebuffer.
- Parameters:
renderer
- the renderer to test
- Returns:
- true if it's in use, otherwise false
- See Also:
IRenderer
getMaxTextureSize
public int getMaxTextureSize()
- Gets the maximum texture size that the current renderers support.
- Returns:
- the size
supports
public boolean supports(java.lang.String feature)
- Checks if a feature is supported by all the renderers of this
framebuffer.
- Parameters:
feature
- the feature that may be supported
- Returns:
- is the feature supported
- See Also:
SUPPORT_FOR_RGB_SCALING
,
SUPPORT_FOR_SHADOW_MAPPING
getSamplingMode
public int getSamplingMode()
- Returns the used sampling mode for this framebuffer.
- Returns:
- the sampling mode
- See Also:
SAMPLINGMODE_NORMAL
,
SAMPLINGMODE_OGSS
,
SAMPLINGMODE_OGSS_FAST
,
SAMPLINGMODE_OGUS
,
SAMPLINGMODE_HARDWARE_ONLY
,
SAMPLINGMODE_GL_AA_2X
,
SAMPLINGMODE_GL_AA_4X
getOutputWidth
public int getOutputWidth()
- Returns the width of the framebuffer. This method is called
getOutputWidth(), because it returns the actual width used for output
which is not always the internally used width.
- Returns:
- the width of the framebuffer
getOutputHeight
public int getOutputHeight()
- Returns the height of the framebuffer. This method is called
getOutputHeight(), because it returns the height actual used for output
which is not always the internally used height.
- Returns:
- the height of the framebuffer
getHeight
public int getHeight()
- The same as getOutputHeight(). Mainly here to increase compatibility with
jPCT-AE.
- Returns:
- the height
getWidth
public int getWidth()
- The same as getOutputWidth(). Mainly here to increase compatibility with
jPCT-AE.
- Returns:
- the width
getMiddleX
public float getMiddleX()
- Returns the x-coord of the midpoint of the framebuffer. This value
represents the internally used width/2.
- Returns:
- the x-coord
getMiddleY
public float getMiddleY()
- Returns the y-coord of the midpoint of the framebuffer. This value
represents the internally used height/2.
- Returns:
- the y-coord
setBoundingBoxMode
public void setBoundingBoxMode(boolean bmode)
- Sets the bounding box mode for the framebuffer. This has nothing to do
with 3d bounding boxes. The framebuffer's bounding box may help to speed
up blitting when parts of the framebuffer remain empty in a scene. It's
rather useless when doing indoor rendering. Default is BOUNDINGBOX_USED.
The bounding box is (apart from this setting) only used if the
framebuffer works with an MemoryImageSource. If it uses BufferedImage
(for JAVA2 or higher) and/or OpenGL support, the bounding box won't be
used at all.
- Parameters:
bmode
- the bounding box mode- See Also:
BOUNDINGBOX_NOT_USED
,
BOUNDINGBOX_USED
clear
public void clear()
- Clears the framebuffer, the optiZ-buffer, the hsr-buffer and the regular
z-buffer if required. Depending on the used configuration, not all of
these steps are required.
clearZBufferOnly
public void clearZBufferOnly()
- Clears only the ZBuffer, not the color buffer. Can be useful for special
effects like rendering two worlds into one frame buffer.
clearColorBufferOnly
public void clearColorBufferOnly(java.awt.Color col)
- Clears only the color bufferr, not the depth buffer.
- Parameters:
col
- the fill color
clear
public void clear(java.awt.Color col)
- Clears the framebuffer, the optiZ-buffer, the hsr-buffer and the regular
z-buffer if required. Depending on the used configuration, not all of
these steps are required. Addionally, the framebuffer is filled with the
given color.
- Parameters:
col
- the color the framebuffer is filled with
clear
public void clear(int rgb)
- The same as clear(<Color>) but with an int-value instead of a color
instance.
- Parameters:
rgb
- the color the framebuffer is filled with
update
public void update()
- Updates the output buffer of the framebuffer with the new data from the
backbuffer. This method should be called before actually displaying the
rendered image to make sure that the latest changes to the image are
recognized. Depending on the configuration, some post-processing may take
place here too.
setBufferAccess
public void setBufferAccess(int mode)
- When using the software renderer, the framebuffer can be accessed in
different ways. One is faster on one cpu/VM while the other may be faster
on another one. You may want to play around with this setting to get the
best possible performance on your system.
- Parameters:
mode
- the buffer access mode- See Also:
optimizeBufferAccess()
,
BUFFER_ACCESS_COMBINED
,
BUFFER_ACCESS_SPLITTED
optimizeBufferAccess
public void optimizeBufferAccess()
- This method tries to pick the most optimal buffer access mode for the
system jPCT is currently running on. This method will run for a second
and sets the buffer mode to the fastest possible based on that
measurement.
There are two problems with this: Hotspot may interfere and renders the
measurement useless and some VMs on some machines (like the 1.4.2 on a
P4HT) will start fast with method A but performance will drop after some
seconds (for whatever reason) and suddenly, method B would be (much!)
faster. This bug in some VMs (i assume that it is one) is the reason why
this method exists at all.
This method is useful for software rendering only.
- See Also:
setBufferAccess(int)
getOutputBuffer
public java.awt.Image getOutputBuffer()
- Returns the Image that represents the output-buffer of the framebuffer.
This could be used for further processing, displaying etc. It is meant as
an alternative to display(). One don't have to get this image from the
framebuffer every frame as it remains the same instance as long as the
framebuffer instance exists.
When using OpenGL only, this method is very slow because it requires
reads from VRAM. When using OpenGL and software rendering together (this
is not advised, but it's possible), this method returns the software
rendered buffer as if OpenGL wouldn't be used.
- Returns:
- the output image
- See Also:
display(java.awt.Graphics g)
getPixels
public int[] getPixels()
- Returns the raw pixel-data. This can be useful, if one wants to copy
parts of the FrameBuffer into an Image out of jPCT's focus. getPixels()
should be called after calling update(), because otherwise it is not
guaranteed that the returned array contains the most current pixels. If
you want to modify this array directly in your code (to apply some
post-processing for example) keep two things in mind: This is ugly (but
who cares...) and make sure to call refresh() afterwards. The returned
array contains the pixel-data in RGB-format and with no alpha
information.
When using OpenGL only, this method is very slow, because it has to read
all the pixels out of the VRAM and write them into the FrameBuffer's
internal pixel-buffer. When using OpenGL and software rendering together
(this is not advised, but it's possible), this method returns the
software rendered pixel-data as if OpenGL wouldn't be used.
- Returns:
- the pixels-array
- See Also:
update()
,
refresh()
,
#blit(com.threed.jpct.Texture src, int srcX, int srcY, int destX,
int destY, int width, int height, boolean transparent)
,
#blit(int[] src, int srcWidth, int srcHeight, int srcX, int srcY,
int destX, int destY, int width, int height, boolean transparent)
refresh
public void refresh()
- Forces the framebuffer to update its content with what's in the
pixels-array. This can be used to modify the framebuffer's content "from
the outside". If you are not modifying the pixels-array in your code,
there's no need to call this method.
Currently, this method works only when software rendering is being used.
- See Also:
getPixels()
resize
public void resize(int width,
int height)
- Does a resize of the FrameBuffer in case that the output window's size
has changed. This isn't supported by the software renderer ATM and will
be silently ignored if called for it.
- Parameters:
width
- the new widthheight
- the new height
getLock
public java.lang.Object getLock()
- Returns the lock object for the frame buffer. When using a multi threaded
renderer (like the AWTGLRenderer) in combination with dynamically
compiled objects, it is advised to synchronize changes to the object's
mesh data and/or texture data to this object to avoid to render inbetween
states of the changes.
If this is called on a frame buffer using a single threaded renderer, it
will return an Object too and you can still synchronize on it...just no
other code inside jPCT will.
- Returns:
- the lock object
getGraphics
public java.awt.Graphics getGraphics()
- Returns the Graphics object of the output buffer to allow the use of
JAVA's standard graphic methods on the rendered image (like drawString).
This works only for BufferedImage (using JAVA1.2 or higher) but not for
the MemoryImageSource that is used for JAVA1.1. In this case, null will
be returned. When using OpenGL support, this value is rather meaningless
(but still valid).
- Returns:
- the Graphics object (or null for MemoryImageSource)
getType
public int getType()
- Returns the type of this FrameBuffer. This value doesn't reflect the fact
that OpenGL is used or not.
- Returns:
- the type
- See Also:
MEMORYIMAGESOURCE
,
BUFFEREDIMAGE
blit
public void blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float width,
float height,
boolean transparent)
- Copies a part of a bitmap (taken from a Texture in this case) into the
framebuffer. If you want your blitted content to lay on top of the
rendered image, it has to be applied after calling update() on the
buffer. This method is useful to copy 2D-GUI elements into the rendered
image (or for similar tasks). Blitting in OpenGL mode requires that the
current world has been rendered at least once into the framebuffer where
the blitting should be applied to (for doing some intialization work).
Usually, that shouldn't be a problem unless you are abusing jPCT as a
"blitting engine" only. When using OpenGL, be sure that the texture's
height is 2^x. Everything else might produce unpredictable results. This
method should be prefered over the int[]-array-blit whenever possible.
Some graphics cards/drivers are having problems when blitting using a
16bit z-buffer (albeit the z-buffer is not used for blitting). Have a
look at Config.glFixedBlitting for a workaround.
- Parameters:
src
- the texture that contains the source bitmapsrcX
- the starting x-position in the source bitmapsrcY
- the starting y-position in the source bitmapdestX
- the starting x-position in the destination bitmapdestY
- the starting y-position in the destination bitmapwidth
- the width of the region to copyheight
- the height of the region to copytransparent
- black (or at least almost black) pixels won't be copied if
this is set to TRANSPARENT_BLITTING. Any color-value which
leads to a result of zero when "anded" with #f0f0f0 will be
taken as black.- See Also:
TRANSPARENT_BLITTING
,
OPAQUE_BLITTING
,
Config.glFixedBlitting
blit
public void blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float sourceWidth,
float sourceHeight,
float destWidth,
float destHeight,
int transValue,
boolean additive)
- Special version of blit() that allows for scaling, i.e. it doesn't make
1-to-1 copies but can up- or down-scale. In addition, it offers support
for transparency, a different blending mode and an additional color. If
you want your blitted content to lay on top of the rendered image, it has
to be applied after calling update() on the buffer. This method is useful
to copy 2D-GUI elements into the rendered image (or for similar tasks).
Blitting in OpenGL mode requires that the current world has been rendered
at least once into the framebuffer where the blitting should be applied
to (for doing some intialization work). Usually, that shouldn't be a
problem unless you are abusing jPCT as a "blitting engine" only. There is
no int[]-array-version of this method.
Using this method is quite to similar to using the Overlay-class. In
fact, using this method on a software rendered framebuffer results in an
Overlay being used internally. The difference is, that Overlay takes care
of itself and that it has a real depth.
Some graphics cards/drivers are having problems when blitting using a
16bit z-buffer (albeit the z-buffer is not used for blitting). Have a
look at Config.glFixedBlitting for a workaround.
- Parameters:
src
- the texture that contains the source bitmapsrcX
- the starting x-position in the source bitmapsrcY
- the starting y-position in the source bitmapdestX
- the starting x-position in the destination bitmapdestY
- the starting y-position in the destination bitmapsourceWidth
- the width of the source region to copysourceHeight
- the height of the source region to copydestWidth
- the width of the copied region in the destination bitmapdestHeight
- the height of the copied region in the destination bitmaptransValue
- the transparency value, -1 is none, 0 is highest transparency.
Higher values mean less transparency.additive
- if true, the blending is additive, otherwise default- See Also:
Config.glFixedBlitting
blit
public void blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float sourceWidth,
float sourceHeight,
float destWidth,
float destHeight,
int transValue,
boolean additive,
java.awt.Color addColor)
- Special version of blit() that allows for scaling, i.e. it doesn't make
1-to-1 copies but can up- or down-scale. In addition, it offers support
for transparency, a different blending mode and an additional color. If
you want your blitted content to lay on top of the rendered image, it has
to be applied after calling update() on the buffer. This method is useful
to copy 2D-GUI elements into the rendered image (or for similar tasks).
Blitting in OpenGL mode requires that the current world has been rendered
at least once into the framebuffer where the blitting should be applied
to (for doing some intialization work). Usually, that shouldn't be a
problem unless you are abusing jPCT as a "blitting engine" only. There is
no int[]-array-version of this method.
Using this method is quite to similar to using the Overlay-class. In
fact, using this method on a software rendered framebuffer results in an
Overlay being used internally. The difference is, that Overlay takes care
of itself and that it has a real depth.
Some graphics cards/drivers are having problems when blitting using a
16bit z-buffer (albeit the z-buffer is not used for blitting). Have a
look at Config.glFixedBlitting for a workaround.
- Parameters:
src
- the texture that contains the source bitmapsrcX
- the starting x-position in the source bitmapsrcY
- the starting y-position in the source bitmapdestX
- the starting x-position in the destination bitmapdestY
- the starting y-position in the destination bitmapsourceWidth
- the width of the source region to copysourceHeight
- the height of the source region to copydestWidth
- the width of the copied region in the destination bitmapdestHeight
- the height of the copied region in the destination bitmaptransValue
- the transparency value, -1 is none, 0 is highest transparency.
Higher values mean less transparency.additive
- if true, the blending is additive, otherwise defaultaddColor
- an additional color. If null, Color.WHITE is taken instead- See Also:
Config.glFixedBlitting
blit
public void blit(Texture src,
float srcX,
float srcY,
float destX,
float destY,
float sourceWidth,
float sourceHeight,
float destWidth,
float destHeight,
int transValue,
boolean additive,
RGBColor addColor)
- Method to maintain compatibility with jPCT-AE. Functional identical to
the variant that takes java.awt.Color instead of RGBColor.
- Parameters:
src
- the texture that contains the source bitmapsrcX
- the starting x-position in the source bitmapsrcY
- the starting y-position in the source bitmapdestX
- the starting x-position in the destination bitmapdestY
- the starting y-position in the destination bitmapsourceWidth
- the width of the source region to copysourceHeight
- the height of the source region to copydestWidth
- the width of the copied region in the destination bitmapdestHeight
- the height of the copied region in the destination bitmaptransValue
- the transparency value, -1 is none, 0 is highest transparency.
Higher values mean less transparency.additive
- if true, the blending is additive, otherwise defaultaddColor
- an additional color. If null, RGBColor.WHITE is taken instead
blit
public void blit(int[] src,
int srcWidth,
int srcHeight,
float srcX,
float srcY,
float destX,
float destY,
float width,
float height,
boolean transparent)
- Copies a part of a bitmap (taken from an int[] containing pixels in
RGB-format and with no alpha) into the framebuffer. If you want your
blitted content to lay on top of the rendered image, it has to be applied
after calling update() on the buffer. Can be combined with getPixels() to
achieve some special effects with the framebuffer.
Blitting in OpenGL mode requires that the current world has been rendered
at least once into the framebuffer where the blitting should be applied
to (for doing some intialization work). Usually, that shouldn't be a
problem unless you are abusing jPCT as a "blitting engine" only. When in
OpenGL-mode, this method is very slow, because the int[] has to be
converted and uploaded to the graphics card every time. To avoid this in
some cases, Config.glUseIgnorantBlits can be set to true...but one should
be aware of the consequences. As a rule of thumb: If it's possible to
avoid this method and use a texture-based-blit instead...do it!
Some graphics cards/drivers are having problems when blitting using a
16bit z-buffer (albeit the z-buffer is not used for blitting). Have a
look at Config.glFixedBlitting for a workaround.
- Parameters:
src
- the int-array that contains the source bitmapsrcWidth
- the width of the source bitmapsrcHeight
- the height of the source bitmapsrcX
- the starting x-position in the source bitmapsrcY
- the starting y-position in the source bitmapdestX
- the starting x-position in the destination bitmapdestY
- the starting y-position in the destination bitmapwidth
- the width of the region to copyheight
- the height of the region to copytransparent
- black (or at least almost black) pixels won't be copied if
this is set to TRANSPARENT_BLITTING. Any color-value which
leads to a result of zero when "anded" with #f0f0f0 will be
taken as black.- See Also:
getPixels()
,
TRANSPARENT_BLITTING
,
OPAQUE_BLITTING
,
Config.glUseIgnorantBlits
,
Config.glFixedBlitting
display
public void display(java.awt.Graphics g)
- Displays the output Image onto the component with the given Graphics
context. If one wants to have further control about the drawing,
getOutputBuffer() can be used instead.
- Parameters:
g
- the Graphics context of the compontent onto which the Image
should be drawn (ignored when using OpenGL only)- See Also:
getOutputBuffer()
display
public void display(java.awt.Graphics g,
int yOffset)
- Displays the output Image onto the component with the given Graphics
context. If one wants to have further control about the drawing,
getOutputBuffer() can be used instead.
- Parameters:
g
- the Graphics context of the compontent onto which the Image
should be drawn (ignored when using OpenGL only)yOffset
- the offset in y-direction (ignored when using OpenGL)- See Also:
getOutputBuffer()
display
public void display(java.awt.Graphics g,
int xOffset,
int yOffset)
- Displays the output Image onto the component with the given Graphics
context. If one wants to have further control about the drawing,
getOutputBuffer() can be used instead.
- Parameters:
g
- the Graphics context of the compontent onto which the Image
should be drawn (ignored when using OpenGL only)xOffset
- the offset in x-direction (ignored when using OpenGL)yOffset
- the offset in y-direction (ignored when using OpenGL)- See Also:
getOutputBuffer()
displayGLOnly
public void displayGLOnly()
- Displays the output image produced by OpenGL compatible hardware if
OpenGL rendering is in use. If a software renderer is enabled, this
method will print out a warning message only. It's not required to
display the OpenGL rendered image by using this method, the normal
display()-method will work too, but the Graphics parameter will be
ignored in this case (can even be null).
display
public void display()
- The same as displayGLOnly. This method exists for compatibility with
jPCT-AE.
setClippingPlane
public void setClippingPlane(int number,
Plane plane)
- Sets an additional clipping plane. This will show an effect only if a
hardware renderer has been enabled. The plane has to be defined in camera
space.
- Parameters:
number
- the number of the clipping plane (0..5)plane
- the plane
removeClippingPlane
public void removeClippingPlane(int number)
- Removes an additional clipping plane.
- Parameters:
number
- the number of the plane
sync
public void sync()
- Does nothing. This method exists only for increased compatibility with
jPCT-AE.
flush
public void flush()
- Does nothing. This method exists only for increased compatibility with
jPCT-AE.
flushBlittingPipeline
public void flushBlittingPipeline()
- Flushes the blitting pipeline by executing the buffered blits. This also
resets the blitting shader in case one has been set.