PDA

View Full Version : Suggestion Required for JOGL Application



Adarsh
05-26-2015, 01:01 AM
We are trying to develop an image viewer to visualize very large sized (1-7GBs), multi resolution tile based (512X512 pixels) images. The business requirement is to make the visualization (zooming, panning) as smooth as possible. Our development environment is java and we are now trying to utilize capabilities of openGL via native library JOGL. My questions are :

1. How to draw the tiles : as a texture or is their any other mechanism available in openGL?
2. How to achieve maximum FPS during navigation considering a good display will need to render around 50 tiles?

Thanks in advance for your suggesions and opinions.

P.S. - We are beginner in OpenGl.

GClements
05-26-2015, 02:41 AM
1. How to draw the tiles : as a texture or is their any other mechanism available in openGL?

If you need to scale the tiles, then you need to use textures. The only other options for drawing images perform a 1:1 copy.



2. How to achieve maximum FPS during navigation considering a good display will need to render around 50 tiles?

Ideally, use a video card with enough RAM to store the entire data set. Failing that, ensure that you can at least fit everything into system RAM (and keep it there), so that you aren't loading from disc.

Beyond that, you want to pre-emptively transfer data from disk to system RAM to video RAM so that it's already at in system RAM (and preferably video RAM) when it needs to be. At any given time, as well as the data for what's actually on screen, you need an extra row and column of tiles in each direction and an extra mipmap level in each direction either already in memory or in the process of being uploaded, so that when the user pans or zooms the data required is already available.

One complication with rendering tiled images is that each tile needs to overlap the adjacent tiles by one pixel so that bilinear filtering works correctly at the edges. The texture coordinates need to be inset by half a pixel to account for this. So for 512x512 textures, your tiles would effectively need to be 511x511.

Alternatively, you could maintain the data as a single texture, larger than the screen, which is used as a circular buffer, in which case GL_REPEAT can be used.