| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
row-stride (regression of b33bdf41cf53f37203643a8551bf5d94b42a8fab)
SingleAWTGLPixelBufferProvider w/ allowing row-stride reuses the AWTGLPixelBuffer and it's BufferedImage
even w/ different width.
This leads to distortion if using the BufferedImage unhandled.
GLJPanel also set GL_PACK_ROW_LENGTH to pixelBuffer.width, which leads to an 'out-of-bounds'
exception if ReadPixels is used w/ panelwidth and panelHeight.
++
Introduce AWTGLPixelBuffer.getAlignedImage(width, height) which returns an aligned
BufferedImage while reusing the DataBuffer.
GLJPanel fetches a new alignedImage if required.
This allows a more efficient single buffer usage as intended, w/o the need of copying data.
|
|
|
|
|
|
|
| |
resized; Add unit test for resize while printing.
Perform immediatly reshape at releasePrint on AWT-EDT:
- sendReshape = handleReshape(); // reshapeSize -> panelSize, backend reshape w/ GL reshape
|
|
|
|
| |
commit fe284b515d984198fdbe702837809f181625a457)
|
|
|
|
|
|
| |
c8abb9d2c9a8c92f0c5c42aba13e3e80c69739dc: Test isSetup() _after_ running glEventListenerPre.
glEventListenerPre may be utilized to setup the TileRenderer.
|
|
|
|
| |
'handleReshape' if panelSize/awtSize mismatch, otherwise 'sendReshape' and exception if offscreen size doesn't match panelSize.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sync issue w/ NEWT/AWT based GLAD
NEWT based GLDrawables may trigger GLAD display() via native repaint events.
If using in conjunction w/ AWT, i.e. NewtCanvasAWT and setupPrinting(..) has been called
and it's attched to the TR .. it could happen that display tries to issue beginTile()
before the TR is being setup.
This patch mitigates this issue (while not removing it) by querying whether setup is completed.
|
|
|
|
|
|
|
|
|
| |
AWT-GLAD's size, since the latter uses AWT's component size.
.. the AWT component size could have been modified after setupPrinting(..).
The AWT-GLAD getWidth() and getHeight() is implemented by AWT's component
and hence may not reflect the actual GLDrawable size while printing.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
functionality (reshapeTile(..), ..); Only process GLEventListener impl. TileRendererListener; attachToAutoDrawable -> attachAutoDrawable, etc.
-TileRendererNotify -> TileRendererListener
- Added methods:
- void reshapeTile(TileRendererBase tr,int tileX, int tileY, int tileWidth, int tileHeight, int imageWidth, int imageHeight);
- void startTileRendering(TileRendererBase tr);
- void endTileRendering(TileRendererBase tr);
allowing to clarify user code and API specification,
i.e. TR only processes GLEventListener which impl. TileRendererListener.
This also allows simplifying the API doc, while having a more descriptive
reshape method focusing solely on tile rendering.
Further more, the start/end TR methods allow certain GL related actions
while the context is current before and after iterating through the tiles.
This is even used for RandomTileRenderer (one tile only), to allow
to reuse same TileRendererListener for diff TRs.
- Fix language, attach and detach usage was vice versa. We do attach an GLAutoDrawable to a TR
- attachToAutoDrawable -> attachAutoDrawable
- detachFromAutoDrawable -> detachAutoDrawable
- Adapted unit tests.
|
|
|
|
| |
pre/post reshape in it's display method instead.
|
|
|
|
| |
'isInit' flag.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
upper area, cleanup.
TestTiledPrintingGearsSwingAWT2: Provoked !flipped bug where top-row was positioned too low
due to using full size tile-height.
Cutting of the unused top-row's upper area corrects this issue.
vertical-flip mode does not expose this situation, since flipping
shifts the payload to the upper tile area.
TestTiledPrintingGearsSwingAWT2: Also tests an alternative transparent overlapping mode
without layout.
|
|
|
|
|
|
|
|
|
|
|
|
| |
In FBO mode save TextureState of current texture-unit,
as well as for the fbo texture-unit if the latter is a different.
In glslTextureRaster mode for verical flip (using FBO),
set the viewport to drawable size if before flipping and restore afterward - if equired.
TestGLJPanelTextureStateAWT fully tests use cases:
- Keep texture bound w/ same or other texture-unit
- Use 2 viewports within one drawable and keep it
|
|
|
|
|
|
| |
Part 1
TODO: Only disable state tracker at GLContext.destroy()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
double precicion clip bounds 'all the way'; Explicitly scale image and clip w/ current scaled transform.
- Use 'Shape getClip()'
Don't assume Rectangle2D, but use Shape's getBounds2D()
- Use double precicion clip bounds 'all the way'
Remove rounding error on clip bounds w/ start value, which was _not_ using doubles.
- Explicitly scale image and clip w/ current scaled transform.
Instead of abusing Graphics2D's clip shape to scale image size and clip-area,
explicitly use transform both bounding boxes into transformed space,
scale space and transform out (inversion).
A possible NoninvertibleTransformException will be thrown while Graphics2D has not been modified.
|
|
|
|
|
|
| |
location and destination must follow same math as w/ vertical-flip.
.. clipping and tile-height was not considered.
|
| |
|
|
|
|
| |
synchronization simplifying code and better robustness.
|
|
|
|
| |
GLJPanel: Attempt to initialize if not done yet (similar to GLCanvas)
|
|
|
|
| |
NIO BufferedImage, adding OffscreenPrintable tests to all unit tests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
AWTPrintLifecycle's lifecycle
- AWTPrintLifecycle:
- Should decorate:
PrinterJob.print(..),
instead of within Printable.print(..) { .. container.printAll(..); .. }
This is due to AWT print implementation, i.e.
AWT will issue Printable.print(..) multiple times for 'overlapping'
or non-opaque elements!
- Move from javax.media.opengl.awt -> com.jogamp.nativewindow.awt
- Make _interface_ AWT agnostic, i.e. remove Graphics2D from 'setup(..)'
- Add 'int numSamples' to 'setup(..)' to determine the number of samples
- AWTTilePrinter:
- Use double precision when scaling image-size and clip-rect,
then round them to integer values.
Otherwise AWT will use the bounding box for the clipping-rectangular.
- Clip negative portion of clip-rect,
this removes redundant overpaints, as well as increasing the tile count
due to the increased clipping-size.
- Clip the image-size in the tile-renderer according to the clip-rect.
- DEBUG_TILES: Dump tiles to file
- Use sub-image of final BuffereImage instead
of adding another clipping region. This might increase performance
if no clip-rect has been set.
TODO:
TestTiledPrintingGearsSwingAWT overlapping tests exposes
a 'off by one' bug of the first layer's background!
Note: The GL content seems to be correct though - maybe it's simply an AWT rounding error ..
|
|
|
|
|
|
|
|
| |
Add clipping of the image-size and hence differentiate the image-size and
the size the tile-renderer iterates through.
The original image-size is required for the opengl reshape and rendering,
where the clipping size may restrict the range of rendering.
|
|
|
|
| |
drawable, skip vertical flip and use 1:1 y-coord.
|
|
|
|
| |
up warnings and includes (clang).
|
| |
|
| |
|
| |
|
|
|
|
| |
GLCanvas/GLJPanel
|
| |
|
|
|
|
| |
pre-swap only for FBO && MSAA. See TileRendererBase.reqPreSwapBuffers(..) API doc.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and convenient AWT container traversal context; GLCanvas/GLJPanel properly handle existing MSAA and req. AA;
- Test: Don't resize frame, tweek print-matrix
- Use scaleComp72 to scale the frame to fit on page,
i.e. global print matrix
- Use scaleGLMatXY = 72.0 / glDPI
to locally scale on the GL drawable as being passed to AWTPrintLifecycle.setup(..)
- Hence frame stays untouched/stable, no need for 'offscreen' print test,
which is removed.
- AWTPrintLifecycle: Add scale and convenient AWT container traversal context
Use a simple decoration for all AWTPrintLifecycle impl. components within a container:
final AWTPrintLifecycle.Context ctx = AWTPrintLifecycle.Context.setupPrint(frame, g2d, scaleGLMatXY, scaleGLMatXY);
try {
} finally {
ctx.releasePrint();
}
- GLCanvas/GLJPanel properly handle existing MSAA and req. AA;
- GLCanvas: Workaround bug where onscreen MSAA cannot switch to offscreen FBO,
i.e. stay 'onscreen'
- GLJPanel: Use new offscreen FBO if MSAA is requested and not yet used.
- GLJPanel.Offscreen.postGL(): always swapBufer(), was missing for !GLSL swapping
Results GLCanvas / GLJPanel:
- Good scaling
- Stable behavior / visibility
- High DPI mode works
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RenderingHints test; setupPrint(Graphics2D): Query RenderingHints to use MSAA rendering
- AWTPrintLifecycle.setupPrint(Graphics2D): Query RenderingHints to use MSAA rendering
- Impl. in GLCanvas
- TODO GLJPanel (would need a new offscreen buffer)
- TiledPrintingAWTBase:
- Fix scaling - Fit frame to page
- add MSAA RenderingHints test
- GLCanvas: Remove dumpStack() DEBUG output
|
|
|
|
|
|
|
|
|
|
|
| |
endTile(); Enhance unit tests for MSAA, also add TileRendererBase.TileRendererNotify to GearsES2
GL[Auto]Drawable.swapBuffers() must be called before endTile().
This is especially important if using multisampling offscreen FBO drawables,
where swapBuffers() triggers the <i>downsampling</i> to the readable sampling sink.
Otherwise, we will be 'one tile behind' !
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
requires >= GL2ES3; Always set pack-alignment, Set glReadBuffer(..) >= GL2ES3
- Allow general usage w/ any GL profile, only image-buffer requires >= GL2ES3
Due to GL2ES3.GL_PACK_ROW_LENGTH and image-width != tile-width
- Always set pack-alignment
Forgot for tile-buffer
- Set glReadBuffer(..) >= GL2ES3
Required if using FBO offscreen, i.e. MSAA mode.
|
|
|
|
| |
GLProfile (just a query, no new profile)
|
|
|
|
| |
reused w/ GLCanvas and GLJPanel
|
|
|
|
| |
print(Graphics): Don't force on AWT-EDT -> Deadlock; releasePrint(): perform reshape/display!
|
|
|
|
| |
setupPrint()/releasePrint(), modularize unit test TestTiledPrintingGearsAWT
|
|
|
|
| |
drawing image and show same; Test: Add offscreen print and add borders.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
print(..); Test: Add auto-print w/o UI 72dpi and 300dpi
NOTE: Tile raster is added at print plus lots of debug output - WIP!
- Swap to offscreen at setupPrint()
- Swap GLEventListener (GLEL) and GLContext to fixed size offscreen GLAutoDrawable (GLAD)
- Destroy onscreen drawable/context
- Setup TileRenderer w/ offscreen GLAD
- @ releasePrint() restore onscreen ..
This shall ensure we don't hog the GPU resources when
resizing the AWT component (upscaling).
- Use TileRenderer @ print(..)
The clip-rect will be used as the TileRenderer's image-size
and we perform a whole tile-rendering loop.
This helps to limit resources, see above.
- Test: Add auto-print w/o UI 72dpi and 300dpi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
always return last result, no overloading of attachToAutoDrawable(..); Fix comments
TileRenderer:
- adds setTileOffset(..)
A tile offset might be required, i.e. via a given rectangular clip bounds
- getParam(pname) shall always return last result
Even when finished tiling, the last value shall be returned,
otherwise a post endTile() is unable to retrieve the value.
- No overloading of attachToAutoDrawable(..)
No reason to complicate usage by mutating semantics,
call setTileSize(..) manually
TileRendererBase:
- Fix API doc: TR_CURRENT_TILE_X_POS, TR_CURRENT_TILE_Y_POS
|
|
|
|
| |
about GLAnimatorControl's which association gets swapped as well.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLEventListener about attached/detached TileRenderer
.. since GLEventListener's reshape(..) method must query certain tile renderer attributes (tile pos and image size),
they have to be aware of the TileRendererBase.
To simplify such awareness and hence automate this attachement and passing over the tile renderer reference,
they should implement this new interface.
Gears example implements the new interface,
which caches the TR reference and pauses rotation.
|
|
|
|
| |
for UI agnostic (no-awt tests).
|