NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Liedl Johann wrote: > My application creates more than 32 DisplayImpl (in different windows). > On creating the 32nd object an Exception occurs in the > javax.media.j3d.MasterControl.getCanvasBit() method. I decompile this > class. The source code is the following one: > > int getCanvasBit() { > synchronized (canvasBitFreeList) { > if (canvasBitFreeList.size() == 0) { > if (canvasBitCount > 31) > throw new InternalError(); > return 1 << canvasBitCount++; > } > return ((Integer) canvasBitFreeList.removeLastElement()).intValue(); > } > } > > I know that this is not a visad class, but does anyone known the reason > for this limitation (maybe a limit in the opengl API) Well, just looking at the code, one can see that it's returning a 32-bit integer value in which a single bit is set to indicate which canvas is being used. Odds are good that at some other place in the code, there's an 'int' which has multiple bits set to indicate something about the canvases (which ones need to be updated, which ones have pending events, etc.) Sun could change this "canvas bit" to a 'long', but that'd only extend the limit up to 64 canvases and would possibly take quite a bit of re-engineering. (I don't have the source, so I can't say how much work that would be...)
visad
archives: