summaryrefslogtreecommitdiffstats
path: root/src/classes
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2009-06-15 22:52:34 +0000
committerKenneth Russel <[email protected]>2009-06-15 22:52:34 +0000
commit506b634b780dcd23aa61015c2ceba3e687196abf (patch)
tree897649a36cc769351704a050828f8e0e994c5686 /src/classes
parent04c0c10bfee764dbd0301ae83a0fae695dcb5b23 (diff)
Deleted obsolete source code in preparation for copying JOGL_2_SANDBOX
on to trunk git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@1958 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/classes')
-rw-r--r--src/classes/com/sun/opengl/cg/CgException.java67
-rw-r--r--src/classes/com/sun/opengl/impl/Debug.java93
-rw-r--r--src/classes/com/sun/opengl/impl/FunctionAvailabilityCache.java383
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/GLBufferSizeTracker.java188
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/GLBufferStateTracker.java173
-rw-r--r--src/classes/com/sun/opengl/impl/GLContextImpl.java422
-rw-r--r--src/classes/com/sun/opengl/impl/GLContextLock.java126
-rw-r--r--src/classes/com/sun/opengl/impl/GLContextShareSet.java290
-rw-r--r--src/classes/com/sun/opengl/impl/GLDrawableFactoryImpl.java249
-rw-r--r--src/classes/com/sun/opengl/impl/GLDrawableHelper.java217
-rw-r--r--src/classes/com/sun/opengl/impl/GLDrawableImpl.java66
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/GLObjectTracker.java833
-rw-r--r--src/classes/com/sun/opengl/impl/GLPbufferImpl.java264
-rw-r--r--src/classes/com/sun/opengl/impl/GLUquadricImpl.java1060
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/GLWorkerThread.java275
-rw-r--r--src/classes/com/sun/opengl/impl/InternalBufferUtils.java55
-rw-r--r--src/classes/com/sun/opengl/impl/JAWT_PlatformInfo.java45
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/Java2D.java567
-rw-r--r--src/classes/com/sun/opengl/impl/Java2DGLContext.java51
-rw-r--r--src/classes/com/sun/opengl/impl/NativeLibLoader.java192
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/Project.java1033
-rw-r--r--src/classes/com/sun/opengl/impl/Util.java242
-rw-r--r--src/classes/com/sun/opengl/impl/error/Error.java99
-rw-r--r--src/classes/com/sun/opengl/impl/glue/Glue.java114
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java123
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXGLContext.java371
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawable.java130
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawableFactory.java182
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXJava2DGLContext.java155
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLContext.java64
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLDrawable.java61
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java131
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLDrawable.java225
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLContext.java340
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLDrawable.java246
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/BuildMipmap.java1594
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract.java56
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract1010102.java97
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract1555rev.java97
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract2101010rev.java97
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract233rev.java85
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract332.java84
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract4444.java96
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract4444rev.java97
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract5551.java97
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract565.java92
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract565rev.java92
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract8888.java97
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Extract8888rev.java97
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractFloat.java74
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractPrimitive.java56
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractSByte.java69
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractSInt.java76
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractSShort.java76
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractUByte.java70
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractUInt.java76
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ExtractUShort.java76
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/HalveImage.java1533
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Image.java1412
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Mipmap.java857
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/PixelStorageModes.java426
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/ScaleInternal.java2447
-rw-r--r--src/classes/com/sun/opengl/impl/mipmap/Type_Widget.java224
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Arc.java258
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/ArcSdirSorter.java63
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/ArcTdirSorter.java60
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/ArcTesselator.java90
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Backend.java217
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/BezierArc.java44
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Bin.java155
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Breakpt.java59
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/CArrayOfArcs.java194
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/CArrayOfBreakpts.java130
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/CArrayOfFloats.java195
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/CArrayOfQuiltspecs.java160
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Curve.java238
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Curvelist.java121
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/DisplayList.java56
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Flist.java130
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/GLUnurbsImpl.java860
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Knotspec.java557
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Knotvector.java179
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Mapdesc.java442
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Maplist.java122
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/NurbsConsts.java184
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/O_curve.java63
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/O_nurbscurve.java80
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/O_nurbssurface.java79
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/O_pwlcurve.java44
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/O_surface.java52
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/O_trim.java44
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/OpenGLCurveEvaluator.java202
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/OpenGLSurfaceEvaluator.java214
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Patch.java54
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Patchlist.java145
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Property.java75
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Pspec.java47
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/PwlArc.java71
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Quilt.java282
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Quiltspec.java85
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/README.txt59
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Renderhints.java128
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Splinespec.java204
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/Subdivider.java1167
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/nurbs/TrimVertex.java56
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/packrect/BackingStoreManager.java85
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/packrect/Level.java275
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/packrect/LevelSet.java213
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/packrect/Rect.java170
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/packrect/RectVisitor.java47
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/packrect/RectanglePacker.java295
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/packrect/package.html7
-rw-r--r--src/classes/com/sun/opengl/impl/registry/Registry.java75
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/ActiveRegion.java68
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/CachedVertex.java58
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/Dict.java140
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/DictNode.java59
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/GLUface.java65
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/GLUhalfEdge.java73
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/GLUmesh.java62
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/GLUtessellatorImpl.java635
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/GLUvertex.java65
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/Geom.java318
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/Mesh.java734
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/Normal.java288
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/PriorityQ.java100
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/PriorityQHeap.java264
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/PriorityQSort.java280
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/Render.java557
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/Sweep.java1353
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/TessMono.java209
-rw-r--r--src/classes/com/sun/opengl/impl/tessellator/TessState.java60
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsDummyGLDrawable.java97
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java101
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/windows/WindowsExternalGLDrawable.java72
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsGLContext.java309
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsGLDrawable.java640
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsGLDrawableFactory.java283
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLContext.java64
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLDrawable.java134
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java88
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java264
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLContext.java163
-rw-r--r--src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLDrawable.java338
-rw-r--r--src/classes/com/sun/opengl/impl/x11/DRIHack.java128
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java130
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/x11/X11ExternalGLDrawable.java215
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11GLContext.java344
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11GLDrawable.java172
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11GLDrawableFactory.java799
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11OffscreenGLContext.java83
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11OffscreenGLDrawable.java145
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11OnscreenGLContext.java100
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11OnscreenGLDrawable.java186
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11PbufferGLContext.java155
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11PbufferGLDrawable.java239
-rw-r--r--src/classes/com/sun/opengl/impl/x11/X11SunJDKReflection.java101
-rwxr-xr-xsrc/classes/com/sun/opengl/util/Animator.java308
-rw-r--r--src/classes/com/sun/opengl/util/BitmapCharRec.java69
-rw-r--r--src/classes/com/sun/opengl/util/BitmapFontRec.java63
-rwxr-xr-xsrc/classes/com/sun/opengl/util/BufferUtil.java268
-rw-r--r--src/classes/com/sun/opengl/util/CoordRec.java56
-rwxr-xr-xsrc/classes/com/sun/opengl/util/FPSAnimator.java123
-rwxr-xr-xsrc/classes/com/sun/opengl/util/FileUtil.java89
-rw-r--r--src/classes/com/sun/opengl/util/GLUT.java1341
-rw-r--r--src/classes/com/sun/opengl/util/GLUTBitmap8x13.java2078
-rw-r--r--src/classes/com/sun/opengl/util/GLUTBitmap9x15.java2079
-rw-r--r--src/classes/com/sun/opengl/util/GLUTBitmapHelvetica10.java1798
-rw-r--r--src/classes/com/sun/opengl/util/GLUTBitmapHelvetica12.java1808
-rw-r--r--src/classes/com/sun/opengl/util/GLUTBitmapHelvetica18.java1917
-rw-r--r--src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman10.java1797
-rw-r--r--src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman24.java2080
-rw-r--r--src/classes/com/sun/opengl/util/GLUTStrokeMonoRoman.java2491
-rw-r--r--src/classes/com/sun/opengl/util/GLUTStrokeRoman.java2491
-rwxr-xr-xsrc/classes/com/sun/opengl/util/Gamma.java106
-rwxr-xr-xsrc/classes/com/sun/opengl/util/ImageUtil.java126
-rwxr-xr-xsrc/classes/com/sun/opengl/util/JOGLAppletLauncher.java1080
-rwxr-xr-xsrc/classes/com/sun/opengl/util/Screenshot.java429
-rwxr-xr-xsrc/classes/com/sun/opengl/util/StreamUtil.java74
-rw-r--r--src/classes/com/sun/opengl/util/StrokeCharRec.java63
-rw-r--r--src/classes/com/sun/opengl/util/StrokeFontRec.java66
-rw-r--r--src/classes/com/sun/opengl/util/StrokeRec.java57
-rwxr-xr-xsrc/classes/com/sun/opengl/util/TGAWriter.java118
-rwxr-xr-xsrc/classes/com/sun/opengl/util/TileRenderer.java600
-rwxr-xr-xsrc/classes/com/sun/opengl/util/j2d/Overlay.java214
-rwxr-xr-xsrc/classes/com/sun/opengl/util/j2d/TextRenderer.java1931
-rwxr-xr-xsrc/classes/com/sun/opengl/util/j2d/TextureRenderer.java695
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/Texture.java1021
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/TextureCoords.java79
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/TextureData.java701
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/TextureIO.java1358
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/spi/DDSImage.java918
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/spi/LEDataInputStream.java223
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/spi/SGIImage.java671
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/spi/TGAImage.java386
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/spi/TextureProvider.java165
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/spi/TextureWriter.java57
-rw-r--r--src/classes/javax/media/opengl/AWTGraphicsConfiguration.java57
-rw-r--r--src/classes/javax/media/opengl/AWTGraphicsDevice.java57
-rw-r--r--src/classes/javax/media/opengl/AbstractGraphicsConfiguration.java46
-rw-r--r--src/classes/javax/media/opengl/AbstractGraphicsDevice.java46
-rw-r--r--src/classes/javax/media/opengl/ComponentEvents.java74
-rw-r--r--src/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java235
-rw-r--r--src/classes/javax/media/opengl/GLAutoDrawable.java117
-rw-r--r--src/classes/javax/media/opengl/GLCanvas.java530
-rw-r--r--src/classes/javax/media/opengl/GLCapabilities.java340
-rw-r--r--src/classes/javax/media/opengl/GLCapabilitiesChooser.java67
-rw-r--r--src/classes/javax/media/opengl/GLContext.java190
-rw-r--r--src/classes/javax/media/opengl/GLDrawable.java132
-rw-r--r--src/classes/javax/media/opengl/GLDrawableFactory.java277
-rw-r--r--src/classes/javax/media/opengl/GLEventListener.java101
-rw-r--r--src/classes/javax/media/opengl/GLException.java68
-rw-r--r--src/classes/javax/media/opengl/GLJPanel.java1257
-rw-r--r--src/classes/javax/media/opengl/GLPbuffer.java91
-rwxr-xr-xsrc/classes/javax/media/opengl/Threading.java313
-rwxr-xr-xsrc/classes/javax/media/opengl/glu/GLUnurbs.java8
-rwxr-xr-xsrc/classes/javax/media/opengl/glu/GLUquadric.java8
-rwxr-xr-xsrc/classes/javax/media/opengl/glu/GLUtessellator.java66
-rwxr-xr-xsrc/classes/javax/media/opengl/glu/GLUtessellatorCallback.java356
-rwxr-xr-xsrc/classes/javax/media/opengl/glu/GLUtessellatorCallbackAdapter.java84
220 files changed, 0 insertions, 75466 deletions
diff --git a/src/classes/com/sun/opengl/cg/CgException.java b/src/classes/com/sun/opengl/cg/CgException.java
deleted file mode 100644
index 3380bb540..000000000
--- a/src/classes/com/sun/opengl/cg/CgException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.cg;
-
-/**
- * A generic exception for errors that occur throughout the NVidia Cg
- * binding, as a substitute for {@link RuntimeException}.
- */
-public class CgException extends RuntimeException {
- /** Constructs a CgException object. */
- public CgException() {
- super();
- }
-
- /** Constructs a CgException object with the specified detail message. */
- public CgException(String message) {
- super(message);
- }
-
- /** Constructs a CgException object with the specified detail message and
- root cause. */
- public CgException(String message, Throwable cause) {
- super(message, cause);
- }
-
- /** Constructs a CgException object with the specified root cause. */
- public CgException(Throwable cause) {
- super(cause);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/Debug.java b/src/classes/com/sun/opengl/impl/Debug.java
deleted file mode 100644
index 9faa04fa7..000000000
--- a/src/classes/com/sun/opengl/impl/Debug.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.security.*;
-
-/** Helper routines for logging and debugging. */
-
-public class Debug {
- // Some common properties
- private static boolean verbose;
- private static boolean debugAll;
-
- static {
- verbose = isPropertyDefined("jogl.verbose");
- debugAll = isPropertyDefined("jogl.debug");
- if (verbose) {
- Package p = Package.getPackage("javax.media.opengl");
- System.err.println("JOGL specification version " + p.getSpecificationVersion());
- System.err.println("JOGL implementation version " + p.getImplementationVersion());
- System.err.println("JOGL implementation vendor " + p.getImplementationVendor());
- }
- }
-
- public static boolean getBooleanProperty(final String property) {
- Boolean b = (Boolean) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- boolean val = Boolean.getBoolean(property);
- return (val ? Boolean.TRUE : Boolean.FALSE);
- }
- });
- return b.booleanValue();
- }
-
- public static boolean isPropertyDefined(final String property) {
- Boolean b = (Boolean) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- String val = System.getProperty(property);
- return (val != null ? Boolean.TRUE : Boolean.FALSE);
- }
- });
- return b.booleanValue();
- }
-
- public static boolean verbose() {
- return verbose;
- }
-
- public static boolean debugAll() {
- return debugAll;
- }
-
- public static boolean debug(String subcomponent) {
- return debugAll() || isPropertyDefined("jogl.debug." + subcomponent);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/FunctionAvailabilityCache.java b/src/classes/com/sun/opengl/impl/FunctionAvailabilityCache.java
deleted file mode 100644
index c2392baa9..000000000
--- a/src/classes/com/sun/opengl/impl/FunctionAvailabilityCache.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import javax.media.opengl.*;
-import java.util.*;
-import java.util.regex.*;
-import java.awt.Canvas;
-import java.awt.Graphics;
-import java.awt.GraphicsConfiguration;
-import java.lang.reflect.*;
-
-/**
- * A utility object intended to be used by implementations to act as a cache
- * of which OpenGL functions are currently available on both the host machine
- * and display.
- */
-public final class FunctionAvailabilityCache {
- private static final boolean DEBUG = Debug.debug("FunctionAvailabilityCache");
-
- FunctionAvailabilityCache(GLContextImpl context)
- {
- this.context = context;
- }
-
- /**
- * Flush the cache. The cache will be rebuilt lazily as calls to {@link
- * #isFunctionAvailable(String)} are received.
- */
- public void flush()
- {
- availabilityCache.clear();
- availableExtensionCache.clear();
- }
-
- public boolean isFunctionAvailable(String glFunctionName)
- {
- if (DEBUG) {
- System.err.println("!!! CHECKING FOR AVAILABILITY OF: "+ glFunctionName);
- }
-
- Boolean available = (Boolean)availabilityCache.get(glFunctionName);
-
- if (available == null) // not in availabilityCache
- {
- if (isPartOfAvailableExtensions(glFunctionName) ||
- isPartOfGLCore(context.getGL().glGetString(GL.GL_VERSION), glFunctionName))
- {
- available = Boolean.TRUE;
- }
- else
- {
- available = Boolean.FALSE;
- }
-
- availabilityCache.put(glFunctionName, available);
- }
-
- if (DEBUG) {
- System.err.println("!!! AVAILABILITY OF "+ glFunctionName + ": " + available.booleanValue());
- }
-
- return available.booleanValue();
- }
-
- public boolean isExtensionAvailable(String glExtensionName) {
- initAvailableExtensions();
- return availableExtensionCache.contains(mapGLExtensionName(glExtensionName));
- }
-
- protected void initAvailableExtensions() {
- // if hash is empty (meaning it was flushed), pre-cache it with the list
- // of extensions that are in the GL_EXTENSIONS string
- if (availableExtensionCache.isEmpty()) {
- GL gl = context.getGL();
- if (DEBUG) {
- System.err.println("!!! Pre-caching extension availability");
- }
- String allAvailableExtensions =
- gl.glGetString(GL.GL_EXTENSIONS) + " " + context.getPlatformExtensionsString();
- if (DEBUG) {
- System.err.println("!!! Available extensions: " + allAvailableExtensions);
- System.err.println("!!! GL vendor: " + gl.glGetString(GL.GL_VENDOR));
- }
- StringTokenizer tok = new StringTokenizer(allAvailableExtensions);
- while (tok.hasMoreTokens()) {
- String availableExt = tok.nextToken().trim();
- availableExt = availableExt.intern();
- availableExtensionCache.add(availableExt);
- if (DEBUG) {
- System.err.println("!!! Available: " + availableExt);
- }
- }
-
- // Put GL version strings in the table as well
- Version version = new Version(gl.glGetString(GL.GL_VERSION));
- int major = version.getMajor();
- int minor = version.getMinor();
- // FIXME: this needs to be adjusted when the major rev changes
- // beyond the known ones
- while (major > 0) {
- while (minor >= 0) {
- availableExtensionCache.add("GL_VERSION_" + major + "_" + minor);
- if (DEBUG) {
- System.err.println("!!! Added GL_VERSION_" + major + "_" + minor + " to known extensions");
- }
- --minor;
- }
-
- switch (major) {
- case 2:
- // Restart loop at version 1.5
- minor = 5;
- break;
- case 1:
- break;
- }
-
- --major;
- }
-
- // put a dummy var in here so that the cache is no longer empty even if
- // no extensions are in the GL_EXTENSIONS string
- availableExtensionCache.add("<INTERNAL_DUMMY_PLACEHOLDER>");
- }
- }
-
- protected boolean isPartOfAvailableExtensions(String glFunctionName)
- {
- initAvailableExtensions();
-
- // First, find the extension to which the function corresponds
- String extensionName = getExtensionCorrespondingToFunction(glFunctionName);
-
- // Now see if that extension is available
- boolean extensionAvailable = availableExtensionCache.contains(extensionName);
-
- return extensionAvailable;
- }
-
- /**
- * Returns true if the given OpenGL function is part of the OpenGL core
- * that corresponds to the give OpenGL version string.
- *
- * @param glVersionString must be of the form "X" or "X.Y" or "X.Y.Z", where
- * X, Y, and Z are integers
- * @exception GLException if the glFunctionName passed in is
- * not the name of any known OpenGL extension function.
- */
- public static boolean isPartOfGLCore(String glVersionString, String glFunctionName)
- {
- String funcCoreVersionString =
- StaticGLInfo.getFunctionAssociation(glFunctionName);
-
- if (funcCoreVersionString == null) {
- // No extension string was found in the glext.h/wglext.h/glxext.h
- // headers when building the StaticGLInfo class. So either it's a new
- // extension that's not in those headers, or it's not an opengl
- // extension. Either way it's an illegal argument.
- throw new GLException(
- "Function \"" + glFunctionName + "\" does not " +
- "correspond to any known OpenGL extension or core version.");
- }
-
- Version actualVersion;
- try
- {
- actualVersion = new Version(funcCoreVersionString);
- }
- catch (IllegalArgumentException e)
- {
- // funcCoreVersionString is not an OpenGL version identifier (i.e., not
- // of the form GL_VERSION_XXX or X.Y).
- //
- // Since the association string returned from
- // StaticGLInfo.getFunctionAssociation() was not null, this function
- // must be an OpenGL extension function.
- //
- // Therefore this function can't be part of any OpenGL core.
- return false;
- }
-
- Version versionToCheck;
- try
- {
- versionToCheck = new Version(glVersionString);
- }
- catch (IllegalArgumentException e)
- {
- // user did not supply a valid OpenGL version identifier
- throw new IllegalArgumentException(
- "Illegally formatted OpenGL version identifier: \"" + glVersionString + "\"");
- }
-
- // See if the version number of glVersionString is less than or equal to
- // the OpenGL specification number to which the given function actually
- // belongs.
- if (actualVersion.compareTo(versionToCheck) <= 0)
- {
- if (DEBUG) {
- System.err.println(
- glFunctionName + " is in core OpenGL " + glVersionString +
- " because it is in OpenGL " + funcCoreVersionString);
- }
- return true;
- }
-
- if (DEBUG) {
- System.err.println(
- glFunctionName + " is NOT a part of the OpenGL " + glVersionString + " core" +
- "; it is part of OpenGL " + funcCoreVersionString);
- }
-
- return false;
- }
-
- /** Returns the extension name that corresponds to the given extension
- * function. For example, it will return "GL_EXT_vertex_array" when the
- * argument is "glNormalPointerEXT".
- *
- * Please see http://oss.sgi.com/projects/ogl-sample/registry/index.html for
- * a list of extension names and the functions they expose.
- */
- protected static String getExtensionCorrespondingToFunction(String glFunctionName)
- {
- return mapGLExtensionName(StaticGLInfo.getFunctionAssociation(glFunctionName));
- }
-
- // FIXME: hack to re-enable GL_NV_vertex_array_range extension after
- // recent upgrade to new wglext.h and glxext.h headers
- private static String mapGLExtensionName(String extensionName) {
- if (extensionName != null &&
- (extensionName.equals("WGL_NV_vertex_array_range") ||
- extensionName.equals("GLX_NV_vertex_array_range")))
- return "GL_NV_vertex_array_range";
- return extensionName;
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private HashMap availabilityCache = new HashMap(50);
- private HashSet availableExtensionCache = new HashSet(50);
- private GLContextImpl context;
-
- /**
- * A class for storing and comparing revision version numbers.
- */
- private static class Version implements Comparable
- {
- private int major, minor, sub;
- public Version(int majorRev, int minorRev, int subMinorRev)
- {
- major = majorRev;
- minor = minorRev;
- sub = subMinorRev;
- }
-
- /**
- * @param versionString must be of the form "GL_VERSION_X" or
- * "GL_VERSION_X_Y" or "GL_VERSION_X_Y_Z" or "X.Y", where X, Y,
- * and Z are integers.
- *
- * @exception IllegalArgumentException if the argument is not a valid
- * OpenGL version identifier
- */
- public Version(String versionString)
- {
- try
- {
- if (versionString.startsWith("GL_VERSION_"))
- {
- StringTokenizer tok = new StringTokenizer(versionString, "_");
-
- tok.nextToken(); // GL_
- tok.nextToken(); // VERSION_
- if (!tok.hasMoreTokens()) { major = 0; return; }
- major = Integer.valueOf(tok.nextToken()).intValue();
- if (!tok.hasMoreTokens()) { minor = 0; return; }
- minor = Integer.valueOf(tok.nextToken()).intValue();
- if (!tok.hasMoreTokens()) { sub = 0; return; }
- sub = Integer.valueOf(tok.nextToken()).intValue();
- }
- else
- {
- StringTokenizer tok = new StringTokenizer(versionString, ". ");
- major = Integer.valueOf(tok.nextToken()).intValue();
- minor = Integer.valueOf(tok.nextToken()).intValue();
-
- // See if there's version-specific information which might
- // imply a more recent OpenGL version
- tok = new StringTokenizer(versionString, " ");
- if (tok.hasMoreTokens()) {
- tok.nextToken();
- if (tok.hasMoreTokens()) {
- Pattern p = Pattern.compile("\\D*(\\d+)\\.(\\d+)\\.?(\\d*).*");
- Matcher m = p.matcher(tok.nextToken());
- if (m.matches()) {
- int altMajor = Integer.valueOf(m.group(1)).intValue();
- int altMinor = Integer.valueOf(m.group(2)).intValue();
- // Avoid possibly confusing situations by putting some
- // constraints on the upgrades we do to the major and
- // minor versions
- if ((altMajor == major && altMinor > minor) ||
- altMajor == major + 1) {
- major = altMajor;
- minor = altMinor;
- }
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- throw (IllegalArgumentException)
- new IllegalArgumentException(
- "Illegally formatted version identifier: \"" + versionString + "\"")
- .initCause(e);
- }
- }
-
- public int compareTo(Object o)
- {
- Version vo = (Version)o;
- if (major > vo.major) return 1;
- else if (major < vo.major) return -1;
- else if (minor > vo.minor) return 1;
- else if (minor < vo.minor) return -1;
- else if (sub > vo.sub) return 1;
- else if (sub < vo.sub) return -1;
-
- return 0; // they are equal
- }
-
- public int getMajor() {
- return major;
- }
-
- public int getMinor() {
- return minor;
- }
-
- } // end class Version
-}
diff --git a/src/classes/com/sun/opengl/impl/GLBufferSizeTracker.java b/src/classes/com/sun/opengl/impl/GLBufferSizeTracker.java
deleted file mode 100755
index 4538f8450..000000000
--- a/src/classes/com/sun/opengl/impl/GLBufferSizeTracker.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.util.*;
-import javax.media.opengl.*;
-
-/**
- * Tracks as closely as possible the sizes of allocated OpenGL buffer
- * objects. When glMapBuffer or glMapBufferARB is called, in order to
- * turn the resulting base address into a java.nio.ByteBuffer, we need
- * to know the size in bytes of the allocated OpenGL buffer object.
- * Previously we would compute this size by using
- * glGetBufferParameterivARB with a pname of GL_BUFFER_SIZE_ARB, but
- * it appears doing so each time glMapBuffer is called is too costly
- * on at least Apple's new multithreaded OpenGL implementation. <P>
- *
- * Instead we now try to track the sizes of allocated buffer objects.
- * We watch calls to glBindBuffer to see which buffer is bound to
- * which target and to glBufferData to see how large the buffer's
- * allocated size is. When glMapBuffer is called, we consult our table
- * of buffer sizes to see if we can return an answer without a glGet
- * call. <P>
- *
- * We share the GLBufferSizeTracker objects among all GLContexts for
- * which sharing is enabled, because the namespace for buffer objects
- * is the same for these contexts. <P>
- *
- * Tracking the state of which buffer objects are bound is done in the
- * GLBufferStateTracker and is not completely trivial. In the face of
- * calls to glPushClientAttrib / glPopClientAttrib we currently punt
- * and re-fetch the bound buffer object for the state in question;
- * see, for example, glVertexPointer and the calls down to
- * GLBufferStateTracker.getBoundBufferObject(). Note that we currently
- * ignore new binding targets such as GL_TRANSFORM_FEEDBACK_BUFFER_NV;
- * the fact that new binding targets may be added in the future makes
- * it impossible to cache state for these new targets. <P>
- *
- * Ignoring new binding targets, the primary situation in which we may
- * not be able to return a cached answer is in the case of an error,
- * where glBindBuffer may not have been called before trying to call
- * glBufferData. Also, if external native code modifies a buffer
- * object, we may return an incorrect answer. (FIXME: this case
- * requires more thought, and perhaps stochastic and
- * exponential-fallback checking. However, note that it can only occur
- * in the face of external native code which requires that the
- * application be signed anyway, so there is no security risk in this
- * area.)
- */
-
-public class GLBufferSizeTracker {
- // Map from buffer names to sizes.
- // Note: should probably have some way of shrinking this map, but
- // can't just make it a WeakHashMap because nobody holds on to the
- // keys; would have to always track creation and deletion of buffer
- // objects, which is probably sub-optimal. The expected usage
- // pattern of buffer objects indicates that the fact that this map
- // never shrinks is probably not that bad.
- private Map/*<Integer,Integer>*/ bufferSizeMap =
- Collections.synchronizedMap(new HashMap/*<Integer,Integer>*/());
-
- private static final boolean DEBUG = Debug.debug("GLBufferSizeTracker");
-
- public GLBufferSizeTracker() {
- }
-
- public void setBufferSize(GLBufferStateTracker bufferStateTracker,
- int target,
- GL caller,
- int size) {
- // Need to do some similar queries to getBufferSize below
- int buffer = bufferStateTracker.getBoundBufferObject(target, caller);
- boolean valid = bufferStateTracker.isBoundBufferObjectKnown(target);
- if (valid) {
- if (buffer == 0) {
- // FIXME: this really should not happen if we know what's
- // going on. Very likely there is an OpenGL error in the
- // application if we get here. Could silently return 0, but it
- // seems better to get an early warning that something is
- // wrong.
- throw new GLException("Error: no OpenGL buffer object appears to be bound to target 0x" +
- Integer.toHexString(target));
- }
- bufferSizeMap.put(new Integer(buffer), new Integer(size));
- }
- // We don't know the current buffer state. Note that the buffer
- // state tracker will have made the appropriate OpenGL query if it
- // didn't know what was going on, so at this point we have nothing
- // left to do except drop this piece of information on the floor.
- }
-
- public int getBufferSize(GLBufferStateTracker bufferStateTracker,
- int target,
- GL caller) {
- // See whether we know what buffer is currently bound to the given
- // state
- int buffer = bufferStateTracker.getBoundBufferObject(target, caller);
- boolean valid = bufferStateTracker.isBoundBufferObjectKnown(target);
- if (valid) {
- if (buffer == 0) {
- // FIXME: this really should not happen if we know what's
- // going on. Very likely there is an OpenGL error in the
- // application if we get here. Could silently return 0, but it
- // seems better to get an early warning that something is
- // wrong.
- throw new GLException("Error: no OpenGL buffer object appears to be bound to target 0x" +
- Integer.toHexString(target));
- }
- // See whether we know the size of this buffer object; at this
- // point we almost certainly should if the application is
- // written correctly
- Integer key = new Integer(buffer);
- Integer sz = (Integer) bufferSizeMap.get(key);
- if (sz == null) {
- // For robustness, try to query this value from the GL as we used to
- int[] tmp = new int[1];
- caller.glGetBufferParameterivARB(target, GL.GL_BUFFER_SIZE_ARB, tmp, 0);
- if (tmp[0] == 0) {
- // Assume something is wrong rather than silently going along
- throw new GLException("Error: buffer size returned by glGetBufferParameterivARB was zero; probably application error");
- }
- // Assume we just don't know what's happening
- sz = new Integer(tmp[0]);
- bufferSizeMap.put(key, sz);
- if (DEBUG) {
- System.err.println("GLBufferSizeTracker.getBufferSize(): made slow query to cache size " +
- tmp[0] +
- " for buffer " +
- buffer);
- }
- }
- return sz.intValue();
- }
- // We don't know what's going on in this case; query the GL for an answer
- int[] tmp = new int[1];
- caller.glGetBufferParameterivARB(target, GL.GL_BUFFER_SIZE_ARB, tmp, 0);
- if (DEBUG) {
- System.err.println("GLBufferSizeTracker.getBufferSize(): no cached buffer information");
- }
- return tmp[0];
- }
-
- // This should be called on any major event where we might start
- // producing wrong answers, such as OpenGL context creation and
- // destruction if we don't know whether there are other currently-
- // created contexts that might be keeping the buffer objects alive
- // that we're dealing with
- public void clearCachedBufferSizes() {
- bufferSizeMap.clear();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLBufferStateTracker.java b/src/classes/com/sun/opengl/impl/GLBufferStateTracker.java
deleted file mode 100755
index 2c4a9963e..000000000
--- a/src/classes/com/sun/opengl/impl/GLBufferStateTracker.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.util.*;
-import javax.media.opengl.*;
-
-/**
- * Tracks as closely as possible which OpenGL buffer object is bound
- * to which binding target in the current OpenGL context.
- * GLBufferStateTracker objects are allocated on a per-GLImpl basis,
- * which is basically identical to a per-OpenGL-context basis
- * (assuming correct usage of the GLImpl objects, which is checked by
- * the DebugGL). This class is used to verify that e.g. the vertex
- * buffer object extension is in use when the glVertexPointer variant
- * taking a long as argument is called. <P>
- *
- * Note that because the enumerated value used for the binding of a
- * buffer object (e.g. GL_ARRAY_BUFFER) is different than that used to
- * query the binding using glGetIntegerv (e.g.
- * GL_ARRAY_BUFFER_BINDING), then in the face of new binding targets
- * being added to the GL (e.g. GL_TRANSFORM_FEEDBACK_BUFFER_NV) it is
- * impossible to set up a query of the buffer object currently bound
- * to a particular state. It turns out that for some uses, such as
- * finding the size of the currently bound buffer, this doesn't
- * matter, though of course without knowing the buffer object we can't
- * re-associate the queried size with the buffer object ID. <P>
- *
- * Because the namespace of buffer objects is the unsigned integers
- * with 0 reserved by the GL, and because we have to be able to return
- * both 0 and other integers as valid answers from
- * getBoundBufferObject(), we need a second query, which is to ask
- * whether we know the state of the binding for a given target. For
- * "unknown" targets such as GL_TRANSFORM_FEEDBACK_BUFFER_NV we return
- * false from this, but we also clear the valid bit and later refresh
- * the binding state if glPushClientAttrib / glPopClientAttrib are
- * called, since we don't want the complexity of tracking stacks of
- * these attributes.
- *
- */
-
-public class GLBufferStateTracker {
- private static final boolean DEBUG = Debug.debug("GLBufferStateTracker");
-
- private static final Integer arrayBufferEnum = new Integer(GL.GL_ARRAY_BUFFER);
- private static final Integer elementArrayBufferEnum = new Integer(GL.GL_ELEMENT_ARRAY_BUFFER);
- private static final Integer pixelPackBufferEnum = new Integer(GL.GL_PIXEL_PACK_BUFFER);
- private static final Integer pixelUnpackBufferEnum = new Integer(GL.GL_PIXEL_UNPACK_BUFFER);
- private static final Integer zero = new Integer(0);
-
- // Maps binding targets to buffer objects. A null value indicates
- // that the binding is unknown. A zero value indicates that it is
- // known that no buffer is bound to the target.
- private Map/*<Integer,Integer>*/ bindingMap = new HashMap/*<Integer,Integer>*/();
-
- private int[] bufTmp = new int[1];
-
- public GLBufferStateTracker() {
- // Start with known unbound targets for known keys
- bindingMap.put(arrayBufferEnum, zero);
- bindingMap.put(elementArrayBufferEnum, zero);
- bindingMap.put(pixelPackBufferEnum, zero);
- bindingMap.put(pixelUnpackBufferEnum, zero);
- }
-
- public void setBoundBufferObject(int target, int buffer) {
- Integer key = box(target);
- bindingMap.put(key, box(buffer));
- }
-
- /** Note: returns an unspecified value if the binding for the
- specified target (e.g. GL_ARRAY_BUFFER) is currently unknown.
- You must use isBoundBufferObjectKnown() to see whether the
- return value is valid. */
- public int getBoundBufferObject(int target, GL caller) {
- Integer key = box(target);
- Integer value = (Integer) bindingMap.get(key);
- if (value == null) {
- // User probably either called glPushClientAttrib /
- // glPopClientAttrib or is querying an unknown target. See
- // whether we know how to fetch this state.
- boolean gotQueryTarget = true;
- int queryTarget = 0;
- switch (target) {
- case GL.GL_ARRAY_BUFFER: queryTarget = GL.GL_ARRAY_BUFFER_BINDING; break;
- case GL.GL_ELEMENT_ARRAY_BUFFER: queryTarget = GL.GL_ELEMENT_ARRAY_BUFFER_BINDING; break;
- case GL.GL_PIXEL_PACK_BUFFER: queryTarget = GL.GL_PIXEL_PACK_BUFFER_BINDING; break;
- case GL.GL_PIXEL_UNPACK_BUFFER: queryTarget = GL.GL_PIXEL_UNPACK_BUFFER_BINDING; break;
- default: gotQueryTarget = false; break;
- }
- if (gotQueryTarget) {
- caller.glGetIntegerv(queryTarget, bufTmp, 0);
- if (DEBUG) {
- System.err.println("GLBufferStateTracker.getBoundBufferObject(): queried bound buffer " +
- bufTmp[0] +
- " for query target 0x" + Integer.toHexString(queryTarget));
- }
- setBoundBufferObject(target, bufTmp[0]);
- // Try once more
- return getBoundBufferObject(target, caller);
- }
- return 0;
- }
- return value.intValue();
- }
-
- /** Indicates whether the binding state for the specified target is
- currently known. Should be called after getBoundBufferObject()
- because that method may change the answer for a given target. */
- public boolean isBoundBufferObjectKnown(int target) {
- return (bindingMap.get(box(target)) != null);
- }
-
- /** Clears out the known/unknown state of the various buffer object
- binding states. These will be refreshed later on an as-needed
- basis. This is called by the implementations of
- glPushClientAttrib / glPopClientAttrib. Might want to call this
- from GLContext.makeCurrent() in the future to possibly increase
- the robustness of these caches in the face of external native
- code manipulating OpenGL state. */
- public void clearBufferObjectState() {
- bindingMap.clear();
- }
-
- // FIXME: could largely remove this and use Integer.valueOf() in JDK 5
- private static Integer box(int key) {
- switch (key) {
- case 0: return zero;
- case GL.GL_ARRAY_BUFFER: return arrayBufferEnum;
- case GL.GL_ELEMENT_ARRAY_BUFFER: return elementArrayBufferEnum;
- case GL.GL_PIXEL_PACK_BUFFER: return pixelPackBufferEnum;
- case GL.GL_PIXEL_UNPACK_BUFFER: return pixelUnpackBufferEnum;
- default: return new Integer(key);
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLContextImpl.java b/src/classes/com/sun/opengl/impl/GLContextImpl.java
deleted file mode 100644
index 21e6d6598..000000000
--- a/src/classes/com/sun/opengl/impl/GLContextImpl.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.awt.Component;
-import java.nio.*;
-
-import javax.media.opengl.*;
-import com.sun.gluegen.runtime.*;
-
-public abstract class GLContextImpl extends GLContext {
- protected GLContextLock lock = new GLContextLock();
- protected static final boolean DEBUG = Debug.debug("GLContextImpl");
- protected static final boolean VERBOSE = Debug.verbose();
- protected static final boolean NO_FREE = Debug.isPropertyDefined("jogl.GLContext.nofree");
- // NOTE: default sense of GLContext optimization disabled in JSR-231
- // 1.0 beta 5 due to problems on X11 platforms (both Linux and
- // Solaris) when moving and resizing windows. Apparently GLX tokens
- // get sent to the X server under the hood (and out from under the
- // cover of the AWT lock) in these situations. Users requiring
- // multi-screen X11 applications can manually enable this flag. It
- // basically had no tangible effect on the Windows or Mac OS X
- // platforms anyway in particular with the disabling of the
- // GLWorkerThread which we found to be necessary in 1.0 beta 4.
- protected boolean optimizationEnabled = Debug.isPropertyDefined("jogl.GLContext.optimize");
-
- // Cache of the functions that are available to be called at the current
- // moment in time
- protected FunctionAvailabilityCache functionAvailability;
- // Table that holds the addresses of the native C-language entry points for
- // OpenGL functions.
- private GLProcAddressTable glProcAddressTable;
-
- // Tracks creation and initialization of buffer objects to avoid
- // repeated glGet calls upon glMapBuffer operations
- private GLBufferSizeTracker bufferSizeTracker;
-
- // Tracks creation and deletion of server-side OpenGL objects when
- // the Java2D/OpenGL pipeline is active and using FBOs to render
- private GLObjectTracker tracker;
- // Supports deletion of these objects when no other context is
- // current which can support immediate deletion of them
- private GLObjectTracker deletedObjectTracker;
-
- protected GL gl;
- public GLContextImpl(GLContext shareWith) {
- this(shareWith, false);
- }
-
- public GLContextImpl(GLContext shareWith, boolean dontShareWithJava2D) {
- functionAvailability = new FunctionAvailabilityCache(this);
- GLContext shareContext = shareWith;
- if (!dontShareWithJava2D) {
- shareContext = Java2D.filterShareContext(shareWith);
- }
- if (shareContext != null) {
- GLContextShareSet.registerSharing(this, shareContext);
- }
- // Always indicate real behind-the-scenes sharing to track deleted objects
- if (shareContext == null) {
- shareContext = Java2D.filterShareContext(shareWith);
- }
- GLContextShareSet.registerForObjectTracking(shareWith, this, shareContext);
- GLContextShareSet.registerForBufferObjectSharing(shareWith, this);
- // This must occur after the above calls into the
- // GLContextShareSet, which set up state needed by the GL object
- setGL(createGL());
- }
-
- public int makeCurrent() throws GLException {
- // Support calls to makeCurrent() over and over again with
- // different contexts without releasing them
- // Could implement this more efficiently without explicit
- // releasing of the underlying context; would require more error
- // checking during the makeCurrentImpl phase
- GLContext current = getCurrent();
- if (current != null) {
- if (current == this) {
- // Assume we don't need to make this context current again
- // For Mac OS X, however, we need to update the context to track resizes
- update();
- return CONTEXT_CURRENT;
- } else {
- current.release();
- }
- }
-
- if (GLWorkerThread.isStarted() &&
- !GLWorkerThread.isWorkerThread()) {
- // Kick the GLWorkerThread off its current context
- GLWorkerThread.invokeLater(new Runnable() { public void run() {} });
- }
-
- lock.lock();
- int res = 0;
- try {
- res = makeCurrentImpl();
- if ((tracker != null) &&
- (res == CONTEXT_CURRENT_NEW)) {
- // Increase reference count of GLObjectTracker
- tracker.ref();
- }
- } catch (GLException e) {
- lock.unlock();
- throw(e);
- }
- if (res == CONTEXT_NOT_CURRENT) {
- lock.unlock();
- } else {
- setCurrent(this);
-
- // Try cleaning up any stale server-side OpenGL objects
- // FIXME: not sure what to do here if this throws
- if (deletedObjectTracker != null) {
- deletedObjectTracker.clean(getGL());
- }
- }
- return res;
- }
-
- protected abstract int makeCurrentImpl() throws GLException;
-
- public void release() throws GLException {
- if (!lock.isHeld()) {
- throw new GLException("Context not current on current thread");
- }
- setCurrent(null);
- try {
- releaseImpl();
- } finally {
- lock.unlock();
- }
- }
-
- protected abstract void releaseImpl() throws GLException;
-
- public void destroy() {
- if (lock.isHeld()) {
- throw new GLException("Can not destroy context while it is current");
- }
-
- if (tracker != null) {
- // Don't need to do anything for contexts that haven't been
- // created yet
- if (isCreated()) {
- // If we are tracking creation and destruction of server-side
- // OpenGL objects, we must decrement the reference count of the
- // GLObjectTracker upon context destruction.
- //
- // Note that we can only eagerly delete these server-side
- // objects if there is another context currrent right now
- // which shares textures and display lists with this one.
- tracker.unref(deletedObjectTracker);
- }
- }
-
- // Because we don't know how many other contexts we might be
- // sharing with (and it seems too complicated to implement the
- // GLObjectTracker's ref/unref scheme for the buffer-related
- // optimizations), simply clear the cache of known buffers' sizes
- // when we destroy contexts
- bufferSizeTracker.clearCachedBufferSizes();
-
- // Must hold the lock around the destroy operation to make sure we
- // don't destroy the context out from under another thread rendering to it
- lock.lock();
- try {
- destroyImpl();
- } finally {
- lock.unlock();
- }
- }
-
- protected abstract void destroyImpl() throws GLException;
-
- // This is only needed for Mac OS X on-screen contexts
- protected void update() throws GLException {
- }
-
- public boolean isSynchronized() {
- return !lock.getFailFastMode();
- }
-
- public void setSynchronized(boolean isSynchronized) {
- lock.setFailFastMode(!isSynchronized);
- }
-
- public GL getGL() {
- return gl;
- }
-
- public void setGL(GL gl) {
- this.gl = gl;
- }
-
- public abstract Object getPlatformGLExtensions();
-
- //----------------------------------------------------------------------
- // Helpers for various context implementations
- //
-
- /** Create the GL for this context. */
- protected GL createGL() {
- GLImpl gl = new GLImpl(this);
- if (tracker != null) {
- gl.setObjectTracker(tracker);
- }
- return gl;
- }
-
- public GLProcAddressTable getGLProcAddressTable() {
- if (glProcAddressTable == null) {
- // FIXME: cache ProcAddressTables by capability bits so we can
- // share them among contexts with the same capabilities
- glProcAddressTable = new GLProcAddressTable();
- }
- return glProcAddressTable;
- }
-
- /**
- * Pbuffer support; given that this is a GLContext associated with a
- * pbuffer, binds this pbuffer to its texture target.
- */
- public abstract void bindPbufferToTexture();
-
- /**
- * Pbuffer support; given that this is a GLContext associated with a
- * pbuffer, releases this pbuffer from its texture target.
- */
- public abstract void releasePbufferFromTexture();
-
- public abstract ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3);
-
- /*
- * Sets the swap interval for onscreen OpenGL contexts. Has no
- * effect for offscreen contexts.
- */
- public void setSwapInterval(final int interval) {
- }
-
- /** Maps the given "platform-independent" function name to a real function
- name. Currently this is only used to map "glAllocateMemoryNV" and
- associated routines to wglAllocateMemoryNV / glXAllocateMemoryNV. */
- protected abstract String mapToRealGLFunctionName(String glFunctionName);
-
- /** Maps the given "platform-independent" extension name to a real
- function name. Currently this is only used to map
- "GL_ARB_pbuffer" and "GL_ARB_pixel_format" to "WGL_ARB_pbuffer"
- and "WGL_ARB_pixel_format" (not yet mapped to X11). */
- protected abstract String mapToRealGLExtensionName(String glExtensionName);
-
- /** Returns a non-null (but possibly empty) string containing the
- space-separated list of available platform-dependent (e.g., WGL,
- GLX) extensions. Can only be called while this context is
- current. */
- public abstract String getPlatformExtensionsString();
-
- /** Helper routine which resets a ProcAddressTable generated by the
- GLEmitter by looking up anew all of its function pointers. */
- protected void resetProcAddressTable(Object table) {
- ProcAddressHelper.resetProcAddressTable(table, GLDrawableFactoryImpl.getFactoryImpl());
- }
-
- /** Indicates whether the underlying OpenGL context has been
- created. This is used to manage sharing of display lists and
- textures between contexts. */
- public abstract boolean isCreated();
-
- /**
- * Resets the cache of which GL functions are available for calling through this
- * context. See {@link #isFunctionAvailable(String)} for more information on
- * the definition of "available".
- */
- protected void resetGLFunctionAvailability() {
- // In order to be able to allow the user to uniformly install the
- // debug and trace pipelines in their GLEventListener.init()
- // method (for both GLCanvas and GLJPanel), we need to reset the
- // actual GL object in the GLDrawable as well
- setGL(createGL());
-
- functionAvailability.flush();
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Initializing OpenGL extension address table for " + this);
- }
- resetProcAddressTable(getGLProcAddressTable());
- }
-
- /**
- * Returns true if the specified OpenGL core- or extension-function can be
- * successfully called using this GL context given the current host (OpenGL
- * <i>client</i>) and display (OpenGL <i>server</i>) configuration.
- *
- * See {@link GL#isFunctionAvailable(String)} for more details.
- *
- * @param glFunctionName the name of the OpenGL function (e.g., use
- * "glPolygonOffsetEXT" to check if the {@link
- * javax.media.opengl.GL#glPolygonOffsetEXT(float,float)} is available).
- */
- protected boolean isFunctionAvailable(String glFunctionName) {
- return functionAvailability.isFunctionAvailable(mapToRealGLFunctionName(glFunctionName));
- }
-
- /**
- * Returns true if the specified OpenGL extension can be
- * successfully called using this GL context given the current host (OpenGL
- * <i>client</i>) and display (OpenGL <i>server</i>) configuration.
- *
- * See {@link GL#isExtensionAvailable(String)} for more details.
- *
- * @param glExtensionName the name of the OpenGL extension (e.g.,
- * "GL_VERTEX_PROGRAM_ARB").
- */
- public boolean isExtensionAvailable(String glExtensionName) {
- return functionAvailability.isExtensionAvailable(mapToRealGLExtensionName(glExtensionName));
- }
-
- /** Indicates which floating-point pbuffer implementation is in
- use. Returns one of GLPbuffer.APPLE_FLOAT, GLPbuffer.ATI_FLOAT,
- or GLPbuffer.NV_FLOAT. */
- public int getFloatingPointMode() throws GLException {
- throw new GLException("Not supported on non-pbuffer contexts");
- }
-
- /** On some platforms the mismatch between OpenGL's coordinate
- system (origin at bottom left) and the window system's
- coordinate system (origin at top left) necessitates a vertical
- flip of pixels read from offscreen contexts. */
- public abstract boolean offscreenImageNeedsVerticalFlip();
-
- /** Only called for offscreen contexts; needed by glReadPixels */
- public abstract int getOffscreenContextPixelDataType();
-
- protected static String getThreadName() {
- return Thread.currentThread().getName();
- }
-
- public static String toHexString(long hex) {
- return "0x" + Long.toHexString(hex);
- }
-
- //----------------------------------------------------------------------
- // Helpers for buffer object optimizations
-
- public void setBufferSizeTracker(GLBufferSizeTracker bufferSizeTracker) {
- this.bufferSizeTracker = bufferSizeTracker;
- }
-
- public GLBufferSizeTracker getBufferSizeTracker() {
- return bufferSizeTracker;
- }
-
- //---------------------------------------------------------------------------
- // Helpers for integration with Java2D/OpenGL pipeline when FBOs are
- // being used
- //
-
- public void setObjectTracker(GLObjectTracker tracker) {
- this.tracker = tracker;
- }
-
- public GLObjectTracker getObjectTracker() {
- return tracker;
- }
-
- public void setDeletedObjectTracker(GLObjectTracker deletedObjectTracker) {
- this.deletedObjectTracker = deletedObjectTracker;
- }
-
- public GLObjectTracker getDeletedObjectTracker() {
- return deletedObjectTracker;
- }
-
- //---------------------------------------------------------------------------
- // Helpers for context optimization where the last context is left
- // current on the OpenGL worker thread
- //
-
- public boolean isOptimizable() {
- return optimizationEnabled;
- }
-
- public boolean hasWaiters() {
- return lock.hasWaiters();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLContextLock.java b/src/classes/com/sun/opengl/impl/GLContextLock.java
deleted file mode 100644
index 753ef14f8..000000000
--- a/src/classes/com/sun/opengl/impl/GLContextLock.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import javax.media.opengl.*;
-
-/** Implements the makeCurrent / release locking behavior of the
- GLContext class. When "fail fast mode" is enabled, attempts to
- lock the same GLContextLock on more than one thread cause
- GLException to be raised. This lock is not recursive. Attempts to
- lock it more than once on a given thread will cause GLException to
- be raised. */
-
-public class GLContextLock {
- private Object lock = new Object();
- private Thread owner;
- private boolean failFastMode = true;
- private volatile int waiters;
-
- /** Locks this GLContextLock on the current thread. If fail fast
- mode is enabled and the GLContextLock is already owned by
- another thread, throws GLException. */
- public void lock() throws GLException {
- synchronized(lock) {
- Thread current = Thread.currentThread();
- if (owner == null) {
- owner = current;
- } else if (owner != current) {
- while (owner != null) {
- if (failFastMode) {
- throw new GLException("Attempt to make context current on thread " + current +
- " which is already current on thread " + owner);
- } else {
- try {
- ++waiters;
- lock.wait();
- } catch (InterruptedException e) {
- throw new GLException(e);
- } finally {
- --waiters;
- }
- }
- }
- owner = current;
- } else {
- throw new GLException("Attempt to make the same context current twice on thread " + current);
- }
- }
- }
-
- /** Unlocks this GLContextLock. */
- public void unlock() throws GLException {
- synchronized (lock) {
- Thread current = Thread.currentThread();
- if (owner == current) {
- owner = null;
- lock.notifyAll();
- } else {
- if (owner != null) {
- throw new GLException("Attempt by thread " + current +
- " to release context owned by thread " + owner);
- } else {
- throw new GLException("Attempt by thread " + current +
- " to release unowned context");
- }
- }
- }
- }
-
- /** Indicates whether this lock is held by the current thread. */
- public boolean isHeld() {
- synchronized(lock) {
- Thread current = Thread.currentThread();
- return (owner == current);
- }
- }
-
- public void setFailFastMode(boolean onOrOff) {
- failFastMode = onOrOff;
- }
-
- public boolean getFailFastMode() {
- return failFastMode;
- }
-
- public boolean hasWaiters() {
- return (waiters != 0);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLContextShareSet.java b/src/classes/com/sun/opengl/impl/GLContextShareSet.java
deleted file mode 100644
index e02ef1fb5..000000000
--- a/src/classes/com/sun/opengl/impl/GLContextShareSet.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsEnvironment;
-import java.lang.ref.*;
-import java.util.*;
-import javax.media.opengl.*;
-
-/** Provides a mechanism by which OpenGL contexts can share textures
- and display lists in the face of multithreading and asynchronous
- context creation as is inherent in the AWT and Swing. */
-
-public class GLContextShareSet {
- private static boolean forceTracking = Debug.isPropertyDefined("jogl.glcontext.forcetracking");
- private static final boolean DEBUG = Debug.debug("GLContextShareSet");
-
- // This class is implemented with a WeakHashMap that goes from the
- // contexts as keys to a complex data structure as value that tracks
- // context creation and deletion.
-
- private static Map/*<GLContext, ShareSet>*/ shareMap = new WeakHashMap();
- private static Object dummyValue = new Object();
-
- private static class ShareSet {
- private Map allShares = new WeakHashMap();
- private Map createdShares = new WeakHashMap();
- private Map destroyedShares = new WeakHashMap();
-
- public void add(GLContext ctx) {
- if (allShares.put(ctx, dummyValue) == null) {
- // FIXME: downcast to GLContextImpl undesirable
- if (((GLContextImpl) ctx).isCreated()) {
- createdShares.put(ctx, dummyValue);
- } else {
- destroyedShares.put(ctx, dummyValue);
- }
- }
- }
-
- public GLContext getCreatedShare(GLContext ignore) {
- for (Iterator iter = createdShares.keySet().iterator(); iter.hasNext(); ) {
- GLContext ctx = (GLContext) iter.next();
- if (ctx != ignore) {
- return ctx;
- }
- }
- return null;
- }
-
- public void contextCreated(GLContext ctx) {
- Object res = destroyedShares.remove(ctx);
- assert res != null : "State of ShareSet corrupted; thought context " +
- ctx + " should have been in destroyed set but wasn't";
- res = createdShares.put(ctx, dummyValue);
- assert res == null : "State of ShareSet corrupted; thought context " +
- ctx + " shouldn't have been in created set but was";
- }
-
- public void contextDestroyed(GLContext ctx) {
- Object res = createdShares.remove(ctx);
- assert res != null : "State of ShareSet corrupted; thought context " +
- ctx + " should have been in created set but wasn't";
- res = destroyedShares.put(ctx, dummyValue);
- assert res == null : "State of ShareSet corrupted; thought context " +
- ctx + " shouldn't have been in destroyed set but was";
- }
- }
-
- /** Indicate that contexts <code>share1</code> and
- <code>share2</code> will share textures and display lists. Both
- must be non-null. */
- public static synchronized void registerSharing(GLContext share1, GLContext share2) {
- if (share1 == null || share2 == null) {
- throw new IllegalArgumentException("Both share1 and share2 must be non-null");
- }
- ShareSet share = entryFor(share1);
- if (share == null) {
- share = entryFor(share2);
- }
- if (share == null) {
- share = new ShareSet();
- }
- share.add(share1);
- share.add(share2);
- addEntry(share1, share);
- addEntry(share2, share);
- }
-
- public static synchronized GLContext getShareContext(GLContext contextToCreate) {
- ShareSet share = entryFor(contextToCreate);
- if (share == null) {
- return null;
- }
- return share.getCreatedShare(contextToCreate);
- }
-
- public static synchronized void contextCreated(GLContext context) {
- ShareSet share = entryFor(context);
- if (share != null) {
- share.contextCreated(context);
- }
- }
-
- public static synchronized void contextDestroyed(GLContext context) {
- ShareSet share = entryFor(context);
- if (share != null) {
- share.contextDestroyed(context);
- }
- }
-
- /** Indicates that the two supplied contexts (which must be able to
- share textures and display lists) should be in the same
- namespace for tracking of server-side object creation and
- deletion. Because the sharing necessary behind the scenes is
- different than that requested at the user level, the two notions
- are different. This must be called immediately after the
- creation of the new context (which is the second argument)
- before any server-side OpenGL objects have been created in that
- context. */
- public static void registerForObjectTracking(GLContext olderContextOrNull,
- GLContext newContext,
- GLContext realShareContext) {
- if (isObjectTrackingEnabled() || isObjectTrackingDebuggingEnabled()) {
- GLContextImpl impl1 = null;
- GLContextImpl impl2 = null;
- GLObjectTracker tracker = null;
-
- synchronized (GLContextShareSet.class) {
- if (olderContextOrNull != null &&
- newContext != null) {
- if (entryFor(olderContextOrNull) != entryFor(newContext)) {
- throw new IllegalArgumentException("old and new contexts must be able to share textures and display lists");
- }
- }
-
- // FIXME: downcast to GLContextImpl undesirable
- impl1 = (GLContextImpl) olderContextOrNull;
- impl2 = (GLContextImpl) newContext;
-
- GLObjectTracker deletedObjectTracker = null;
- GLContextImpl shareImpl = (GLContextImpl) realShareContext;
- // Before we zap the "user-level" object trackers, make sure
- // that all contexts in the share set share the destroyed object
- // tracker
- if (shareImpl != null) {
- deletedObjectTracker = shareImpl.getDeletedObjectTracker();
- }
- if (deletedObjectTracker == null) {
- // Must create one and possibly set it up in the older context
- deletedObjectTracker = new GLObjectTracker();
- if (DEBUG) {
- System.err.println("Created deletedObjectTracker " + deletedObjectTracker + " because " +
- ((shareImpl == null) ? "shareImpl was null" : "shareImpl's (" + shareImpl + ") deletedObjectTracker was null"));
- }
-
- if (shareImpl != null) {
- // FIXME: think should really assert in this case
- shareImpl.setDeletedObjectTracker(deletedObjectTracker);
- if (DEBUG) {
- System.err.println("Set deletedObjectTracker " + deletedObjectTracker + " in shareImpl context " + shareImpl);
- }
- }
- }
- impl2.setDeletedObjectTracker(deletedObjectTracker);
- if (DEBUG) {
- System.err.println("Set deletedObjectTracker " + deletedObjectTracker + " in impl2 context " + impl2);
- }
- }
-
- // Must not hold lock around this operation
- // Don't share object trackers with the primordial share context from Java2D
- if (Java2D.isOGLPipelineActive()) {
- // FIXME: probably need to do something different here
- // Need to be able to figure out the GraphicsDevice for the
- // older context if it's on-screen
- GraphicsConfiguration gc = GraphicsEnvironment.
- getLocalGraphicsEnvironment().
- getDefaultScreenDevice().
- getDefaultConfiguration();
- GLContext j2dShareContext = Java2D.getShareContext(gc);
- if (impl1 != null && impl1 == j2dShareContext) {
- impl1 = null;
- }
- }
-
- synchronized (GLContextShareSet.class) {
- if (impl1 != null) {
- tracker = impl1.getObjectTracker();
- assert (tracker != null)
- : "registerForObjectTracking was not called properly for the older context";
- }
- if (tracker == null) {
- tracker = new GLObjectTracker();
- }
- // Note that we don't assert that the tracker is non-null for
- // impl2 because the way we use this functionality we actually
- // overwrite the initially-set object tracker in the new context
- impl2.setObjectTracker(tracker);
- }
- }
- }
-
- /** In order to avoid glGet calls for buffer object checks related
- to glVertexPointer, etc. calls as well as glMapBuffer calls, we
- need to share the same GLBufferSizeTracker object between
- contexts sharing textures and display lists. For now we keep
- this mechanism orthogonal to the GLObjectTracker to hopefully
- keep things easier to understand. (The GLObjectTracker is
- currently only needed in a fairly esoteric case, when the
- Java2D/JOGL bridge is active, but the GLBufferSizeTracker
- mechanism is now always required.) */
- public static void registerForBufferObjectSharing(GLContext olderContextOrNull, GLContext newContext) {
- // FIXME: downcasts to GLContextImpl undesirable
- GLContextImpl older = (GLContextImpl) olderContextOrNull;
- GLContextImpl newer = (GLContextImpl) newContext;
- GLBufferSizeTracker tracker = null;
- if (older != null) {
- tracker = older.getBufferSizeTracker();
- assert (tracker != null)
- : "registerForBufferObjectSharing was not called properly for the older context, or has a bug in it";
- }
- if (tracker == null) {
- tracker = new GLBufferSizeTracker();
- }
- newer.setBufferSizeTracker(tracker);
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private static ShareSet entryFor(GLContext context) {
- return (ShareSet) shareMap.get(context);
- }
-
- private static void addEntry(GLContext context, ShareSet share) {
- if (shareMap.get(context) == null) {
- shareMap.put(context, share);
- }
- }
-
- private static boolean isObjectTrackingEnabled() {
- return ((Java2D.isOGLPipelineActive() && Java2D.isFBOEnabled()) ||
- isObjectTrackingDebuggingEnabled());
- }
-
- private static boolean isObjectTrackingDebuggingEnabled() {
- return forceTracking;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLDrawableFactoryImpl.java b/src/classes/com/sun/opengl/impl/GLDrawableFactoryImpl.java
deleted file mode 100644
index d5b14c099..000000000
--- a/src/classes/com/sun/opengl/impl/GLDrawableFactoryImpl.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.nio.*;
-import javax.media.opengl.*;
-import com.sun.gluegen.runtime.*;
-
-/** Extends GLDrawableFactory with a few methods for handling
- typically software-accelerated offscreen rendering (Device
- Independent Bitmaps on Windows, pixmaps on X11). Direct access to
- these GLDrawables is not supplied directly to end users, though
- they may be instantiated by the GLJPanel implementation. */
-public abstract class GLDrawableFactoryImpl extends GLDrawableFactory implements DynamicLookupHelper {
- /** Creates a (typically software-accelerated) offscreen GLDrawable
- used to implement the fallback rendering path of the
- GLJPanel. */
- public abstract GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser);
-
- /** Dynamically looks up the given function. */
- public abstract long dynamicLookupFunction(String glFuncName);
-
- /** Locks the AWT for the purposes of Java2D/JOGL integration. This
- * is not necessary on some platforms.
- */
- public abstract void lockAWTForJava2D();
-
- /** Unlocks the AWT for the purposes of Java2D/JOGL integration.
- * This is not necessary on some platforms.
- */
- public abstract void unlockAWTForJava2D();
-
- public static GLDrawableFactoryImpl getFactoryImpl() {
- return (GLDrawableFactoryImpl) getFactory();
- }
-
- // Helper function for more lazily loading the GLU library;
- // apparently can't use System.loadLibrary on UNIX because it uses
- // RTLD_LOCAL and we need to call dlsym(RTLD_DEFAULT)
- public abstract void loadGLULibrary();
-
- //---------------------------------------------------------------------------
- // Support for Java2D/JOGL bridge on Mac OS X; the external
- // GLDrawable mechanism in the public API is sufficienit to
- // implement this functionality on all other platforms
- //
-
- public abstract boolean canCreateContextOnJava2DSurface();
-
- public abstract GLContext createContextOnJava2DSurface(Graphics g, GLContext shareWith)
- throws GLException;
-
- //----------------------------------------------------------------------
- // Gamma adjustment support
- // Thanks to the LWJGL team for illustrating how to make these
- // adjustments on various OSs.
-
- /*
- * Portions Copyright (c) 2002-2004 LWJGL Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of 'LWJGL' nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /**
- * Sets the gamma, brightness, and contrast of the current main
- * display. Returns true if the settings were changed, false if
- * not. If this method returns true, the display settings will
- * automatically be reset upon JVM exit (assuming the JVM does not
- * crash); if the user wishes to change the display settings back to
- * normal ahead of time, use resetDisplayGamma(). Throws
- * IllegalArgumentException if any of the parameters were
- * out-of-bounds.
- *
- * @param gamma The gamma value, typically > 1.0 (default value is
- * 1.0)
- * @param brightness The brightness value between -1.0 and 1.0,
- * inclusive (default value is 0)
- * @param contrast The contrast, greater than 0.0 (default value is 1)
- * @throws IllegalArgumentException if any of the parameters were
- * out-of-bounds
- */
- public boolean setDisplayGamma(float gamma, float brightness, float contrast) throws IllegalArgumentException {
- if ((brightness < -1.0f) || (brightness > 1.0f)) {
- throw new IllegalArgumentException("Brightness must be between -1.0 and 1.0");
- }
- if (contrast < 0) {
- throw new IllegalArgumentException("Contrast must be greater than 0.0");
- }
- // FIXME: ensure gamma is > 1.0? Are smaller / negative values legal?
- int rampLength = getGammaRampLength();
- if (rampLength == 0) {
- return false;
- }
- float[] gammaRamp = new float[rampLength];
- for (int i = 0; i < rampLength; i++) {
- float intensity = (float) i / (float) (rampLength - 1);
- // apply gamma
- float rampEntry = (float) java.lang.Math.pow(intensity, gamma);
- // apply brightness
- rampEntry += brightness;
- // apply contrast
- rampEntry = (rampEntry - 0.5f) * contrast + 0.5f;
- // Clamp entry to [0, 1]
- if (rampEntry > 1.0f)
- rampEntry = 1.0f;
- else if (rampEntry < 0.0f)
- rampEntry = 0.0f;
- gammaRamp[i] = rampEntry;
- }
- registerGammaShutdownHook();
- return setGammaRamp(gammaRamp);
- }
-
- public synchronized void resetDisplayGamma() {
- if (gammaShutdownHook == null) {
- throw new IllegalArgumentException("Should not call this unless setDisplayGamma called first");
- }
- resetGammaRamp(originalGammaRamp);
- unregisterGammeShutdownHook();
- }
-
- //------------------------------------------------------
- // Gamma-related methods to be implemented by subclasses
- //
-
- /** Returns the length of the computed gamma ramp for this OS and
- hardware. Returns 0 if gamma changes are not supported. */
- protected int getGammaRampLength() {
- return 0;
- }
-
- /** Sets the gamma ramp for the main screen. Returns false if gamma
- ramp changes were not supported. */
- protected boolean setGammaRamp(float[] ramp) {
- return false;
- }
-
- /** Gets the current gamma ramp. This is basically an opaque value
- used only on some platforms to reset the gamma ramp to its
- original settings. */
- protected Buffer getGammaRamp() {
- return null;
- }
-
- /** Resets the gamma ramp, potentially using the specified Buffer as
- data to restore the original values. */
- protected void resetGammaRamp(Buffer originalGammaRamp) {
- }
-
- // Shutdown hook mechanism for resetting gamma
- private boolean gammaShutdownHookRegistered;
- private Thread gammaShutdownHook;
- private Buffer originalGammaRamp;
- private synchronized void registerGammaShutdownHook() {
- if (gammaShutdownHookRegistered)
- return;
- if (gammaShutdownHook == null) {
- gammaShutdownHook = new Thread(new Runnable() {
- public void run() {
- synchronized (GLDrawableFactoryImpl.this) {
- resetGammaRamp(originalGammaRamp);
- }
- }
- });
- originalGammaRamp = getGammaRamp();
- }
- Runtime.getRuntime().addShutdownHook(gammaShutdownHook);
- gammaShutdownHookRegistered = true;
- }
-
- private synchronized void unregisterGammeShutdownHook() {
- if (!gammaShutdownHookRegistered)
- return;
- if (gammaShutdownHook == null) {
- throw new InternalError("Error in gamma shutdown hook logic");
- }
- Runtime.getRuntime().removeShutdownHook(gammaShutdownHook);
- gammaShutdownHookRegistered = false;
- // Leave the original gamma ramp data alone
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLDrawableHelper.java b/src/classes/com/sun/opengl/impl/GLDrawableHelper.java
deleted file mode 100644
index 2a96e2958..000000000
--- a/src/classes/com/sun/opengl/impl/GLDrawableHelper.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.util.*;
-import javax.media.opengl.*;
-
-/** Encapsulates the implementation of most of the GLAutoDrawable's
- methods to be able to share it between GLCanvas and GLJPanel. */
-
-public class GLDrawableHelper {
- private volatile List listeners = new ArrayList();
- private static final boolean DEBUG = Debug.debug("GLDrawableHelper");
- private static final boolean VERBOSE = Debug.verbose();
- private static final boolean NVIDIA_CRASH_WORKAROUND = Debug.isPropertyDefined("jogl.nvidia.crash.workaround");
- private boolean autoSwapBufferMode = true;
-
- public GLDrawableHelper() {
- }
-
- public synchronized void addGLEventListener(GLEventListener listener) {
- List newListeners = (List) ((ArrayList) listeners).clone();
- newListeners.add(listener);
- listeners = newListeners;
- }
-
- public synchronized void removeGLEventListener(GLEventListener listener) {
- List newListeners = (List) ((ArrayList) listeners).clone();
- newListeners.remove(listener);
- listeners = newListeners;
- }
-
- public void init(GLAutoDrawable drawable) {
- for (Iterator iter = listeners.iterator(); iter.hasNext(); ) {
- ((GLEventListener) iter.next()).init(drawable);
- }
- }
-
- public void display(GLAutoDrawable drawable) {
- for (Iterator iter = listeners.iterator(); iter.hasNext(); ) {
- ((GLEventListener) iter.next()).display(drawable);
- }
- }
-
- public void reshape(GLAutoDrawable drawable,
- int x, int y, int width, int height) {
- for (Iterator iter = listeners.iterator(); iter.hasNext(); ) {
- ((GLEventListener) iter.next()).reshape(drawable, x, y, width, height);
- }
- }
-
- public void setAutoSwapBufferMode(boolean onOrOff) {
- autoSwapBufferMode = onOrOff;
- }
-
- public boolean getAutoSwapBufferMode() {
- return autoSwapBufferMode;
- }
-
- private static final ThreadLocal perThreadInitAction = new ThreadLocal();
- /** Principal helper method which runs a Runnable with the context
- made current. This could have been made part of GLContext, but a
- desired goal is to be able to implement the GLCanvas in terms of
- the GLContext's public APIs, and putting it into a separate
- class helps ensure that we don't inadvertently use private
- methods of the GLContext or its implementing classes. */
- public void invokeGL(GLDrawable drawable,
- GLContext context,
- Runnable runnable,
- Runnable initAction) {
- // FIXME: downcast to GLContextImpl undesirable
- boolean isOptimizable = ((context instanceof GLContextImpl) &&
- ((GLContextImpl) context).isOptimizable());
-
- if (GLWorkerThread.isStarted() &&
- GLWorkerThread.isWorkerThread() &&
- isOptimizable) {
- // We're going to allow a context to be left current on the
- // GLWorkerThread for optimization purposes
- GLContext lastContext = GLContext.getCurrent();
- Runnable lastInitAction = (Runnable) perThreadInitAction.get();
- if (lastContext != null && lastContext != context) {
- lastContext.release();
- } else {
- lastContext = null;
- }
-
- // FIXME: probably need to handle the case where the user is
- // waiting for this context to be released; need to periodically
- // release the context? See if anybody is waiting to make it
- // current on another thread? (The latter would require the use
- // of internal APIs...)
-
- int res = 0;
- try {
- res = context.makeCurrent();
- if (res != GLContext.CONTEXT_NOT_CURRENT) {
- perThreadInitAction.set(initAction);
- if (res == GLContext.CONTEXT_CURRENT_NEW) {
- if (DEBUG) {
- System.err.println("GLDrawableHelper " + this + ".invokeGL(): Running initAction");
- }
- initAction.run();
- }
- if (DEBUG && VERBOSE) {
- System.err.println("GLDrawableHelper " + this + ".invokeGL(): Running runnable");
- }
- runnable.run();
- if (autoSwapBufferMode) {
- if (drawable != null) {
- drawable.swapBuffers();
- }
- }
- }
- } finally {
-
- // FIXME: take this out as soon as possible
- if (NVIDIA_CRASH_WORKAROUND) {
- try {
- if (res != GLContext.CONTEXT_NOT_CURRENT) {
- context.release();
- }
- } catch (Exception e) {
- }
- }
-
- if (lastContext != null) {
- int res2 = lastContext.makeCurrent();
- if (res2 == GLContext.CONTEXT_CURRENT_NEW) {
- lastInitAction.run();
- }
- }
- }
- } else {
- // Support for recursive makeCurrent() calls as well as calling
- // other drawables' display() methods from within another one's
- GLContext lastContext = GLContext.getCurrent();
- Runnable lastInitAction = (Runnable) perThreadInitAction.get();
- if (lastContext != null) {
- lastContext.release();
- }
-
- int res = 0;
- try {
- res = context.makeCurrent();
- if (res != GLContext.CONTEXT_NOT_CURRENT) {
- perThreadInitAction.set(initAction);
- if (res == GLContext.CONTEXT_CURRENT_NEW) {
- if (DEBUG) {
- System.err.println("GLDrawableHelper " + this + ".invokeGL(): Running initAction");
- }
- initAction.run();
- }
- if (DEBUG && VERBOSE) {
- System.err.println("GLDrawableHelper " + this + ".invokeGL(): Running runnable");
- }
- runnable.run();
- if (autoSwapBufferMode) {
- if (drawable != null) {
- drawable.swapBuffers();
- }
- }
- }
- } finally {
- try {
- if (res != GLContext.CONTEXT_NOT_CURRENT) {
- context.release();
- }
- } catch (Exception e) {
- }
- if (lastContext != null) {
- int res2 = lastContext.makeCurrent();
- if (res2 == GLContext.CONTEXT_CURRENT_NEW) {
- lastInitAction.run();
- }
- }
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLDrawableImpl.java b/src/classes/com/sun/opengl/impl/GLDrawableImpl.java
deleted file mode 100644
index df1aab796..000000000
--- a/src/classes/com/sun/opengl/impl/GLDrawableImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import javax.media.opengl.*;
-
-public abstract class GLDrawableImpl implements GLDrawable {
- private GLCapabilities chosenCapabilities;
-
- /** For offscreen GLDrawables (pbuffers and "pixmap" drawables),
- indicates that native resources should be reclaimed. */
- public abstract void destroy() throws GLException;
-
- public static String toHexString(long hex) {
- return GLContextImpl.toHexString(hex);
- }
-
- public GLCapabilities getChosenGLCapabilities() {
- if (chosenCapabilities == null)
- return null;
-
- // Must return a new copy to avoid mutation by end user
- return (GLCapabilities) chosenCapabilities.clone();
- }
-
- public void setChosenGLCapabilities(GLCapabilities caps) {
- chosenCapabilities = caps;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLObjectTracker.java b/src/classes/com/sun/opengl/impl/GLObjectTracker.java
deleted file mode 100755
index dec7892de..000000000
--- a/src/classes/com/sun/opengl/impl/GLObjectTracker.java
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.nio.*;
-import javax.media.opengl.*;
-
-/**
- * Tracks the creation of server-side OpenGL objects which can be
- * shared between contexts. Ordinarily, when an OpenGL context is
- * deleted and no other contexts are sharing server-side objects with
- * it, all of the server-side objects are automatically deleted by the
- * OpenGL implementation. It is not necessary for the end user to
- * explicitly delete these objects. However, when the Java2D/OpenGL
- * pipeline is active and frame buffer objects are being used for
- * rendering, it is necessary for all OpenGL contexts created by JOGL
- * to share server-side objects with the Java2D OpenGL context. This
- * means that these objects "leak" into the namespace used by Java2D.
- * In order to prevent memory leaks and to present the same
- * programming model to the end user, it is necessary to track the
- * creation and destruction of all of these server-side OpenGL objects
- * and to explicitly release them when all of the JOGL-created
- * contexts which can see them have been released. <P>
- *
- * The {@link #ref ref} and {@link #unref unref} methods should be
- * used during the creation and destruction of OpenGL contexts by JOGL
- * in order to update the liveness of the objects being tracked. The
- * various other methods should be called by the OpenGL binding in the
- * various named methods.
- */
-
-public class GLObjectTracker {
- private static final boolean DEBUG = Debug.debug("GLObjectTracker");
-
- //----------------------------------------------------------------------
- // Adders
- //
-
- // glGenBuffers
- public synchronized void addBuffers(int n, IntBuffer ids) {
- add(getList(BUFFERS), n, ids);
- }
-
- // glGenBuffers
- public synchronized void addBuffers(int n, int[] ids, int ids_offset) {
- add(getList(BUFFERS), n, ids, ids_offset);
- }
-
- // glGenBuffersARB
- public synchronized void addBuffersARB(int n, IntBuffer ids) {
- add(getList(BUFFERS_ARB), n, ids);
- }
-
- // glGenBuffersARB
- public synchronized void addBuffersARB(int n, int[] ids, int ids_offset) {
- add(getList(BUFFERS_ARB), n, ids, ids_offset);
- }
-
- // glGenFencesAPPLE
- public synchronized void addFencesAPPLE(int n, IntBuffer ids) {
- add(getList(FENCES_APPLE), n, ids);
- }
-
- // glGenFencesAPPLE
- public synchronized void addFencesAPPLE(int n, int[] ids, int ids_offset) {
- add(getList(FENCES_APPLE), n, ids, ids_offset);
- }
-
- // glGenFencesNV
- public synchronized void addFencesNV(int n, IntBuffer ids) {
- add(getList(FENCES_NV), n, ids);
- }
-
- // glGenFencesNV
- public synchronized void addFencesNV(int n, int[] ids, int ids_offset) {
- add(getList(FENCES_NV), n, ids, ids_offset);
- }
-
- // glGenFragmentShadersATI
- public synchronized void addFragmentShadersATI(int start, int n) {
- add(getList(FRAGMENT_SHADERS_ATI), start, n);
- }
-
- // glGenFramebuffersEXT
- public synchronized void addFramebuffersEXT(int n, IntBuffer ids) {
- add(getList(FRAMEBUFFERS_EXT), n, ids);
- }
-
- // glGenFramebuffersEXT
- public synchronized void addFramebuffersEXT(int n, int[] ids, int ids_offset) {
- add(getList(FRAMEBUFFERS_EXT), n, ids, ids_offset);
- }
-
- // glGenLists
- public synchronized void addLists(int start, int n) {
- add(getList(LISTS), start, n);
- }
-
- // glGenOcclusionQueriesNV
- public synchronized void addOcclusionQueriesNV(int n, IntBuffer ids) {
- add(getList(OCCLUSION_QUERIES_NV), n, ids);
- }
-
- // glGenOcclusionQueriesNV
- public synchronized void addOcclusionQueriesNV(int n, int[] ids, int ids_offset) {
- add(getList(OCCLUSION_QUERIES_NV), n, ids, ids_offset);
- }
-
- // glCreateProgram
- public synchronized void addProgramObject(int obj) {
- add(getList(PROGRAM_OBJECTS), obj, 1);
- }
-
- // glCreateProgramObjectARB
- public synchronized void addProgramObjectARB(int obj) {
- add(getList(PROGRAM_AND_SHADER_OBJECTS_ARB), obj, 1);
- }
-
- // glGenProgramsARB
- public synchronized void addProgramsARB(int n, IntBuffer ids) {
- add(getList(PROGRAMS_ARB), n, ids);
- }
-
- // glGenProgramsARB
- public synchronized void addProgramsARB(int n, int[] ids, int ids_offset) {
- add(getList(PROGRAMS_ARB), n, ids, ids_offset);
- }
-
- // glGenProgramsNV
- public synchronized void addProgramsNV(int n, IntBuffer ids) {
- add(getList(PROGRAMS_NV), n, ids);
- }
-
- // glGenProgramsNV
- public synchronized void addProgramsNV(int n, int[] ids, int ids_offset) {
- add(getList(PROGRAMS_NV), n, ids, ids_offset);
- }
-
- // glGenQueries
- public synchronized void addQueries(int n, IntBuffer ids) {
- add(getList(QUERIES), n, ids);
- }
-
- // glGenQueries
- public synchronized void addQueries(int n, int[] ids, int ids_offset) {
- add(getList(QUERIES), n, ids, ids_offset);
- }
-
- // glGenQueriesARB
- public synchronized void addQueriesARB(int n, IntBuffer ids) {
- add(getList(QUERIES_ARB), n, ids);
- }
-
- // glGenQueriesARB
- public synchronized void addQueriesARB(int n, int[] ids, int ids_offset) {
- add(getList(QUERIES_ARB), n, ids, ids_offset);
- }
-
- // glGenRenderbuffersEXT
- public synchronized void addRenderbuffersEXT(int n, IntBuffer ids) {
- add(getList(RENDERBUFFERS_EXT), n, ids);
- }
-
- // glGenRenderbuffersEXT
- public synchronized void addRenderbuffersEXT(int n, int[] ids, int ids_offset) {
- add(getList(RENDERBUFFERS_EXT), n, ids, ids_offset);
- }
-
- // glCreateShader
- public synchronized void addShaderObject(int obj) {
- add(getList(SHADER_OBJECTS), obj, 1);
- }
-
- // glCreateShaderObjectARB
- public synchronized void addShaderObjectARB(int obj) {
- add(getList(PROGRAM_AND_SHADER_OBJECTS_ARB), obj, 1);
- }
-
- // glGenTextures
- public synchronized void addTextures(int n, IntBuffer ids) {
- add(getList(TEXTURES), n, ids);
- }
-
- // glGenTextures
- public synchronized void addTextures(int n, int[] ids, int ids_offset) {
- add(getList(TEXTURES), n, ids, ids_offset);
- }
-
- // glGenVertexArraysAPPLE
- public synchronized void addVertexArraysAPPLE(int n, IntBuffer ids) {
- add(getList(VERTEX_ARRAYS_APPLE), n, ids);
- }
-
- // glGenVertexArraysAPPLE
- public synchronized void addVertexArraysAPPLE(int n, int[] ids, int ids_offset) {
- add(getList(VERTEX_ARRAYS_APPLE), n, ids, ids_offset);
- }
-
- // glGenVertexShadersEXT
- public synchronized void addVertexShadersEXT(int start, int n) {
- add(getList(VERTEX_SHADERS_EXT), start, n);
- }
-
- //----------------------------------------------------------------------
- // Removers
- //
-
- // glDeleteBuffers
- public synchronized void removeBuffers(int n, IntBuffer ids) {
- remove(getList(BUFFERS), n, ids);
- }
-
- // glDeleteBuffers
- public synchronized void removeBuffers(int n, int[] ids, int ids_offset) {
- remove(getList(BUFFERS), n, ids, ids_offset);
- }
-
- // glDeleteBuffersARB
- public synchronized void removeBuffersARB(int n, IntBuffer ids) {
- remove(getList(BUFFERS_ARB), n, ids);
- }
-
- // glDeleteBuffersARB
- public synchronized void removeBuffersARB(int n, int[] ids, int ids_offset) {
- remove(getList(BUFFERS_ARB), n, ids, ids_offset);
- }
-
- // glDeleteFencesAPPLE
- public synchronized void removeFencesAPPLE(int n, IntBuffer ids) {
- remove(getList(FENCES_APPLE), n, ids);
- }
-
- // glDeleteFencesAPPLE
- public synchronized void removeFencesAPPLE(int n, int[] ids, int ids_offset) {
- remove(getList(FENCES_APPLE), n, ids, ids_offset);
- }
-
- // glDeleteFencesNV
- public synchronized void removeFencesNV(int n, IntBuffer ids) {
- remove(getList(FENCES_NV), n, ids);
- }
-
- // glDeleteFencesNV
- public synchronized void removeFencesNV(int n, int[] ids, int ids_offset) {
- remove(getList(FENCES_NV), n, ids, ids_offset);
- }
-
- // glDeleteFragmentShaderATI
- public synchronized void removeFragmentShaderATI(int obj) {
- remove(getList(FRAGMENT_SHADERS_ATI), obj, 1);
- }
-
- // glDeleteFramebuffersEXT
- public synchronized void removeFramebuffersEXT(int n, IntBuffer ids) {
- remove(getList(FRAMEBUFFERS_EXT), n, ids);
- }
-
- // glDeleteFramebuffersEXT
- public synchronized void removeFramebuffersEXT(int n, int[] ids, int ids_offset) {
- remove(getList(FRAMEBUFFERS_EXT), n, ids, ids_offset);
- }
-
- // glDeleteLists
- public synchronized void removeLists(int start, int n) {
- remove(getList(LISTS), start, n);
- }
-
- // glDeleteOcclusionQueriesNV
- public synchronized void removeOcclusionQueriesNV(int n, IntBuffer ids) {
- remove(getList(OCCLUSION_QUERIES_NV), n, ids);
- }
-
- // glDeleteOcclusionQueriesNV
- public synchronized void removeOcclusionQueriesNV(int n, int[] ids, int ids_offset) {
- remove(getList(OCCLUSION_QUERIES_NV), n, ids, ids_offset);
- }
-
- // glDeleteProgram
- public synchronized void removeProgramObject(int obj) {
- remove(getList(PROGRAM_OBJECTS), obj, 1);
- }
-
- // glDeleteObjectARB
- public synchronized void removeProgramOrShaderObjectARB(int obj) {
- remove(getList(PROGRAM_AND_SHADER_OBJECTS_ARB), obj, 1);
- }
-
- // glDeleteProgramsARB
- public synchronized void removeProgramsARB(int n, IntBuffer ids) {
- remove(getList(PROGRAMS_ARB), n, ids);
- }
-
- // glDeleteProgramsARB
- public synchronized void removeProgramsARB(int n, int[] ids, int ids_offset) {
- remove(getList(PROGRAMS_ARB), n, ids, ids_offset);
- }
-
- // glDeleteProgramsNV
- public synchronized void removeProgramsNV(int n, IntBuffer ids) {
- remove(getList(PROGRAMS_NV), n, ids);
- }
-
- // glDeleteProgramsNV
- public synchronized void removeProgramsNV(int n, int[] ids, int ids_offset) {
- remove(getList(PROGRAMS_NV), n, ids, ids_offset);
- }
-
- // glDeleteQueries
- public synchronized void removeQueries(int n, IntBuffer ids) {
- remove(getList(QUERIES), n, ids);
- }
-
- // glDeleteQueries
- public synchronized void removeQueries(int n, int[] ids, int ids_offset) {
- remove(getList(QUERIES), n, ids, ids_offset);
- }
-
- // glDeleteQueriesARB
- public synchronized void removeQueriesARB(int n, IntBuffer ids) {
- remove(getList(QUERIES_ARB), n, ids);
- }
-
- // glDeleteQueriesARB
- public synchronized void removeQueriesARB(int n, int[] ids, int ids_offset) {
- remove(getList(QUERIES_ARB), n, ids, ids_offset);
- }
-
- // glDeleteRenderbuffersEXT
- public synchronized void removeRenderbuffersEXT(int n, IntBuffer ids) {
- remove(getList(RENDERBUFFERS_EXT), n, ids);
- }
-
- // glDeleteRenderbuffersEXT
- public synchronized void removeRenderbuffersEXT(int n, int[] ids, int ids_offset) {
- remove(getList(RENDERBUFFERS_EXT), n, ids, ids_offset);
- }
-
- // glDeleteShader
- public synchronized void removeShaderObject(int obj) {
- remove(getList(SHADER_OBJECTS), obj, 1);
- }
-
- // glDeleteTextures
- public synchronized void removeTextures(int n, IntBuffer ids) {
- remove(getList(TEXTURES), n, ids);
- }
-
- // glDeleteTextures
- public synchronized void removeTextures(int n, int[] ids, int ids_offset) {
- remove(getList(TEXTURES), n, ids, ids_offset);
- }
-
- // glDeleteVertexArraysAPPLE
- public synchronized void removeVertexArraysAPPLE(int n, IntBuffer ids) {
- remove(getList(VERTEX_ARRAYS_APPLE), n, ids);
- }
-
- // glDeleteVertexArraysAPPLE
- public synchronized void removeVertexArraysAPPLE(int n, int[] ids, int ids_offset) {
- remove(getList(VERTEX_ARRAYS_APPLE), n, ids, ids_offset);
- }
-
- // glDeleteVertexShaderEXT
- public synchronized void removeVertexShaderEXT(int obj) {
- remove(getList(VERTEX_SHADERS_EXT), obj, 1);
- }
-
- //----------------------------------------------------------------------
- // Reference count maintenance and manual deletion
- //
-
- public synchronized void transferAll(GLObjectTracker other) {
- for (int i = 0; i < lists.length; i++) {
- getList(i).addAll(other.lists[i]);
- if (other.lists[i] != null) {
- other.lists[i].clear();
- }
- }
- dirty = true;
- }
-
- public synchronized void ref() {
- ++refCount;
- }
-
- public void unref(GLObjectTracker deletedObjectPool) {
- boolean tryDelete = false;
- synchronized (this) {
- if (--refCount == 0) {
- tryDelete = true;
- }
- }
- if (tryDelete) {
- // See whether we should try to do the work now or whether we
- // have to postpone
- GLContext cur = GLContext.getCurrent();
- if ((cur != null) &&
- (cur instanceof GLContextImpl)) {
- GLContextImpl curImpl = (GLContextImpl) cur;
- if (deletedObjectPool != null &&
- deletedObjectPool == curImpl.getDeletedObjectTracker()) {
- // Should be safe to delete these objects now
- try {
- delete(curImpl.getGL());
- return;
- } catch (GLException e) {
- // Shouldn't happen, but if it does, transfer all objects
- // to the deleted object pool hoping we can later clean
- // them up
- deletedObjectPool.transferAll(this);
- throw(e);
- }
- }
- }
- // If we get here, we couldn't attempt to delete the objects
- // right now; instead try to transfer them to the
- // deletedObjectPool for later cleanup (FIXME: should consider
- // throwing an exception if deletedObjectPool is null, since
- // that shouldn't happen)
- if (DEBUG) {
- String s = null;
- if (cur == null) {
- s = "current context was null";
- } else if (!(cur instanceof GLContextImpl)) {
- s = "current context was not a GLContextImpl";
- } else if (deletedObjectPool == null) {
- s = "no current deletedObjectPool";
- } else if (deletedObjectPool != ((GLContextImpl) cur).getDeletedObjectTracker()) {
- s = "deletedObjectTracker didn't match";
- if (((GLContextImpl) cur).getDeletedObjectTracker() == null) {
- s += " (other was null)";
- }
- } else {
- s = "unknown reason";
- }
- System.err.println("Deferred destruction of server-side OpenGL objects into " + deletedObjectPool + ": " + s);
- }
-
- if (deletedObjectPool != null) {
- deletedObjectPool.transferAll(this);
- }
- }
- }
-
- public void clean(GL gl) {
- if (dirty) {
- try {
- delete(gl);
- dirty = false;
- } catch (GLException e) {
- // FIXME: not sure what to do here; probably a bad idea to be
- // throwing exceptions during an otherwise-successful makeCurrent
- }
- }
- }
-
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- // Kinds of sharable server-side OpenGL objects this class tracks
- private static final int BUFFERS = 0;
- private static final int BUFFERS_ARB = 1;
- private static final int FENCES_APPLE = 2;
- private static final int FENCES_NV = 3;
- private static final int FRAGMENT_SHADERS_ATI = 4;
- private static final int FRAMEBUFFERS_EXT = 5;
- private static final int LISTS = 6;
- private static final int OCCLUSION_QUERIES_NV = 7;
- private static final int PROGRAM_AND_SHADER_OBJECTS_ARB = 8;
- private static final int PROGRAM_OBJECTS = 9;
- private static final int PROGRAMS_ARB = 10;
- private static final int PROGRAMS_NV = 11;
- private static final int QUERIES = 12;
- private static final int QUERIES_ARB = 13;
- private static final int RENDERBUFFERS_EXT = 14;
- private static final int SHADER_OBJECTS = 15;
- private static final int TEXTURES = 16;
- private static final int VERTEX_ARRAYS_APPLE = 17;
- private static final int VERTEX_SHADERS_EXT = 18;
- private static final int NUM_OBJECT_TYPES = 19;
-
- static abstract class Deleter {
- public abstract void delete(GL gl, int obj);
- }
-
- static class ObjectList {
- private static final int MIN_CAPACITY = 4;
-
- private int size;
- private int capacity;
- private int[] data;
- private Deleter deleter;
- private String name;
-
- public ObjectList(Deleter deleter) {
- this.deleter = deleter;
- clear();
- }
-
- public void add(int obj) {
- if (size == capacity) {
- int newCapacity = 2 * capacity;
- int[] newData = new int[newCapacity];
- System.arraycopy(data, 0, newData, 0, size);
- data = newData;
- capacity = newCapacity;
- }
-
- data[size++] = obj;
- }
-
- public void addAll(ObjectList other) {
- if (other == null) {
- return;
- }
- for (int i = 0; i < other.size; i++) {
- add(other.data[i]);
- }
- }
-
- public boolean remove(int value) {
- for (int i = 0; i < size; i++) {
- if (data[i] == value) {
- if (i < size - 1) {
- System.arraycopy(data, i+1, data, i, size - i - 1);
- }
- --size;
- if ((size < capacity / 4) &&
- (capacity > MIN_CAPACITY)) {
- int newCapacity = capacity / 4;
- if (newCapacity < MIN_CAPACITY) {
- newCapacity = MIN_CAPACITY;
- }
- int[] newData = new int[newCapacity];
- System.arraycopy(data, 0, newData, 0, size);
- data = newData;
- capacity = newCapacity;
- }
- return true;
- }
- }
- return false;
- }
-
- public void setName(String name) {
- if (DEBUG) {
- this.name = name;
- }
- }
-
- public void delete(GL gl) {
- // Just in case we start throwing exceptions during deletion,
- // make sure we make progress rather than going into an infinite
- // loop
- while (size > 0) {
- int obj = data[size - 1];
- --size;
- if (DEBUG) {
- System.err.println("Deleting server-side OpenGL object " + obj +
- ((name != null) ? (" (" + name + ")") : ""));
- }
- deleter.delete(gl, obj);
- }
- }
-
- public void clear() {
- size = 0;
- capacity = MIN_CAPACITY;
- data = new int[capacity];
- }
- }
-
- private ObjectList[] lists = new ObjectList[NUM_OBJECT_TYPES];
- private int refCount;
- private boolean dirty;
-
- private void add(ObjectList list, int n, IntBuffer ids) {
- int pos = ids.position();
- for (int i = 0; i < n; i++) {
- list.add(ids.get(pos + i));
- }
- }
-
- private void add(ObjectList list, int n, int[] ids, int ids_offset) {
- for (int i = 0; i < n; i++) {
- list.add(ids[i + ids_offset]);
- }
- }
-
- private void add(ObjectList list, int start, int n) {
- for (int i = 0; i < n; i++) {
- list.add(start + i);
- }
- }
-
- private void remove(ObjectList list, int n, IntBuffer ids) {
- int pos = ids.position();
- for (int i = 0; i < n; i++) {
- list.remove(ids.get(pos + i));
- }
- }
-
- private void remove(ObjectList list, int n, int[] ids, int ids_offset) {
- for (int i = 0; i < n; i++) {
- list.remove(ids[i + ids_offset]);
- }
- }
-
- private void remove(ObjectList list, int start, int n) {
- for (int i = 0; i < n; i++) {
- list.remove(start + i);
- }
- }
-
- private ObjectList getList(int which) {
- ObjectList list = lists[which];
- if (list == null) {
- Deleter deleter = null;
- String name = null;
- // Figure out which deleter we need
- switch (which) {
- case BUFFERS:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteBuffers(1, new int[] { obj }, 0);
- }
- };
- name = "buffer";
- break;
- case BUFFERS_ARB:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteBuffersARB(1, new int[] { obj }, 0);
- }
- };
- name = "ARB buffer";
- break;
- case FENCES_APPLE:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteFencesAPPLE(1, new int[] { obj }, 0);
- }
- };
- name = "APPLE fence";
- break;
- case FENCES_NV:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteFencesNV(1, new int[] { obj }, 0);
- }
- };
- name = "NV fence";
- break;
- case FRAGMENT_SHADERS_ATI:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteFragmentShaderATI(obj);
- }
- };
- name = "ATI fragment shader";
- break;
- case FRAMEBUFFERS_EXT:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteFramebuffersEXT(1, new int[] { obj }, 0);
- }
- };
- name = "EXT framebuffer";
- break;
- case LISTS:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteLists(obj, 1);
- }
- };
- name = "display list";
- break;
- case OCCLUSION_QUERIES_NV:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteOcclusionQueriesNV(1, new int[] { obj }, 0);
- }
- };
- name = "NV occlusion query";
- break;
- case PROGRAM_AND_SHADER_OBJECTS_ARB:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteObjectARB(obj);
- }
- };
- name = "ARB program or shader object";
- break;
- case PROGRAM_OBJECTS:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteProgram(obj);
- }
- };
- name = "program object";
- break;
- case PROGRAMS_ARB:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteProgramsARB(1, new int[] { obj }, 0);
- }
- };
- name = "ARB program object";
- break;
- case PROGRAMS_NV:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteProgramsNV(1, new int[] { obj }, 0);
- }
- };
- name = "NV program";
- break;
- case QUERIES:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteQueries(1, new int[] { obj }, 0);
- }
- };
- name = "query";
- break;
- case QUERIES_ARB:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteQueriesARB(1, new int[] { obj }, 0);
- }
- };
- name = "ARB query";
- break;
- case RENDERBUFFERS_EXT:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteRenderbuffersEXT(1, new int[] { obj }, 0);
- }
- };
- name = "EXT renderbuffer";
- break;
- case SHADER_OBJECTS:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteShader(obj);
- }
- };
- name = "shader object";
- break;
- case TEXTURES:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteTextures(1, new int[] { obj }, 0);
- }
- };
- name = "texture";
- break;
- case VERTEX_ARRAYS_APPLE:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteVertexArraysAPPLE(1, new int[] { obj }, 0);
- }
- };
- name = "APPLE vertex array";
- break;
- case VERTEX_SHADERS_EXT:
- deleter = new Deleter() {
- public void delete(GL gl, int obj) {
- gl.glDeleteVertexShaderEXT(obj);
- }
- };
- name = "EXT vertex shader";
- break;
- default:
- throw new InternalError("Unexpected OpenGL object type " + which);
- }
-
- list = new ObjectList(deleter);
- list.setName(name);
- lists[which] = list;
- }
- return list;
- }
-
- private void delete(GL gl) {
- for (int i = 0; i < lists.length; i++) {
- ObjectList list = lists[i];
- if (list != null) {
- list.delete(gl);
- lists[i] = null;
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLPbufferImpl.java b/src/classes/com/sun/opengl/impl/GLPbufferImpl.java
deleted file mode 100644
index cf4ae31af..000000000
--- a/src/classes/com/sun/opengl/impl/GLPbufferImpl.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.event.*;
-import java.beans.PropertyChangeListener;
-
-import javax.media.opengl.*;
-
-/** Platform-independent class exposing pbuffer functionality to
- applications. This class is not exposed in the public API as it
- would probably add no value; however it implements the GLDrawable
- interface so can be interacted with via its display() method. */
-
-public class GLPbufferImpl implements GLPbuffer {
- private GLDrawableImpl pbufferDrawable;
- private GLContextImpl context;
- private GLDrawableHelper drawableHelper = new GLDrawableHelper();
- private int floatMode;
-
- public GLPbufferImpl(GLDrawableImpl pbufferDrawable,
- GLContext parentContext) {
- this.pbufferDrawable = pbufferDrawable;
- context = (GLContextImpl) pbufferDrawable.createContext(parentContext);
- context.setSynchronized(true);
- }
-
- public GLContext createContext(GLContext shareWith) {
- return pbufferDrawable.createContext(shareWith);
- }
-
- public void setRealized(boolean realized) {
- }
-
- public void setSize(int width, int height) {
- // FIXME
- throw new GLException("Not yet implemented");
- }
-
- public int getWidth() {
- return pbufferDrawable.getWidth();
- }
-
- public int getHeight() {
- return pbufferDrawable.getHeight();
- }
-
- public void display() {
- maybeDoSingleThreadedWorkaround(displayOnEventDispatchThreadAction,
- displayAction,
- false);
- }
-
- public void repaint() {
- display();
- }
-
- public void addGLEventListener(GLEventListener listener) {
- drawableHelper.addGLEventListener(listener);
- }
-
- public void removeGLEventListener(GLEventListener listener) {
- drawableHelper.removeGLEventListener(listener);
- }
-
- public GLContext getContext() {
- return context;
- }
-
- public GLDrawable getDrawable() {
- return pbufferDrawable;
- }
-
- public GL getGL() {
- return getContext().getGL();
- }
-
- public void setGL(GL gl) {
- getContext().setGL(gl);
- }
-
- public void setAutoSwapBufferMode(boolean onOrOff) {
- drawableHelper.setAutoSwapBufferMode(onOrOff);
- }
-
- public boolean getAutoSwapBufferMode() {
- return drawableHelper.getAutoSwapBufferMode();
- }
-
- public void swapBuffers() {
- maybeDoSingleThreadedWorkaround(swapBuffersOnEventDispatchThreadAction, swapBuffersAction, false);
- }
-
- public void bindTexture() {
- // Doesn't make much sense to try to do this on the event dispatch
- // thread given that it has to be called while the context is current
- context.bindPbufferToTexture();
- }
-
- public void releaseTexture() {
- // Doesn't make much sense to try to do this on the event dispatch
- // thread given that it has to be called while the context is current
- context.releasePbufferFromTexture();
- }
-
- public GLCapabilities getChosenGLCapabilities() {
- if (pbufferDrawable == null)
- return null;
-
- return pbufferDrawable.getChosenGLCapabilities();
- }
-
- //----------------------------------------------------------------------
- // No-ops for ComponentEvents
- //
-
- public void addComponentListener(ComponentListener l) {}
- public void removeComponentListener(ComponentListener l) {}
- public void addFocusListener(FocusListener l) {}
- public void removeFocusListener(FocusListener l) {}
- public void addHierarchyBoundsListener(HierarchyBoundsListener l) {}
- public void removeHierarchyBoundsListener(HierarchyBoundsListener l) {}
- public void addHierarchyListener(HierarchyListener l) {}
- public void removeHierarchyListener(HierarchyListener l) {}
- public void addInputMethodListener(InputMethodListener l) {}
- public void removeInputMethodListener(InputMethodListener l) {}
- public void addKeyListener(KeyListener l) {}
- public void removeKeyListener(KeyListener l) {}
- public void addMouseListener(MouseListener l) {}
- public void removeMouseListener(MouseListener l) {}
- public void addMouseMotionListener(MouseMotionListener l) {}
- public void removeMouseMotionListener(MouseMotionListener l) {}
- public void addMouseWheelListener(MouseWheelListener l) {}
- public void removeMouseWheelListener(MouseWheelListener l) {}
- public void addPropertyChangeListener(PropertyChangeListener listener) {}
- public void removePropertyChangeListener(PropertyChangeListener listener) {}
- public void addPropertyChangeListener(String propertyName,
- PropertyChangeListener listener) {}
- public void removePropertyChangeListener(String propertyName,
- PropertyChangeListener listener) {}
-
- public void destroy() {
- if (Threading.isSingleThreaded() &&
- !Threading.isOpenGLThread()) {
- Threading.invokeOnOpenGLThread(destroyAction);
- } else {
- destroyAction.run();
- }
- }
-
- public int getFloatingPointMode() {
- if (floatMode == 0) {
- throw new GLException("Pbuffer not initialized, or floating-point support not requested");
- }
- return floatMode;
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void maybeDoSingleThreadedWorkaround(Runnable eventDispatchThreadAction,
- Runnable invokeGLAction,
- boolean isReshape) {
- if (Threading.isSingleThreaded() &&
- !Threading.isOpenGLThread()) {
- Threading.invokeOnOpenGLThread(eventDispatchThreadAction);
- } else {
- drawableHelper.invokeGL(pbufferDrawable, context, invokeGLAction, initAction);
- }
- }
-
- class InitAction implements Runnable {
- public void run() {
- floatMode = context.getFloatingPointMode();
- drawableHelper.init(GLPbufferImpl.this);
- }
- }
- private InitAction initAction = new InitAction();
-
- class DisplayAction implements Runnable {
- public void run() {
- drawableHelper.display(GLPbufferImpl.this);
- }
- }
- private DisplayAction displayAction = new DisplayAction();
-
- class SwapBuffersAction implements Runnable {
- // FIXME: currently a no-op
- public void run() {
- pbufferDrawable.swapBuffers();
- }
- }
- private SwapBuffersAction swapBuffersAction = new SwapBuffersAction();
-
- // Workaround for ATI driver bugs related to multithreading issues
- // like simultaneous rendering via Animators to canvases that are
- // being resized on the AWT event dispatch thread
- class DisplayOnEventDispatchThreadAction implements Runnable {
- public void run() {
- drawableHelper.invokeGL(pbufferDrawable, context, displayAction, initAction);
- }
- }
- private DisplayOnEventDispatchThreadAction displayOnEventDispatchThreadAction =
- new DisplayOnEventDispatchThreadAction();
- class SwapBuffersOnEventDispatchThreadAction implements Runnable {
- public void run() {
- drawableHelper.invokeGL(pbufferDrawable, context, swapBuffersAction, initAction);
- }
- }
- private SwapBuffersOnEventDispatchThreadAction swapBuffersOnEventDispatchThreadAction =
- new SwapBuffersOnEventDispatchThreadAction();
-
- class DestroyAction implements Runnable {
- public void run() {
- GLContext current = GLContext.getCurrent();
- if (current == context) {
- context.release();
- }
- context.destroy();
- pbufferDrawable.destroy();
- }
- }
- private DestroyAction destroyAction = new DestroyAction();
-}
diff --git a/src/classes/com/sun/opengl/impl/GLUquadricImpl.java b/src/classes/com/sun/opengl/impl/GLUquadricImpl.java
deleted file mode 100644
index a8df92309..000000000
--- a/src/classes/com/sun/opengl/impl/GLUquadricImpl.java
+++ /dev/null
@@ -1,1060 +0,0 @@
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** $Date$ $Revision$
-** $Header$
-*/
-
-/*
- * Copyright (c) 2002-2004 LWJGL Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of 'LWJGL' nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.impl;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-/**
- * GLUquadricImpl.java
- *
- *
- * Created 22-dec-2003 (originally Quadric.java)
- * @author Erik Duijs
- * @author Kenneth Russell
- */
-
-public class GLUquadricImpl implements GLUquadric {
- private int drawStyle;
- private int orientation;
- private boolean textureFlag;
- private int normals;
-
- public GLUquadricImpl() {
- drawStyle = GLU.GLU_FILL;
- orientation = GLU.GLU_OUTSIDE;
- textureFlag = false;
- normals = GLU.GLU_SMOOTH;
- }
-
- /**
- * specifies the draw style for quadrics.
- *
- * The legal values are as follows:
- *
- * GLU.FILL: Quadrics are rendered with polygon primitives. The polygons
- * are drawn in a counterclockwise fashion with respect to
- * their normals (as defined with glu.quadricOrientation).
- *
- * GLU.LINE: Quadrics are rendered as a set of lines.
- *
- * GLU.SILHOUETTE: Quadrics are rendered as a set of lines, except that edges
- * separating coplanar faces will not be drawn.
- *
- * GLU.POINT: Quadrics are rendered as a set of points.
- *
- * @param drawStyle The drawStyle to set
- */
- public void setDrawStyle(int drawStyle) {
- this.drawStyle = drawStyle;
- }
-
- /**
- * specifies what kind of normals are desired for quadrics.
- * The legal values are as follows:
- *
- * GLU.NONE: No normals are generated.
- *
- * GLU.FLAT: One normal is generated for every facet of a quadric.
- *
- * GLU.SMOOTH: One normal is generated for every vertex of a quadric. This
- * is the default.
- *
- * @param normals The normals to set
- */
- public void setNormals(int normals) {
- this.normals = normals;
- }
-
- /**
- * specifies what kind of orientation is desired for.
- * The orientation values are as follows:
- *
- * GLU.OUTSIDE: Quadrics are drawn with normals pointing outward.
- *
- * GLU.INSIDE: Normals point inward. The default is GLU.OUTSIDE.
- *
- * Note that the interpretation of outward and inward depends on the quadric
- * being drawn.
- *
- * @param orientation The orientation to set
- */
- public void setOrientation(int orientation) {
- this.orientation = orientation;
- }
-
- /**
- * specifies if texture coordinates should be generated for
- * quadrics rendered with qobj. If the value of textureCoords is true,
- * then texture coordinates are generated, and if textureCoords is false,
- * they are not.. The default is false.
- *
- * The manner in which texture coordinates are generated depends upon the
- * specific quadric rendered.
- *
- * @param textureFlag The textureFlag to set
- */
- public void setTextureFlag(boolean textureFlag) {
- this.textureFlag = textureFlag;
- }
-
- /**
- * Returns the drawStyle.
- * @return int
- */
- public int getDrawStyle() {
- return drawStyle;
- }
-
- /**
- * Returns the normals.
- * @return int
- */
- public int getNormals() {
- return normals;
- }
-
- /**
- * Returns the orientation.
- * @return int
- */
- public int getOrientation() {
- return orientation;
- }
-
- /**
- * Returns the textureFlag.
- * @return boolean
- */
- public boolean getTextureFlag() {
- return textureFlag;
- }
-
- /**
- * draws a cylinder oriented along the z axis. The base of the
- * cylinder is placed at z = 0, and the top at z=height. Like a sphere, a
- * cylinder is subdivided around the z axis into slices, and along the z axis
- * into stacks.
- *
- * Note that if topRadius is set to zero, then this routine will generate a
- * cone.
- *
- * If the orientation is set to GLU.OUTSIDE (with glu.quadricOrientation), then
- * any generated normals point away from the z axis. Otherwise, they point
- * toward the z axis.
- *
- * If texturing is turned on (with glu.quadricTexture), then texture
- * coordinates are generated so that t ranges linearly from 0.0 at z = 0 to
- * 1.0 at z = height, and s ranges from 0.0 at the +y axis, to 0.25 at the +x
- * axis, to 0.5 at the -y axis, to 0.75 at the -x axis, and back to 1.0 at the
- * +y axis.
- *
- * @param baseRadius Specifies the radius of the cylinder at z = 0.
- * @param topRadius Specifies the radius of the cylinder at z = height.
- * @param height Specifies the height of the cylinder.
- * @param slices Specifies the number of subdivisions around the z axis.
- * @param stacks Specifies the number of subdivisions along the z axis.
- */
- public void drawCylinder(GL gl, float baseRadius, float topRadius, float height, int slices, int stacks) {
-
- float da, r, dr, dz;
- float x, y, z, nz, nsign;
- int i, j;
-
- if (orientation == GLU.GLU_INSIDE) {
- nsign = -1.0f;
- } else {
- nsign = 1.0f;
- }
-
- da = 2.0f * PI / slices;
- dr = (topRadius - baseRadius) / stacks;
- dz = height / stacks;
- nz = (baseRadius - topRadius) / height;
- // Z component of normal vectors
-
- if (drawStyle == GLU.GLU_POINT) {
- gl.glBegin(GL.GL_POINTS);
- for (i = 0; i < slices; i++) {
- x = cos((i * da));
- y = sin((i * da));
- normal3f(gl, x * nsign, y * nsign, nz * nsign);
-
- z = 0.0f;
- r = baseRadius;
- for (j = 0; j <= stacks; j++) {
- gl.glVertex3f((x * r), (y * r), z);
- z += dz;
- r += dr;
- }
- }
- gl.glEnd();
- } else if (drawStyle == GLU.GLU_LINE || drawStyle == GLU.GLU_SILHOUETTE) {
- // Draw rings
- if (drawStyle == GLU.GLU_LINE) {
- z = 0.0f;
- r = baseRadius;
- for (j = 0; j <= stacks; j++) {
- gl.glBegin(GL.GL_LINE_LOOP);
- for (i = 0; i < slices; i++) {
- x = cos((i * da));
- y = sin((i * da));
- normal3f(gl, x * nsign, y * nsign, nz * nsign);
- gl.glVertex3f((x * r), (y * r), z);
- }
- gl.glEnd();
- z += dz;
- r += dr;
- }
- } else {
- // draw one ring at each end
- if (baseRadius != 0.0) {
- gl.glBegin(GL.GL_LINE_LOOP);
- for (i = 0; i < slices; i++) {
- x = cos((i * da));
- y = sin((i * da));
- normal3f(gl, x * nsign, y * nsign, nz * nsign);
- gl.glVertex3f((x * baseRadius), (y * baseRadius), 0.0f);
- }
- gl.glEnd();
- gl.glBegin(GL.GL_LINE_LOOP);
- for (i = 0; i < slices; i++) {
- x = cos((i * da));
- y = sin((i * da));
- normal3f(gl, x * nsign, y * nsign, nz * nsign);
- gl.glVertex3f((x * topRadius), (y * topRadius), height);
- }
- gl.glEnd();
- }
- }
- // draw length lines
- gl.glBegin(GL.GL_LINES);
- for (i = 0; i < slices; i++) {
- x = cos((i * da));
- y = sin((i * da));
- normal3f(gl, x * nsign, y * nsign, nz * nsign);
- gl.glVertex3f((x * baseRadius), (y * baseRadius), 0.0f);
- gl.glVertex3f((x * topRadius), (y * topRadius), (height));
- }
- gl.glEnd();
- } else if (drawStyle == GLU.GLU_FILL) {
- float ds = 1.0f / slices;
- float dt = 1.0f / stacks;
- float t = 0.0f;
- z = 0.0f;
- r = baseRadius;
- for (j = 0; j < stacks; j++) {
- float s = 0.0f;
- gl.glBegin(GL.GL_QUAD_STRIP);
- for (i = 0; i <= slices; i++) {
- if (i == slices) {
- x = sin(0.0f);
- y = cos(0.0f);
- } else {
- x = sin((i * da));
- y = cos((i * da));
- }
- if (nsign == 1.0f) {
- normal3f(gl, (x * nsign), (y * nsign), (nz * nsign));
- TXTR_COORD(gl, s, t);
- gl.glVertex3f((x * r), (y * r), z);
- normal3f(gl, (x * nsign), (y * nsign), (nz * nsign));
- TXTR_COORD(gl, s, t + dt);
- gl.glVertex3f((x * (r + dr)), (y * (r + dr)), (z + dz));
- } else {
- normal3f(gl, x * nsign, y * nsign, nz * nsign);
- TXTR_COORD(gl, s, t);
- gl.glVertex3f((x * r), (y * r), z);
- normal3f(gl, x * nsign, y * nsign, nz * nsign);
- TXTR_COORD(gl, s, t + dt);
- gl.glVertex3f((x * (r + dr)), (y * (r + dr)), (z + dz));
- }
- s += ds;
- } // for slices
- gl.glEnd();
- r += dr;
- t += dt;
- z += dz;
- } // for stacks
- }
- }
-
- /**
- * renders a disk on the z = 0 plane. The disk has a radius of
- * outerRadius, and contains a concentric circular hole with a radius of
- * innerRadius. If innerRadius is 0, then no hole is generated. The disk is
- * subdivided around the z axis into slices (like pizza slices), and also
- * about the z axis into rings (as specified by slices and loops,
- * respectively).
- *
- * With respect to orientation, the +z side of the disk is considered to be
- * "outside" (see glu.quadricOrientation). This means that if the orientation
- * is set to GLU.OUTSIDE, then any normals generated point along the +z axis.
- * Otherwise, they point along the -z axis.
- *
- * If texturing is turned on (with glu.quadricTexture), texture coordinates are
- * generated linearly such that where r=outerRadius, the value at (r, 0, 0) is
- * (1, 0.5), at (0, r, 0) it is (0.5, 1), at (-r, 0, 0) it is (0, 0.5), and at
- * (0, -r, 0) it is (0.5, 0).
- */
- public void drawDisk(GL gl, float innerRadius, float outerRadius, int slices, int loops)
- {
- float da, dr;
-
- /* Normal vectors */
- if (normals != GLU.GLU_NONE) {
- if (orientation == GLU.GLU_OUTSIDE) {
- gl.glNormal3f(0.0f, 0.0f, +1.0f);
- }
- else {
- gl.glNormal3f(0.0f, 0.0f, -1.0f);
- }
- }
-
- da = 2.0f * PI / slices;
- dr = (outerRadius - innerRadius) / loops;
-
- switch (drawStyle) {
- case GLU.GLU_FILL:
- {
- /* texture of a gluDisk is a cut out of the texture unit square
- * x, y in [-outerRadius, +outerRadius]; s, t in [0, 1]
- * (linear mapping)
- */
- float dtc = 2.0f * outerRadius;
- float sa, ca;
- float r1 = innerRadius;
- int l;
- for (l = 0; l < loops; l++) {
- float r2 = r1 + dr;
- if (orientation == GLU.GLU_OUTSIDE) {
- int s;
- gl.glBegin(gl.GL_QUAD_STRIP);
- for (s = 0; s <= slices; s++) {
- float a;
- if (s == slices)
- a = 0.0f;
- else
- a = s * da;
- sa = sin(a);
- ca = cos(a);
- TXTR_COORD(gl, 0.5f + sa * r2 / dtc, 0.5f + ca * r2 / dtc);
- gl.glVertex2f(r2 * sa, r2 * ca);
- TXTR_COORD(gl, 0.5f + sa * r1 / dtc, 0.5f + ca * r1 / dtc);
- gl.glVertex2f(r1 * sa, r1 * ca);
- }
- gl.glEnd();
- }
- else {
- int s;
- gl.glBegin(GL.GL_QUAD_STRIP);
- for (s = slices; s >= 0; s--) {
- float a;
- if (s == slices)
- a = 0.0f;
- else
- a = s * da;
- sa = sin(a);
- ca = cos(a);
- TXTR_COORD(gl, 0.5f - sa * r2 / dtc, 0.5f + ca * r2 / dtc);
- gl.glVertex2f(r2 * sa, r2 * ca);
- TXTR_COORD(gl, 0.5f - sa * r1 / dtc, 0.5f + ca * r1 / dtc);
- gl.glVertex2f(r1 * sa, r1 * ca);
- }
- gl.glEnd();
- }
- r1 = r2;
- }
- break;
- }
- case GLU.GLU_LINE:
- {
- int l, s;
- /* draw loops */
- for (l = 0; l <= loops; l++) {
- float r = innerRadius + l * dr;
- gl.glBegin(GL.GL_LINE_LOOP);
- for (s = 0; s < slices; s++) {
- float a = s * da;
- gl.glVertex2f(r * sin(a), r * cos(a));
- }
- gl.glEnd();
- }
- /* draw spokes */
- for (s = 0; s < slices; s++) {
- float a = s * da;
- float x = sin(a);
- float y = cos(a);
- gl.glBegin(GL.GL_LINE_STRIP);
- for (l = 0; l <= loops; l++) {
- float r = innerRadius + l * dr;
- gl.glVertex2f(r * x, r * y);
- }
- gl.glEnd();
- }
- break;
- }
- case GLU.GLU_POINT:
- {
- int s;
- gl.glBegin(GL.GL_POINTS);
- for (s = 0; s < slices; s++) {
- float a = s * da;
- float x = sin(a);
- float y = cos(a);
- int l;
- for (l = 0; l <= loops; l++) {
- float r = innerRadius * l * dr;
- gl.glVertex2f(r * x, r * y);
- }
- }
- gl.glEnd();
- break;
- }
- case GLU.GLU_SILHOUETTE:
- {
- if (innerRadius != 0.0) {
- float a;
- gl.glBegin(GL.GL_LINE_LOOP);
- for (a = 0.0f; a < 2.0 * PI; a += da) {
- float x = innerRadius * sin(a);
- float y = innerRadius * cos(a);
- gl.glVertex2f(x, y);
- }
- gl.glEnd();
- }
- {
- float a;
- gl.glBegin(GL.GL_LINE_LOOP);
- for (a = 0; a < 2.0f * PI; a += da) {
- float x = outerRadius * sin(a);
- float y = outerRadius * cos(a);
- gl.glVertex2f(x, y);
- }
- gl.glEnd();
- }
- break;
- }
- default:
- return;
- }
- }
-
- /**
- * renders a partial disk on the z=0 plane. A partial disk is similar to a
- * full disk, except that only the subset of the disk from startAngle
- * through startAngle + sweepAngle is included (where 0 degrees is along
- * the +y axis, 90 degrees along the +x axis, 180 along the -y axis, and
- * 270 along the -x axis).
- *
- * The partial disk has a radius of outerRadius, and contains a concentric
- * circular hole with a radius of innerRadius. If innerRadius is zero, then
- * no hole is generated. The partial disk is subdivided around the z axis
- * into slices (like pizza slices), and also about the z axis into rings
- * (as specified by slices and loops, respectively).
- *
- * With respect to orientation, the +z side of the partial disk is
- * considered to be outside (see gluQuadricOrientation). This means that if
- * the orientation is set to GLU.GLU_OUTSIDE, then any normals generated point
- * along the +z axis. Otherwise, they point along the -z axis.
- *
- * If texturing is turned on (with gluQuadricTexture), texture coordinates
- * are generated linearly such that where r=outerRadius, the value at (r, 0, 0)
- * is (1, 0.5), at (0, r, 0) it is (0.5, 1), at (-r, 0, 0) it is (0, 0.5),
- * and at (0, -r, 0) it is (0.5, 0).
- */
- public void drawPartialDisk(GL gl,
- float innerRadius,
- float outerRadius,
- int slices,
- int loops,
- float startAngle,
- float sweepAngle) {
- int i, j, max;
- float[] sinCache = new float[CACHE_SIZE];
- float[] cosCache = new float[CACHE_SIZE];
- float angle;
- float x, y;
- float sintemp, costemp;
- float deltaRadius;
- float radiusLow, radiusHigh;
- float texLow = 0, texHigh = 0;
- float angleOffset;
- int slices2;
- int finish;
-
- if (slices >= CACHE_SIZE)
- slices = CACHE_SIZE - 1;
- if (slices < 2
- || loops < 1
- || outerRadius <= 0.0f
- || innerRadius < 0.0f
- || innerRadius > outerRadius) {
- //gluQuadricError(qobj, GLU.GLU_INVALID_VALUE);
- System.err.println("PartialDisk: GLU_INVALID_VALUE");
- return;
- }
-
- if (sweepAngle < -360.0f)
- sweepAngle = 360.0f;
- if (sweepAngle > 360.0f)
- sweepAngle = 360.0f;
- if (sweepAngle < 0) {
- startAngle += sweepAngle;
- sweepAngle = -sweepAngle;
- }
-
- if (sweepAngle == 360.0f) {
- slices2 = slices;
- } else {
- slices2 = slices + 1;
- }
-
- /* Compute length (needed for normal calculations) */
- deltaRadius = outerRadius - innerRadius;
-
- /* Cache is the vertex locations cache */
-
- angleOffset = startAngle / 180.0f * PI;
- for (i = 0; i <= slices; i++) {
- angle = angleOffset + ((PI * sweepAngle) / 180.0f) * i / slices;
- sinCache[i] = sin(angle);
- cosCache[i] = cos(angle);
- }
-
- if (sweepAngle == 360.0f) {
- sinCache[slices] = sinCache[0];
- cosCache[slices] = cosCache[0];
- }
-
- switch (normals) {
- case GLU.GLU_FLAT :
- case GLU.GLU_SMOOTH :
- if (orientation == GLU.GLU_OUTSIDE) {
- gl.glNormal3f(0.0f, 0.0f, 1.0f);
- } else {
- gl.glNormal3f(0.0f, 0.0f, -1.0f);
- }
- break;
- default :
- case GLU.GLU_NONE :
- break;
- }
-
- switch (drawStyle) {
- case GLU.GLU_FILL :
- if (innerRadius == .0f) {
- finish = loops - 1;
- /* Triangle strip for inner polygons */
- gl.glBegin(GL.GL_TRIANGLE_FAN);
- if (textureFlag) {
- gl.glTexCoord2f(0.5f, 0.5f);
- }
- gl.glVertex3f(0.0f, 0.0f, 0.0f);
- radiusLow = outerRadius - deltaRadius * ((float) (loops - 1) / loops);
- if (textureFlag) {
- texLow = radiusLow / outerRadius / 2;
- }
-
- if (orientation == GLU.GLU_OUTSIDE) {
- for (i = slices; i >= 0; i--) {
- if (textureFlag) {
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sinCache[i], radiusLow * cosCache[i], 0.0f);
- }
- } else {
- for (i = 0; i <= slices; i++) {
- if (textureFlag) {
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sinCache[i], radiusLow * cosCache[i], 0.0f);
- }
- }
- gl.glEnd();
- } else {
- finish = loops;
- }
- for (j = 0; j < finish; j++) {
- radiusLow = outerRadius - deltaRadius * ((float) j / loops);
- radiusHigh = outerRadius - deltaRadius * ((float) (j + 1) / loops);
- if (textureFlag) {
- texLow = radiusLow / outerRadius / 2;
- texHigh = radiusHigh / outerRadius / 2;
- }
-
- gl.glBegin(GL.GL_QUAD_STRIP);
- for (i = 0; i <= slices; i++) {
- if (orientation == GLU.GLU_OUTSIDE) {
- if (textureFlag) {
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sinCache[i], radiusLow * cosCache[i], 0.0f);
-
- if (textureFlag) {
- gl.glTexCoord2f(texHigh * sinCache[i] + 0.5f,
- texHigh * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusHigh * sinCache[i],
- radiusHigh * cosCache[i],
- 0.0f);
- } else {
- if (textureFlag) {
- gl.glTexCoord2f(texHigh * sinCache[i] + 0.5f,
- texHigh * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusHigh * sinCache[i],
- radiusHigh * cosCache[i],
- 0.0f);
-
- if (textureFlag) {
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sinCache[i], radiusLow * cosCache[i], 0.0f);
- }
- }
- gl.glEnd();
- }
- break;
- case GLU.GLU_POINT :
- gl.glBegin(GL.GL_POINTS);
- for (i = 0; i < slices2; i++) {
- sintemp = sinCache[i];
- costemp = cosCache[i];
- for (j = 0; j <= loops; j++) {
- radiusLow = outerRadius - deltaRadius * ((float) j / loops);
-
- if (textureFlag) {
- texLow = radiusLow / outerRadius / 2;
-
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sintemp, radiusLow * costemp, 0.0f);
- }
- }
- gl.glEnd();
- break;
- case GLU.GLU_LINE :
- if (innerRadius == outerRadius) {
- gl.glBegin(GL.GL_LINE_STRIP);
-
- for (i = 0; i <= slices; i++) {
- if (textureFlag) {
- gl.glTexCoord2f(sinCache[i] / 2 + 0.5f, cosCache[i] / 2 + 0.5f);
- }
- gl.glVertex3f(innerRadius * sinCache[i], innerRadius * cosCache[i], 0.0f);
- }
- gl.glEnd();
- break;
- }
- for (j = 0; j <= loops; j++) {
- radiusLow = outerRadius - deltaRadius * ((float) j / loops);
- if (textureFlag) {
- texLow = radiusLow / outerRadius / 2;
- }
-
- gl.glBegin(GL.GL_LINE_STRIP);
- for (i = 0; i <= slices; i++) {
- if (textureFlag) {
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sinCache[i], radiusLow * cosCache[i], 0.0f);
- }
- gl.glEnd();
- }
- for (i = 0; i < slices2; i++) {
- sintemp = sinCache[i];
- costemp = cosCache[i];
- gl.glBegin(GL.GL_LINE_STRIP);
- for (j = 0; j <= loops; j++) {
- radiusLow = outerRadius - deltaRadius * ((float) j / loops);
- if (textureFlag) {
- texLow = radiusLow / outerRadius / 2;
- }
-
- if (textureFlag) {
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sintemp, radiusLow * costemp, 0.0f);
- }
- gl.glEnd();
- }
- break;
- case GLU.GLU_SILHOUETTE :
- if (sweepAngle < 360.0f) {
- for (i = 0; i <= slices; i += slices) {
- sintemp = sinCache[i];
- costemp = cosCache[i];
- gl.glBegin(GL.GL_LINE_STRIP);
- for (j = 0; j <= loops; j++) {
- radiusLow = outerRadius - deltaRadius * ((float) j / loops);
-
- if (textureFlag) {
- texLow = radiusLow / outerRadius / 2;
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sintemp, radiusLow * costemp, 0.0f);
- }
- gl.glEnd();
- }
- }
- for (j = 0; j <= loops; j += loops) {
- radiusLow = outerRadius - deltaRadius * ((float) j / loops);
- if (textureFlag) {
- texLow = radiusLow / outerRadius / 2;
- }
-
- gl.glBegin(GL.GL_LINE_STRIP);
- for (i = 0; i <= slices; i++) {
- if (textureFlag) {
- gl.glTexCoord2f(texLow * sinCache[i] + 0.5f,
- texLow * cosCache[i] + 0.5f);
- }
- gl.glVertex3f(radiusLow * sinCache[i], radiusLow * cosCache[i], 0.0f);
- }
- gl.glEnd();
- if (innerRadius == outerRadius)
- break;
- }
- break;
- default :
- break;
- }
- }
-
- /**
- * draws a sphere of the given radius centered around the origin.
- * The sphere is subdivided around the z axis into slices and along the z axis
- * into stacks (similar to lines of longitude and latitude).
- *
- * If the orientation is set to GLU.OUTSIDE (with glu.quadricOrientation), then
- * any normals generated point away from the center of the sphere. Otherwise,
- * they point toward the center of the sphere.
-
- * If texturing is turned on (with glu.quadricTexture), then texture
- * coordinates are generated so that t ranges from 0.0 at z=-radius to 1.0 at
- * z=radius (t increases linearly along longitudinal lines), and s ranges from
- * 0.0 at the +y axis, to 0.25 at the +x axis, to 0.5 at the -y axis, to 0.75
- * at the -x axis, and back to 1.0 at the +y axis.
- */
- public void drawSphere(GL gl, float radius, int slices, int stacks) {
- // TODO
-
- float rho, drho, theta, dtheta;
- float x, y, z;
- float s, t, ds, dt;
- int i, j, imin, imax;
- boolean normals;
- float nsign;
-
- normals = (this.normals != GLU.GLU_NONE);
-
- if (orientation == GLU.GLU_INSIDE) {
- nsign = -1.0f;
- } else {
- nsign = 1.0f;
- }
-
- drho = PI / stacks;
- dtheta = 2.0f * PI / slices;
-
- if (drawStyle == GLU.GLU_FILL) {
- if (!textureFlag) {
- // draw +Z end as a triangle fan
- gl.glBegin(GL.GL_TRIANGLE_FAN);
- gl.glNormal3f(0.0f, 0.0f, 1.0f);
- gl.glVertex3f(0.0f, 0.0f, nsign * radius);
- for (j = 0; j <= slices; j++) {
- theta = (j == slices) ? 0.0f : j * dtheta;
- x = -sin(theta) * sin(drho);
- y = cos(theta) * sin(drho);
- z = nsign * cos(drho);
- if (normals) {
- gl.glNormal3f(x * nsign, y * nsign, z * nsign);
- }
- gl.glVertex3f(x * radius, y * radius, z * radius);
- }
- gl.glEnd();
- }
-
- ds = 1.0f / slices;
- dt = 1.0f / stacks;
- t = 1.0f; // because loop now runs from 0
- if (textureFlag) {
- imin = 0;
- imax = stacks;
- } else {
- imin = 1;
- imax = stacks - 1;
- }
-
- // draw intermediate stacks as quad strips
- for (i = imin; i < imax; i++) {
- rho = i * drho;
- gl.glBegin(GL.GL_QUAD_STRIP);
- s = 0.0f;
- for (j = 0; j <= slices; j++) {
- theta = (j == slices) ? 0.0f : j * dtheta;
- x = -sin(theta) * sin(rho);
- y = cos(theta) * sin(rho);
- z = nsign * cos(rho);
- if (normals) {
- gl.glNormal3f(x * nsign, y * nsign, z * nsign);
- }
- TXTR_COORD(gl, s, t);
- gl.glVertex3f(x * radius, y * radius, z * radius);
- x = -sin(theta) * sin(rho + drho);
- y = cos(theta) * sin(rho + drho);
- z = nsign * cos(rho + drho);
- if (normals) {
- gl.glNormal3f(x * nsign, y * nsign, z * nsign);
- }
- TXTR_COORD(gl, s, t - dt);
- s += ds;
- gl.glVertex3f(x * radius, y * radius, z * radius);
- }
- gl.glEnd();
- t -= dt;
- }
-
- if (!textureFlag) {
- // draw -Z end as a triangle fan
- gl.glBegin(GL.GL_TRIANGLE_FAN);
- gl.glNormal3f(0.0f, 0.0f, -1.0f);
- gl.glVertex3f(0.0f, 0.0f, -radius * nsign);
- rho = PI - drho;
- s = 1.0f;
- for (j = slices; j >= 0; j--) {
- theta = (j == slices) ? 0.0f : j * dtheta;
- x = -sin(theta) * sin(rho);
- y = cos(theta) * sin(rho);
- z = nsign * cos(rho);
- if (normals)
- gl.glNormal3f(x * nsign, y * nsign, z * nsign);
- s -= ds;
- gl.glVertex3f(x * radius, y * radius, z * radius);
- }
- gl.glEnd();
- }
- } else if (
- drawStyle == GLU.GLU_LINE
- || drawStyle == GLU.GLU_SILHOUETTE) {
- // draw stack lines
- for (i = 1;
- i < stacks;
- i++) { // stack line at i==stacks-1 was missing here
- rho = i * drho;
- gl.glBegin(GL.GL_LINE_LOOP);
- for (j = 0; j < slices; j++) {
- theta = j * dtheta;
- x = cos(theta) * sin(rho);
- y = sin(theta) * sin(rho);
- z = cos(rho);
- if (normals)
- gl.glNormal3f(x * nsign, y * nsign, z * nsign);
- gl.glVertex3f(x * radius, y * radius, z * radius);
- }
- gl.glEnd();
- }
- // draw slice lines
- for (j = 0; j < slices; j++) {
- theta = j * dtheta;
- gl.glBegin(GL.GL_LINE_STRIP);
- for (i = 0; i <= stacks; i++) {
- rho = i * drho;
- x = cos(theta) * sin(rho);
- y = sin(theta) * sin(rho);
- z = cos(rho);
- if (normals)
- gl.glNormal3f(x * nsign, y * nsign, z * nsign);
- gl.glVertex3f(x * radius, y * radius, z * radius);
- }
- gl.glEnd();
- }
- } else if (drawStyle == GLU.GLU_POINT) {
- // top and bottom-most points
- gl.glBegin(GL.GL_POINTS);
- if (normals)
- gl.glNormal3f(0.0f, 0.0f, nsign);
- gl.glVertex3f(0.0f, 0.0f, radius);
- if (normals)
- gl.glNormal3f(0.0f, 0.0f, -nsign);
- gl.glVertex3f(0.0f, 0.0f, -radius);
-
- // loop over stacks
- for (i = 1; i < stacks - 1; i++) {
- rho = i * drho;
- for (j = 0; j < slices; j++) {
- theta = j * dtheta;
- x = cos(theta) * sin(rho);
- y = sin(theta) * sin(rho);
- z = cos(rho);
- if (normals)
- gl.glNormal3f(x * nsign, y * nsign, z * nsign);
- gl.glVertex3f(x * radius, y * radius, z * radius);
- }
- }
- gl.glEnd();
- }
- }
-
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private static final float PI = (float)Math.PI;
- private static final int CACHE_SIZE = 240;
-
- /**
- * Call glNormal3f after scaling normal to unit length.
- *
- * @param x
- * @param y
- * @param z
- */
- private void normal3f(GL gl, float x, float y, float z) {
- float mag;
-
- mag = (float)Math.sqrt(x * x + y * y + z * z);
- if (mag > 0.00001F) {
- x /= mag;
- y /= mag;
- z /= mag;
- }
- gl.glNormal3f(x, y, z);
- }
-
- private void TXTR_COORD(GL gl, float x, float y) {
- if (textureFlag) gl.glTexCoord2f(x,y);
- }
-
- private float sin(float r) {
- return (float)Math.sin(r);
- }
-
- private float cos(float r) {
- return (float)Math.cos(r);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/GLWorkerThread.java b/src/classes/com/sun/opengl/impl/GLWorkerThread.java
deleted file mode 100755
index b110e4335..000000000
--- a/src/classes/com/sun/opengl/impl/GLWorkerThread.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.lang.reflect.InvocationTargetException;
-import java.security.*;
-import java.util.*;
-import javax.media.opengl.*;
-
-/** Singleton thread upon which all OpenGL work is performed by
- default. Unfortunately many vendors' OpenGL drivers are not really
- thread-safe and stability is much improved by performing OpenGL
- work on at most one thread. This is the default behavior of the
- GLAutoDrawable implementations according to the {@link
- javax.media.opengl.Threading Threading} class. The GLWorkerThread
- replaces the original AWT event queue thread-based mechanism for
- two reasons: first, more than one AWT event queue thread may be
- spawned, for example if a dialog is being shown; second, it avoids
- blocking the AWT event queue thread during OpenGL rendering. */
-
-public class GLWorkerThread {
- private static volatile boolean started;
- private static volatile Thread thread;
- private static Object lock;
- private static volatile boolean shouldTerminate;
- private static volatile Throwable exception;
-
- // The Runnable to execute immediately on the worker thread
- private static volatile Runnable work;
- // Queue of Runnables to be asynchronously invoked
- private static List queue = new LinkedList();
-
- /** Should only be called by Threading class if creation of the
- GLWorkerThread was requested via the opengl.1thread system
- property. */
- public static void start() {
- if (!started) {
- synchronized (GLWorkerThread.class) {
- if (!started) {
- lock = new Object();
- thread = new Thread(new WorkerRunnable(),
- "JOGL GLWorkerThread");
- thread.setDaemon(true);
- started = true;
- synchronized (lock) {
- thread.start();
- try {
- lock.wait();
- } catch (InterruptedException e) {
- }
- }
-
- /*
-
- // Note: it appears that there is a bug in NVidia's current
- // drivers where if a context was ever made current on a
- // given thread and that thread has exited before program
- // exit, a crash occurs in the drivers. Releasing the
- // context from the given thread does not work around the
- // problem.
- //
- // For the time being, we're going to work around this
- // problem by not terminating the GLWorkerThread. In theory,
- // shutting down the GLWorkerThread cleanly could be a good
- // general solution to the problem of needing to
- // cooperatively terminate all Animators at program exit.
- //
- // It appears that this doesn't even work around all of the
- // kinds of crashes. Causing the context to be unilaterally
- // released from the GLWorkerThread after each invocation
- // seems to work around all of the kinds of crashes seen.
- //
- // These appear to be similar to the kinds of crashes seen
- // when the Java2D/OpenGL pipeline terminates, and those are
- // a known issue being fixed, so presumably these will be
- // fixed in NVidia's next driver set.
-
- // Install shutdown hook to terminate daemon thread more or
- // less cooperatively
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- Runtime.getRuntime().addShutdownHook(new Thread() {
- public void run() {
- Object lockTemp = lock;
- if (lockTemp == null) {
- // Already terminating (?)
- return;
- }
- synchronized (lockTemp) {
- shouldTerminate = true;
- lockTemp.notifyAll();
- try {
- lockTemp.wait(500);
- } catch (InterruptedException e) {
- }
- }
- }
- });
- return null;
- }
- });
-
- */
-
- } else {
- throw new RuntimeException("Should not start GLWorkerThread twice");
- }
- }
- }
- }
-
- public static void invokeAndWait(Runnable runnable)
- throws InvocationTargetException, InterruptedException {
- if (!started) {
- throw new RuntimeException("May not invokeAndWait on worker thread without starting it first");
- }
-
- Object lockTemp = lock;
- if (lockTemp == null) {
- return; // Terminating
- }
-
- synchronized (lockTemp) {
- if (thread == null) {
- // Terminating
- return;
- }
-
- work = runnable;
- lockTemp.notifyAll();
- lockTemp.wait();
- if (exception != null) {
- Throwable localException = exception;
- exception = null;
- throw new InvocationTargetException(localException);
- }
- }
- }
-
- public static void invokeLater(Runnable runnable) {
- if (!started) {
- throw new RuntimeException("May not invokeLater on worker thread without starting it first");
- }
-
- Object lockTemp = lock;
- if (lockTemp == null) {
- return; // Terminating
- }
-
- synchronized (lockTemp) {
- if (thread == null) {
- // Terminating
- return;
- }
-
- queue.add(runnable);
- lockTemp.notifyAll();
- }
- }
-
- /** Indicates whether the OpenGL worker thread was started, i.e.,
- whether it is currently in use. */
- public static boolean isStarted() {
- return started;
- }
-
- /** Indicates whether the current thread is the OpenGL worker
- thread. */
- public static boolean isWorkerThread() {
- return (Thread.currentThread() == thread);
- }
-
- static class WorkerRunnable implements Runnable {
- public void run() {
- // Notify starting thread that we're ready
- synchronized (lock) {
- lock.notifyAll();
- }
-
- while (!shouldTerminate) {
- synchronized (lock) {
- while (!shouldTerminate &&
- (work == null) &&
- queue.isEmpty()) {
- try {
- // Avoid race conditions with wanting to release contexts on this thread
- lock.wait(1000);
- } catch (InterruptedException e) {
- }
-
- if (GLContext.getCurrent() != null) {
- // Test later to see whether we need to release this context
- break;
- }
- }
-
- if (shouldTerminate) {
- lock.notifyAll();
- thread = null;
- lock = null;
- return;
- }
-
- if (work != null) {
- try {
- work.run();
- } catch (Throwable t) {
- exception = t;
- } finally {
- work = null;
- lock.notifyAll();
- }
- }
-
- while (!queue.isEmpty()) {
- try {
- Runnable curAsync = (Runnable) queue.remove(0);
- curAsync.run();
- } catch (Throwable t) {
- System.out.println("Exception occurred on JOGL OpenGL worker thread:");
- t.printStackTrace();
- }
- }
-
- // See about releasing current context
- GLContext curContext = GLContext.getCurrent();
- if (curContext != null &&
- (curContext instanceof GLContextImpl)) {
- GLContextImpl impl = (GLContextImpl) curContext;
- if (impl.hasWaiters()) {
- impl.release();
- }
- }
- }
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/InternalBufferUtils.java b/src/classes/com/sun/opengl/impl/InternalBufferUtils.java
deleted file mode 100644
index 89639c493..000000000
--- a/src/classes/com/sun/opengl/impl/InternalBufferUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.nio.*;
-
-/** Utility routines available only to the JOGL implementation. */
-
-public class InternalBufferUtils {
- /** Allocates a new direct byte buffer at the given address with the
- given capacity. This is exposed only because of glMapBufferARB
- and its semantics; it is undesirable to allocate a new buffer
- every frame because (a) ByteBuffers are finalizable and (b) the
- application would typically need to re-slice the buffer every
- frame. Instead we cache these ByteBuffer objects up in Java and
- look them up in a HashMap by base address and capacity. */
- public static native ByteBuffer newDirectByteBuffer(long address, int capacity);
-}
diff --git a/src/classes/com/sun/opengl/impl/JAWT_PlatformInfo.java b/src/classes/com/sun/opengl/impl/JAWT_PlatformInfo.java
deleted file mode 100644
index ca101eff9..000000000
--- a/src/classes/com/sun/opengl/impl/JAWT_PlatformInfo.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-/** Marker class for all window system-specific JAWT data structures. */
-
-public interface JAWT_PlatformInfo {
-}
diff --git a/src/classes/com/sun/opengl/impl/Java2D.java b/src/classes/com/sun/opengl/impl/Java2D.java
deleted file mode 100755
index 713effa67..000000000
--- a/src/classes/com/sun/opengl/impl/Java2D.java
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.awt.*;
-import java.awt.image.*;
-import java.lang.reflect.*;
-import java.security.*;
-
-import javax.media.opengl.*;
-
-/** Defines integration with the Java2D OpenGL pipeline. This
- integration is only supported in 1.6 and is highly experimental. */
-
-public class Java2D {
- private static boolean DEBUG = Debug.debug("Java2D");
- private static boolean VERBOSE = Debug.verbose();
- private static boolean isHeadless;
- private static boolean isOGLPipelineActive;
- private static Method invokeWithOGLContextCurrentMethod;
- private static Method isQueueFlusherThreadMethod;
- private static Method getOGLViewportMethod;
- private static Method getOGLScissorBoxMethod;
- private static Method getOGLSurfaceIdentifierMethod;
- // This one is currently optional and is only in very recent Mustang builds
- private static Method getOGLTextureTypeMethod;
-
- // The following methods and fields are needed for proper support of
- // Frame Buffer Objects in the Java2D/OpenGL pipeline
- // (-Dsun.java2d.opengl.fbobject=true)
- private static boolean fbObjectSupportInitialized;
- private static Method invokeWithOGLSharedContextCurrentMethod;
- private static Method getOGLSurfaceTypeMethod;
-
- // Publicly-visible constants for OpenGL surface types
- public static final int UNDEFINED = getOGLUtilitiesIntField("UNDEFINED");
- public static final int WINDOW = getOGLUtilitiesIntField("WINDOW");
- public static final int PBUFFER = getOGLUtilitiesIntField("PBUFFER");
- public static final int TEXTURE = getOGLUtilitiesIntField("TEXTURE");
- public static final int FLIP_BACKBUFFER = getOGLUtilitiesIntField("FLIP_BACKBUFFER");
- public static final int FBOBJECT = getOGLUtilitiesIntField("FBOBJECT");
-
- // If FBOs are enabled in the Java2D/OpenGL pipeline, all contexts
- // created by JOGL must share textures and display lists with the
- // Java2D contexts in order to access the frame buffer object for
- // potential rendering, and to simultaneously support sharing of
- // textures and display lists with one another. Java2D has the
- // notion of a single shared context with which all other contexts
- // (on the same display device?) share textures and display lists;
- // this is an approximation to that notion which will be refined
- // later.
- private static boolean initializedJ2DFBOShareContext;
- private static GLContext j2dFBOShareContext;
-
- // Accessors for new methods in sun.java2d.opengl.CGLSurfaceData
- // class on OS X for enabling bridge
- // public static long createOGLContextOnSurface(Graphics g, long ctx);
- // public static boolean makeOGLContextCurrentOnSurface(Graphics g, long ctx);
- // public static void destroyOGLContext(long ctx);
- private static Method createOGLContextOnSurfaceMethod;
- private static Method makeOGLContextCurrentOnSurfaceMethod;
- private static Method destroyOGLContextMethod;
-
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- if (DEBUG && VERBOSE) {
- System.err.println("Checking for Java2D/OpenGL support");
- }
- try {
- isHeadless = true;
- // Figure out whether the default graphics configuration is an
- // OpenGL graphics configuration
- GraphicsConfiguration cfg =
- GraphicsEnvironment.getLocalGraphicsEnvironment().
- getDefaultScreenDevice().
- getDefaultConfiguration();
- // If we get here, we aren't running in headless mode
- isHeadless = false;
- String name = cfg.getClass().getName();
- if (DEBUG && VERBOSE) {
- System.err.println("Java2D support: default GraphicsConfiguration = " + name);
- }
- isOGLPipelineActive = (name.startsWith("sun.java2d.opengl"));
-
- if (isOGLPipelineActive) {
- try {
- // Try to get methods we need to integrate
- Class utils = Class.forName("sun.java2d.opengl.OGLUtilities");
- invokeWithOGLContextCurrentMethod = utils.getDeclaredMethod("invokeWithOGLContextCurrent",
- new Class[] {
- Graphics.class,
- Runnable.class
- });
- invokeWithOGLContextCurrentMethod.setAccessible(true);
-
- isQueueFlusherThreadMethod = utils.getDeclaredMethod("isQueueFlusherThread",
- new Class[] {});
- isQueueFlusherThreadMethod.setAccessible(true);
-
- getOGLViewportMethod = utils.getDeclaredMethod("getOGLViewport",
- new Class[] {
- Graphics.class,
- Integer.TYPE,
- Integer.TYPE
- });
- getOGLViewportMethod.setAccessible(true);
-
- getOGLScissorBoxMethod = utils.getDeclaredMethod("getOGLScissorBox",
- new Class[] {
- Graphics.class
- });
- getOGLScissorBoxMethod.setAccessible(true);
-
- getOGLSurfaceIdentifierMethod = utils.getDeclaredMethod("getOGLSurfaceIdentifier",
- new Class[] {
- Graphics.class
- });
- getOGLSurfaceIdentifierMethod.setAccessible(true);
-
- // Try to get additional methods required for proper FBO support
- fbObjectSupportInitialized = true;
- try {
- invokeWithOGLSharedContextCurrentMethod = utils.getDeclaredMethod("invokeWithOGLSharedContextCurrent",
- new Class[] {
- GraphicsConfiguration.class,
- Runnable.class
- });
- invokeWithOGLSharedContextCurrentMethod.setAccessible(true);
-
- getOGLSurfaceTypeMethod = utils.getDeclaredMethod("getOGLSurfaceType",
- new Class[] {
- Graphics.class
- });
- getOGLSurfaceTypeMethod.setAccessible(true);
- } catch (Exception e) {
- fbObjectSupportInitialized = false;
- if (DEBUG && VERBOSE) {
- e.printStackTrace();
- System.err.println("Disabling Java2D/JOGL FBO support");
- }
- }
-
- // Try to get an additional method for FBO support in recent Mustang builds
- try {
- getOGLTextureTypeMethod = utils.getDeclaredMethod("getOGLTextureType",
- new Class[] {
- Graphics.class
- });
- getOGLTextureTypeMethod.setAccessible(true);
- } catch (Exception e) {
- if (DEBUG && VERBOSE) {
- e.printStackTrace();
- System.err.println("GL_ARB_texture_rectangle FBO support disabled");
- }
- }
-
- // Try to set up APIs for enabling the bridge on OS X,
- // where it isn't possible to create generalized
- // external GLDrawables
- Class cglSurfaceData = null;
- try {
- cglSurfaceData = Class.forName("sun.java2d.opengl.CGLSurfaceData");
- } catch (Exception e) {
- if (DEBUG && VERBOSE) {
- e.printStackTrace();
- System.err.println("Unable to find class sun.java2d.opengl.CGLSurfaceData for OS X");
- }
- }
- if (cglSurfaceData != null) {
- // FIXME: for now, assume that FBO support is not enabled on OS X
- fbObjectSupportInitialized = false;
-
- // We need to find these methods in order to make the bridge work on OS X
- createOGLContextOnSurfaceMethod = cglSurfaceData.getDeclaredMethod("createOGLContextOnSurface",
- new Class[] {
- Graphics.class,
- Long.TYPE
- });
- createOGLContextOnSurfaceMethod.setAccessible(true);
-
- makeOGLContextCurrentOnSurfaceMethod = cglSurfaceData.getDeclaredMethod("makeOGLContextCurrentOnSurface",
- new Class[] {
- Graphics.class,
- Long.TYPE
- });
- makeOGLContextCurrentOnSurfaceMethod.setAccessible(true);
-
- destroyOGLContextMethod = cglSurfaceData.getDeclaredMethod("destroyOGLContext",
- new Class[] {
- Long.TYPE
- });
- destroyOGLContextMethod.setAccessible(true);
- }
- } catch (Exception e) {
- if (DEBUG && VERBOSE) {
- e.printStackTrace();
- System.err.println("Disabling Java2D/JOGL integration");
- }
- isOGLPipelineActive = false;
- }
- }
- } catch (HeadlessException e) {
- // The AWT is running in headless mode, so the Java 2D / JOGL bridge is clearly disabled
- }
-
- if (DEBUG) {
- System.err.println("JOGL/Java2D integration " + (isOGLPipelineActive ? "enabled" : "disabled"));
- }
- return null;
- }
- });
- }
-
- public static boolean isOGLPipelineActive() {
- return isOGLPipelineActive;
- }
-
- public static boolean isFBOEnabled() {
- return fbObjectSupportInitialized;
- }
-
- public static boolean isQueueFlusherThread() {
- checkActive();
-
- try {
- return ((Boolean) isQueueFlusherThreadMethod.invoke(null, new Object[] {})).booleanValue();
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Makes current the OpenGL context associated with the passed
- Graphics object and runs the given Runnable on the Queue
- Flushing Thread in one atomic action. */
- public static void invokeWithOGLContextCurrent(Graphics g, Runnable r) throws GLException {
- checkActive();
-
- try {
- // FIXME: this may need adjustment
- // This seems to be needed in many applications which don't
- // initialize an OpenGL context before this and which would
- // otherwise cause initFBOShareContext to be called from the
- // Queue Flusher Thread, which isn't allowed
- initFBOShareContext(GraphicsEnvironment.
- getLocalGraphicsEnvironment().
- getDefaultScreenDevice().
- getDefaultConfiguration());
-
- GLDrawableFactoryImpl.getFactoryImpl().lockAWTForJava2D();
- try {
- invokeWithOGLContextCurrentMethod.invoke(null, new Object[] {g, r});
- } finally {
- GLDrawableFactoryImpl.getFactoryImpl().unlockAWTForJava2D();
- }
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Makes current the "shared" OpenGL context associated with the
- given GraphicsConfiguration object, allowing JOGL to share
- server-side OpenGL objects like textures and display lists with
- this context when necessary. This is needed when Java2D's FBO
- support is enabled, because in order to render into that FBO,
- JOGL must share textures and display lists with it. Returns
- false if the passed GraphicsConfiguration was not an OpenGL
- GraphicsConfiguration. */
- public static boolean invokeWithOGLSharedContextCurrent(GraphicsConfiguration g, Runnable r) throws GLException {
- checkActive();
-
- try {
- GLDrawableFactoryImpl.getFactoryImpl().lockAWTForJava2D();
- try {
- return ((Boolean) invokeWithOGLSharedContextCurrentMethod.invoke(null, new Object[] {g, r})).booleanValue();
- } finally {
- GLDrawableFactoryImpl.getFactoryImpl().unlockAWTForJava2D();
- }
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Returns the OpenGL viewport associated with the given Graphics
- object, assuming that the Graphics object is associated with a
- component of the specified width and height. The user should
- call glViewport() with the returned rectangle's bounds in order
- to get correct rendering results. Should only be called from the
- Queue Flusher Thread. */
- public static Rectangle getOGLViewport(Graphics g,
- int componentWidth,
- int componentHeight) {
- checkActive();
-
- try {
- return (Rectangle) getOGLViewportMethod.invoke(null, new Object[] {g,
- new Integer(componentWidth),
- new Integer(componentHeight)});
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Returns the OpenGL scissor region associated with the given
- Graphics object, taking into account all clipping regions, etc.
- To avoid destroying Java2D's previous rendering results, this
- method should be called and the resulting rectangle's bounds
- passed to a call to glScissor(). Should only be called from the
- Queue Flusher Thread. */
- public static Rectangle getOGLScissorBox(Graphics g) {
- checkActive();
-
- try {
- return (Rectangle) getOGLScissorBoxMethod.invoke(null, new Object[] {g});
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Returns an opaque "surface identifier" associated with the given
- Graphics object. If this changes from invocation to invocation,
- the underlying OpenGL drawable for the Graphics object has
- changed and a new external GLDrawable and GLContext should be
- created (and the old ones destroyed). Should only be called from
- the Queue Flusher Thread.*/
- public static Object getOGLSurfaceIdentifier(Graphics g) {
- checkActive();
-
- try {
- return getOGLSurfaceIdentifierMethod.invoke(null, new Object[] {g});
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Returns the underlying surface type for the given Graphics
- object. This indicates, in particular, whether Java2D is
- currently rendering into a pbuffer or FBO. */
- public static int getOGLSurfaceType(Graphics g) {
- checkActive();
-
- try {
- // FIXME: fallback path for pre-b73 (?) Mustang builds -- remove
- // once fbobject support is in OGLUtilities
- if (!fbObjectSupportInitialized) {
- return 0;
- }
-
- return ((Integer) getOGLSurfaceTypeMethod.invoke(null, new Object[] { g })).intValue();
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Returns the underlying texture target of the given Graphics
- object assuming it is rendering to an FBO. Returns either
- GL_TEXTURE_2D or GL_TEXTURE_RECTANGLE_ARB. */
- public static int getOGLTextureType(Graphics g) {
- checkActive();
-
- if (getOGLTextureTypeMethod == null) {
- return GL.GL_TEXTURE_2D;
- }
-
- try {
- return ((Integer) getOGLTextureTypeMethod.invoke(null, new Object[] { g })).intValue();
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** Returns either the given GLContext or a substitute one with
- which clients should share textures and display lists. Needed
- when the Java2D/OpenGL pipeline is active and FBOs are being
- used for rendering. FIXME: may need to alter the API in the
- future to indicate which GraphicsDevice the source context is
- associated with. */
- public static GLContext filterShareContext(GLContext shareContext) {
- if (isHeadless)
- return shareContext;
-
- // FIXME: this may need adjustment
- initFBOShareContext(GraphicsEnvironment.
- getLocalGraphicsEnvironment().
- getDefaultScreenDevice().
- getDefaultConfiguration());
- if (j2dFBOShareContext != null) {
- return j2dFBOShareContext;
- }
- return shareContext;
- }
-
- /** Returns the GLContext associated with the Java2D "share
- context", with which all contexts created by JOGL must share
- textures and display lists when the FBO option is enabled for
- the Java2D/OpenGL pipeline. */
- public static GLContext getShareContext(GraphicsConfiguration gc) {
- initFBOShareContext(gc);
- // FIXME: for full generality probably need to have multiple of
- // these, one per GraphicsConfiguration seen?
- return j2dFBOShareContext;
- }
-
- //----------------------------------------------------------------------
- // Mac OS X-specific methods
- //
-
- /** (Mac OS X-specific) Creates a new OpenGL context on the surface
- associated with the given Graphics object, sharing textures and
- display lists with the specified (CGLContextObj) share context. */
- public static long createOGLContextOnSurface(Graphics g, long shareCtx) {
- checkActive();
-
- try {
- return ((Long) createOGLContextOnSurfaceMethod.invoke(null, new Object[] { g, new Long(shareCtx) })).longValue();
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** (Mac OS X-specific) Makes the given OpenGL context current on
- the surface associated with the given Graphics object. */
- public static boolean makeOGLContextCurrentOnSurface(Graphics g, long ctx) {
- checkActive();
-
- try {
- return ((Boolean) makeOGLContextCurrentOnSurfaceMethod.invoke(null, new Object[] { g, new Long(ctx) })).booleanValue();
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- /** (Mac OS X-specific) Destroys the given OpenGL context. */
- public static void destroyOGLContext(long ctx) {
- checkActive();
-
- try {
- destroyOGLContextMethod.invoke(null, new Object[] { new Long(ctx) });
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (Exception e) {
- throw (InternalError) new InternalError().initCause(e);
- }
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private static void checkActive() {
- if (!isOGLPipelineActive()) {
- throw new GLException("Java2D OpenGL pipeline not active (or necessary support not present)");
- }
- }
-
- private static int getOGLUtilitiesIntField(final String name) {
- Integer i = (Integer) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- try {
- Class utils = Class.forName("sun.java2d.opengl.OGLUtilities");
- Field f = utils.getField(name);
- f.setAccessible(true);
- return f.get(null);
- } catch (Exception e) {
- if (DEBUG && VERBOSE) {
- e.printStackTrace();
- }
- return null;
- }
- }
- });
- if (i == null)
- return 0;
- if (DEBUG && VERBOSE) {
- System.err.println("OGLUtilities." + name + " = " + i.intValue());
- }
- return i.intValue();
- }
-
- private static void initFBOShareContext(final GraphicsConfiguration gc) {
- // Note 1: this must not be done in the static initalizer due to
- // deadlock problems.
-
- // Note 2: the first execution of this method must not be from the
- // Java2D Queue Flusher Thread.
-
- if (isOGLPipelineActive() &&
- isFBOEnabled() &&
- !initializedJ2DFBOShareContext) {
-
- // FIXME: this technique is probably not adequate in multi-head
- // situations. Ideally we would keep track of a given share
- // context on a per-GraphicsConfiguration basis or something
- // similar rather than keeping one share context in a global
- // variable.
- initializedJ2DFBOShareContext = true;
- if (DEBUG) {
- System.err.println("Starting initialization of J2D FBO share context");
- }
- invokeWithOGLSharedContextCurrent(gc, new Runnable() {
- public void run() {
- j2dFBOShareContext = GLDrawableFactory.getFactory().createExternalGLContext();
- }
- });
- if (DEBUG) {
- System.err.println("Ending initialization of J2D FBO share context");
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/Java2DGLContext.java b/src/classes/com/sun/opengl/impl/Java2DGLContext.java
deleted file mode 100644
index 86bcb6482..000000000
--- a/src/classes/com/sun/opengl/impl/Java2DGLContext.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.awt.Graphics;
-
-/** Provides a construct by which the shared GLJPanel code can
- * interact with a few methods in the Mac OS X-specific Java2D/JOGL
- * bridge implementation.
- */
-
-public interface Java2DGLContext {
- public void setGraphics(Graphics g);
-} \ No newline at end of file
diff --git a/src/classes/com/sun/opengl/impl/NativeLibLoader.java b/src/classes/com/sun/opengl/impl/NativeLibLoader.java
deleted file mode 100644
index 522b81a03..000000000
--- a/src/classes/com/sun/opengl/impl/NativeLibLoader.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl;
-
-import java.awt.Toolkit;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.HashSet;
-
-public class NativeLibLoader {
- public interface LoaderAction {
- /**
- * Loads the library specified by libname. Optionally preloads the libraries specified by
- * preload. The implementation should ignore, if the preload-libraries have already been
- * loaded.
- * @param libname the library to load
- * @param preload the libraries to load before loading the main library
- * @param doPreload true, iff the preload-libraries should be loaded
- * @param ignoreError true, iff errors during loading the preload-libraries should be ignored
- */
- void loadLibrary(String libname, String[] preload,
- boolean doPreload, boolean ignoreError);
- }
-
- private static class DefaultAction implements LoaderAction {
- public void loadLibrary(String libname, String[] preload,
- boolean doPreload, boolean ignoreError) {
- if (doPreload) {
- for (int i=0; i<preload.length; i++) {
- try {
- loadLibraryInternal(preload[i]);
- }
- catch (UnsatisfiedLinkError e) {
- if (!ignoreError && e.getMessage().indexOf("already loaded") < 0) {
- throw e;
- }
- }
- }
- }
-
- loadLibraryInternal(libname);
- }
- }
-
- private static final HashSet loaded = new HashSet();
- private static LoaderAction loaderAction = new DefaultAction();
-
- public static void disableLoading() {
- setLoadingAction(null);
- }
-
- public static void enableLoading() {
- setLoadingAction(new DefaultAction());
- }
-
- public static synchronized void setLoadingAction(LoaderAction action) {
- loaderAction = action;
- }
-
- private static synchronized void loadLibrary(String libname, String[] preload,
- boolean doPreload, boolean ignoreError) {
- if (loaderAction != null && !loaded.contains(libname))
- {
- loaderAction.loadLibrary(libname, preload, doPreload, ignoreError);
- loaded.add(libname);
- }
- }
-
- public static void loadCore() {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- loadLibrary("jogl", null, false, false);
- return null;
- }
- });
- }
-
- public static void loadAWTImpl() {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- // Make sure that awt.dll is loaded before loading jawt.dll. Otherwise
- // a Dialog with "awt.dll not found" might pop up.
- // See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4481947.
- Toolkit.getDefaultToolkit();
-
- // Must pre-load JAWT on all non-Mac platforms to
- // ensure references from jogl_awt shared object
- // will succeed since JAWT shared object isn't in
- // default library path
- boolean isOSX = System.getProperty("os.name").equals("Mac OS X");
- String[] preload = { "jawt" };
-
- loadLibrary("jogl_awt", preload, !isOSX, false);
- return null;
- }
- });
- }
-
- public static void loadCgImpl() {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- String[] preload = { "cg", "cgGL" };
- loadLibrary("jogl_cg", preload, true, true);
- return null;
- }
- });
- }
-
- //----------------------------------------------------------------------
- // Support for the new JNLPAppletLauncher
- //
-
- private static boolean usingJNLPAppletLauncher;
- private static Method jnlpLoadLibraryMethod;
-
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- String sunAppletLauncher = System.getProperty("sun.jnlp.applet.launcher");
- usingJNLPAppletLauncher = Boolean.valueOf(sunAppletLauncher).booleanValue();
- return null;
- }
- });
- }
-
- // I hate the amount of delegation currently in this class
- private static void loadLibraryInternal(String libraryName) {
- // Note: special-casing JAWT which is built in to the JDK
- if (usingJNLPAppletLauncher && !libraryName.equals("jawt")) {
- try {
- if (jnlpLoadLibraryMethod == null) {
- Class jnlpAppletLauncherClass = Class.forName("org.jdesktop.applet.util.JNLPAppletLauncher");
- jnlpLoadLibraryMethod = jnlpAppletLauncherClass.getDeclaredMethod("loadLibrary", new Class[] { String.class });
- }
- jnlpLoadLibraryMethod.invoke(null, new Object[] { libraryName });
- } catch (Exception e) {
- Throwable t = e;
- if (t instanceof InvocationTargetException) {
- t = ((InvocationTargetException) t).getTargetException();
- }
- if (t instanceof Error)
- throw (Error) t;
- if (t instanceof RuntimeException) {
- throw (RuntimeException) t;
- }
- // Throw UnsatisfiedLinkError for best compatibility with System.loadLibrary()
- throw (UnsatisfiedLinkError) new UnsatisfiedLinkError().initCause(e);
- }
- } else {
- System.loadLibrary(libraryName);
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/Project.java b/src/classes/com/sun/opengl/impl/Project.java
deleted file mode 100755
index 917cda461..000000000
--- a/src/classes/com/sun/opengl/impl/Project.java
+++ /dev/null
@@ -1,1033 +0,0 @@
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** $Date$ $Revision$
-** $Header$
-*/
-
-/*
- * Copyright (c) 2002-2004 LWJGL Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of 'LWJGL' nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-package com.sun.opengl.impl;
-
-import java.nio.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.util.*;
-
-/**
- * Project.java
- * <p/>
- * <p/>
- * Created 11-jan-2004
- *
- * @author Erik Duijs
- * @author Kenneth Russell
- */
-public class Project {
- private static final double[] IDENTITY_MATRIX =
- new double[] {
- 1.0, 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0, 0.0,
- 0.0, 0.0, 1.0, 0.0,
- 0.0, 0.0, 0.0, 1.0 };
-
- // Note that we have cloned parts of the implementation in order to
- // support incoming Buffers. The reason for this is to avoid loading
- // non-direct buffer subclasses unnecessarily, because doing so can
- // cause performance decreases on direct buffer operations, at least
- // on the current HotSpot JVM. It would be nicer (and make the code
- // simpler) to simply have the array-based entry points delegate to
- // the versions taking Buffers by wrapping the arrays.
-
- // Array-based implementation
- private final double[] matrix = new double[16];
-
- private final double[][] tempMatrix = new double[4][4];
- private final double[] in = new double[4];
- private final double[] out = new double[4];
-
- private final double[] forward = new double[3];
- private final double[] side = new double[3];
- private final double[] up = new double[3];
-
- // Buffer-based implementation
- private final DoubleBuffer matrixBuf;
-
- private final DoubleBuffer tempMatrixBuf;
- private final DoubleBuffer inBuf;
- private final DoubleBuffer outBuf;
-
- private final DoubleBuffer forwardBuf;
- private final DoubleBuffer sideBuf;
- private final DoubleBuffer upBuf;
-
- public Project() {
- // Use direct buffers to avoid loading indirect buffer
- // implementations for applications trying to avoid doing so.
- // Slice up one big buffer because some NIO implementations
- // allocate a huge amount of memory to back even the smallest of
- // buffers.
- DoubleBuffer buf = BufferUtil.newDoubleBuffer(128);
- int pos = 0;
- int sz = 16;
- matrixBuf = slice(buf, pos, sz);
- pos += sz;
- tempMatrixBuf = slice(buf, pos, sz);
- pos += sz;
- sz = 4;
- inBuf = slice(buf, pos, sz);
- pos += sz;
- outBuf = slice(buf, pos, sz);
- pos += sz;
- sz = 3;
- forwardBuf = slice(buf, pos, sz);
- pos += sz;
- sideBuf = slice(buf, pos, sz);
- pos += sz;
- upBuf = slice(buf, pos, sz);
- }
-
- private static DoubleBuffer slice(DoubleBuffer buf, int pos, int len) {
- buf.position(pos);
- buf.limit(pos + len);
- return buf.slice();
- }
-
- /**
- * Make matrix an identity matrix
- */
- private void __gluMakeIdentityd(DoubleBuffer m) {
- int oldPos = m.position();
- m.put(IDENTITY_MATRIX);
- m.position(oldPos);
- }
-
- /**
- * Make matrix an identity matrix
- */
- private void __gluMakeIdentityd(double[] m) {
- for (int i = 0; i < 16; i++) {
- m[i] = IDENTITY_MATRIX[i];
- }
- }
-
- /**
- * Method __gluMultMatrixVecd
- *
- * @param matrix
- * @param in
- * @param out
- */
- private void __gluMultMatrixVecd(double[] matrix, int matrix_offset, double[] in, double[] out) {
- for (int i = 0; i < 4; i++) {
- out[i] =
- in[0] * matrix[0*4+i+matrix_offset] +
- in[1] * matrix[1*4+i+matrix_offset] +
- in[2] * matrix[2*4+i+matrix_offset] +
- in[3] * matrix[3*4+i+matrix_offset];
- }
- }
-
- /**
- * Method __gluMultMatrixVecd
- *
- * @param matrix
- * @param in
- * @param out
- */
- private void __gluMultMatrixVecd(DoubleBuffer matrix, DoubleBuffer in, DoubleBuffer out) {
- int inPos = in.position();
- int outPos = out.position();
- int matrixPos = matrix.position();
- for (int i = 0; i < 4; i++) {
- out.put(i + outPos,
- in.get(0+inPos) * matrix.get(0*4+i+matrixPos) +
- in.get(1+inPos) * matrix.get(1*4+i+matrixPos) +
- in.get(2+inPos) * matrix.get(2*4+i+matrixPos) +
- in.get(3+inPos) * matrix.get(3*4+i+matrixPos));
- }
- }
-
- /**
- * @param src
- * @param inverse
- *
- * @return
- */
- private boolean __gluInvertMatrixd(double[] src, double[] inverse) {
- int i, j, k, swap;
- double t;
- double[][] temp = tempMatrix;
-
- for (i = 0; i < 4; i++) {
- for (j = 0; j < 4; j++) {
- temp[i][j] = src[i*4+j];
- }
- }
- __gluMakeIdentityd(inverse);
-
- for (i = 0; i < 4; i++) {
- //
- // Look for largest element in column
- //
- swap = i;
- for (j = i + 1; j < 4; j++) {
- if (Math.abs(temp[j][i]) > Math.abs(temp[i][i])) {
- swap = j;
- }
- }
-
- if (swap != i) {
- //
- // Swap rows.
- //
- for (k = 0; k < 4; k++) {
- t = temp[i][k];
- temp[i][k] = temp[swap][k];
- temp[swap][k] = t;
-
- t = inverse[i*4+k];
- inverse[i*4+k] = inverse[swap*4+k];
- inverse[swap*4+k] = t;
- }
- }
-
- if (temp[i][i] == 0) {
- //
- // No non-zero pivot. The matrix is singular, which shouldn't
- // happen. This means the user gave us a bad matrix.
- //
- return false;
- }
-
- t = temp[i][i];
- for (k = 0; k < 4; k++) {
- temp[i][k] /= t;
- inverse[i*4+k] /= t;
- }
- for (j = 0; j < 4; j++) {
- if (j != i) {
- t = temp[j][i];
- for (k = 0; k < 4; k++) {
- temp[j][k] -= temp[i][k] * t;
- inverse[j*4+k] -= inverse[i*4+k]*t;
- }
- }
- }
- }
- return true;
- }
-
- /**
- * @param src
- * @param inverse
- *
- * @return
- */
- private boolean __gluInvertMatrixd(DoubleBuffer src, DoubleBuffer inverse) {
- int i, j, k, swap;
- double t;
-
- int srcPos = src.position();
- int invPos = inverse.position();
-
- DoubleBuffer temp = tempMatrixBuf;
-
- for (i = 0; i < 4; i++) {
- for (j = 0; j < 4; j++) {
- temp.put(i*4+j, src.get(i*4+j + srcPos));
- }
- }
- __gluMakeIdentityd(inverse);
-
- for (i = 0; i < 4; i++) {
- //
- // Look for largest element in column
- //
- swap = i;
- for (j = i + 1; j < 4; j++) {
- if (Math.abs(temp.get(j*4+i)) > Math.abs(temp.get(i*4+i))) {
- swap = j;
- }
- }
-
- if (swap != i) {
- //
- // Swap rows.
- //
- for (k = 0; k < 4; k++) {
- t = temp.get(i*4+k);
- temp.put(i*4+k, temp.get(swap*4+k));
- temp.put(swap*4+k, t);
-
- t = inverse.get(i*4+k + invPos);
- inverse.put(i*4+k + invPos, inverse.get(swap*4+k + invPos));
- inverse.put(swap*4+k + invPos, t);
- }
- }
-
- if (temp.get(i*4+i) == 0) {
- //
- // No non-zero pivot. The matrix is singular, which shouldn't
- // happen. This means the user gave us a bad matrix.
- //
- return false;
- }
-
- t = temp.get(i*4+i);
- for (k = 0; k < 4; k++) {
- temp.put(i*4+k, temp.get(i*4+k) / t);
- inverse.put(i*4+k + invPos, inverse.get(i*4+k + invPos) / t);
- }
- for (j = 0; j < 4; j++) {
- if (j != i) {
- t = temp.get(j*4+i);
- for (k = 0; k < 4; k++) {
- temp.put(j*4+k, temp.get(j*4+k) - temp.get(i*4+k) * t);
- inverse.put(j*4+k + invPos, inverse.get(j*4+k + invPos) - inverse.get(i*4+k + invPos) * t);
- }
- }
- }
- }
- return true;
- }
-
-
- /**
- * @param a
- * @param b
- * @param r
- */
- private void __gluMultMatricesd(double[] a, int a_offset, double[] b, int b_offset, double[] r) {
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- r[i*4+j] =
- a[i*4+0+a_offset]*b[0*4+j+b_offset] +
- a[i*4+1+a_offset]*b[1*4+j+b_offset] +
- a[i*4+2+a_offset]*b[2*4+j+b_offset] +
- a[i*4+3+a_offset]*b[3*4+j+b_offset];
- }
- }
- }
-
-
- /**
- * @param a
- * @param b
- * @param r
- */
- private void __gluMultMatricesd(DoubleBuffer a, DoubleBuffer b, DoubleBuffer r) {
- int aPos = a.position();
- int bPos = b.position();
- int rPos = r.position();
-
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- r.put(i*4+j + rPos,
- a.get(i*4+0+aPos)*b.get(0*4+j+bPos) +
- a.get(i*4+1+aPos)*b.get(1*4+j+bPos) +
- a.get(i*4+2+aPos)*b.get(2*4+j+bPos) +
- a.get(i*4+3+aPos)*b.get(3*4+j+bPos));
- }
- }
- }
-
- /**
- * Normalize vector
- *
- * @param v
- */
- private static void normalize(double[] v) {
- double r;
-
- r = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
- if ( r == 0.0 )
- return;
-
- r = 1.0 / r;
-
- v[0] *= r;
- v[1] *= r;
- v[2] *= r;
-
- return;
- }
-
- /**
- * Normalize vector
- *
- * @param v
- */
- private static void normalize(DoubleBuffer v) {
- double r;
-
- int vPos = v.position();
-
- r = Math.sqrt(v.get(0+vPos) * v.get(0+vPos) +
- v.get(1+vPos) * v.get(1+vPos) +
- v.get(2+vPos) * v.get(2+vPos));
- if ( r == 0.0 )
- return;
-
- r = 1.0 / r;
-
- v.put(0+vPos, v.get(0+vPos) * r);
- v.put(1+vPos, v.get(1+vPos) * r);
- v.put(2+vPos, v.get(2+vPos) * r);
-
- return;
- }
-
-
- /**
- * Calculate cross-product
- *
- * @param v1
- * @param v2
- * @param result
- */
- private static void cross(double[] v1, double[] v2, double[] result) {
- result[0] = v1[1] * v2[2] - v1[2] * v2[1];
- result[1] = v1[2] * v2[0] - v1[0] * v2[2];
- result[2] = v1[0] * v2[1] - v1[1] * v2[0];
- }
-
- /**
- * Calculate cross-product
- *
- * @param v1
- * @param v2
- * @param result
- */
- private static void cross(DoubleBuffer v1, DoubleBuffer v2, DoubleBuffer result) {
- int v1Pos = v1.position();
- int v2Pos = v2.position();
- int rPos = result.position();
-
- result.put(0+rPos, v1.get(1+v1Pos) * v2.get(2+v2Pos) - v1.get(2+v1Pos) * v2.get(1+v2Pos));
- result.put(1+rPos, v1.get(2+v1Pos) * v2.get(0+v2Pos) - v1.get(0+v1Pos) * v2.get(2+v2Pos));
- result.put(2+rPos, v1.get(0+v1Pos) * v2.get(1+v2Pos) - v1.get(1+v1Pos) * v2.get(0+v2Pos));
- }
-
- /**
- * Method gluOrtho2D.
- *
- * @param left
- * @param right
- * @param bottom
- * @param top
- */
- public void gluOrtho2D(GL gl, double left, double right, double bottom, double top) {
- gl.glOrtho(left, right, bottom, top, -1, 1);
- }
-
- /**
- * Method gluPerspective.
- *
- * @param fovy
- * @param aspect
- * @param zNear
- * @param zFar
- */
- public void gluPerspective(GL gl, double fovy, double aspect, double zNear, double zFar) {
- double sine, cotangent, deltaZ;
- double radians = fovy / 2 * Math.PI / 180;
-
- deltaZ = zFar - zNear;
- sine = Math.sin(radians);
-
- if ((deltaZ == 0) || (sine == 0) || (aspect == 0)) {
- return;
- }
-
- cotangent = Math.cos(radians) / sine;
-
- __gluMakeIdentityd(matrixBuf);
-
- matrixBuf.put(0 * 4 + 0, cotangent / aspect);
- matrixBuf.put(1 * 4 + 1, cotangent);
- matrixBuf.put(2 * 4 + 2, - (zFar + zNear) / deltaZ);
- matrixBuf.put(2 * 4 + 3, -1);
- matrixBuf.put(3 * 4 + 2, -2 * zNear * zFar / deltaZ);
- matrixBuf.put(3 * 4 + 3, 0);
-
- gl.glMultMatrixd(matrixBuf);
- }
-
- /**
- * Method gluLookAt
- *
- * @param eyex
- * @param eyey
- * @param eyez
- * @param centerx
- * @param centery
- * @param centerz
- * @param upx
- * @param upy
- * @param upz
- */
- public void gluLookAt(GL gl,
- double eyex,
- double eyey,
- double eyez,
- double centerx,
- double centery,
- double centerz,
- double upx,
- double upy,
- double upz) {
- DoubleBuffer forward = this.forwardBuf;
- DoubleBuffer side = this.sideBuf;
- DoubleBuffer up = this.upBuf;
-
- forward.put(0, centerx - eyex);
- forward.put(1, centery - eyey);
- forward.put(2, centerz - eyez);
-
- up.put(0, upx);
- up.put(1, upy);
- up.put(2, upz);
-
- normalize(forward);
-
- /* Side = forward x up */
- cross(forward, up, side);
- normalize(side);
-
- /* Recompute up as: up = side x forward */
- cross(side, forward, up);
-
- __gluMakeIdentityd(matrixBuf);
- matrixBuf.put(0 * 4 + 0, side.get(0));
- matrixBuf.put(1 * 4 + 0, side.get(1));
- matrixBuf.put(2 * 4 + 0, side.get(2));
-
- matrixBuf.put(0 * 4 + 1, up.get(0));
- matrixBuf.put(1 * 4 + 1, up.get(1));
- matrixBuf.put(2 * 4 + 1, up.get(2));
-
- matrixBuf.put(0 * 4 + 2, -forward.get(0));
- matrixBuf.put(1 * 4 + 2, -forward.get(1));
- matrixBuf.put(2 * 4 + 2, -forward.get(2));
-
- gl.glMultMatrixd(matrixBuf);
- gl.glTranslated(-eyex, -eyey, -eyez);
- }
-
- /**
- * Method gluProject
- *
- * @param objx
- * @param objy
- * @param objz
- * @param modelMatrix
- * @param projMatrix
- * @param viewport
- * @param win_pos
- *
- * @return
- */
- public boolean gluProject(double objx,
- double objy,
- double objz,
- double[] modelMatrix,
- int modelMatrix_offset,
- double[] projMatrix,
- int projMatrix_offset,
- int[] viewport,
- int viewport_offset,
- double[] win_pos,
- int win_pos_offset ) {
-
- double[] in = this.in;
- double[] out = this.out;
-
- in[0] = objx;
- in[1] = objy;
- in[2] = objz;
- in[3] = 1.0;
-
- __gluMultMatrixVecd(modelMatrix, modelMatrix_offset, in, out);
- __gluMultMatrixVecd(projMatrix, projMatrix_offset, out, in);
-
- if (in[3] == 0.0)
- return false;
-
- in[3] = (1.0 / in[3]) * 0.5;
-
- // Map x, y and z to range 0-1
- in[0] = in[0] * in[3] + 0.5f;
- in[1] = in[1] * in[3] + 0.5f;
- in[2] = in[2] * in[3] + 0.5f;
-
- // Map x,y to viewport
- win_pos[0+win_pos_offset] = in[0] * viewport[2+viewport_offset] + viewport[0+viewport_offset];
- win_pos[1+win_pos_offset] = in[1] * viewport[3+viewport_offset] + viewport[1+viewport_offset];
- win_pos[2+win_pos_offset] = in[2];
-
- return true;
- }
-
- /**
- * Method gluProject
- *
- * @param objx
- * @param objy
- * @param objz
- * @param modelMatrix
- * @param projMatrix
- * @param viewport
- * @param win_pos
- *
- * @return
- */
- public boolean gluProject(double objx,
- double objy,
- double objz,
- DoubleBuffer modelMatrix,
- DoubleBuffer projMatrix,
- IntBuffer viewport,
- DoubleBuffer win_pos) {
-
- DoubleBuffer in = this.inBuf;
- DoubleBuffer out = this.outBuf;
-
- in.put(0, objx);
- in.put(1, objy);
- in.put(2, objz);
- in.put(3, 1.0);
-
- __gluMultMatrixVecd(modelMatrix, in, out);
- __gluMultMatrixVecd(projMatrix, out, in);
-
- if (in.get(3) == 0.0)
- return false;
-
- in.put(3, (1.0 / in.get(3)) * 0.5);
-
- // Map x, y and z to range 0-1
- in.put(0, in.get(0) * in.get(3) + 0.5f);
- in.put(1, in.get(1) * in.get(3) + 0.5f);
- in.put(2, in.get(2) * in.get(3) + 0.5f);
-
- // Map x,y to viewport
- int vPos = viewport.position();
- int wPos = win_pos.position();
- win_pos.put(0+wPos, in.get(0) * viewport.get(2+vPos) + viewport.get(0+vPos));
- win_pos.put(1+wPos, in.get(1) * viewport.get(3+vPos) + viewport.get(1+vPos));
- win_pos.put(2+wPos, in.get(2));
-
- return true;
- }
-
-
- /**
- * Method gluUnproject
- *
- * @param winx
- * @param winy
- * @param winz
- * @param modelMatrix
- * @param projMatrix
- * @param viewport
- * @param obj_pos
- *
- * @return
- */
- public boolean gluUnProject(double winx,
- double winy,
- double winz,
- double[] modelMatrix,
- int modelMatrix_offset,
- double[] projMatrix,
- int projMatrix_offset,
- int[] viewport,
- int viewport_offset,
- double[] obj_pos,
- int obj_pos_offset) {
- double[] in = this.in;
- double[] out = this.out;
-
- __gluMultMatricesd(modelMatrix, modelMatrix_offset, projMatrix, projMatrix_offset, matrix);
-
- if (!__gluInvertMatrixd(matrix, matrix))
- return false;
-
- in[0] = winx;
- in[1] = winy;
- in[2] = winz;
- in[3] = 1.0;
-
- // Map x and y from window coordinates
- in[0] = (in[0] - viewport[0+viewport_offset]) / viewport[2+viewport_offset];
- in[1] = (in[1] - viewport[1+viewport_offset]) / viewport[3+viewport_offset];
-
- // Map to range -1 to 1
- in[0] = in[0] * 2 - 1;
- in[1] = in[1] * 2 - 1;
- in[2] = in[2] * 2 - 1;
-
- __gluMultMatrixVecd(matrix, 0, in, out);
-
- if (out[3] == 0.0)
- return false;
-
- out[3] = 1.0 / out[3];
-
- obj_pos[0+obj_pos_offset] = out[0] * out[3];
- obj_pos[1+obj_pos_offset] = out[1] * out[3];
- obj_pos[2+obj_pos_offset] = out[2] * out[3];
-
- return true;
- }
-
-
- /**
- * Method gluUnproject
- *
- * @param winx
- * @param winy
- * @param winz
- * @param modelMatrix
- * @param projMatrix
- * @param viewport
- * @param obj_pos
- *
- * @return
- */
- public boolean gluUnProject(double winx,
- double winy,
- double winz,
- DoubleBuffer modelMatrix,
- DoubleBuffer projMatrix,
- IntBuffer viewport,
- DoubleBuffer obj_pos) {
- DoubleBuffer in = this.inBuf;
- DoubleBuffer out = this.outBuf;
-
- __gluMultMatricesd(modelMatrix, projMatrix, matrixBuf);
-
- if (!__gluInvertMatrixd(matrixBuf, matrixBuf))
- return false;
-
- in.put(0, winx);
- in.put(1, winy);
- in.put(2, winz);
- in.put(3, 1.0);
-
- // Map x and y from window coordinates
- int vPos = viewport.position();
- int oPos = obj_pos.position();
- in.put(0, (in.get(0) - viewport.get(0+vPos)) / viewport.get(2+vPos));
- in.put(1, (in.get(1) - viewport.get(1+vPos)) / viewport.get(3+vPos));
-
- // Map to range -1 to 1
- in.put(0, in.get(0) * 2 - 1);
- in.put(1, in.get(1) * 2 - 1);
- in.put(2, in.get(2) * 2 - 1);
-
- __gluMultMatrixVecd(matrixBuf, in, out);
-
- if (out.get(3) == 0.0)
- return false;
-
- out.put(3, 1.0 / out.get(3));
-
- obj_pos.put(0+oPos, out.get(0) * out.get(3));
- obj_pos.put(1+oPos, out.get(1) * out.get(3));
- obj_pos.put(2+oPos, out.get(2) * out.get(3));
-
- return true;
- }
-
-
- /**
- * Method gluUnproject4
- *
- * @param winx
- * @param winy
- * @param winz
- * @param clipw
- * @param modelMatrix
- * @param projMatrix
- * @param viewport
- * @param near
- * @param far
- * @param obj_pos
- *
- * @return
- */
- public boolean gluUnProject4(double winx,
- double winy,
- double winz,
- double clipw,
- double[] modelMatrix,
- int modelMatrix_offset,
- double[] projMatrix,
- int projMatrix_offset,
- int[] viewport,
- int viewport_offset,
- double near,
- double far,
- double[] obj_pos,
- int obj_pos_offset ) {
- double[] in = this.in;
- double[] out = this.out;
-
- __gluMultMatricesd(modelMatrix, modelMatrix_offset, projMatrix, projMatrix_offset, matrix);
-
- if (!__gluInvertMatrixd(matrix, matrix))
- return false;
-
- in[0] = winx;
- in[1] = winy;
- in[2] = winz;
- in[3] = clipw;
-
- // Map x and y from window coordinates
- in[0] = (in[0] - viewport[0+viewport_offset]) / viewport[2+viewport_offset];
- in[1] = (in[1] - viewport[1+viewport_offset]) / viewport[3+viewport_offset];
- in[2] = (in[2] - near) / (far - near);
-
- // Map to range -1 to 1
- in[0] = in[0] * 2 - 1;
- in[1] = in[1] * 2 - 1;
- in[2] = in[2] * 2 - 1;
-
- __gluMultMatrixVecd(matrix, 0, in, out);
-
- if (out[3] == 0.0)
- return false;
-
- obj_pos[0+obj_pos_offset] = out[0];
- obj_pos[1+obj_pos_offset] = out[1];
- obj_pos[2+obj_pos_offset] = out[2];
- obj_pos[3+obj_pos_offset] = out[3];
- return true;
- }
-
- /**
- * Method gluUnproject4
- *
- * @param winx
- * @param winy
- * @param winz
- * @param clipw
- * @param modelMatrix
- * @param projMatrix
- * @param viewport
- * @param near
- * @param far
- * @param obj_pos
- *
- * @return
- */
- public boolean gluUnProject4(double winx,
- double winy,
- double winz,
- double clipw,
- DoubleBuffer modelMatrix,
- DoubleBuffer projMatrix,
- IntBuffer viewport,
- double near,
- double far,
- DoubleBuffer obj_pos) {
- DoubleBuffer in = this.inBuf;
- DoubleBuffer out = this.outBuf;
-
- __gluMultMatricesd(modelMatrix, projMatrix, matrixBuf);
-
- if (!__gluInvertMatrixd(matrixBuf, matrixBuf))
- return false;
-
- in.put(0, winx);
- in.put(1, winy);
- in.put(2, winz);
- in.put(3, clipw);
-
- // Map x and y from window coordinates
- int vPos = viewport.position();
- in.put(0, (in.get(0) - viewport.get(0+vPos)) / viewport.get(2+vPos));
- in.put(1, (in.get(1) - viewport.get(1+vPos)) / viewport.get(3+vPos));
- in.put(2, (in.get(2) - near) / (far - near));
-
- // Map to range -1 to 1
- in.put(0, in.get(0) * 2 - 1);
- in.put(1, in.get(1) * 2 - 1);
- in.put(2, in.get(2) * 2 - 1);
-
- __gluMultMatrixVecd(matrixBuf, in, out);
-
- if (out.get(3) == 0.0)
- return false;
-
- int oPos = obj_pos.position();
- obj_pos.put(0+oPos, out.get(0));
- obj_pos.put(1+oPos, out.get(1));
- obj_pos.put(2+oPos, out.get(2));
- obj_pos.put(3+oPos, out.get(3));
- return true;
- }
-
-
- /**
- * Method gluPickMatrix
- *
- * @param x
- * @param y
- * @param deltaX
- * @param deltaY
- * @param viewport
- */
- public void gluPickMatrix(GL gl,
- double x,
- double y,
- double deltaX,
- double deltaY,
- IntBuffer viewport) {
- if (deltaX <= 0 || deltaY <= 0) {
- return;
- }
-
- /* Translate and scale the picked region to the entire window */
- int vPos = viewport.position();
- gl.glTranslated((viewport.get(2+vPos) - 2 * (x - viewport.get(0+vPos))) / deltaX,
- (viewport.get(3+vPos) - 2 * (y - viewport.get(1+vPos))) / deltaY,
- 0);
- gl.glScaled(viewport.get(2) / deltaX, viewport.get(3) / deltaY, 1.0);
- }
-
- /**
- * Method gluPickMatrix
- *
- * @param x
- * @param y
- * @param deltaX
- * @param deltaY
- * @param viewport
- * @param viewport_offset
- */
- public void gluPickMatrix(GL gl,
- double x,
- double y,
- double deltaX,
- double deltaY,
- int[] viewport,
- int viewport_offset) {
- if (deltaX <= 0 || deltaY <= 0) {
- return;
- }
-
- /* Translate and scale the picked region to the entire window */
- gl.glTranslated((viewport[2+viewport_offset] - 2 * (x - viewport[0+viewport_offset])) / deltaX,
- (viewport[3+viewport_offset] - 2 * (y - viewport[1+viewport_offset])) / deltaY,
- 0);
- gl.glScaled(viewport[2+viewport_offset] / deltaX, viewport[3+viewport_offset] / deltaY, 1.0);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/Util.java b/src/classes/com/sun/opengl/impl/Util.java
deleted file mode 100644
index b4b501659..000000000
--- a/src/classes/com/sun/opengl/impl/Util.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 2002-2004 LWJGL Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of 'LWJGL' nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.impl;
-
-import java.nio.IntBuffer;
-import javax.media.opengl.*;
-
-/**
- * Util.java
- * <p/>
- * <p/>
- * Created 7-jan-2004
- *
- * @author Erik Duijs
- */
-class Util {
-
- /**
- * temp int[] of one for getting an int from some GL functions
- */
- private int[] scratch = new int[1];
-
- /**
- * Return ceiling of integer division
- *
- * @param a
- * @param b
- *
- * @return int
- */
- protected static int ceil(int a, int b) {
- return (a % b == 0 ? a / b : a / b + 1);
- }
-
- /**
- * Method compPerPix.
- *
- * @param format
- *
- * @return int
- */
- protected static int compPerPix(int format) {
- /* Determine number of components per pixel */
- switch ( format ) {
- case GL.GL_COLOR_INDEX:
- case GL.GL_STENCIL_INDEX:
- case GL.GL_DEPTH_COMPONENT:
- case GL.GL_RED:
- case GL.GL_GREEN:
- case GL.GL_BLUE:
- case GL.GL_ALPHA:
- case GL.GL_LUMINANCE:
- return 1;
- case GL.GL_LUMINANCE_ALPHA:
- return 2;
- case GL.GL_RGB:
- case GL.GL_BGR:
- return 3;
- case GL.GL_RGBA:
- case GL.GL_BGRA:
- return 4;
- default :
- return -1;
- }
- }
-
- /**
- * Method nearestPower.
- * <p/>
- * Compute the nearest power of 2 number. This algorithm is a little strange, but it works quite well.
- *
- * @param value
- *
- * @return int
- */
- protected static int nearestPower(int value) {
- int i;
-
- i = 1;
-
- /* Error! */
- if ( value == 0 )
- return -1;
-
- for ( ; ; ) {
- if ( value == 1 ) {
- return i;
- } else if ( value == 3 ) {
- return i << 2;
- }
- value >>= 1;
- i <<= 1;
- }
- }
-
- /**
- * Method bytesPerPixel.
- *
- * @param format
- * @param type
- *
- * @return int
- */
- protected static int bytesPerPixel(int format, int type) {
- int n, m;
-
- switch ( format ) {
- case GL.GL_COLOR_INDEX:
- case GL.GL_STENCIL_INDEX:
- case GL.GL_DEPTH_COMPONENT:
- case GL.GL_RED:
- case GL.GL_GREEN:
- case GL.GL_BLUE:
- case GL.GL_ALPHA:
- case GL.GL_LUMINANCE:
- n = 1;
- break;
- case GL.GL_LUMINANCE_ALPHA:
- n = 2;
- break;
- case GL.GL_RGB:
- case GL.GL_BGR:
- n = 3;
- break;
- case GL.GL_RGBA:
- case GL.GL_BGRA:
- n = 4;
- break;
- default :
- n = 0;
- }
-
- switch ( type ) {
- case GL.GL_UNSIGNED_BYTE:
- m = 1;
- break;
- case GL.GL_BYTE:
- m = 1;
- break;
- case GL.GL_BITMAP:
- m = 1;
- break;
- case GL.GL_UNSIGNED_SHORT:
- m = 2;
- break;
- case GL.GL_SHORT:
- m = 2;
- break;
- case GL.GL_UNSIGNED_INT:
- m = 4;
- break;
- case GL.GL_INT:
- m = 4;
- break;
- case GL.GL_FLOAT:
- m = 4;
- break;
- default :
- m = 0;
- }
-
- return n * m;
- }
-
- /**
- * Convenience method for returning an int, rather than getting it out of a buffer yourself.
- *
- * @param what
- *
- * @return int
- */
- protected int glGetIntegerv(GL gl, int what) {
- gl.glGetIntegerv(what, scratch, 0);
- return scratch[0];
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/error/Error.java b/src/classes/com/sun/opengl/impl/error/Error.java
deleted file mode 100644
index 43153217c..000000000
--- a/src/classes/com/sun/opengl/impl/error/Error.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.error;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.glu.GLU;
-
-/**
- *
- * @author Administrator
- */
-public class Error {
-
- private static String[] glErrorStrings = {
- "invalid enumerant",
- "invalid value",
- "invalid operation",
- "stack overflow",
- "stack underflow",
- "out of memory",
- "invalid framebuffer operation"
- };
-
- private static String[] gluErrorStrings = {
- "invalid enumerant",
- "invalid value",
- "out of memory",
- "",
- "invalid operation"
- };
-
- /** Creates a new instance of Error */
- public Error() {
- }
-
- public static String gluErrorString( int errorCode ) {
- if( errorCode == 0 ) {
- return( "no error" );
- }
- if( (errorCode >= GL.GL_INVALID_ENUM) && (errorCode <= GL.GL_INVALID_FRAMEBUFFER_OPERATION_EXT) ) {
- return( glErrorStrings[ errorCode - GL.GL_INVALID_ENUM ] );
- }
- if( errorCode == GL.GL_TABLE_TOO_LARGE ) {
- return( "table too large" );
- }
- if( (errorCode >= GLU.GLU_INVALID_ENUM) && (errorCode <= GLU.GLU_INVALID_OPERATION) ) {
- return( gluErrorStrings[ errorCode - GLU.GLU_INVALID_ENUM ] );
- }
-// if( (errorCode >= GLU.GLU_NURBS_ERROR1) && (errorCode <= GLU.GLU_NURBS_ERROR37) ) {
-// return( gluErrorStrings[ errorCode - (GLU.GLU_NURBS_ERROR1 - 1) ] );
-// }
- if( (errorCode >= GLU.GLU_TESS_ERROR1) && (errorCode <= GLU.GLU_TESS_ERROR8) ) {
- return( gluErrorStrings[ errorCode - (GLU.GLU_TESS_ERROR1 - 1) ] );
- }
- return( null );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/glue/Glue.java b/src/classes/com/sun/opengl/impl/glue/Glue.java
deleted file mode 100644
index 863c9417c..000000000
--- a/src/classes/com/sun/opengl/impl/glue/Glue.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.glue;
-
-/**
- *
- * @author Administrator
- */
-public class Glue {
- private static String[] __gluNurbsErrors = {
- " ",
- "spline order un-supported",
- "too few knots",
- "valid knot range is empty",
- "decreasing knot sequence knot",
- "knot multiplicity greater than order of spline",
- "gluEndCurve() must follow gluBeginCurve()",
- "gluBeginCurve() must precede gluEndCurve()",
- "missing or extra geometric data",
- "can't draw piecewise linear trimming curves",
- "missing or extra domain data",
- "missing or extra domain data",
- "gluEndTrim() must precede gluEndSurface()",
- "gluBeginSurface() must precede gluEndSurface()",
- "curve of improper type passed as trim curve",
- "gluBeginSurface() must precede gluBeginTrim()",
- "gluEndTrim() must follow gluBeginTrim()",
- "gluBeginTrim() must follow gluEndTrim()",
- "invalid or missing trim curve",
- "gluBeginTrim() must precede gluPwlCurve()",
- "piecewise linear trimming curve referenced twice",
- "piecewise linear trimming curve and nurbs curve mixed",
- "improper usage of trim data type",
- "nurbs curve referenced twice",
- "nurbs curve and piecewise linear trimming curve mixed",
- "nurbs surface referenced twice",
- "invalid property",
- "gluEndSurface() must follow gluBeginSurface()",
- "intersecting or misoriented trim curve",
- "intersecting trim curves",
- "UNUSED",
- "inconnected trim curves",
- "unknown knot error",
- "negative vertex count encountered",
- "negative byte-stride encountered",
- "unknown type descriptor",
- "null control point reference",
- "duplicate point on piecewise linear trimming curve"
- } ;
-
- /** Creates a new instance of Glue */
- public Glue() {
- }
-
- public static String __gluNURBSErrorString( int errno ) {
- return( __gluNurbsErrors[ errno ] );
- }
-
- private static String[] __gluTessErrors = {
- " ",
- "gluTessBeginPolygon() must precede a gluTessEndPolygon",
- "gluTessBeginContour() must precede a gluTessEndContour()",
- "gluTessEndPolygon() must follow a gluTessBeginPolygon()",
- "gluTessEndContour() must follow a gluTessBeginContour()",
- "a coordinate is too large",
- "need combine callback"
- };
-
- public static String __gluTessErrorString( int errno ) {
- return( __gluTessErrors[ errno ] );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java
deleted file mode 100644
index c9b6e432e..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXExternalGLContext extends MacOSXGLContext {
- private boolean firstMakeCurrent = true;
- private boolean created = true;
- private GLContext lastContext;
-
- public MacOSXExternalGLContext() {
- super(null, null);
-
- // FIXME: we don't have a "current context" primitive implemented
- // yet on OS X. In the current implementation this would need to
- // return an NSOpenGLContext*, but "external" toolkits are not
- // guaranteed to be using the Cocoa OpenGL API. Additionally, if
- // we switched this implementation to use the low-level CGL APIs,
- // we would lose the ability to share textures and display lists
- // between contexts since you need an NSOpenGLContext, not a
- // CGLContextObj, in order to share textures and display lists
- // between two NSOpenGLContexts.
- //
- // The ramifications here are that it is not currently possible to
- // share textures and display lists between an OpenGL context
- // created by JOGL and one created by a third-party library on OS
- // X.
-
- // context = CGL.CGLGetCurrentContext();
-
- GLContextShareSet.contextCreated(this);
- resetGLFunctionAvailability();
- }
-
- protected boolean create() {
- return true;
- }
-
- public int makeCurrent() throws GLException {
- // Save last context if necessary to allow external GLContexts to
- // talk to other GLContexts created by this library
- GLContext cur = getCurrent();
- if (cur != null && cur != this) {
- lastContext = cur;
- setCurrent(null);
- }
- return super.makeCurrent();
- }
-
- public void release() throws GLException {
- super.release();
- setCurrent(lastContext);
- lastContext = null;
- }
-
- protected int makeCurrentImpl() throws GLException {
- if (firstMakeCurrent) {
- firstMakeCurrent = false;
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected void releaseImpl() throws GLException {
- }
-
- protected void destroyImpl() throws GLException {
- created = false;
- GLContextShareSet.contextDestroyed(this);
- }
-
- public boolean isCreated() {
- return created;
- }
-
- public void setOpenGLMode(int mode) {
- if (mode != MacOSXGLDrawable.NSOPENGL_MODE)
- throw new GLException("OpenGL mode switching not supported for external GLContexts");
- }
-
- public int getOpenGLMode() {
- return MacOSXGLDrawable.NSOPENGL_MODE;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXGLContext.java
deleted file mode 100644
index 02bf81f2e..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXGLContext.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import java.nio.*;
-import java.util.*;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public abstract class MacOSXGLContext extends GLContextImpl
-{
- protected MacOSXGLDrawable drawable;
- protected long nsContext; // NSOpenGLContext
- private CGLExt cglExt;
- // Table that holds the addresses of the native C-language entry points for
- // CGL extension functions.
- private CGLExtProcAddressTable cglExtProcAddressTable;
-
- public MacOSXGLContext(MacOSXGLDrawable drawable,
- GLContext shareWith)
- {
- super(shareWith);
- this.drawable = drawable;
- }
-
- public Object getPlatformGLExtensions() {
- return getCGLExt();
- }
-
- public CGLExt getCGLExt() {
- if (cglExt == null) {
- cglExt = new CGLExtImpl(this);
- }
- return cglExt;
- }
-
- public GLDrawable getGLDrawable() {
- return drawable;
- }
-
- protected String mapToRealGLFunctionName(String glFunctionName)
- {
- return glFunctionName;
- }
-
- protected String mapToRealGLExtensionName(String glExtensionName)
- {
- return glExtensionName;
- }
-
- protected abstract boolean create();
-
- /**
- * Creates and initializes an appropriate OpenGl nsContext. Should only be
- * called by {@link makeCurrentImpl()}.
- */
- protected boolean create(boolean pbuffer, boolean floatingPoint) {
- MacOSXGLContext other = (MacOSXGLContext) GLContextShareSet.getShareContext(this);
- long share = 0;
- if (other != null) {
- share = other.getNSContext();
- if (share == 0) {
- throw new GLException("GLContextShareSet returned an invalid OpenGL context");
- }
- }
- int[] viewNotReady = new int[1];
- GLCapabilities capabilities = drawable.getCapabilities();
- int[] iattribs = new int[128];
- int[] ivalues = new int[128];
- int idx = 0;
- if (pbuffer) {
- iattribs[idx] = CGL.NSOpenGLPFAPixelBuffer; ivalues[idx] = 1; idx++;
- }
- if (floatingPoint) {
- iattribs[idx] = CGL.kCGLPFAColorFloat; ivalues[idx] = 1; idx++;
- }
- iattribs[idx] = CGL.NSOpenGLPFADoubleBuffer; ivalues[idx] = (capabilities.getDoubleBuffered() ? 1 : 0); idx++;
- iattribs[idx] = CGL.NSOpenGLPFAStereo; ivalues[idx] = (capabilities.getStereo() ? 1 : 0); idx++;
- iattribs[idx] = CGL.NSOpenGLPFAColorSize; ivalues[idx] = (capabilities.getRedBits() +
- capabilities.getGreenBits() +
- capabilities.getBlueBits()); idx++;
- iattribs[idx] = CGL.NSOpenGLPFAAlphaSize; ivalues[idx] = capabilities.getAlphaBits(); idx++;
- iattribs[idx] = CGL.NSOpenGLPFADepthSize; ivalues[idx] = capabilities.getDepthBits(); idx++;
- iattribs[idx] = CGL.NSOpenGLPFAAccumSize; ivalues[idx] = (capabilities.getAccumRedBits() +
- capabilities.getAccumGreenBits() +
- capabilities.getAccumBlueBits() +
- capabilities.getAccumAlphaBits()); idx++;
- iattribs[idx] = CGL.NSOpenGLPFAStencilSize; ivalues[idx] = capabilities.getStencilBits(); idx++;
- if (capabilities.getSampleBuffers()) {
- iattribs[idx] = CGL.NSOpenGLPFASampleBuffers; ivalues[idx] = 1; idx++;
- iattribs[idx] = CGL.NSOpenGLPFASamples; ivalues[idx] = capabilities.getNumSamples(); idx++;
- }
-
- long pixelFormat = CGL.createPixelFormat(iattribs, 0, idx, ivalues, 0);
- if (pixelFormat == 0) {
- throw new GLException("Unable to allocate pixel format with requested GLCapabilities");
- }
- try {
- // Try to allocate a context with this
- nsContext = CGL.createContext(share,
- drawable.getView(),
- pixelFormat,
- viewNotReady, 0);
- if (nsContext == 0) {
- if (viewNotReady[0] == 1) {
- if (DEBUG) {
- System.err.println("!!! View not ready for " + getClass().getName());
- }
- // View not ready at the window system level -- this is OK
- return false;
- }
- throw new GLException("Error creating NSOpenGLContext with requested pixel format");
- }
-
- // On this platform the pixel format is associated with the
- // context and not the drawable. However it's a reasonable
- // approximation to just store the chosen pixel format up in the
- // drawable since the public API doesn't provide for a different
- // GLCapabilities per context.
- if (drawable.getChosenGLCapabilities() == null) {
- // Figure out what attributes we really got
- GLCapabilities caps = new GLCapabilities();
- CGL.queryPixelFormat(pixelFormat, iattribs, 0, idx, ivalues, 0);
- for (int i = 0; i < idx; i++) {
- int attr = iattribs[i];
- switch (attr) {
- case CGL.kCGLPFAColorFloat:
- caps.setPbufferFloatingPointBuffers(ivalues[i] != 0);
- break;
-
- case CGL.NSOpenGLPFADoubleBuffer:
- caps.setDoubleBuffered(ivalues[i] != 0);
- break;
-
- case CGL.NSOpenGLPFAStereo:
- caps.setStereo(ivalues[i] != 0);
- break;
-
- case CGL.NSOpenGLPFAColorSize:
- {
- int bitSize = ivalues[i];
- if (bitSize == 32)
- bitSize = 24;
- bitSize /= 3;
- caps.setRedBits(bitSize);
- caps.setGreenBits(bitSize);
- caps.setBlueBits(bitSize);
- }
- break;
-
- case CGL.NSOpenGLPFAAlphaSize:
- caps.setAlphaBits(ivalues[i]);
- break;
-
- case CGL.NSOpenGLPFADepthSize:
- caps.setDepthBits(ivalues[i]);
- break;
-
- case CGL.NSOpenGLPFAAccumSize:
- {
- int bitSize = ivalues[i] / 4;
- caps.setAccumRedBits(bitSize);
- caps.setAccumGreenBits(bitSize);
- caps.setAccumBlueBits(bitSize);
- caps.setAccumAlphaBits(bitSize);
- }
- break;
-
- case CGL.NSOpenGLPFAStencilSize:
- caps.setStencilBits(ivalues[i]);
- break;
-
- case CGL.NSOpenGLPFASampleBuffers:
- caps.setSampleBuffers(ivalues[i] != 0);
- break;
-
- case CGL.NSOpenGLPFASamples:
- caps.setNumSamples(ivalues[i]);
- break;
-
- default:
- break;
- }
- }
-
- drawable.setChosenGLCapabilities(caps);
- }
-
-
- } finally {
- CGL.deletePixelFormat(pixelFormat);
- }
- GLContextShareSet.contextCreated(this);
- return true;
- }
-
- protected int makeCurrentImpl() throws GLException {
- boolean created = false;
- if (nsContext == 0) {
- if (!create()) {
- return CONTEXT_NOT_CURRENT;
- }
- if (DEBUG) {
- System.err.println("!!! Created OpenGL context " + toHexString(nsContext) + " for " + getClass().getName());
- }
- created = true;
- }
-
- if (!CGL.makeCurrentContext(nsContext)) {
- throw new GLException("Error making nsContext current");
- }
-
- if (created) {
- resetGLFunctionAvailability();
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected void releaseImpl() throws GLException {
- if (!CGL.clearCurrentContext(nsContext)) {
- throw new GLException("Error freeing OpenGL nsContext");
- }
- }
-
- protected void destroyImpl() throws GLException {
- if (nsContext != 0) {
- if (!CGL.deleteContext(nsContext)) {
- throw new GLException("Unable to delete OpenGL context");
- }
- if (DEBUG) {
- System.err.println("!!! Destroyed OpenGL context " + nsContext);
- }
- nsContext = 0;
- GLContextShareSet.contextDestroyed(this);
- }
- }
-
- public boolean isCreated() {
- return (nsContext != 0);
- }
-
- public void copy(GLContext source, int mask) throws GLException {
- long dst = getNSContext();
- long src = ((MacOSXGLContext) source).getNSContext();
- if (src == 0) {
- throw new GLException("Source OpenGL context has not been created");
- }
- if (dst == 0) {
- throw new GLException("Destination OpenGL context has not been created");
- }
- CGL.copyContext(dst, src, mask);
- }
-
- protected void resetGLFunctionAvailability()
- {
- super.resetGLFunctionAvailability();
- if (DEBUG) {
- System.err.println("!!! Initializing CGL extension address table");
- }
- resetProcAddressTable(getCGLExtProcAddressTable());
- }
-
- public CGLExtProcAddressTable getCGLExtProcAddressTable() {
- if (cglExtProcAddressTable == null) {
- // FIXME: cache ProcAddressTables by capability bits so we can
- // share them among contexts with the same capabilities
- cglExtProcAddressTable = new CGLExtProcAddressTable();
- }
- return cglExtProcAddressTable;
- }
-
- public String getPlatformExtensionsString()
- {
- return "";
- }
-
- public void setSwapInterval(int interval) {
- if (nsContext == 0) {
- throw new GLException("OpenGL context not current");
- }
- CGL.setSwapInterval(nsContext, interval);
- }
-
- public ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
- // FIXME: apparently the Apple extension doesn't require a custom memory allocator
- throw new GLException("Not yet implemented");
- }
-
- protected boolean isFunctionAvailable(String glFunctionName)
- {
- return super.isFunctionAvailable(glFunctionName);
- }
-
- public boolean isExtensionAvailable(String glExtensionName) {
- if (glExtensionName.equals("GL_ARB_pbuffer") ||
- glExtensionName.equals("GL_ARB_pixel_format")) {
- return true;
- }
- return super.isExtensionAvailable(glExtensionName);
- }
-
- public int getOffscreenContextPixelDataType() {
- throw new GLException("Should not call this");
- }
-
- public int getOffscreenContextReadBuffer() {
- throw new GLException("Should not call this");
- }
-
- public boolean offscreenImageNeedsVerticalFlip() {
- throw new GLException("Should not call this");
- }
-
- public void bindPbufferToTexture() {
- throw new GLException("Should not call this");
- }
-
- public void releasePbufferFromTexture() {
- throw new GLException("Should not call this");
- }
-
- // Support for "mode switching" as described in MacOSXGLDrawable
- public abstract void setOpenGLMode(int mode);
- public abstract int getOpenGLMode();
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- public long getNSContext() {
- return nsContext;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawable.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawable.java
deleted file mode 100644
index 8a31d4b18..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawable.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public abstract class MacOSXGLDrawable extends GLDrawableImpl {
- protected static final boolean DEBUG = Debug.debug("MacOSXGLDrawable");
-
- protected GLCapabilities capabilities;
- protected GLCapabilitiesChooser chooser;
-
- // The Java2D/OpenGL pipeline on OS X uses low-level CGLContextObjs
- // to represent the contexts for e.g. the Java2D back buffer. When
- // the Java2D/JOGL bridge is active, this means that if we want to
- // be able to share textures and display lists with the Java2D
- // contexts, we need to use the CGL APIs rather than the NSOpenGL
- // APIs on the JOGL side. For example, if we create a pbuffer using
- // the NSOpenGL APIs and want to share textures and display lists
- // between it and the Java2D back buffer, there is no way to do so,
- // because the Java2D context is actually a CGLContextObj and the
- // NSOpenGLContext's initWithFormat:shareContext: only accepts an
- // NSOpenGLContext as its second argument. Of course there is no way
- // to wrap an NSOpenGLContext around an arbitrary CGLContextObj.
- //
- // The situation we care most about is allowing a GLPbuffer to share
- // textures, etc. with a GLJPanel when the Java2D/JOGL bridge is
- // active; several of the demos rely on this functionality. We aim
- // to get there by allowing a GLPBuffer to switch its implementation
- // between using an NSOpenGLPixelBuffer and a CGLPBufferObj. In
- // order to track whether this has been done we need to have the
- // notion of a "mode" of both the MacOSXGLDrawable and the
- // MacOSXGLContext. Initially the mode is "unspecified", meaning it
- // leans toward the default (NSOpenGL). If sharing is requested
- // between either a GLJPanel and a GLPbuffer or a GLCanvas and a
- // GLPbuffer, the GLPbuffer will be switched into the appropriate
- // mode: CGL mode for a GLJPanel and NSOpenGL mode for a GLCanvas.
- // To avoid thrashing we support exactly one such switch during the
- // lifetime of a given GLPbuffer. This is not a fully general
- // solution (for example, you can't share textures among a
- // GLPbuffer, a GLJPanel and a GLCanvas simultaneously) but should
- // be enough to get things off the ground.
- public static final int NSOPENGL_MODE = 1;
- public static final int CGL_MODE = 2;
-
- public MacOSXGLDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- this.capabilities = (GLCapabilities) capabilities.clone();
- this.chooser = chooser;
- }
-
- public void setRealized(boolean val) {
- throw new GLException("Should not call this (should only be called for onscreen GLDrawables)");
- }
-
- public void destroy() {
- throw new GLException("Should not call this (should only be called for offscreen GLDrawables)");
- }
-
- public void swapBuffers() throws GLException {
- }
-
- public GLCapabilities getCapabilities() {
- int numFormats = 1;
- GLCapabilities availableCaps[] = new GLCapabilities[numFormats];
- availableCaps[0] = capabilities;
- int pixelFormat = chooser.chooseCapabilities(capabilities, availableCaps, 0);
- if ((pixelFormat < 0) || (pixelFormat >= numFormats)) {
- throw new GLException("Invalid result " + pixelFormat +
- " from GLCapabilitiesChooser (should be between 0 and " +
- (numFormats - 1) + ")");
- }
- if (DEBUG) {
- System.err.println(getThreadName() + ": Chosen pixel format (" + pixelFormat + "):");
- System.err.println(availableCaps[pixelFormat]);
- }
- return availableCaps[pixelFormat];
- }
-
- // Only used for on-screen contexts
- public long getView() {
- return 0;
- }
-
- protected static String getThreadName() {
- return Thread.currentThread().getName();
- }
-
- // Support for "mode switching" as per above
- public abstract void setOpenGLMode(int mode);
- public abstract int getOpenGLMode();
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawableFactory.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawableFactory.java
deleted file mode 100644
index 6c56a2b6d..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXGLDrawableFactory.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.Graphics;
-import java.lang.reflect.InvocationTargetException;
-import java.nio.*;
-import java.util.*;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXGLDrawableFactory extends GLDrawableFactoryImpl {
- static {
- NativeLibLoader.loadCore();
- }
-
- public AbstractGraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- AbstractGraphicsDevice device) {
- return null;
- }
-
- public GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- if (target == null) {
- throw new IllegalArgumentException("Null target");
- }
- if (!(target instanceof Component)) {
- throw new IllegalArgumentException("GLDrawables not supported for objects of type " +
- target.getClass().getName() + " (only Components are supported in this implementation)");
- }
- if (capabilities == null) {
- capabilities = new GLCapabilities();
- }
- if (chooser == null) {
- chooser = new DefaultGLCapabilitiesChooser();
- }
- return new MacOSXOnscreenGLDrawable((Component) target, capabilities, chooser);
- }
-
- public GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- return new MacOSXOffscreenGLDrawable(capabilities);
- }
-
- public boolean canCreateGLPbuffer() {
- return true;
- }
-
- public GLPbuffer createGLPbuffer(final GLCapabilities capabilities,
- final GLCapabilitiesChooser chooser,
- final int initialWidth,
- final int initialHeight,
- final GLContext shareWith) {
- final List returnList = new ArrayList();
- Runnable r = new Runnable() {
- public void run() {
- MacOSXPbufferGLDrawable pbufferDrawable = new MacOSXPbufferGLDrawable(capabilities,
- initialWidth,
- initialHeight);
- GLPbufferImpl pbuffer = new GLPbufferImpl(pbufferDrawable, shareWith);
- returnList.add(pbuffer);
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- return (GLPbuffer) returnList.get(0);
- }
-
- public GLContext createExternalGLContext() {
- return new MacOSXExternalGLContext();
- }
-
- public boolean canCreateExternalGLDrawable() {
- return false;
- }
-
- public GLDrawable createExternalGLDrawable() {
- // FIXME
- throw new GLException("Not yet implemented");
- }
-
- public void loadGLULibrary() {
- // Nothing to do; already loaded by native code; not much point in
- // making it lazier on this platform
- }
-
- public long dynamicLookupFunction(String glFuncName) {
- return CGL.getProcAddress(glFuncName);
- }
-
- private void maybeDoSingleThreadedWorkaround(Runnable action) {
- if (Threading.isSingleThreaded() &&
- !Threading.isOpenGLThread()) {
- Threading.invokeOnOpenGLThread(action);
- } else {
- action.run();
- }
- }
-
- public void lockAWTForJava2D() {
- }
-
- public void unlockAWTForJava2D() {
- }
-
- public boolean canCreateContextOnJava2DSurface() {
- return true;
- }
-
- public GLContext createContextOnJava2DSurface(Graphics g, GLContext shareWith)
- throws GLException {
- return new MacOSXJava2DGLContext(shareWith);
- }
-
-
- //------------------------------------------------------
- // Gamma-related functionality
- //
-
- private static final int GAMMA_RAMP_LENGTH = 256;
-
- /** Returns the length of the computed gamma ramp for this OS and
- hardware. Returns 0 if gamma changes are not supported. */
- protected int getGammaRampLength() {
- return GAMMA_RAMP_LENGTH;
- }
-
- protected boolean setGammaRamp(float[] ramp) {
- return CGL.setGammaRamp(ramp.length,
- ramp, 0,
- ramp, 0,
- ramp, 0);
- }
-
- protected Buffer getGammaRamp() {
- return null;
- }
-
- protected void resetGammaRamp(Buffer originalGammaRamp) {
- CGL.resetGammaRamp();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXJava2DGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXJava2DGLContext.java
deleted file mode 100644
index 5f4de0464..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXJava2DGLContext.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import java.awt.Graphics;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-/** MacOSXGLContext implementation supporting the Java2D/JOGL bridge
- * on Mac OS X. The external GLDrawable mechanism does not work on Mac
- * OS X due to how drawables and contexts are operated upon on this
- * platform, so it is necessary to supply an alternative means to
- * create, make current, and destroy contexts on the Java2D "drawable"
- * on the Mac platform.
- */
-
-public class MacOSXJava2DGLContext extends MacOSXGLContext implements Java2DGLContext {
- private Graphics graphics;
-
- // FIXME: ignoring context sharing for the time being; will need to
- // rethink this in particular if using FBOs to implement the
- // Java2D/OpenGL pipeline on Mac OS X
-
- public MacOSXJava2DGLContext(GLContext shareWith) {
- super(null, shareWith);
- }
-
- public void setGraphics(Graphics g) {
- this.graphics = g;
- }
-
- protected int makeCurrentImpl() throws GLException {
- boolean created = false;
- if (nsContext == 0) {
- if (!create()) {
- return CONTEXT_NOT_CURRENT;
- }
- if (DEBUG) {
- System.err.println("!!! Created GL nsContext for " + getClass().getName());
- }
- created = true;
- }
-
- if (!Java2D.makeOGLContextCurrentOnSurface(graphics, nsContext)) {
- throw new GLException("Error making context current");
- }
-
- if (created) {
- resetGLFunctionAvailability();
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected boolean create() {
- // Find and configure share context
- MacOSXGLContext other = (MacOSXGLContext) GLContextShareSet.getShareContext(this);
- long share = 0;
- if (other != null) {
- // Reconfigure pbuffer-based GLContexts
- if (other instanceof MacOSXPbufferGLContext) {
- MacOSXPbufferGLContext ctx = (MacOSXPbufferGLContext) other;
- ctx.setOpenGLMode(MacOSXGLDrawable.CGL_MODE);
- } else {
- if (other.getOpenGLMode() != MacOSXGLDrawable.CGL_MODE) {
- throw new GLException("Can't share between NSOpenGLContexts and CGLContextObjs");
- }
- }
- share = other.getNSContext();
- // Note we don't check for a 0 return value, since switching
- // the context's mode causes it to be destroyed and not
- // re-initialized until the next makeCurrent
- }
-
- if (DEBUG) {
- System.err.println("!!! Share context is " + toHexString(share) + " for " + getClass().getName());
- }
-
- long ctx = Java2D.createOGLContextOnSurface(graphics, share);
- if (ctx == 0) {
- return false;
- }
- // FIXME: think about GLContext sharing
- nsContext = ctx;
- return true;
- }
-
- protected void releaseImpl() throws GLException {
- // FIXME: would need another primitive in the Java2D class in
- // order to implement this; hopefully should not matter for
- // correctness
- }
-
- protected void destroyImpl() throws GLException {
- if (nsContext != 0) {
- Java2D.destroyOGLContext(nsContext);
- if (DEBUG) {
- System.err.println("!!! Destroyed OpenGL context " + nsContext);
- }
- nsContext = 0;
- // FIXME
- // GLContextShareSet.contextDestroyed(this);
- }
- }
-
- public void setSwapInterval(int interval) {
- // Not supported in this context implementation
- }
-
- public void setOpenGLMode(int mode) {
- if (mode != MacOSXGLDrawable.CGL_MODE)
- throw new GLException("OpenGL mode switching not supported for Java2D GLContexts");
- }
-
- public int getOpenGLMode() {
- return MacOSXGLDrawable.CGL_MODE;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLContext.java
deleted file mode 100644
index c1d106da8..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLContext.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import java.awt.image.BufferedImage;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXOffscreenGLContext extends MacOSXPbufferGLContext
-{
- public MacOSXOffscreenGLContext(MacOSXPbufferGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- }
-
- public int getOffscreenContextPixelDataType() {
- return GL.GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- public int getOffscreenContextReadBuffer() {
- return GL.GL_FRONT;
- }
-
- public boolean offscreenImageNeedsVerticalFlip() {
- return true;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLDrawable.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLDrawable.java
deleted file mode 100644
index f478f43fc..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXOffscreenGLDrawable.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXOffscreenGLDrawable extends MacOSXPbufferGLDrawable {
-
- public MacOSXOffscreenGLDrawable(GLCapabilities capabilities) {
- super(capabilities, 0, 0);
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new MacOSXOffscreenGLContext(this, shareWith);
- }
-
- public void setSize(int width, int height) {
- destroy();
- initWidth = width;
- initHeight = height;
- createPbuffer();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java
deleted file mode 100644
index 5d8e91231..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import java.util.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXOnscreenGLContext extends MacOSXGLContext {
- protected MacOSXOnscreenGLDrawable drawable;
-
- public MacOSXOnscreenGLContext(MacOSXOnscreenGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- this.drawable = drawable;
- }
-
- protected int makeCurrentImpl() throws GLException {
- int lockRes = drawable.lockSurface();
- boolean exceptionOccurred = false;
- try {
- if (lockRes == MacOSXOnscreenGLDrawable.LOCK_SURFACE_NOT_READY) {
- return CONTEXT_NOT_CURRENT;
- }
- if (lockRes == MacOSXOnscreenGLDrawable.LOCK_SURFACE_CHANGED) {
- destroyImpl();
- }
- int ret = super.makeCurrentImpl();
- if ((ret == CONTEXT_CURRENT) ||
- (ret == CONTEXT_CURRENT_NEW)) {
- // Assume the canvas might have been resized or moved and tell the OpenGL
- // context to update itself. This used to be done only upon receiving a
- // reshape event but that doesn't appear to be sufficient. An experiment
- // was also done to add a HierarchyBoundsListener to the GLCanvas and
- // do this updating only upon reshape of this component or reshape or movement
- // of an ancestor, but this also wasn't sufficient and left garbage on the
- // screen in some situations.
- CGL.updateContext(nsContext);
- } else {
- if (!isOptimizable()) {
- // This can happen if the window currently is zero-sized, for example.
- // Make sure we don't leave the surface locked in this case.
- drawable.unlockSurface();
- }
- }
- return ret;
- } catch (RuntimeException e) {
- exceptionOccurred = true;
- throw e;
- } finally {
- if (exceptionOccurred ||
- (isOptimizable() && lockRes != MacOSXOnscreenGLDrawable.LOCK_SURFACE_NOT_READY)) {
- drawable.unlockSurface();
- }
- }
- }
-
- protected void releaseImpl() throws GLException {
- try {
- super.releaseImpl();
- } finally {
- if (!isOptimizable()) {
- drawable.unlockSurface();
- }
- }
- }
-
- public void swapBuffers() throws GLException {
- if (!CGL.flushBuffer(nsContext)) {
- throw new GLException("Error swapping buffers");
- }
- }
-
- protected void update() throws GLException {
- if (nsContext == 0) {
- throw new GLException("Context not created");
- }
- CGL.updateContext(nsContext);
- }
-
- protected boolean create() {
- return create(false, false);
- }
-
- public void setOpenGLMode(int mode) {
- if (mode != MacOSXGLDrawable.NSOPENGL_MODE)
- throw new GLException("OpenGL mode switching not supported for on-screen GLContexts");
- }
-
- public int getOpenGLMode() {
- return MacOSXGLDrawable.NSOPENGL_MODE;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLDrawable.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLDrawable.java
deleted file mode 100644
index 7a42ad37c..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLDrawable.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import java.awt.Component;
-import java.lang.ref.WeakReference;
-import java.security.*;
-import java.util.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXOnscreenGLDrawable extends MacOSXGLDrawable {
- public static final int LOCK_SURFACE_NOT_READY = 1;
- public static final int LOCK_SURFACE_CHANGED = 2;
- public static final int LOCK_SUCCESS = 3;
-
- protected Component component;
- protected long nsView; // NSView
-
- private List/*<WeakReference<GLContext>>*/ createdContexts =
- new ArrayList();
-
- // Variables for lockSurface/unlockSurface
- private JAWT_DrawingSurface ds;
- private JAWT_DrawingSurfaceInfo dsi;
- private JAWT_MacOSXDrawingSurfaceInfo macosxdsi;
-
- // Indicates whether the component (if an onscreen context) has been
- // realized. Plausibly, before the component is realized the JAWT
- // should return an error or NULL object from some of its
- // operations; this appears to be the case on Win32 but is not true
- // at least with Sun's current X11 implementation (1.4.x), which
- // crashes with no other error reported if the DrawingSurfaceInfo is
- // fetched from a locked DrawingSurface during the validation as a
- // result of calling show() on the main thread. To work around this
- // we prevent any JAWT or OpenGL operations from being done until
- // addNotify() is called on the component.
- protected boolean realized;
-
- // Workaround for instance of 4796548
- private boolean firstLock = true;
-
- public MacOSXOnscreenGLDrawable(Component component,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- super(capabilities, chooser);
- this.component = component;
- }
-
- public GLContext createContext(GLContext shareWith) {
- MacOSXOnscreenGLContext context =
- new MacOSXOnscreenGLContext(this, shareWith);
- // NOTE: we need to keep track of the created contexts in order to
- // implement swapBuffers() because of how Mac OS X implements its
- // OpenGL window interface
- synchronized (this) {
- List newContexts = new ArrayList();
- newContexts.addAll(createdContexts);
- newContexts.add(new WeakReference(context));
- createdContexts = newContexts;
- }
- return context;
- }
-
- public void setRealized(boolean realized) {
- this.realized = realized;
- // Might as well clear out the "chosen" pixel format, though it's
- // associated with the GLContext on this platform and not the drawable
- setChosenGLCapabilities(null);
- }
-
- public void setSize(int width, int height) {
- component.setSize(width, height);
- }
-
- public int getWidth() {
- return component.getWidth();
- }
-
- public int getHeight() {
- return component.getHeight();
- }
-
- public void swapBuffers() throws GLException {
- for (Iterator iter = createdContexts.iterator(); iter.hasNext(); ) {
- WeakReference ref = (WeakReference) iter.next();
- MacOSXOnscreenGLContext ctx = (MacOSXOnscreenGLContext) ref.get();
- // FIXME: clear out unreachable contexts
- if (ctx != null) {
- ctx.swapBuffers();
- }
- }
- }
-
- public long getView() {
- return nsView;
- }
-
- public int lockSurface() throws GLException {
- if (!realized) {
- return LOCK_SURFACE_NOT_READY;
- }
- if (nsView != 0) {
- throw new GLException("Surface already locked");
- }
- ds = JAWT.getJAWT().GetDrawingSurface(component);
- if (ds == null) {
- // Widget not yet realized
- return LOCK_SURFACE_NOT_READY;
- }
- int res = ds.Lock();
- if ((res & JAWTFactory.JAWT_LOCK_ERROR) != 0) {
- throw new GLException("Unable to lock surface");
- }
- // See whether the surface changed and if so destroy the old
- // OpenGL context so it will be recreated (NOTE: removeNotify
- // should handle this case, but it may be possible that race
- // conditions can cause this code to be triggered -- should test
- // more)
- int ret = LOCK_SUCCESS;
- if ((res & JAWTFactory.JAWT_LOCK_SURFACE_CHANGED) != 0) {
- ret = LOCK_SURFACE_CHANGED;
- }
- if (firstLock) {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- dsi = ds.GetDrawingSurfaceInfo();
- return null;
- }
- });
- } else {
- dsi = ds.GetDrawingSurfaceInfo();
- }
- if (dsi == null) {
- // Widget not yet realized
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- return LOCK_SURFACE_NOT_READY;
- }
- firstLock = false;
- macosxdsi = (JAWT_MacOSXDrawingSurfaceInfo) dsi.platformInfo();
- if (macosxdsi == null) {
- // Widget not yet realized
- ds.FreeDrawingSurfaceInfo(dsi);
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- dsi = null;
- return LOCK_SURFACE_NOT_READY;
- }
- nsView = macosxdsi.cocoaViewRef();
- if (nsView == 0) {
- // Widget not yet realized
- ds.FreeDrawingSurfaceInfo(dsi);
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- dsi = null;
- macosxdsi = null;
- return LOCK_SURFACE_NOT_READY;
- }
- return ret;
- }
-
- public void unlockSurface() throws GLException {
- if (nsView == 0) {
- throw new GLException("Surface already unlocked");
- }
- ds.FreeDrawingSurfaceInfo(dsi);
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- dsi = null;
- macosxdsi = null;
- nsView = 0;
- }
-
- public void setOpenGLMode(int mode) {
- if (mode != NSOPENGL_MODE)
- throw new GLException("OpenGL mode switching not supported for on-screen GLDrawables");
- }
-
- public int getOpenGLMode() {
- return NSOPENGL_MODE;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLContext.java
deleted file mode 100644
index c4e3058da..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLContext.java
+++ /dev/null
@@ -1,340 +0,0 @@
-package com.sun.opengl.impl.macosx;
-
-import java.security.*;
-import java.util.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXPbufferGLContext extends MacOSXGLContext {
- protected MacOSXPbufferGLDrawable drawable;
-
- // State for render-to-texture and render-to-texture-rectangle support
- private int textureTarget; // e.g. GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE_NV
- private int texture; // actual texture object
-
- private static boolean isTigerOrLater;
-
- static {
- String osVersion =
- (String) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty("os.version");
- }
- });
- StringTokenizer tok = new StringTokenizer(osVersion, ". ");
- int major = Integer.parseInt(tok.nextToken());
- int minor = Integer.parseInt(tok.nextToken());
- isTigerOrLater = ((major > 10) || (minor > 3));
- }
-
- public MacOSXPbufferGLContext(MacOSXPbufferGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- this.drawable = drawable;
- initOpenGLImpl();
- }
-
- public void bindPbufferToTexture() {
- GL gl = getGL();
- gl.glBindTexture(textureTarget, texture);
- // FIXME: not clear whether this is really necessary, but since
- // the API docs seem to imply it is and since it doesn't seem to
- // impact performance, leaving it in
- CGL.setContextTextureImageToPBuffer(nsContext, drawable.getPbuffer(), GL.GL_FRONT);
- }
-
- public void releasePbufferFromTexture() {
- }
-
- protected int makeCurrentImpl() throws GLException {
- if (drawable.getPbuffer() == 0) {
- if (DEBUG) {
- System.err.println("Pbuffer not instantiated yet for " + this);
- }
- // pbuffer not instantiated yet
- return CONTEXT_NOT_CURRENT;
- }
-
- if (getOpenGLMode() != drawable.getOpenGLMode()) {
- setOpenGLMode(drawable.getOpenGLMode());
- }
-
- boolean created = false;
- if (nsContext == 0) {
- if (!create()) {
- return CONTEXT_NOT_CURRENT;
- }
- if (DEBUG) {
- System.err.println("!!! Created OpenGL context " + toHexString(nsContext) + " for " + getClass().getName());
- }
- created = true;
- }
-
- if (!impl.makeCurrent(nsContext)) {
- throw new GLException("Error making nsContext current");
- }
-
- if (created) {
- resetGLFunctionAvailability();
-
- // Initialize render-to-texture support if requested
- boolean rect = drawable.getCapabilities().getPbufferRenderToTextureRectangle();
- GL gl = getGL();
- if (rect) {
- if (!gl.isExtensionAvailable("GL_EXT_texture_rectangle")) {
- System.err.println("MacOSXPbufferGLContext: WARNING: GL_EXT_texture_rectangle extension not " +
- "supported; skipping requested render_to_texture_rectangle support for pbuffer");
- rect = false;
- }
- }
- textureTarget = (rect ? GL.GL_TEXTURE_RECTANGLE_EXT : GL.GL_TEXTURE_2D);
- int[] tmp = new int[1];
- gl.glGenTextures(1, tmp, 0);
- texture = tmp[0];
- gl.glBindTexture(textureTarget, texture);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP_TO_EDGE);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP_TO_EDGE);
- gl.glCopyTexImage2D(textureTarget, 0, GL.GL_RGB, 0, 0, drawable.getWidth(), drawable.getHeight(), 0);
-
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected void releaseImpl() throws GLException {
- if (!impl.release(nsContext)) {
- throw new GLException("Error releasing OpenGL nsContext");
- }
- }
-
- protected void destroyImpl() throws GLException {
- if (nsContext != 0) {
- if (!impl.destroy(nsContext)) {
- throw new GLException("Unable to delete OpenGL context");
- }
- if (DEBUG) {
- System.err.println("!!! Destroyed OpenGL context " + nsContext);
- }
- nsContext = 0;
- GLContextShareSet.contextDestroyed(this);
- }
- }
-
- public void setSwapInterval(int interval) {
- if (nsContext == 0) {
- throw new GLException("OpenGL context not current");
- }
- impl.setSwapInterval(nsContext, interval);
- }
-
- public int getFloatingPointMode() {
- return GLPbuffer.APPLE_FLOAT;
- }
-
- protected boolean create() {
- GLCapabilities capabilities = drawable.getCapabilities();
- if (capabilities.getPbufferFloatingPointBuffers() &&
- !isTigerOrLater) {
- throw new GLException("Floating-point pbuffers supported only on OS X 10.4 or later");
- }
- // Change our OpenGL mode to match that of any share context before we create ourselves
- MacOSXGLContext other = (MacOSXGLContext) GLContextShareSet.getShareContext(this);
- if (other != null) {
- setOpenGLMode(other.getOpenGLMode());
- }
- // Will throw exception upon error
- nsContext = impl.create();
- return true;
- }
-
- //---------------------------------------------------------------------------
- // OpenGL "mode switching" functionality
- //
- private boolean haveSetOpenGLMode = false;
- // FIXME: should consider switching the default mode based on
- // whether the Java2D/JOGL bridge is active -- need to ask ourselves
- // whether it's more likely that we will share with a GLCanvas or a
- // GLJPanel when the bridge is turned on
- private int openGLMode = MacOSXGLDrawable.NSOPENGL_MODE;
- // Implementation object (either NSOpenGL-based or CGL-based)
- protected Impl impl;
-
- public void setOpenGLMode(int mode) {
- if (mode == openGLMode) {
- return;
- }
- if (haveSetOpenGLMode) {
- throw new GLException("Can't switch between using NSOpenGLPixelBuffer and CGLPBufferObj more than once");
- }
- destroyImpl();
- drawable.setOpenGLMode(mode);
- openGLMode = mode;
- haveSetOpenGLMode = true;
- if (DEBUG) {
- System.err.println("Switching PBuffer context mode to " +
- ((mode == MacOSXGLDrawable.NSOPENGL_MODE) ? "NSOPENGL_MODE" : "CGL_MODE"));
- }
- initOpenGLImpl();
- }
-
- public int getOpenGLMode() {
- return openGLMode;
- }
-
- private void initOpenGLImpl() {
- switch (openGLMode) {
- case MacOSXGLDrawable.NSOPENGL_MODE:
- impl = new NSOpenGLImpl();
- break;
- case MacOSXGLDrawable.CGL_MODE:
- impl = new CGLImpl();
- break;
- default:
- throw new InternalError("Illegal implementation mode " + openGLMode);
- }
- }
-
- // Abstract interface for implementation of this context (either
- // NSOpenGL-based or CGL-based)
- interface Impl {
- public long create();
- public boolean destroy(long ctx);
- public boolean makeCurrent(long ctx);
- public boolean release(long ctx);
- public void setSwapInterval(long ctx, int interval);
- }
-
- // NSOpenGLContext-based implementation
- class NSOpenGLImpl implements Impl {
- public long create() {
- GLCapabilities capabilities = drawable.getCapabilities();
- if (capabilities.getPbufferFloatingPointBuffers() &&
- !isTigerOrLater) {
- throw new GLException("Floating-point pbuffers supported only on OS X 10.4 or later");
- }
- if (!MacOSXPbufferGLContext.this.create(true, capabilities.getPbufferFloatingPointBuffers())) {
- throw new GLException("Error creating context for pbuffer");
- }
- // Must now associate the pbuffer with our newly-created context
- CGL.setContextPBuffer(nsContext, drawable.getPbuffer());
- return nsContext;
- }
-
- public boolean destroy(long ctx) {
- return CGL.deleteContext(ctx);
- }
-
- public boolean makeCurrent(long ctx) {
- return CGL.makeCurrentContext(ctx);
- }
-
- public boolean release(long ctx) {
- return CGL.clearCurrentContext(ctx);
- }
-
- public void setSwapInterval(long ctx, int interval) {
- CGL.setSwapInterval(ctx, interval);
- }
- }
-
- class CGLImpl implements Impl {
- public long create() {
- // Find and configure share context
- MacOSXGLContext other = (MacOSXGLContext) GLContextShareSet.getShareContext(MacOSXPbufferGLContext.this);
- long share = 0;
- if (other != null) {
- // Reconfigure pbuffer-based GLContexts
- if (other instanceof MacOSXPbufferGLContext) {
- MacOSXPbufferGLContext ctx = (MacOSXPbufferGLContext) other;
- ctx.setOpenGLMode(MacOSXGLDrawable.CGL_MODE);
- } else {
- if (other.getOpenGLMode() != MacOSXGLDrawable.CGL_MODE) {
- throw new GLException("Can't share between NSOpenGLContexts and CGLContextObjs");
- }
- }
- share = other.getNSContext();
- // Note we don't check for a 0 return value, since switching
- // the context's mode causes it to be destroyed and not
- // re-initialized until the next makeCurrent
- }
-
- // Set up pixel format attributes
- int[] attrs = new int[256];
- int i = 0;
- attrs[i++] = CGL.kCGLPFAPBuffer;
- GLCapabilities capabilities = drawable.getCapabilities();
- if (capabilities.getPbufferFloatingPointBuffers())
- attrs[i++] = CGL.kCGLPFAColorFloat;
- if (capabilities.getDoubleBuffered())
- attrs[i++] = CGL.kCGLPFADoubleBuffer;
- if (capabilities.getStereo())
- attrs[i++] = CGL.kCGLPFAStereo;
- attrs[i++] = CGL.kCGLPFAColorSize;
- attrs[i++] = (capabilities.getRedBits() +
- capabilities.getGreenBits() +
- capabilities.getBlueBits());
- attrs[i++] = CGL.kCGLPFAAlphaSize;
- attrs[i++] = capabilities.getAlphaBits();
- attrs[i++] = CGL.kCGLPFADepthSize;
- attrs[i++] = capabilities.getDepthBits();
- // FIXME: should validate stencil size as is done in MacOSXWindowSystemInterface.m
- attrs[i++] = CGL.kCGLPFAStencilSize;
- attrs[i++] = capabilities.getStencilBits();
- attrs[i++] = CGL.kCGLPFAAccumSize;
- attrs[i++] = (capabilities.getAccumRedBits() +
- capabilities.getAccumGreenBits() +
- capabilities.getAccumBlueBits() +
- capabilities.getAccumAlphaBits());
- if (capabilities.getSampleBuffers()) {
- attrs[i++] = CGL.kCGLPFASampleBuffers;
- attrs[i++] = 1;
- attrs[i++] = CGL.kCGLPFASamples;
- attrs[i++] = capabilities.getNumSamples();
- }
-
- // Use attribute array to select pixel format
- long[] fmt = new long[1];
- long[] numScreens = new long[1];
- int res = CGL.CGLChoosePixelFormat(attrs, 0, fmt, 0, numScreens, 0);
- if (res != CGL.kCGLNoError) {
- throw new GLException("Error code " + res + " while choosing pixel format");
- }
-
- // Create new context
- long[] ctx = new long[1];
- if (DEBUG) {
- System.err.println("Share context for CGL-based pbuffer context is " + toHexString(share));
- }
- res = CGL.CGLCreateContext(fmt[0], share, ctx, 0);
- CGL.CGLDestroyPixelFormat(fmt[0]);
- if (res != CGL.kCGLNoError) {
- throw new GLException("Error code " + res + " while creating context");
- }
- // Attach newly-created context to the pbuffer
- res = CGL.CGLSetPBuffer(ctx[0], drawable.getPbuffer(), 0, 0, 0);
- if (res != CGL.kCGLNoError) {
- throw new GLException("Error code " + res + " while attaching context to pbuffer");
- }
- return ctx[0];
- }
-
- public boolean destroy(long ctx) {
- return (CGL.CGLDestroyContext(ctx) == CGL.kCGLNoError);
- }
-
- public boolean makeCurrent(long ctx) {
- return CGL.CGLSetCurrentContext(ctx) == CGL.kCGLNoError;
- }
-
- public boolean release(long ctx) {
- return (CGL.CGLSetCurrentContext(0) == CGL.kCGLNoError);
- }
-
- public void setSwapInterval(long ctx, int interval) {
- // For now not supported (not really relevant for off-screen contexts anyway)
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLDrawable.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLDrawable.java
deleted file mode 100644
index 5a4967f5c..000000000
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXPbufferGLDrawable.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.macosx;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class MacOSXPbufferGLDrawable extends MacOSXGLDrawable {
- private static final boolean DEBUG = Debug.debug("MacOSXPbufferGLDrawable");
-
- protected int initWidth;
- protected int initHeight;
-
- // NSOpenGLPbuffer (for normal mode)
- // CGLPbufferObj (for CGL_MODE situation, i.e., when Java2D/JOGL bridge is active)
- protected long pBuffer;
-
- protected int width;
- protected int height;
-
- // State for render-to-texture and render-to-texture-rectangle support
- private int textureTarget; // e.g. GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE_NV
- private int texture; // actual texture object
-
- public MacOSXPbufferGLDrawable(GLCapabilities capabilities, int initialWidth, int initialHeight) {
- super(capabilities, null);
- this.initWidth = initialWidth;
- this.initHeight = initialHeight;
- initOpenGLImpl();
- createPbuffer();
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new MacOSXPbufferGLContext(this, shareWith);
- }
-
- public void destroy() {
- if (this.pBuffer != 0) {
- impl.destroy(pBuffer);
- this.pBuffer = 0;
-
- if (DEBUG) {
- System.err.println("Destroyed pbuffer " + width + " x " + height);
- }
- }
- }
-
- public void setSize(int width, int height) {
- // FIXME
- throw new GLException("Not yet implemented");
- }
-
- public int getWidth() {
- return width;
- }
-
- public int getHeight() {
- return height;
- }
-
- public GLCapabilities getCapabilities() {
- return capabilities;
- }
-
- public long getPbuffer() {
- return pBuffer;
- }
-
- public void swapBuffers() throws GLException {
- // FIXME: do we need to do anything if the pbuffer is double-buffered?
- }
-
- protected void createPbuffer() {
- int renderTarget;
- if (capabilities.getPbufferRenderToTextureRectangle()) {
- width = initWidth;
- height = initHeight;
- renderTarget = GL.GL_TEXTURE_RECTANGLE_EXT;
- } else {
- width = getNextPowerOf2(initWidth);
- height = getNextPowerOf2(initHeight);
- renderTarget = GL.GL_TEXTURE_2D;
- }
-
- int internalFormat = GL.GL_RGBA;
- if (capabilities.getPbufferFloatingPointBuffers()) {
- // FIXME: want to check availability of GL_APPLE_float_pixels
- // extension, but need valid OpenGL context in order to do so --
- // in worst case would need to create dummy window / GLCanvas
- // (undesirable) -- could maybe also do this with pbuffers
- /*
- if (!gl.isExtensionAvailable("GL_APPLE_float_pixels")) {
- throw new GLException("Floating-point support (GL_APPLE_float_pixels) not available");
- }
- */
- switch (capabilities.getRedBits()) {
- case 16: internalFormat = GL.GL_RGBA_FLOAT16_APPLE; break;
- case 32: internalFormat = GL.GL_RGBA_FLOAT32_APPLE; break;
- default: throw new GLException("Invalid floating-point bit depth (only 16 and 32 supported)");
- }
- }
-
- pBuffer = impl.create(renderTarget, internalFormat, width, height);
- if (pBuffer == 0) {
- throw new GLException("pbuffer creation error: CGL.createPBuffer() failed");
- }
-
- if (DEBUG) {
- System.err.println("Created pbuffer " + toHexString(pBuffer) + ", " + width + " x " + height + " for " + this);
- }
- }
-
- private int getNextPowerOf2(int number) {
- if (((number-1) & number) == 0) {
- //ex: 8 -> 0b1000; 8-1=7 -> 0b0111; 0b1000&0b0111 == 0
- return number;
- }
- int power = 0;
- while (number > 0) {
- number = number>>1;
- power++;
- }
- return (1<<power);
- }
-
- //---------------------------------------------------------------------------
- // OpenGL "mode switching" functionality
- //
- private boolean haveSetOpenGLMode = false;
- // FIXME: should consider switching the default mode based on
- // whether the Java2D/JOGL bridge is active -- need to ask ourselves
- // whether it's more likely that we will share with a GLCanvas or a
- // GLJPanel when the bridge is turned on
- private int openGLMode = NSOPENGL_MODE;
- // Implementation object (either NSOpenGL-based or CGL-based)
- protected Impl impl;
-
- public void setOpenGLMode(int mode) {
- if (mode == openGLMode) {
- return;
- }
- if (haveSetOpenGLMode) {
- throw new GLException("Can't switch between using NSOpenGLPixelBuffer and CGLPBufferObj more than once");
- }
- destroy();
- openGLMode = mode;
- haveSetOpenGLMode = true;
- if (DEBUG) {
- System.err.println("Switching PBuffer drawable mode to " +
- ((mode == MacOSXGLDrawable.NSOPENGL_MODE) ? "NSOPENGL_MODE" : "CGL_MODE"));
- }
- initOpenGLImpl();
- createPbuffer();
- }
-
- public int getOpenGLMode() {
- return openGLMode;
- }
-
- private void initOpenGLImpl() {
- switch (openGLMode) {
- case NSOPENGL_MODE:
- impl = new NSOpenGLImpl();
- break;
- case CGL_MODE:
- impl = new CGLImpl();
- break;
- default:
- throw new InternalError("Illegal implementation mode " + openGLMode);
- }
- }
-
- // Abstract interface for implementation of this drawable (either
- // NSOpenGL-based or CGL-based)
- interface Impl {
- public long create(int renderTarget, int internalFormat, int width, int height);
- public void destroy(long pbuffer);
- }
-
- // NSOpenGLPixelBuffer implementation
- class NSOpenGLImpl implements Impl {
- public long create(int renderTarget, int internalFormat, int width, int height) {
- return CGL.createPBuffer(renderTarget, internalFormat, width, height);
- }
-
- public void destroy(long pbuffer) {
- CGL.destroyPBuffer(0, pbuffer);
- }
- }
-
- // CGL implementation
- class CGLImpl implements Impl {
- public long create(int renderTarget, int internalFormat, int width, int height) {
- long[] pbuffer = new long[1];
- int res = CGL.CGLCreatePBuffer(width, height, renderTarget, internalFormat, 0, pbuffer, 0);
- if (res != CGL.kCGLNoError) {
- throw new GLException("Error creating CGL-based pbuffer: error code " + res);
- }
- return pbuffer[0];
- }
-
- public void destroy(long pbuffer) {
- int res = CGL.CGLDestroyPBuffer(pbuffer);
- if (res != CGL.kCGLNoError) {
- throw new GLException("Error destroying CGL-based pbuffer: error code " + res);
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/BuildMipmap.java b/src/classes/com/sun/opengl/impl/mipmap/BuildMipmap.java
deleted file mode 100644
index 0344153d5..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/BuildMipmap.java
+++ /dev/null
@@ -1,1594 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.glu.GLU;
-import com.sun.opengl.impl.Debug;
-import java.nio.*;
-import java.io.*;
-
-/**
- *
- * @author Administrator
- */
-public class BuildMipmap {
-
- private static final boolean DEBUG = Debug.debug("BuildMipmap");
- private static final boolean VERBOSE = Debug.verbose();
-
- /** Creates a new instance of BuildMipmap */
- public BuildMipmap() {
- }
-
- public static int gluBuild1DMipmapLevelsCore( GL gl, int target, int internalFormat,
- int width, int widthPowerOf2, int format, int type, int userLevel,
- int baseLevel, int maxLevel, ByteBuffer data ) {
- int newwidth;
- int level, levels;
- ShortBuffer newImage = null;
- int newImage_width;
- ShortBuffer otherImage = null;
- ShortBuffer imageTemp = null;
- int memreq;
- int maxsize;
- int cmpts;
- PixelStorageModes psm = new PixelStorageModes();
-
- assert( Mipmap.checkMipmapArgs( internalFormat, format, type ) == 0 );
- assert( width >= 1 );
-
- newwidth = widthPowerOf2;
- levels = Mipmap.computeLog( newwidth );
-
- levels += userLevel;
-
- Mipmap.retrieveStoreModes( gl, psm );
- try {
- newImage = ByteBuffer.allocateDirect( Mipmap.image_size( width, 1, format,
- GL.GL_UNSIGNED_SHORT ) ).order( ByteOrder.nativeOrder() ).asShortBuffer();
- } catch( OutOfMemoryError ome ) {
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- newImage_width = width;
-
- Image.fill_image( psm, width, 1, format, type, Mipmap.is_index( format ), data, newImage );
- cmpts = Mipmap.elements_per_group( format, type );
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, 2 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, 0 );
-
- // if swap_bytes was set, swapping occurred in fill_image
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, GL.GL_FALSE );
-
- for( level = userLevel; level <= levels; level++ ) {
- if( newImage_width == newwidth ) {
- // user newimage for this level
- if( baseLevel <= level && level <= maxLevel ) {
- gl.glTexImage1D( target, level, internalFormat, newImage_width, 0, format,
- GL.GL_UNSIGNED_SHORT, newImage );
- }
- } else {
- if( otherImage == null ) {
- memreq = Mipmap.image_size( newwidth, 1, format, GL.GL_UNSIGNED_SHORT );
- try {
- otherImage = ByteBuffer.allocateDirect( memreq ).order( ByteOrder.nativeOrder() ).asShortBuffer();
- } catch( OutOfMemoryError ome ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- }
- ScaleInternal.scale_internal( cmpts, newImage_width, 1, newImage, newwidth, 1, otherImage );
- // swap newImage and otherImage
- imageTemp = otherImage;
- otherImage = newImage;
- newImage = imageTemp;
-
- newImage_width = newwidth;
- if( baseLevel <= level && level <= maxLevel ) {
- gl.glTexImage1D( target, level, internalFormat, newImage_width, 0,
- format, GL.GL_UNSIGNED_SHORT, newImage );
- }
- }
- if( newwidth > 1 ) {
- newwidth /= 2;
- }
- }
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
-
- return( 0 );
- }
-
- public static int bitmapBuild2DMipmaps( GL gl, int target, int internalFormat,
- int width, int height, int format, int type, ByteBuffer data ) {
- int newwidth[] = new int[1];
- int newheight[] = new int[1];
- int level, levels;
- ShortBuffer newImage = null;
- int newImage_width;
- int newImage_height;
- ShortBuffer otherImage = null;
- ShortBuffer tempImage = null;
- int memreq;
- int maxsize;
- int cmpts;
- PixelStorageModes psm = new PixelStorageModes();
-
- Mipmap.retrieveStoreModes( gl, psm );
-
- Mipmap.closestFit( gl, target, width, height, internalFormat, format, type, newwidth, newheight );
-
- levels = Mipmap.computeLog( newwidth[0] );
- level = Mipmap.computeLog( newheight[0] );
- if( level > levels ) {
- levels = level;
- }
-
- try {
- newImage = ByteBuffer.allocateDirect( Mipmap.image_size( width, height,
- format, GL.GL_UNSIGNED_SHORT ) ).order( ByteOrder.nativeOrder() ).asShortBuffer();
- } catch( OutOfMemoryError ome ) {
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- newImage_width = width;
- newImage_height = height;
-
- Image.fill_image( psm, width, height, format, type, Mipmap.is_index( format ), data, newImage );
-
- cmpts = Mipmap.elements_per_group( format, type );
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, 2 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, 0 );
-
- // if swap_bytes is set, swapping occurred in fill_image
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, GL.GL_FALSE );
-
- for( level = 0; level < levels; level++ ) {
- if( newImage_width == newwidth[0] && newImage_height == newheight[0] ) {
- newImage.rewind();
- gl.glTexImage2D( target, level, internalFormat, newImage_width,
- newImage_height, 0, format, GL.GL_UNSIGNED_SHORT, newImage );
- } else {
- if( otherImage == null ) {
- memreq = Mipmap.image_size( newwidth[0], newheight[0], format, GL.GL_UNSIGNED_SHORT );
- try {
- otherImage = ByteBuffer.allocateDirect( memreq ).order( ByteOrder.nativeOrder() ).asShortBuffer();
- } catch( OutOfMemoryError ome ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- }
- ScaleInternal.scale_internal( cmpts, newImage_width, newImage_height,
- newImage, newwidth[0], newheight[0], otherImage );
- // swap newImage and otherImage
- tempImage = otherImage;
- otherImage = newImage;
- newImage = tempImage;
-
- newImage_width = newwidth[0];
- newImage_height = newheight[0];
- newImage.rewind();
- gl.glTexImage2D( target, level, internalFormat, newImage_width, newImage_height,
- 0, format, GL.GL_UNSIGNED_SHORT, newImage );
- }
- if( newheight[0] > 1 ) {
- newwidth[0] /= 2;
- }
- if( newheight[0] > 1 ) {
- newheight[0] /= 2;
- }
- }
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
-
- return( 0 );
- }
-
- public static int gluBuild2DMipmapLevelsCore( GL gl, int target, int internalFormat,
- int width, int height, int widthPowerOf2, int heightPowerOf2,
- int format, int type, int userLevel, int baseLevel, int maxLevel,
- ByteBuffer data ) { // PointerWrapper data
- int newwidth;
- int newheight;
- int level, levels;
- int usersImage;
- ByteBuffer srcImage = null;
- ByteBuffer dstImage = null;
- ByteBuffer tempImage = null;
- int newImage_width;
- int newImage_height;
- short[] SWAP_IMAGE = null;
- int memreq;
- int maxsize;
- int cmpts;
-
- boolean myswap_bytes;
- int groups_per_line, element_size, group_size;
- int rowsize, padding;
- PixelStorageModes psm = new PixelStorageModes();
-
- assert( Mipmap.checkMipmapArgs( internalFormat, format, type ) == 0 );
- assert( width >= 1 && height >= 1 );
-
- if( type == GL.GL_BITMAP ) {
- return( bitmapBuild2DMipmaps( gl, target, internalFormat, width, height, format, type, data ) );
- }
-
- newwidth = widthPowerOf2;
- newheight = heightPowerOf2;
- levels = Mipmap.computeLog( newwidth );
- level = Mipmap.computeLog( newheight );
- if( level > levels ) {
- levels = level;
- }
-
- levels += userLevel;
-
- Mipmap.retrieveStoreModes( gl, psm );
- myswap_bytes = psm.getUnpackSwapBytes();
- cmpts = Mipmap.elements_per_group( format, type );
- if( psm.getUnpackRowLength() > 0 ) {
- groups_per_line = psm.getUnpackRowLength();
- } else {
- groups_per_line = width;
- }
-
- element_size = Mipmap.bytes_per_element( type );
- group_size = element_size * cmpts;
- if( element_size == 1 ) {
- myswap_bytes = false;
- }
-
- rowsize = groups_per_line * group_size;
- padding = ( rowsize % psm.getUnpackAlignment() );
- if( padding != 0 ) {
- rowsize += psm.getUnpackAlignment() - padding;
- }
-
- data.position( psm.getUnpackSkipRows() * rowsize + psm.getUnpackSkipPixels() * group_size );
- data.mark();
-
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, 0 );
-
- level = userLevel;
-
- // already power of two square
- if( width == newwidth && height == newheight ) {
- // use usersImage for level userLevel
- if( baseLevel <= level && level <= maxLevel ) {
- data.rewind();
- gl.glTexImage2D( target, level, internalFormat, width, height, 0, format, type, data );
- }
- if( levels == 0 ) { /* we're done. clean up and return */
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( 0 );
- }
- int nextWidth = newwidth / 2;
- int nextHeight = newheight / 2;
-
- // clamp to 1
- if( nextWidth < 1 ) {
- nextWidth = 1;
- }
- if( nextHeight < 1 ) {
- nextHeight = 1;
- }
- memreq = Mipmap.image_size( nextWidth, nextHeight, format, type );
-
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memreq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError ome ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- if( dstImage != null ) {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- HalveImage.halveImage_ubyte( cmpts, width, height, data, dstImage, element_size, rowsize, group_size );
- break;
- case( GL.GL_BYTE ):
- HalveImage.halveImage_byte( cmpts, width, height, data, dstImage, element_size, rowsize, group_size );
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- HalveImage.halveImage_ushort( cmpts, width, height, data, dstImage.asShortBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_SHORT ):
- HalveImage.halveImage_short( cmpts, width, height, data, dstImage.asShortBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT ):
- HalveImage.halveImage_uint( cmpts, width, height, data, dstImage.asIntBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_INT ):
- HalveImage.halveImage_int( cmpts, width, height, data, dstImage.asIntBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_FLOAT ):
- HalveImage.halveImage_float( cmpts, width, height, data, dstImage.asFloatBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- assert( format == GL.GL_RGB );
- HalveImage.halveImagePackedPixel( 3, new Extract332(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- assert( format == GL.GL_RGB );
- HalveImage.halveImagePackedPixel( 3, new Extract233rev(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- HalveImage.halveImagePackedPixel( 3, new Extract565(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- HalveImage.halveImagePackedPixel( 3, new Extract565rev(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- HalveImage.halveImagePackedPixel( 4, new Extract4444(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract4444rev(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- HalveImage.halveImagePackedPixel( 4, new Extract5551(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract1555rev(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- HalveImage.halveImagePackedPixel( 4, new Extract8888(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract8888rev(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- HalveImage.halveImagePackedPixel( 4, new Extract1010102(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract2101010rev(), width, height, data, dstImage, element_size, rowsize, myswap_bytes );
- break;
- default:
- assert( false );
- break;
- }
- }
- newwidth = width / 2;
- newheight = height / 2;
- // clamp to 1
- if( newwidth < 1 ) {
- newwidth = 1;
- }
- if( newheight < 1 ) {
- newheight = 1;
- }
-
- myswap_bytes = false;
- rowsize = newwidth * group_size;
- memreq = Mipmap.image_size( newwidth, newheight, format, type );
- // swap srcImage and dstImage
- tempImage = srcImage;
- srcImage = dstImage;
- dstImage = tempImage;
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memreq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError ome ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- // level userLevel+1 is in srcImage; level userLevel already saved
- level = userLevel + 1;
- } else { // user's image is not nice powerof2 size square
- memreq = Mipmap.image_size( newwidth, newheight, format, type );
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memreq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError ome ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- data.reset();
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- ScaleInternal.scale_internal_ubyte( cmpts, width, height, data,
- newwidth, newheight, dstImage, element_size, rowsize, group_size );
- break;
- case( GL.GL_BYTE ):
- ScaleInternal.scale_internal_byte( cmpts, width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, group_size );
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- ScaleInternal.scale_internal_ushort( cmpts, width, height, data, newwidth,
- newheight, dstImage.asShortBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_SHORT ):
- ScaleInternal.scale_internal_ushort( cmpts, width, height, data, newwidth,
- newheight, dstImage.asShortBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT ):
- ScaleInternal.scale_internal_uint( cmpts, width, height, data, newwidth,
- newheight, dstImage.asIntBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_INT ):
- ScaleInternal.scale_internal_int( cmpts, width, height, data, newwidth,
- newheight, dstImage.asIntBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_FLOAT ):
- ScaleInternal.scale_internal_float( cmpts, width, height, data, newwidth,
- newheight, dstImage.asFloatBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- ScaleInternal.scaleInternalPackedPixel( 3, new Extract332(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- ScaleInternal.scaleInternalPackedPixel( 3, new Extract233rev(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- ScaleInternal.scaleInternalPackedPixel( 3, new Extract565(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- ScaleInternal.scaleInternalPackedPixel( 3, new Extract565rev(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract4444(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract4444rev(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract5551(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract1555rev(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract8888(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract8888rev(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract1010102(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- ScaleInternal.scaleInternalPackedPixel( 4, new Extract2101010rev(), width, height, data, newwidth,
- newheight, dstImage, element_size, rowsize, myswap_bytes );
- break;
- default:
- assert( false );
- break;
- }
- myswap_bytes = false;
- rowsize = newwidth * group_size;
- // swap dstImage and srcImage
- tempImage = srcImage;
- srcImage = dstImage;
- dstImage = tempImage;
-
- if( levels != 0 ) { // use as little memory as possible
- int nextWidth = newwidth / 2;
- int nextHeight = newheight / 2;
- if( nextWidth < 1 ) {
- nextWidth = 1;
- }
- if( nextHeight < 1 ) {
- nextHeight = 1;
- }
-
- memreq = Mipmap.image_size( nextWidth, nextHeight, format, type );
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memreq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError ome ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- }
- // level userLevel is in srcImage; nothing saved yet
- level = userLevel;
- }
-
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, GL.GL_FALSE );
- if( baseLevel <= level && level <= maxLevel ) {
- srcImage.rewind();
- gl.glTexImage2D( target, level, internalFormat, newwidth, newheight, 0, format, type, srcImage );
- if (DEBUG) {
- System.err.println("GL Error(" + level + "): " + gl.glGetError() );
- if (VERBOSE) {
- srcImage.limit( Mipmap.image_size( newwidth, newheight, format, type ) );
- writeTargaFile("glu2DMipmapJ" + level + ".tga",
- srcImage, newwidth, newheight);
- srcImage.clear();
- }
- }
- }
-
- level++; // update current level for the loop
- for( ; level <= levels; level++ ) {
- srcImage.rewind();
- dstImage.rewind();
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- HalveImage.halveImage_ubyte( cmpts, newwidth, newheight, srcImage, dstImage, element_size, rowsize, group_size );
- break;
- case( GL.GL_BYTE ):
- HalveImage.halveImage_byte( cmpts, newwidth, newheight, srcImage, dstImage, element_size, rowsize, group_size );
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- HalveImage.halveImage_ushort( cmpts, newwidth, newheight, srcImage, dstImage.asShortBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_SHORT ):
- HalveImage.halveImage_short( cmpts, newwidth, newheight, srcImage, dstImage.asShortBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT ):
- HalveImage.halveImage_uint( cmpts, newwidth, newheight, srcImage, dstImage.asIntBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_INT ):
- HalveImage.halveImage_int( cmpts, newwidth, newheight, srcImage, dstImage.asIntBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_FLOAT ):
- HalveImage.halveImage_float( cmpts, newwidth, newheight, srcImage, dstImage.asFloatBuffer(), element_size, rowsize, group_size, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- assert( format == GL.GL_RGB );
- HalveImage.halveImagePackedPixel( 3, new Extract332(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- assert( format == GL.GL_RGB );
- HalveImage.halveImagePackedPixel( 3, new Extract233rev(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- HalveImage.halveImagePackedPixel( 3, new Extract565(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- HalveImage.halveImagePackedPixel( 3, new Extract565rev(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- HalveImage.halveImagePackedPixel( 4, new Extract4444(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract4444rev(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- HalveImage.halveImagePackedPixel( 4, new Extract5551(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract1555rev(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- HalveImage.halveImagePackedPixel( 4, new Extract8888(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract8888rev(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- HalveImage.halveImagePackedPixel( 4, new Extract1010102(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- HalveImage.halveImagePackedPixel( 4, new Extract2101010rev(), newwidth, newheight, srcImage, dstImage, element_size, rowsize, myswap_bytes );
- break;
- default:
- assert( false );
- break;
- }
-
- // swap dstImage and srcImage
- tempImage = srcImage;
- srcImage = dstImage;
- dstImage = tempImage;
-
- if( newwidth > 1 ) {
- newwidth /= 2;
- rowsize /= 2;
- }
- if( newheight > 1 ) {
- newheight /= 2;
- }
- // compute amount to pad per row if any
- int rowPad = rowsize % psm.getUnpackAlignment();
-
- // should row be padded
- if( rowPad == 0 ) {
- // call teximage with srcImage untouched since its not padded
- if( baseLevel <= level && level <= maxLevel ) {
- srcImage.rewind();
- gl.glTexImage2D( target, level, internalFormat, newwidth, newheight, 0, format, type, srcImage );
- if (DEBUG) {
- System.err.println("GL Error(" + level + "): " + gl.glGetError() );
- if (VERBOSE) {
- srcImage.limit( Mipmap.image_size( newwidth, newheight, format, type ) );
- writeTargaFile("glu2DMipmapJ" + level + ".tga",
- srcImage, newwidth, newheight);
- srcImage.clear();
- }
- }
- }
- } else {
- // compute length of new row in bytes, including padding
- int newRowLength = rowsize + psm.getUnpackAlignment() - rowPad;
- int ii, jj;
- int dstTrav;
- int srcTrav;
-
- // allocate new image for mipmap of size newRowLength x newheight
- ByteBuffer newMipmapImage = null;
- try {
- newMipmapImage = ByteBuffer.allocateDirect( newRowLength * newheight );
- } catch( OutOfMemoryError ome ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- srcImage.rewind();
- // copy image from srcImage into newMipmapImage by rows
- for( ii = 0; ii < newheight; ii++ ) {
- newMipmapImage.position(newRowLength * ii);
- for( jj = 0; jj < rowsize; jj++ ) {
- newMipmapImage.put( srcImage.get() );
- }
- }
-
- // and use this new image for mipmapping instead
- if( baseLevel <= level && level <= maxLevel ) {
- newMipmapImage.rewind();
- gl.glTexImage2D( target, level, internalFormat, newwidth, newheight, 0, format, type, newMipmapImage );
- if (DEBUG) {
- System.err.println("GL Error(" + level + " padded): " + gl.glGetError() );
- if (VERBOSE) {
- writeTargaFile("glu2DMipmapJ" + level + ".tga",
- newMipmapImage, newwidth, newheight);
- }
- }
- }
- }
- }
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, (psm.getUnpackSwapBytes() ? 1 : 0) );
-
- return( 0 );
- }
-
- public static int fastBuild2DMipmaps( GL gl, PixelStorageModes psm, int target,
- int components, int width, int height, int format, int type, ByteBuffer data ) {
- int[] newwidth = new int[1];
- int[] newheight = new int[1];
- int level, levels;
- ByteBuffer newImage;
- int newImage_width;
- int newImage_height;
- ByteBuffer otherImage;
- ByteBuffer imageTemp;
- int memreq;
- int maxsize;
- int cmpts;
-
- Mipmap.closestFit( gl, target, width, height, components, format, type, newwidth,
- newheight );
-
- levels = Mipmap.computeLog( newwidth[0] );
- level = Mipmap.computeLog( newheight[0] );
- if( level > levels ) {
- levels = level;
- }
-
- cmpts = Mipmap.elements_per_group( format, type );
-
- otherImage = null;
- // No need to copy the user data if its packed correctly.
- // Make sure that later routines don't change that data.
-
- if( psm.getUnpackSkipRows() == 0 && psm.getUnpackSkipPixels() == 0 ) {
- newImage = data;
- newImage_width = width;
- newImage_height = height;
- } else {
- int rowsize;
- int group_per_line;
- int elements_per_line;
- int start;
- int iter;
- int iter2;
- int i, j;
-
- try {
- newImage = ByteBuffer.allocateDirect( Mipmap.image_size(
- width, height, format, GL.GL_UNSIGNED_BYTE ) ).order( ByteOrder.nativeOrder() );
- } catch( OutOfMemoryError err ) {
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- newImage_width = width;
- newImage_height = height;
-
- // Abbreviated version of fill_image for the restricted case.
- if( psm.getUnpackRowLength() > 0 ) {
- group_per_line = psm.getUnpackRowLength();
- } else {
- group_per_line = width;
- }
- rowsize = group_per_line * cmpts;
- elements_per_line = width * cmpts;
- start = psm.getUnpackSkipRows() * rowsize + psm.getUnpackSkipPixels() * cmpts;
-
- for( i = 0; i < height; i++ ) {
- iter = start;
- data.position( iter );
- for( j = 0; j < elements_per_line; j++ ) {
- newImage.put( data.get() );
- }
- start += rowsize;
- }
- }
-
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, 1 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, GL.GL_FALSE );
-
- for( level = 0; level <= levels; level++ ) {
- if( newImage_width == newwidth[0] && newImage_height == newheight[0] ) {
- // use newImage for this level
- newImage.rewind();
- gl.glTexImage2D( target, level, components, newImage_width, newImage_height,
- 0, format, GL.GL_UNSIGNED_BYTE, newImage );
- } else {
- if( otherImage == null ) {
- memreq = Mipmap.image_size( newwidth[0], newheight[0], format, GL.GL_UNSIGNED_BYTE );
- try {
- otherImage = ByteBuffer.allocateDirect( memreq ).order( ByteOrder.nativeOrder() );
- } catch( OutOfMemoryError err ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, ( psm.getUnpackSwapBytes() ? 1 : 0 ) ) ;
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- }
- // swap newImage and otherImage
- imageTemp = otherImage;
- otherImage = newImage;
- newImage = imageTemp;
-
- newImage_width = newwidth[0];
- newImage_height = newheight[0];
- newImage.rewind();
- gl.glTexImage2D( target, level, components, newImage_width, newImage_height,
- 0, format, GL.GL_UNSIGNED_BYTE, newImage );
- }
- if( newwidth[0] > 1 ) {
- newwidth[0] /= 2;
- }
- if( newheight[0] > 1 ) {
- newheight[0] /= 2;
- }
- }
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, ( psm.getUnpackSwapBytes() ? 1 : 0 ) ) ;
-
- return( 0 );
- }
-
- public static int gluBuild3DMipmapLevelsCore( GL gl, int target, int internalFormat,
- int width, int height, int depth, int widthPowerOf2, int heightPowerOf2,
- int depthPowerOf2, int format, int type, int userLevel, int baseLevel,
- int maxLevel, ByteBuffer data ) {
- int newWidth;
- int newHeight;
- int newDepth;
- int level, levels;
- ByteBuffer usersImage;
- ByteBuffer srcImage, dstImage, tempImage;
- int newImageWidth;
- int newImageHeight;
- int newImageDepth;
- int memReq;
- int maxSize;
- int cmpts;
-
- boolean myswapBytes;
- int groupsPerLine, elementSize, groupSize;
- int rowsPerImage, imageSize;
- int rowSize, padding;
- PixelStorageModes psm = new PixelStorageModes();
-
- assert( Mipmap.checkMipmapArgs( internalFormat, format, type ) == 0 );
- assert( width >= 1 && height >= 1 && depth >= 1 );
- assert( type != GL.GL_BITMAP );
-
- srcImage = dstImage = null;
-
- newWidth = widthPowerOf2;
- newHeight = heightPowerOf2;
- newDepth = depthPowerOf2;
- levels = Mipmap.computeLog( newWidth );
- level = Mipmap.computeLog( newHeight );
- if( level > levels ) {
- levels = level;
- }
- level = Mipmap.computeLog( newDepth );
- if( level > levels ) {
- levels = level;
- }
-
- levels += userLevel;
-
- Mipmap.retrieveStoreModes3D( gl, psm );
- myswapBytes = psm.getUnpackSwapBytes();
- cmpts = Mipmap.elements_per_group( format, type );
- if( psm.getUnpackRowLength() > 0 ) {
- groupsPerLine = psm.getUnpackRowLength();
- } else {
- groupsPerLine = width;
- }
-
- elementSize = Mipmap.bytes_per_element( type );
- groupSize = elementSize * cmpts;
- if( elementSize == 1 ) {
- myswapBytes = false;
- }
-
- // 3dstuff
- if( psm.getUnpackImageHeight() > 0 ) {
- rowsPerImage = psm.getUnpackImageHeight();
- } else {
- rowsPerImage = height;
- }
-
- rowSize = groupsPerLine * groupSize;
- padding = ( rowSize % psm.getUnpackAlignment() );
- if( padding != 0 ) {
- rowSize += psm.getUnpackAlignment() - padding;
- }
-
- imageSize = rowsPerImage * rowSize;
-
- usersImage = data.duplicate();
- usersImage.position( psm.getUnpackSkipRows() * rowSize +
- psm.getUnpackSkipPixels() * groupSize +
- psm.getUnpackSkipImages() * imageSize );
- usersImage.mark();
-
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_IMAGES, 0 );
- gl.glPixelStorei( GL.GL_UNPACK_IMAGE_HEIGHT, 0 );
-
- level = userLevel;
-
- if( width == newWidth && height == newHeight && depth == newDepth ) {
- // use usersImage for level userlevel
- if( baseLevel <= level && level <= maxLevel ) {
- gl.glTexImage3D( target, level, internalFormat, width, height, depth,
- 0, format, type, usersImage );
- }
- if( levels == 0 ) { /* we're done. clean up and return */
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, psm.getUnpackSwapBytes() ? 1 : 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_IMAGES, psm.getUnpackSkipImages() );
- gl.glPixelStorei( GL.GL_UNPACK_IMAGE_HEIGHT, psm.getUnpackImageHeight() );
- return( 0 );
- }
- int nextWidth = newWidth / 2;
- int nextHeight = newHeight / 2;
- int nextDepth = newDepth / 2;
-
- // clamp to one
- if( nextWidth < 1 ) {
- nextWidth = 1;
- }
- if( nextHeight < 1 ) {
- nextHeight = 1;
- }
- if( nextDepth < 1 ) {
- nextDepth = 1;
- }
- memReq = Mipmap.imageSize3D( nextWidth, nextHeight, nextDepth, format, type );
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memReq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError err ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, psm.getUnpackSwapBytes() ? 1 : 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_IMAGES, psm.getUnpackSkipImages() );
- gl.glPixelStorei( GL.GL_UNPACK_IMAGE_HEIGHT, psm.getUnpackImageHeight() );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
-
- if( dstImage != null ) {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractUByte(), width, height, depth,
- usersImage, dstImage, elementSize,
- groupSize, rowSize, imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_ubyte( cmpts, width, height, usersImage,
- dstImage, elementSize, rowSize, groupSize );
- }
- break;
- case( GL.GL_BYTE ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractSByte(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_byte( cmpts, width, height, usersImage,
- dstImage, elementSize, rowSize, groupSize );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractUShort(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_ushort( cmpts, width, height, usersImage,
- dstImage.asShortBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_SHORT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractSShort(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_short( cmpts, width, height, usersImage,
- dstImage.asShortBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_UNSIGNED_INT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractUInt(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_uint( cmpts, width, height, usersImage,
- dstImage.asIntBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_INT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractSInt(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_int( cmpts, width, height, usersImage,
- dstImage.asIntBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_FLOAT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractFloat(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_float( cmpts, width, height, usersImage,
- dstImage.asFloatBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- assert( format == GL.GL_RGB );
- HalveImage.halveImagePackedPixel3D( 3, new Extract332(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- assert( format == GL.GL_RGB );
- HalveImage.halveImagePackedPixel3D( 3, new Extract233rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- HalveImage.halveImagePackedPixel3D( 3, new Extract565(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- HalveImage.halveImagePackedPixel3D( 3, new Extract565rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract4444(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract4444rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract5551(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract1555rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract8888(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract8888rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract1010102(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract2101010rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- default:
- assert( false );
- break;
- }
- }
- newWidth = width / 2;
- newHeight = height / 2;
- newDepth = depth / 2;
- // clamp to 1
- if( newWidth < 1 ) {
- newWidth = 1;
- }
- if( newHeight < 1 ) {
- newHeight = 1;
- }
- if( newDepth < 1 ) {
- newDepth = 1;
- }
-
- myswapBytes = false;
- rowSize = newWidth * groupSize;
- imageSize = rowSize * newHeight;
- memReq = Mipmap.imageSize3D( newWidth, newHeight, newDepth, format, type );
- // swap srcImage and dstImage
- tempImage = srcImage;
- srcImage = dstImage;
- dstImage = tempImage;
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memReq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError err ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, psm.getUnpackSwapBytes() ? 1 : 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_IMAGES, psm.getUnpackSkipImages() );
- gl.glPixelStorei( GL.GL_UNPACK_IMAGE_HEIGHT, psm.getUnpackImageHeight() );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
-
- // level userLevel + 1 is in srcImage; level userLevel already saved
- level = userLevel + 1;
- } else {
- memReq = Mipmap.imageSize3D( newWidth, newHeight, newDepth, format, type );
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memReq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError err ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, psm.getUnpackSwapBytes() ? 1 : 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_IMAGES, psm.getUnpackSkipImages() );
- gl.glPixelStorei( GL.GL_UNPACK_IMAGE_HEIGHT, psm.getUnpackImageHeight() );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
-
- ScaleInternal.gluScaleImage3D( gl, format, width, height, depth, type,
- usersImage, newWidth, newHeight, newDepth, type, dstImage );
-
- myswapBytes = false;
- rowSize = newWidth * groupSize;
- imageSize = rowSize * newHeight;
- // swap dstImage and srcImage
- tempImage = srcImage;
- srcImage = dstImage;
- dstImage = tempImage;
-
- if( levels != 0 ) {
- int nextWidth = newWidth / 2;
- int nextHeight = newHeight / 2;
- int nextDepth = newDepth / 2;
- if( nextWidth < 1 ) {
- nextWidth = 1;
- }
- if( nextHeight < 1 ) {
- nextHeight = 1;
- }
- if( nextDepth < 1 ) {
- nextDepth = 1;
- }
- memReq = Mipmap.imageSize3D( nextWidth, nextHeight, nextDepth, format, type );
- try {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- dstImage = ByteBuffer.allocateDirect( memReq ).order( ByteOrder.nativeOrder() );
- break;
- default:
- return( GLU.GLU_INVALID_ENUM );
- }
- } catch( OutOfMemoryError err ) {
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, psm.getUnpackSwapBytes() ? 1 : 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_IMAGES, psm.getUnpackSkipImages() );
- gl.glPixelStorei( GL.GL_UNPACK_IMAGE_HEIGHT, psm.getUnpackImageHeight() );
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- }
- // level userLevel is in srcImage; nothing saved yet
- level = userLevel;
- }
-
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, GL.GL_FALSE );
- if( baseLevel <= level && level <= maxLevel ) {
- usersImage.reset();
- gl.glTexImage3D( target, level, internalFormat, width, height, depth,
- 0, format, type, usersImage );
- }
- level++;
- for( ; level <= levels; level++ ) {
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractUByte(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_ubyte( cmpts, width, height, usersImage,
- dstImage, elementSize, rowSize, groupSize );
- }
- break;
- case( GL.GL_BYTE ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractSByte(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_byte( cmpts, width, height, usersImage,
- dstImage, elementSize, rowSize, groupSize );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractUShort(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_ushort( cmpts, width, height, usersImage,
- dstImage.asShortBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_SHORT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractSShort(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_short( cmpts, width, height, usersImage,
- dstImage.asShortBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_UNSIGNED_INT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractUInt(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_uint( cmpts, width, height, usersImage,
- dstImage.asIntBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_INT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractSInt(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_int( cmpts, width, height, usersImage,
- dstImage.asIntBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_FLOAT ):
- if( depth > 1 ) {
- HalveImage.halveImage3D( cmpts, new ExtractFloat(), width, height, depth,
- usersImage, dstImage, elementSize, groupSize, rowSize,
- imageSize, myswapBytes );
- } else {
- HalveImage.halveImage_float( cmpts, width, height, usersImage,
- dstImage.asFloatBuffer(), elementSize, rowSize, groupSize, myswapBytes );
- }
- break;
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- HalveImage.halveImagePackedPixel3D( 3, new Extract332(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- HalveImage.halveImagePackedPixel3D( 3, new Extract233rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- HalveImage.halveImagePackedPixel3D( 3, new Extract565(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- HalveImage.halveImagePackedPixel3D( 3, new Extract565rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract4444(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract4444rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract5551(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract1555rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract8888(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract8888rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract1010102(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- HalveImage.halveImagePackedPixel3D( 4, new Extract2101010rev(), width, height, depth, usersImage,
- dstImage, elementSize, rowSize, imageSize, myswapBytes );
- break;
- default:
- assert( false );
- break;
- }
-
- tempImage = srcImage;
- srcImage = dstImage;
- dstImage = tempImage;
-
- if( newWidth > 1 ) {
- newWidth /= 2;
- rowSize /= 2;
- }
- if( newHeight > 1 ) {
- newHeight /= 2;
- imageSize = rowSize * newHeight;
- }
- if( newDepth > 1 ) {
- newDepth /= 2;
- }
- if( baseLevel <= level && level <= maxLevel ) {
- usersImage.reset();
- gl.glTexImage3D( target, level, internalFormat, width, height, depth,
- 0, format, type, usersImage );
- }
- }
- gl.glPixelStorei( GL.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_PIXELS, psm.getUnpackSkipPixels() );
- gl.glPixelStorei( GL.GL_UNPACK_ROW_LENGTH, psm.getUnpackRowLength() );
- gl.glPixelStorei( GL.GL_UNPACK_SWAP_BYTES, psm.getUnpackSwapBytes() ? 1 : 0 );
- gl.glPixelStorei( GL.GL_UNPACK_SKIP_IMAGES, psm.getUnpackSkipImages() );
- gl.glPixelStorei( GL.GL_UNPACK_IMAGE_HEIGHT, psm.getUnpackImageHeight() );
- return( 0 );
- }
-
- private static final int TARGA_HEADER_SIZE = 18;
- private static void writeTargaFile(String filename, ByteBuffer data,
- int width, int height) {
- try {
- FileOutputStream fos = new FileOutputStream(new File(filename));
- ByteBuffer header = ByteBuffer.allocate(TARGA_HEADER_SIZE);
- header.put(0, (byte) 0).put(1, (byte) 0);
- header.put(2, (byte) 2); // uncompressed type
- header.put(12, (byte) (width & 0xFF)); // width
- header.put(13, (byte) (width >> 8)); // width
- header.put(14, (byte) (height & 0xFF)); // height
- header.put(15, (byte) (height >> 8)); // height
- header.put(16, (byte) 24); // pixel size
- fos.getChannel().write(header);
- fos.getChannel().write(data);
- data.clear();
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract.java b/src/classes/com/sun/opengl/impl/mipmap/Extract.java
deleted file mode 100644
index b49770afc..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public interface Extract {
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents );
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel );
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract1010102.java b/src/classes/com/sun/opengl/impl/mipmap/Extract1010102.java
deleted file mode 100644
index 1be6690b7..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract1010102.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public class Extract1010102 implements Extract {
-
- /** Creates a new instance of Extract1010102 */
- public Extract1010102() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- long uint = 0;
-
- if( isSwap ) {
- uint = 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( packedPixel.getInt() );
- } else {
- uint = 0x00000000FFFFFFFF & packedPixel.getInt();
- }
-
- // 11111111,11000000,00000000,00000000 == 0xFFC00000
- // 00000000,00111111,11110000,00000000 == 0x003F0000
- // 00000000,00000000,00001111,11111100 == 0x00000FFC
- // 00000000,00000000,00000000,00000011 == 0x00000003
-
- extractComponents[0] = (float)( ( uint & 0xFFC00000 ) >> 22 ) / 1023.0f;
- extractComponents[1] = (float)( ( uint & 0x003FF000 ) >> 12 ) / 1023.0f;
- extractComponents[2] = (float)( ( uint & 0x00000FFC ) >> 2 ) / 1023.0f;
- extractComponents[3] = (float)( ( uint & 0x00000003 ) ) / 3.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
- assert( 0.0f <= shoveComponents[3] && shoveComponents[3] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- long uint = (((int)((shoveComponents[0] * 1023) + 0.5f) << 22) & 0xFFC00000 );
- uint |= (((int)((shoveComponents[1] * 1023) + 0.5f) << 12) & 0x003FF000 );
- uint |= (((int)((shoveComponents[2] * 1023) + 0.5f) << 2) & 0x00000FFC );
- uint |= (((int)((shoveComponents[3] * 3) + 0.5f) ) & 0x00000003 );
- packedPixel.asIntBuffer().put( index, (int)uint );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract1555rev.java b/src/classes/com/sun/opengl/impl/mipmap/Extract1555rev.java
deleted file mode 100644
index d2b5d65a4..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract1555rev.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public class Extract1555rev implements Extract {
-
- /** Creates a new instance of Extract1555rev */
- public Extract1555rev() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- int ushort = 0;
-
- if( isSwap ) {
- ushort = 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( packedPixel.getShort() );
- } else {
- ushort = 0x0000FFFF & packedPixel.getShort();
- }
-
- // 00000000,00011111 == 0x001F
- // 00000011,11100000 == 0x03E0
- // 01111100,00000000 == 0x7C00
- // 10000000,00000000 == 0x8000
-
- extractComponents[0] = (float)( ( ushort & 0x001F ) ) / 31.0f;
- extractComponents[1] = (float)( ( ushort & 0x003E ) >> 5 ) / 31.0f;
- extractComponents[2] = (float)( ( ushort & 0x7C00 ) >> 10) / 31.0f;
- extractComponents[3] = (float)( ( ushort & 0x8000 ) >> 15);
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 00000000,00011111 == 0x001F
- // 00000011,11100000 == 0x03E0
- // 01111100,00000000 == 0x7C00
- // 10000000,00000000 == 0x8000
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
- assert( 0.0f <= shoveComponents[3] && shoveComponents[3] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- int ushort = (((int)((shoveComponents[0] * 31) + 0.5f) ) & 0x0000001F );
- ushort |= (((int)((shoveComponents[1] * 31) + 0.5f) << 5) & 0x000003E0 );
- ushort |= (((int)((shoveComponents[2] * 31) + 0.5f) << 10) & 0x00007C00 );
- ushort |= (((int)((shoveComponents[3]) + 0.5f) << 15) & 0x00008000 );
- packedPixel.asShortBuffer().put( index, (short)ushort );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract2101010rev.java b/src/classes/com/sun/opengl/impl/mipmap/Extract2101010rev.java
deleted file mode 100644
index 61268e451..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract2101010rev.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public class Extract2101010rev implements Extract {
-
- /** Creates a new instance of Extract2101010 */
- public Extract2101010rev() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- long uint = 0;
-
- if( isSwap ) {
- uint = 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( packedPixel.getInt() );
- } else {
- uint = 0x00000000FFFFFFFF & packedPixel.getInt();
- }
-
- // 11111111,11000000,00000000,00000000 == 0xFFC00000
- // 00000000,00111111,11110000,00000000 == 0x003F0000
- // 00000000,00000000,00001111,11111100 == 0x00000FFC
- // 00000000,00000000,00000000,00000011 == 0x00000003
-
- extractComponents[0] = (float)( ( uint & 0x000003FF ) ) / 1023.0f;
- extractComponents[1] = (float)( ( uint & 0x000FFC00 ) >> 10 ) / 1023.0f;
- extractComponents[2] = (float)( ( uint & 0x3FF00000 ) >> 20 ) / 1023.0f;
- extractComponents[3] = (float)( ( uint & 0xC0000000 ) >> 30 ) / 3.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
- assert( 0.0f <= shoveComponents[3] && shoveComponents[3] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- long uint = (((int)((shoveComponents[0] * 1023) + 0.5f) ) & 0x000003FF );
- uint |= (((int)((shoveComponents[1] * 1023) + 0.5f) << 10) & 0x000FFC00 );
- uint |= (((int)((shoveComponents[2] * 1023) + 0.5f) << 20) & 0x3FF00000 );
- uint |= (((int)((shoveComponents[3] * 3) + 0.5f) << 30) & 0xC0000000 );
- packedPixel.asIntBuffer().put( index, (int)uint );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract233rev.java b/src/classes/com/sun/opengl/impl/mipmap/Extract233rev.java
deleted file mode 100644
index 3fbb90bcd..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract233rev.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public class Extract233rev implements Extract {
-
- /** Creates a new instance of Extract223rev */
- public Extract233rev() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- // 11100000 == 0xe0
- // 00011100 == 0x1c
- // 00000011 == 0x03
- byte ubyte = packedPixel.get();
- extractComponents[0] = (float)((ubyte & 0x07) ) / 7.0f;
- extractComponents[1] = (float)((ubyte & 0x38) >> 3) / 7.0f;
- extractComponents[2] = (float)((ubyte & 0xC0) >> 6) / 3.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11100000 == 0xE0
- // 00011100 == 0x1C
- // 00000011 == 0x03
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- byte b = (byte)( ( (int)( ( shoveComponents[0] * 7 ) + 0.5f ) ) & 0x07 );
- b |= (byte)( ( (int)( ( shoveComponents[1] * 7 ) + 0.5f ) << 3 ) & 0x38 );
- b |= (byte)( ( (int)( ( shoveComponents[2] * 3 ) + 0.5f ) << 6 ) & 0xC0 );
- packedPixel.position( index );
- packedPixel.put( b );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract332.java b/src/classes/com/sun/opengl/impl/mipmap/Extract332.java
deleted file mode 100644
index bff1f7122..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract332.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public class Extract332 implements Extract {
-
- /** Creates a new instance of Extract332 */
- public Extract332() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- // 11100000 == 0xe0
- // 00011100 == 0x1c
- // 00000011 == 0x03
- byte ubyte = packedPixel.get();
- extractComponents[0] = (float)((ubyte & 0xe0) >> 5) / 7.0f;
- extractComponents[1] = (float)((ubyte & 0x1c) >> 2) / 7.0f;
- extractComponents[2] = (float)((ubyte & 0x03)) / 3.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11100000 == 0xE0
- // 00011100 == 0x1C
- // 00000011 == 0x03
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- byte b = (byte)( ( (int)( ( shoveComponents[0] * 7 ) + 0.5f ) << 5 ) & 0xE0 );
- b |= (byte)( ( (int)( ( shoveComponents[1] * 7 ) + 0.5f ) << 2 ) & 0x1C );
- b |= (byte)( ( (int)( ( shoveComponents[2] * 3 ) + 0.5f ) ) & 0x03 );
- packedPixel.put( index, b );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract4444.java b/src/classes/com/sun/opengl/impl/mipmap/Extract4444.java
deleted file mode 100644
index 76e3adce0..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract4444.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Extract4444 implements Extract {
-
- /** Creates a new instance of Extract4444 */
- public Extract4444() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- int ushort = 0;
-
- if( isSwap ) {
- ushort = 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( packedPixel.getShort() );
- } else {
- ushort = 0x0000FFFF & packedPixel.getShort();
- }
-
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- extractComponents[0] = (float)( ( ushort & 0xF000 ) >> 12 ) / 15.0f;
- extractComponents[1] = (float)( ( ushort & 0x0F00 ) >> 8 ) / 15.0f;
- extractComponents[2] = (float)( ( ushort & 0x00F0 ) >> 4 ) / 15.0f;
- extractComponents[3] = (float)( ( ushort & 0x000F ) ) / 15.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- int ushort = (((int)((shoveComponents[0] * 15) + 0.5f) << 12) & 0x0000F000 );
- ushort |= (((int)((shoveComponents[1] * 15) + 0.5f) << 8) & 0x00000F00 );
- ushort |= (((int)((shoveComponents[2] * 15) + 0.5f) << 4) & 0x000000F0 );
- ushort |= (((int)((shoveComponents[3] * 15) + 0.5f) ) & 0x0000000F );
- packedPixel.asShortBuffer().put( index, (short)ushort );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract4444rev.java b/src/classes/com/sun/opengl/impl/mipmap/Extract4444rev.java
deleted file mode 100644
index 2574e37ce..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract4444rev.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Extract4444rev implements Extract {
-
- /** Creates a new instance of Extract4444rev */
- public Extract4444rev() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- int ushort = 0;
-
- if( isSwap ) {
- ushort = 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( packedPixel.getShort() );
- } else {
- ushort = 0x0000FFFF & packedPixel.getShort();
- }
-
- // 00000000,00001111 == 0x000F
- // 00000000,11110000 == 0x00F0
- // 00001111,00000000 == 0x0F00
- // 11110000,00000000 == 0xF000
-
- extractComponents[0] = (float)( ( ushort & 0x000F ) ) / 15.0f;
- extractComponents[1] = (float)( ( ushort & 0x00F0 ) >> 4 ) / 15.0f;
- extractComponents[2] = (float)( ( ushort & 0x0F00 ) >> 8 ) / 15.0f;
- extractComponents[3] = (float)( ( ushort & 0xF000 ) >> 12 ) / 15.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
- assert( 0.0f <= shoveComponents[3] && shoveComponents[3] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- int ushort = (((int)((shoveComponents[0] * 15) + 0.5f) ) & 0x0000000F );
- ushort |= (((int)((shoveComponents[1] * 15) + 0.5f) << 4) & 0x000000F0 );
- ushort |= (((int)((shoveComponents[2] * 15) + 0.5f) << 8) & 0x00000F00 );
- ushort |= (((int)((shoveComponents[3] * 15) + 0.5f) << 12) & 0x0000F000 );
- packedPixel.asShortBuffer().put( index, (short)ushort );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract5551.java b/src/classes/com/sun/opengl/impl/mipmap/Extract5551.java
deleted file mode 100644
index c97f2df6c..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract5551.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Extract5551 implements Extract {
-
- /** Creates a new instance of Extract5551 */
- public Extract5551() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- int ushort = 0;
-
- if( isSwap ) {
- ushort = 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( packedPixel.getShort() );
- } else {
- ushort = 0x0000FFFF & packedPixel.getShort();
- }
-
- // 11111000,00000000 == 0xF800
- // 00000111,11000000 == 0x07C0
- // 00000000,00111110 == 0x003E
- // 00000000,00000001 == 0x0001
-
- extractComponents[0] = (float)( ( ushort & 0xF800 ) >> 11 ) / 31.0f;
- extractComponents[1] = (float)( ( ushort & 0x00F0 ) >> 6 ) / 31.0f;
- extractComponents[2] = (float)( ( ushort & 0x0F00 ) >> 1 ) / 31.0f;
- extractComponents[3] = (float)( ( ushort & 0xF000 ) );
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
- assert( 0.0f <= shoveComponents[3] && shoveComponents[3] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- int ushort = (((int)((shoveComponents[0] * 31) + 0.5f) << 11) & 0x0000F800 );
- ushort |= (((int)((shoveComponents[1] * 31) + 0.5f) << 6) & 0x000007C0 );
- ushort |= (((int)((shoveComponents[2] * 31) + 0.5f) << 1) & 0x0000003E );
- ushort |= (((int)((shoveComponents[3]) + 0.5f)) & 0x00000001 );
- packedPixel.asShortBuffer().put( index, (short)ushort );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract565.java b/src/classes/com/sun/opengl/impl/mipmap/Extract565.java
deleted file mode 100644
index d7e6d2a31..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract565.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Extract565 implements Extract {
-
- /** Creates a new instance of Extract565 */
- public Extract565() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- int ushort = 0;
-
- if( isSwap ) {
- ushort = 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( packedPixel.getShort() );
- } else {
- ushort = 0x0000FFFF & packedPixel.getShort();
- }
-
- // 11111000,00000000 == 0xF800
- // 00000111,11100000 == 0x07E0
- // 00000000,00111111 == 0x001F
-
- extractComponents[0] = (float)( ( ushort & 0xF800 ) >> 11 ) / 31.0f;
- extractComponents[1] = (float)( ( ushort & 0x07E0 ) >> 5 ) / 63.0f;
- extractComponents[2] = (float)( ( ushort & 0x001F ) ) / 31.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11111000,00000000 == 0xF800
- // 00000111,11100000 == 0x07E0
- // 00000000,00111111 == 0x001F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- int ushort = (((int)((shoveComponents[0] * 31) + 0.5f) << 11) & 0x0000F800 );
- ushort |= (((int)((shoveComponents[1] * 63) + 0.5f) << 5) & 0x000007E0 );
- ushort |= (((int)((shoveComponents[2] * 31) + 0.5f) ) & 0x0000001F );
- packedPixel.asShortBuffer().put( index, (short)ushort );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract565rev.java b/src/classes/com/sun/opengl/impl/mipmap/Extract565rev.java
deleted file mode 100644
index a9d6b0c49..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract565rev.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Extract565rev implements Extract {
-
- /** Creates a new instance of Extract565rev */
- public Extract565rev() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- int ushort = 0;
-
- if( isSwap ) {
- ushort = 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( packedPixel.getShort() );
- } else {
- ushort = 0x0000FFFF & packedPixel.getShort();
- }
-
- // 00000000,00011111 == 0x001F
- // 00000111,11100000 == 0x07E0
- // 11111000,00000000 == 0xF800
-
- extractComponents[0] = (float)( ( ushort & 0x001F ) ) / 31.0f;
- extractComponents[1] = (float)( ( ushort & 0x07E0 ) >> 5 ) / 63.0f;
- extractComponents[2] = (float)( ( ushort & 0xF800 ) >> 11 ) / 31.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 00000000,00111111 == 0x001F
- // 00000111,11100000 == 0x07E0
- // 11111000,00000000 == 0xF800
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- int ushort = (((int)((shoveComponents[0] * 31) + 0.5f) ) & 0x0000001F );
- ushort |= (((int)((shoveComponents[1] * 63) + 0.5f) << 5) & 0x000007E0 );
- ushort |= (((int)((shoveComponents[2] * 31) + 0.5f) << 11) & 0x0000F800 );
- packedPixel.asShortBuffer().put( index, (short)ushort );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract8888.java b/src/classes/com/sun/opengl/impl/mipmap/Extract8888.java
deleted file mode 100644
index d8cf97d3d..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract8888.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Extract8888 implements Extract {
-
- /** Creates a new instance of Extract8888 */
- public Extract8888() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- long uint = 0;
-
- if( isSwap ) {
- uint = 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( packedPixel.getInt() );
- } else {
- uint = 0x00000000FFFFFFFF & packedPixel.getInt();
- }
-
- // 11111000,00000000 == 0xF800
- // 00000111,11000000 == 0x07C0
- // 00000000,00111110 == 0x003E
- // 00000000,00000001 == 0x0001
-
- extractComponents[0] = (float)( ( uint & 0xFF000000 ) >> 24 ) / 255.0f;
- extractComponents[1] = (float)( ( uint & 0x00FF0000 ) >> 16 ) / 255.0f;
- extractComponents[2] = (float)( ( uint & 0x0000FF00 ) >> 8 ) / 255.0f;
- extractComponents[3] = (float)( ( uint & 0x000000FF ) ) / 255.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
- assert( 0.0f <= shoveComponents[3] && shoveComponents[3] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- long uint = (((int)((shoveComponents[0] * 255) + 0.5f) << 24) & 0xFF000000 );
- uint |= (((int)((shoveComponents[1] * 255) + 0.5f) << 16) & 0x00FF0000 );
- uint |= (((int)((shoveComponents[2] * 255) + 0.5f) << 8) & 0x0000FF00 );
- uint |= (((int)((shoveComponents[3] * 255) + 0.5f) ) & 0x000000FF );
- packedPixel.asIntBuffer().put( index, (int)uint );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Extract8888rev.java b/src/classes/com/sun/opengl/impl/mipmap/Extract8888rev.java
deleted file mode 100644
index b3ad50064..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Extract8888rev.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Extract8888rev implements Extract {
-
- /** Creates a new instance of Extract8888rev */
- public Extract8888rev() {
- }
-
- public void extract( boolean isSwap, ByteBuffer packedPixel, float[] extractComponents ) {
- long uint = 0;
-
- if( isSwap ) {
- uint = 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( packedPixel.getInt() );
- } else {
- uint = 0x00000000FFFFFFFF & packedPixel.getInt();
- }
-
- // 11111000,00000000 == 0xF800
- // 00000111,11000000 == 0x07C0
- // 00000000,00111110 == 0x003E
- // 00000000,00000001 == 0x0001
-
- extractComponents[0] = (float)( ( uint & 0x000000FF ) ) / 255.0f;
- extractComponents[1] = (float)( ( uint & 0x0000FF00 ) >> 8 ) / 255.0f;
- extractComponents[2] = (float)( ( uint & 0x00FF0000 ) >> 16 ) / 255.0f;
- extractComponents[3] = (float)( ( uint & 0xFF000000 ) >> 24 ) / 255.0f;
- }
-
- public void shove( float[] shoveComponents, int index, ByteBuffer packedPixel ) {
- // 11110000,00000000 == 0xF000
- // 00001111,00000000 == 0x0F00
- // 00000000,11110000 == 0x00F0
- // 00000000,00001111 == 0x000F
-
- assert( 0.0f <= shoveComponents[0] && shoveComponents[0] <= 1.0f );
- assert( 0.0f <= shoveComponents[1] && shoveComponents[1] <= 1.0f );
- assert( 0.0f <= shoveComponents[2] && shoveComponents[2] <= 1.0f );
- assert( 0.0f <= shoveComponents[3] && shoveComponents[3] <= 1.0f );
-
- // due to limited precision, need to round before shoving
- long uint = (((int)((shoveComponents[0] * 255) + 0.5f) ) & 0x000000FF );
- uint |= (((int)((shoveComponents[1] * 255) + 0.5f) << 8) & 0x0000FF00 );
- uint |= (((int)((shoveComponents[2] * 255) + 0.5f) << 16) & 0x00FF0000 );
- uint |= (((int)((shoveComponents[3] * 255) + 0.5f) << 24) & 0xFF000000 );
- packedPixel.asIntBuffer().put( index, (int)uint );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractFloat.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractFloat.java
deleted file mode 100644
index 8f093d1be..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractFloat.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class ExtractFloat implements ExtractPrimitive {
-
- /** Creates a new instance of ExtractFloat */
- public ExtractFloat() {
- }
-
- public double extract( boolean isSwap, ByteBuffer data ) {
- float f = 0;
- if( isSwap ) {
- f = Mipmap.GLU_SWAP_4_BYTES( data.getInt() );
- } else {
- f = data.getInt();
- }
- assert( f <= 1.0f );
- return( f );
- }
-
- public void shove( double value, int index, ByteBuffer data ) {
- assert(0.0 <= value && value < 1.0);
- data.asFloatBuffer().put( index, (float)value );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractPrimitive.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractPrimitive.java
deleted file mode 100644
index f7f15451d..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractPrimitive.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public interface ExtractPrimitive {
- public double extract( boolean isSwap, ByteBuffer pointer );
- public void shove( double value, int index, ByteBuffer pointer );
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractSByte.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractSByte.java
deleted file mode 100644
index bfb34f078..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractSByte.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public class ExtractSByte implements ExtractPrimitive {
-
- /** Creates a new instance of ExtractUByte */
- public ExtractSByte() {
- }
-
- public double extract( boolean isSwap, ByteBuffer sbyte ) {
- byte b = sbyte.get();
- assert( b <= 127 );
- return( b );
- }
-
- public void shove( double value, int index, ByteBuffer data ) {
- data.position( index );
- data.put( (byte)value );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractSInt.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractSInt.java
deleted file mode 100644
index 16c14152b..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractSInt.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class ExtractSInt implements ExtractPrimitive {
-
- /** Creates a new instance of ExtractSInt */
- public ExtractSInt() {
- }
-
- public double extract( boolean isSwap, ByteBuffer uint ) {
- int i = 0;
- if( isSwap ) {
- i = Mipmap.GLU_SWAP_4_BYTES( uint.getInt() );
- } else {
- i = uint.getInt();
- }
- assert( i <= 0x7FFFFFFF );
- return( i );
- }
-
- public void shove( double value, int index, ByteBuffer data ) {
- assert(0.0 <= value && value < Integer.MAX_VALUE);
- IntBuffer ib = data.asIntBuffer();
- ib.position( index );
- ib.put( (int)value );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractSShort.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractSShort.java
deleted file mode 100644
index 2e3d5683f..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractSShort.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class ExtractSShort implements ExtractPrimitive {
-
- /** Creates a new instance of ExtractSShort */
- public ExtractSShort() {
- }
-
- public double extract( boolean isSwap, ByteBuffer ushort ) {
- short s = 0;
- if( isSwap ) {
- s = Mipmap.GLU_SWAP_2_BYTES( ushort.getShort() );
- } else {
- s = ushort.getShort();
- }
- assert( s <= 32767 );
- return( s );
- }
-
- public void shove( double value, int index, ByteBuffer data ) {
- assert(0.0 <= value && value < 32768.0);
- ShortBuffer sb = data.asShortBuffer();
- sb.position( index );
- sb.put( (short)value );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractUByte.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractUByte.java
deleted file mode 100644
index 1e2a3ff4e..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractUByte.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.ByteBuffer;
-
-/**
- *
- * @author Administrator
- */
-public class ExtractUByte implements ExtractPrimitive {
-
- /** Creates a new instance of ExtractUByte */
- public ExtractUByte() {
- }
-
- public double extract( boolean isSwap, ByteBuffer ubyte ) {
- int i = 0x000000FF & ubyte.get();
- assert( i <= 255 );
- return( i );
- }
-
- public void shove( double value, int index, ByteBuffer data ) {
- assert(0.0 <= value && value < 256.0);
- data.position( index );
- data.put( (byte)value );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractUInt.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractUInt.java
deleted file mode 100644
index 724994e61..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractUInt.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class ExtractUInt implements ExtractPrimitive {
-
- /** Creates a new instance of ExtractUInt */
- public ExtractUInt() {
- }
-
- public double extract( boolean isSwap, ByteBuffer uint ) {
- long i = 0;
- if( isSwap ) {
- i = 0xFFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( uint.getInt() );
- } else {
- i = 0xFFFFFFFF & uint.getInt();
- }
- assert( i <= 0xFFFFFFFF );
- return( i );
- }
-
- public void shove( double value, int index, ByteBuffer data ) {
- assert(0.0 <= value && value < 0xFFFFFFFF);
- IntBuffer ib = data.asIntBuffer();
- ib.position( index );
- ib.put( (int)value );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ExtractUShort.java b/src/classes/com/sun/opengl/impl/mipmap/ExtractUShort.java
deleted file mode 100644
index 2b2006a29..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ExtractUShort.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class ExtractUShort implements ExtractPrimitive {
-
- /** Creates a new instance of ExtracUShort */
- public ExtractUShort() {
- }
-
- public double extract( boolean isSwap, ByteBuffer ushort ) {
- int i = 0;
- if( isSwap ) {
- i = 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( ushort.getShort() );
- } else {
- i = 0x0000FFFF & ushort.getShort();
- }
- assert( i <= 65535 );
- return( i );
- }
-
- public void shove( double value, int index, ByteBuffer data ) {
- assert(0.0 <= value && value < 65536.0);
- ShortBuffer sb = data.asShortBuffer();
- sb.position( index );
- sb.put( (short)value );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/HalveImage.java b/src/classes/com/sun/opengl/impl/mipmap/HalveImage.java
deleted file mode 100644
index 34a0ddb87..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/HalveImage.java
+++ /dev/null
@@ -1,1533 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import javax.media.opengl.GL;
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class HalveImage {
-
- private static final int BOX2 = 2;
- private static final int BOX4 = 4;
- private static final int BOX8 = 8;
-
- public static void halveImage( int components, int width, int height,
- ShortBuffer datain, ShortBuffer dataout ) {
- int i, j, k;
- int newwidth, newheight;
- int delta;
- int t = 0;
- short temp = 0;
-
- newwidth = width / 2;
- newheight = height /2;
- delta = width * components;
-
- // Piece of cake
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = datain.get();
- datain.position( t + components );
- temp += datain.get();
- datain.position( t + delta );
- temp += datain.get();
- datain.position( t + delta + components );
- temp +=datain.get();
- temp += 2;
- temp /= 4;
- dataout.put( temp );
- t++;
- }
- t += components;
- }
- t += delta;
- }
- }
-
- public static void halveImage_ubyte( int components, int width, int height,
- ByteBuffer datain, ByteBuffer dataout,
- int element_size, int ysize, int group_size ) {
- int i, j, k;
- int newwidth, newheight;
- int s;
- int t;
-
- // Handle case where there is only 1 column/row
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) ); // can't be 1x1
- halve1Dimage_ubyte( components, width, height, datain, dataout, element_size, ysize, group_size );
- return;
- }
-
- newwidth = width / 2;
- newheight = height / 2;
- s = 0;
- t = 0;
-
- int temp = 0;
- // piece of cake
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = ( 0x000000FF & datain.get() );
- datain.position( t + group_size );
- temp += ( 0x000000FF & datain.get() );
- datain.position( t + ysize );
- temp += ( 0x000000FF & datain.get() );
- datain.position( t + ysize + group_size );
- temp += ( 0x000000FF & datain.get() ) + 2;
- dataout.put( (byte)(temp / 4) );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- }
-
- public static void halve1Dimage_ubyte( int components, int width, int height,
- ByteBuffer datain, ByteBuffer dataout,
- int element_size, int ysize, int group_size ) {
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int dest = 0;
- int jj;
- int temp = 0;
-
- assert( width == 1 || height == 1 ); // Must be 1D
- assert( width != height ); // can't be square
-
- if( height == 1 ) { // 1 row
- assert( width != 1 ); // widthxheight can't be 1x1
- halfHeight = 1;
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- datain.position( src );
- temp = ( 0x000000FF & datain.get() );
- datain.position( src + group_size );
- temp += ( 0x000000FF & datain.get() );
- temp /= 2;
- dataout.put( (byte)temp );
- /*
- dataout.setByte( (byte)(((0x000000FF & datain.setIndexInBytes(src).getByte()) +
- (0x000000FF & datain.setIndexInBytes( src + group_size ).getByte())) / 2 ) );
- */
- src += element_size;
- //dataout.plusPlus();
- dest++;
- }
- src += group_size; // skip to next 2
- }
- int padBytes = ysize - ( width * group_size );
- src += padBytes; // for assertion only
- } else if( width == 1 ) { // 1 column
- int padBytes = ysize - ( width * group_size );
- assert( height != 1 );
- halfWidth = 1;
- // one vertical column with possible pad bytes per row
- // average two at a time
- for( jj = 0; jj < halfHeight; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- datain.position( src );
- temp = ( 0x000000FF & datain.get() );
- datain.position( src + ysize );
- temp += ( 0x000000FF & datain.get() );
- temp /= 2;
- dataout.put( (byte)temp );
- /*
- dataout.setByte( (byte)(((0x000000FF & datain.setIndexInBytes(src).getByte()) +
- (0x000000FF & datain.setIndexInBytes(src + ysize).getByte()) ) / 2 ) );
- */
- src += element_size;
- //dataout.plusPlus();
- dest++;
- }
- src += padBytes; // add pad bytes, if any, to get to end of row
- src += ysize;
- }
- }
- assert( src == ysize * height );
- assert( dest == components * element_size * halfWidth * halfHeight );
- }
-
- public static void halveImage_byte( int components, int width, int height,
- ByteBuffer datain, ByteBuffer dataout, int element_size,
- int ysize, int group_size ) {
- int i, j, k;
- int newwidth, newheight;
- int s = 0;
- int t = 0;
- byte temp = (byte)0;
-
- // handle case where there is only 1 column
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) );
- halve1Dimage_byte( components, width, height, datain, dataout, element_size,
- ysize, group_size );
- return;
- }
-
- newwidth = width / 2;
- newheight = height / 2;
-
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = datain.get();
- datain.position( t + group_size );
- temp += datain.get();
- datain.position( t + ysize );
- temp += datain.get();
- datain.position( t + ysize + group_size );
- temp += datain.get();
- temp += 2;
- temp /= 4;
- dataout.put( temp );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- }
-
- public static void halve1Dimage_byte( int components, int width, int height,
- ByteBuffer datain, ByteBuffer dataout,
- int element_size, int ysize, int group_size ) {
- int halfWidth = width / 2;
- int halfHeight = width / 2;
- int src = 0;
- int dest = 0;
- int jj;
- byte temp = (byte)0;
-
- assert( width == 1 || height == 1 ); // must be 1D
- assert( width != height ); // can't be square
-
- if( height == 1 ) { // 1 row
- assert( width != 1 ); // widthxheight can't be 1
- halfHeight = 1;
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- datain.position( src );
- temp = datain.get();
- datain.position( src + group_size );
- temp += datain.get();
- temp /= 2;
- dataout.put( temp );
- src += element_size;
- dest++;
- }
- src += group_size; // skip to next 2
- }
- int padBytes = ysize - ( width * group_size );
- src += padBytes; // for assert only
- } else if( width == 1 ) { // 1 column
- int padBytes = ysize - ( width * group_size );
- assert( height != 1 ); // widthxheight can't be 1
- halfWidth = 1;
- // one vertical column with possible pad bytes per row
- // average two at a time
-
- for( jj = 0; jj < halfHeight; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- datain.position( src );
- temp = datain.get();
- datain.position( src + ysize );
- temp += datain.get();
- temp /= 2;
- src += element_size;
- dest++;
- }
- src += padBytes; // add pad bytes, if any, to get to end of row
- src += ysize;
- }
- assert( src == ysize * height );
- }
- assert( dest == components * element_size * halfWidth * halfHeight );
- }
-
- public static void halveImage_ushort( int components, int width, int height,
- ByteBuffer datain, ShortBuffer dataout, int element_size,
- int ysize, int group_size, boolean myswap_bytes ) {
- int i, j, k, l;
- int newwidth, newheight;
- int s = 0;
- int t = 0;
- int temp = 0;
- // handle case where there is only 1 column/row
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) ); // can't be 1x1
- halve1Dimage_ushort( components, width, height, datain, dataout, element_size,
- ysize, group_size, myswap_bytes );
- return;
- }
-
- newwidth = width / 2;
- newheight = height / 2;
-
- // Piece of cake
- if( !myswap_bytes ) {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = ( 0x0000FFFF & datain.getShort() );
- datain.position( t + group_size );
- temp += ( 0x0000FFFF & datain.getShort() );
- datain.position( t + ysize );
- temp += ( 0x0000FFFF & datain.getShort() );
- datain.position( t + ysize + group_size );
- temp += ( 0x0000FFFF & datain.getShort() );
- dataout.put( (short)( ( temp + 2 ) / 4 ) );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- } else {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- datain.position( t + group_size );
- temp += ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- datain.position( t + ysize );
- temp += ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- datain.position( t + ysize + group_size );
- temp += ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- dataout.put( (short)( ( temp + 2 ) / 4 ) );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- }
- }
-
- public static void halve1Dimage_ushort( int components, int width, int height,
- ByteBuffer datain, ShortBuffer dataout, int element_size,
- int ysize, int group_size, boolean myswap_bytes ) {
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int dest = 0;
- int jj;
-
- assert( width == 1 || height == 1 ); // must be 1D
- assert( width != height ); // can't be square
-
- if( height == 1 ) { // 1 row
- assert( width != 1 ); // widthxheight can't be 1
- halfHeight = 1;
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- int kk;
- for( kk = 0; kk < halfHeight; kk++ ) {
- int[] ushort = new int[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- ushort[0] = ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- datain.position( src + group_size );
- ushort[1] = (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- } else {
- datain.position( src );
- ushort[0] = (0x0000FFFF & datain.getShort() );
- datain.position( src + group_size );
- ushort[1] = (0x0000FFFF & datain.getShort() );
- }
- dataout.put( (short)( (ushort[0] + ushort[1]) / 2 ) );
- src += element_size;
- dest += 2;
- }
- src += group_size; // skip to next 2
- }
- int padBytes = ysize - ( width * group_size );
- src += padBytes; // for assertion only
- } else if( width == 1 ) { // 1 column
- int padBytes = ysize - ( width * group_size );
- assert( height != 1 ); // widthxheight can't be 1
- halfWidth = 1;
- // one vertical column with possible pad bytes per row
- // average two at a time
-
- for( jj = 0; jj < halfHeight; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- int[] ushort = new int[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- ushort[0] = ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- datain.position( src + ysize );
- ushort[0] = ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ) );
- } else {
- datain.position( src );
- ushort[0] = ( 0x0000FFFF & datain.getShort() );
- datain.position( src + ysize );
- ushort[1] = ( 0x0000FFFF & datain.getShort() );
- }
- dataout.put( (short)((ushort[0] + ushort[1]) / 2) );
- src += element_size;
- dest += 2;
- }
- src += padBytes; // add pad bytes, if any, to get to end of row
- src += ysize;
- }
- assert( src == ysize * height );
- }
- assert( dest == components * element_size * halfWidth * halfHeight );
- }
-
- public static void halveImage_short( int components, int width, int height,
- ByteBuffer datain, ShortBuffer dataout, int element_size,
- int ysize, int group_size, boolean myswap_bytes ) {
- int i, j, k, l;
- int newwidth, newheight;
- int s = 0;
- int t = 0;
- short temp = (short)0;
- // handle case where there is only 1 column/row
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) ); // can't be 1x1
- halve1Dimage_short( components, width, height, datain, dataout, element_size,
- ysize, group_size, myswap_bytes );
- return;
- }
-
- newwidth = width / 2;
- newheight = height / 2;
-
- // Piece of cake
- if( !myswap_bytes ) {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = datain.getShort();
- datain.position( t + group_size );
- temp += datain.getShort();
- datain.position( t + ysize );
- temp += datain.getShort();
- datain.position( t + ysize + group_size );
- temp += datain.getShort();
- temp += 2;
- temp /= 4;
- dataout.put( (short)temp );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- } else {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- short b;
- int buf;
- datain.position( t );
- temp = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- datain.position( t + group_size );
- temp += Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- datain.position( t + ysize );
- temp += Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- datain.position( t + ysize + group_size );
- temp += Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- temp += 2;
- temp /= 4;
- dataout.put( temp );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- }
- }
-
- public static void halve1Dimage_short( int components, int width, int height,
- ByteBuffer datain, ShortBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int dest = 0;
- int jj;
-
- assert( width == 1 || height == 1 ); // must be 1D
- assert( width != height ); // can't be square
-
- if( height == 1 ) { // 1 row
- assert( width != 1 ); // can't be 1x1
- halfHeight = 1;
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- short[] sshort = new short[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- sshort[0] = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- datain.position( src + group_size );
- sshort[1] = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- } else {
- datain.position( src );
- sshort[0] = datain.getShort();
- datain.position( src + group_size );
- sshort[1] = datain.getShort();
- }
- dataout.put( (short)(( sshort[0] + sshort[1] ) / 2) );
- src += element_size;
- dest += 2;
- }
- src += group_size; // skip to next 2
- }
- int padBytes = ysize - ( width * group_size );
- src += padBytes; // for assertion only
- } else if( width == 1 ) {
- int padBytes = ysize - ( width * group_size );
- assert( height != 1 );
- halfWidth = 1;
- // one vertical column with possible pad bytes per row
- // average two at a time
-
- for( jj = 0; jj < halfHeight; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- short[] sshort = new short[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- sshort[0] = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- datain.position( src + ysize );
- sshort[1] = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- } else {
- datain.position( src );
- sshort[0] = datain.getShort();
- datain.position( src + ysize );
- sshort[1] = datain.getShort();
- }
- dataout.put( (short)(( sshort[0] + sshort[1] ) / 2) );
- src += element_size;
- dest += 2;
- }
- src += padBytes; // add pad bytes, if any, to get to end of row
- src += ysize;
- }
- assert( src == ysize * height );
- }
- assert( dest == ( components * element_size * halfWidth * halfHeight ) );
- }
-
- public static void halveImage_uint( int components, int width, int height,
- ByteBuffer datain, IntBuffer dataout, int element_size,
- int ysize, int group_size, boolean myswap_bytes ) {
- int i, j, k, l;
- int newwidth, newheight;
- int s = 0;
- int t = 0;
- double temp = 0;
-
- // handle case where there is only 1 column/row
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) ); // can't be 1x1
- halve1Dimage_uint( components, width, height, datain, dataout, element_size,
- ysize, group_size, myswap_bytes );
- return;
- }
-
- newwidth = width / 2;
- newheight = height / 2;
-
- // Piece of cake
- if( !myswap_bytes ) {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = (0x000000007FFFFFFFL & datain.getInt() );
- datain.position( t + group_size );
- temp += (0x000000007FFFFFFFL & datain.getInt() );
- datain.position( t + ysize );
- temp += (0x000000007FFFFFFFL & datain.getInt() );
- datain.position( t + ysize + group_size );
- temp += (0x000000007FFFFFFFL & datain.getInt() );
- dataout.put( (int)( ( temp / 4 ) + 0.5 ) );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- } else {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- // need to cast to double to hold large unsigned ints
- double buf;
- datain.position( t );
- buf = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- datain.position( t + group_size );
- buf += ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- datain.position( t + ysize );
- buf += ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- datain.position( t + ysize + group_size );
- buf += ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- temp /= 4;
- temp += 0.5;
- dataout.put( (int)temp );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- }
- }
-
- public static void halve1Dimage_uint( int components, int width, int height,
- ByteBuffer datain, IntBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int dest = 0;
- int jj;
-
- assert( width == 1 || height == 1 ); // must be 1D
- assert( width != height ); // can't be square
-
- if( height == 1 ) { // 1 row
- assert( width != 1 ); // widthxheight can't be 1
- halfHeight = 1;
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- int kk;
- for( kk = 0; kk < halfHeight; kk++ ) {
- long[] uint = new long[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- datain.position( src + group_size );
- uint[1] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- } else {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & datain.getInt() );
- datain.position( src + group_size );
- uint[1] = (0x00000000FFFFFFFF & datain.getInt() );
- }
- dataout.put( (int)( ( uint[0] + uint[1] ) / 2.0 ) );
- src += element_size;
- dest += 4;
- }
- src += group_size; // skip to next 2
- }
- int padBytes = ysize - ( width * group_size );
- src += padBytes; // for assertion only
- } else if( width == 1 ) { // 1 column
- int padBytes = ysize - ( width * group_size );
- assert( height != 1 ); // widthxheight can't be 1
- halfWidth = 1;
- // one vertical column with possible pad bytes per row
- // average two at a time
-
- for( jj = 0; jj < halfHeight; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- long[] uint = new long[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- datain.position( src + group_size );
- uint[0] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- } else {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & datain.getInt() );
- datain.position( src + ysize );
- uint[1] = ( 0x00000000FFFFFFFF & datain.getInt() );
- }
- dataout.put( (int)( ( uint[0] + uint[1] ) / 2.0 ) );
- src += element_size;
- dest += 4;
- }
- src += padBytes; // add pad bytes, if any, to get to end of row
- src += ysize;
- }
- assert( src == ysize * height );
- }
- assert( dest == components * element_size * halfWidth * halfHeight );
- }
-
- public static void halveImage_int( int components, int width, int height,
- ByteBuffer datain, IntBuffer dataout, int element_size,
- int ysize, int group_size, boolean myswap_bytes ) {
- int i, j, k, l;
- int newwidth, newheight;
- int s = 0;
- int t = 0;
- int temp = 0;
-
- // handle case where there is only 1 column/row
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) ); // can't be 1x1
- halve1Dimage_int( components, width, height, datain, dataout, element_size,
- ysize, group_size, myswap_bytes );
- return;
- }
-
- newwidth = width / 2;
- newheight = height / 2;
-
- // Piece of cake
- if( !myswap_bytes ) {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = datain.getInt();
- datain.position( t + group_size );
- temp += datain.getInt();
- datain.position( t + ysize );
- temp += datain.getInt();
- datain.position( t + ysize + group_size );
- temp += datain.getInt();
- temp = (int)( ( temp / 4.0f ) + 0.5f );
- dataout.put( temp );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- } else {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- long b;
- float buf;
- datain.position( t );
- b = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- buf = b;
- datain.position( t + group_size );
- b = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- buf += b;
- datain.position( t + ysize );
- b = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- buf += b;
- datain.position( t + ysize + group_size );
- b = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- buf += b;
- dataout.put( (int)( ( buf / 4.0f ) + 0.5f ) );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- }
- }
-
- public static void halve1Dimage_int( int components, int width, int height,
- ByteBuffer datain, IntBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int dest = 0;
- int jj;
-
- assert( width == 1 || height == 1 ); // must be 1D
- assert( width != height ); // can't be square
-
- if( height == 1 ) { // 1 row
- assert( width != 1 ); // can't be 1x1
- halfHeight = 1;
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- long[] uint = new long[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- datain.position( src + group_size );
- uint[1] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- } else {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & datain.getInt() );
- datain.position( src + group_size );
- uint[1] = ( 0x00000000FFFFFFFF & datain.getInt() );
- }
- dataout.put( (int)( ( (float)uint[0] + (float)uint[1] ) / 2.0f) );
- src += element_size;
- dest += 4;
- }
- src += group_size; // skip to next 2
- }
- int padBytes = ysize - ( width * group_size );
- src += padBytes; // for assertion only
- } else if( width == 1 ) {
- int padBytes = ysize - ( width * group_size );
- assert( height != 1 );
- halfWidth = 1;
- // one vertical column with possible pad bytes per row
- // average two at a time
-
- for( jj = 0; jj < halfHeight; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- long[] uint = new long[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- datain.position( src + ysize );
- uint[1] = ( 0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt() ) );
- } else {
- datain.position( src );
- uint[0] = ( 0x00000000FFFFFFFF & datain.getInt() );
- datain.position( src + ysize );
- uint[1] = ( 0x00000000FFFFFFFF & datain.getInt() );
- }
- dataout.put( (int)(( (float)uint[0] + (float)uint[1] ) / 2.0f) );
- src += element_size;
- dest += 4;
- }
- src += padBytes; // add pad bytes, if any, to get to end of row
- src += ysize;
- }
- assert( src == ysize * height );
- }
- assert( dest == ( components * element_size * halfWidth * halfHeight ) );
- }
-
- public static void halveImage_float( int components, int width, int height,
- ByteBuffer datain, FloatBuffer dataout, int element_size,
- int ysize, int group_size, boolean myswap_bytes ) {
- int i, j, k, l;
- int newwidth, newheight;
- int s = 0;
- int t = 0;
- float temp = 0.0f;
- // handle case where there is only 1 column/row
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) ); // can't be 1x1
- halve1Dimage_float( components, width, height, datain, dataout, element_size,
- ysize, group_size, myswap_bytes );
- return;
- }
-
- newwidth = width / 2;
- newheight = height / 2;
-
- // Piece of cake
- if( !myswap_bytes ) {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- datain.position( t );
- temp = datain.getFloat();
- datain.position( t + group_size );
- temp += datain.getFloat();
- datain.position( t + ysize );
- temp += datain.getFloat();
- datain.position( t + ysize + group_size );
- temp /= 4.0f;
- dataout.put( temp );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- } else {
- for( i = 0; i < newheight; i++ ) {
- for( j = 0; j < newwidth; j++ ) {
- for( k = 0; k < components; k++ ) {
- float buf;
- datain.position( t );
- buf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- datain.position( t + group_size );
- buf += Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- datain.position( t + ysize );
- buf += Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- datain.position( t + ysize + group_size );
- buf += Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- dataout.put( buf / 4.0f );
- t += element_size;
- }
- t += group_size;
- }
- t += ysize;
- }
- }
- }
-
- public static void halve1Dimage_float( int components, int width, int height,
- ByteBuffer datain, FloatBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int dest = 0;
- int jj;
-
- assert( width == 1 || height == 1 ); // must be 1D
- assert( width != height ); // can't be square
-
- if( height == 1 ) { // 1 row
- assert( width != 1 ); // can't be 1x1
- halfHeight = 1;
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- float[] sfloat = new float[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- sfloat[0] = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- datain.position( src + group_size );
- sfloat[1] = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- } else {
- datain.position( src );
- sfloat[0] = datain.getFloat();
- datain.position( src + group_size );
- sfloat[1] = datain.getFloat();
- }
- dataout.put( (sfloat[0] + sfloat[1]) / 2.0f );
- src += element_size;
- dest += 4;
- }
- src += group_size; // skip to next 2
- }
- int padBytes = ysize - ( width * group_size );
- src += padBytes; // for assertion only
- } else if( width == 1 ) {
- int padBytes = ysize - ( width * group_size );
- assert( height != 1 );
- halfWidth = 1;
- // one vertical column with possible pad bytes per row
- // average two at a time
-
- for( jj = 0; jj < halfHeight; jj++ ) {
- int kk;
- for( kk = 0; kk < components; kk++ ) {
- float[] sfloat = new float[BOX2];
- if( myswap_bytes ) {
- datain.position( src );
- sfloat[0] = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- datain.position( src + ysize );
- sfloat[1] = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- } else {
- datain.position( src );
- sfloat[0] = datain.getFloat();
- datain.position( src + ysize );
- sfloat[1] = datain.getFloat();
- }
- dataout.put( ( sfloat[0] + sfloat[1] ) / 2.0f );
- src += element_size;
- dest += 4;
- }
- src += padBytes; // add pad bytes, if any, to get to end of row
- src += ysize;
- }
- assert( src == ysize * height );
- }
- assert( dest == ( components * element_size * halfWidth * halfHeight ) );
- }
-
- public static void halveImagePackedPixel( int components, Extract extract, int width,
- int height, ByteBuffer datain, ByteBuffer dataout,
- int pixelSizeInBytes, int rowSizeInBytes, boolean isSwap ) {
- if( width == 1 || height == 1 ) {
- assert( !( width == 1 && height == 1 ) );
- halve1DimagePackedPixel( components, extract, width, height, datain, dataout,
- pixelSizeInBytes, rowSizeInBytes, isSwap );
- return;
- }
- int ii, jj;
-
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int padBytes = rowSizeInBytes - ( width * pixelSizeInBytes );
- int outIndex = 0;
-
- for( ii = 0; ii < halfHeight; ii++ ) {
- for( jj = 0; jj < halfWidth; jj++ ) {
- float totals[] = new float[4];
- float extractTotals[][] = new float[BOX4][4];
- int cc;
-
- datain.position( src );
- extract.extract( isSwap, datain, extractTotals[0] );
- datain.position( src + pixelSizeInBytes );
- extract.extract( isSwap, datain, extractTotals[1] );
- datain.position( src + rowSizeInBytes );
- extract.extract( isSwap, datain, extractTotals[2] );
- datain.position( src + rowSizeInBytes + pixelSizeInBytes );
- extract.extract( isSwap, datain, extractTotals[3] );
- for( cc = 0; cc < components; cc++ ) {
- int kk = 0;
- // grab 4 pixels to average
- totals[cc] = 0.0f;
- for( kk = 0; kk < BOX4; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= BOX4;
- }
- extract.shove( totals, outIndex, dataout );
- outIndex++;
- src += pixelSizeInBytes + pixelSizeInBytes;
- }
- // skip past pad bytes, if any, to get to next row
- src += padBytes;
- src += rowSizeInBytes;
- }
- assert( src == rowSizeInBytes * height );
- assert( outIndex == halfWidth * halfHeight );
- }
-
- public static void halve1DimagePackedPixel( int components, Extract extract, int width,
- int height, ByteBuffer datain, ByteBuffer dataout,
- int pixelSizeInBytes, int rowSizeInBytes, boolean isSwap ) {
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int src = 0;
- int jj;
-
- assert( width == 1 || height == 1 );
- assert( width != height );
-
- if( height == 1 ) {
- int outIndex = 0;
-
- assert( width != 1 );
- halfHeight = 1;
-
- // one horizontal row with possible pad bytes
-
- for( jj = 0; jj < halfWidth; jj++ ) {
- float[] totals = new float[4];
- float[][] extractTotals = new float[BOX2][4];
- int cc;
-
- datain.position( src );
- extract.extract( isSwap, datain, extractTotals[0] );
- datain.position( src + pixelSizeInBytes );
- extract.extract( isSwap, datain, extractTotals[1] );
- for( cc = 0; cc < components; cc++ ) {
- int kk = 0;
- // grab 4 pixels to average
- totals[cc] = 0.0f;
- for( kk = 0; kk < BOX2; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= BOX2;
- }
- extract.shove( totals, outIndex, dataout );
- outIndex++;
- // skip over to next group of 2
- src += pixelSizeInBytes + pixelSizeInBytes;
- }
- int padBytes = rowSizeInBytes - ( width * pixelSizeInBytes );
- src += padBytes;
-
- assert( src == rowSizeInBytes );
- assert( outIndex == halfWidth * halfHeight );
- } else if( width == 1 ) {
- int outIndex = 0;
-
- assert( height != 1 );
- halfWidth = 1;
- // one vertical volumn with possible pad bytes per row
- // average two at a time
-
- for( jj = 0; jj < halfHeight; jj++ ) {
- float[] totals = new float[4];
- float[][] extractTotals = new float[BOX2][4];
- int cc;
- // average two at a time, instead of four
- datain.position( src );
- extract.extract( isSwap, datain, extractTotals[0] );
- datain.position( src + rowSizeInBytes );
- extract.extract( isSwap, datain, extractTotals[1] );
- for( cc = 0; cc < components; cc++ ) {
- int kk = 0;
- // grab 4 pixels to average
- totals[cc] = 0.0f;
- for( kk = 0; kk < BOX2; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= BOX2;
- }
- extract.shove( totals, outIndex, dataout );
- outIndex++;
- // skip over to next group of 2
- src += rowSizeInBytes + rowSizeInBytes;
- }
- assert( src == rowSizeInBytes );
- assert( outIndex == halfWidth * halfHeight );
- }
- }
-
- public static void halveImagePackedPixelSlice( int components, Extract extract,
- int width, int height, int depth, ByteBuffer dataIn,
- ByteBuffer dataOut, int pixelSizeInBytes, int rowSizeInBytes,
- int imageSizeInBytes, boolean isSwap ) {
- int ii, jj;
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int halfDepth = depth / 2;
- int src = 0;
- int padBytes = rowSizeInBytes - ( width * pixelSizeInBytes );
- int outIndex = 0;
-
- assert( (width == 1 || height == 1) && depth >= 2 );
-
- if( width == height ) {
- assert( width == 1 && height == 1 );
- assert( depth >= 2 );
-
- for( ii = 0; ii < halfDepth; ii++ ) {
- float totals[] = new float[4];
- float extractTotals[][] = new float[BOX2][4];
- int cc;
-
- dataIn.position( src );
- extract.extract( isSwap, dataIn, extractTotals[0] );
- dataIn.position( src + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[1] );
-
- for( cc = 0; cc < components; cc++ ) {
- int kk;
-
- // average only 2 pixels since a column
- totals[cc]= 0.0f;
- for( kk = 0; kk < BOX2; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= BOX2;
- } // for cc
-
- extract.shove( totals, outIndex, dataOut );
- outIndex++;
- // skip over to next group of 2
- src += imageSizeInBytes + imageSizeInBytes;
- } // for ii
- } else if( height == 1 ) {
- assert( width != 1 );
-
- for( ii = 0; ii < halfDepth; ii++ ) {
- for( jj = 0; jj < halfWidth; jj++ ) {
- float totals[] = new float[4];
- float extractTotals[][] = new float[BOX4][4];
- int cc;
-
- dataIn.position( src );
- extract.extract( isSwap, dataIn, extractTotals[0] );
- dataIn.position( src + pixelSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[1] );
- dataIn.position( src + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[2] );
- dataIn.position( src + pixelSizeInBytes + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[3] );
-
- for( cc = 0; cc < components; cc++ ) {
- int kk;
-
- // grab 4 pixels to average
- totals[cc] = 0.0f;
- for( kk = 0; kk < BOX4; kk++ ) {
- totals[cc]+= extractTotals[kk][cc];
- }
- totals[cc]/= (float)BOX4;
- }
- extract.shove( totals, outIndex, dataOut );
- outIndex++;
- // skip over to next horizontal square of 4
- src += imageSizeInBytes + imageSizeInBytes;
- }
- }
- } else if( width == 1 ) {
- assert( height != 1 );
-
- for( ii = 0; ii < halfDepth; ii++ ) {
- for( jj = 0; jj < halfWidth; jj++ ) {
- float totals[] = new float[4];
- float extractTotals[][] = new float[BOX4][4];
- int cc;
-
- dataIn.position( src );
- extract.extract( isSwap, dataIn, extractTotals[0] );
- dataIn.position( src + rowSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[1] );
- dataIn.position( src + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[2] );
- dataIn.position( src + rowSizeInBytes + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[3] );
-
- for( cc = 0; cc < components; cc++ ) {
- int kk;
-
- // grab 4 pixels to average
- totals[cc] = 0.0f;
- for( kk = 0; kk < BOX4; kk++ ) {
- totals[cc]+= extractTotals[kk][cc];
- }
- totals[cc]/= (float)BOX4;
- }
- extract.shove( totals, outIndex, dataOut );
- outIndex++;
- // skip over to next horizontal square of 4
- src += imageSizeInBytes + imageSizeInBytes;
- }
- }
- }
- }
-
- public static void halveImageSlice( int components, ExtractPrimitive extract, int width,
- int height, int depth, ByteBuffer dataIn, ByteBuffer dataOut,
- int elementSizeInBytes, int groupSizeInBytes, int rowSizeInBytes,
- int imageSizeInBytes, boolean isSwap ) {
- int ii, jj;
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int halfDepth = depth / 2;
- int src = 0;
- int padBytes = rowSizeInBytes - ( width * groupSizeInBytes );
- int outIndex = 0;
-
- assert( (width == 1 || height == 1) && depth >= 2 );
-
- if( width == height ) {
- assert( width == 1 && height == 1 );
- assert( depth >= 2 );
-
- for( ii = 0; ii < halfDepth; ii++ ) {
- int cc;
- for( cc = 0; cc < components; cc++ ) {
- double[] totals = new double[4];
- double[][] extractTotals = new double[BOX2][4];
- int kk;
-
- dataIn.position( src );
- extractTotals[0][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + imageSizeInBytes );
- extractTotals[1][cc] = extract.extract( isSwap, dataIn );
-
- // average 2 pixels since only a column
- totals[cc] = 0.0f;
- // totals[red] = extractTotals[0][red] + extractTotals[1][red];
- // totals[red] = red / 2;
- for( kk = 0; kk < BOX2; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= (double)BOX2;
-
- extract.shove( totals[cc], outIndex, dataOut );
- outIndex++;
- src += elementSizeInBytes;
- } // for cc
- // skip over next group of 2
- src += rowSizeInBytes;
- } // for ii
-
- assert( src == rowSizeInBytes * height * depth );
- assert( outIndex == halfDepth * components );
- } else if( height == 1 ) {
- assert( width != 1 );
-
- for( ii = 0; ii < halfDepth; ii++ ) {
- for( jj = 0; jj < halfWidth; jj++ ) {
- int cc;
- for( cc = 0; cc < components; cc++ ) {
- int kk;
- double totals[] = new double[4];
- double extractTotals[][] = new double[BOX4][4];
-
- dataIn.position( src );
- extractTotals[0][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + groupSizeInBytes );
- extractTotals[1][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + imageSizeInBytes );
- extractTotals[2][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + imageSizeInBytes + groupSizeInBytes );
- extractTotals[3][cc] = extract.extract( isSwap, dataIn );
-
- // grab 4 pixels to average
- totals[cc] = 0.0f;
- // totals[red] = extractTotals[0][red] + extractTotals[1][red] +
- // extractTotals[2][red] + extractTotals[3][red];
- // totals[red] /= (double)BOX4;
- for( kk = 0; kk < BOX4; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= (double)BOX4;
-
- extract.shove( totals[cc], outIndex, dataOut );
- outIndex++;
- src += elementSizeInBytes;
- } // for cc
- // skip over to next horizontal square of 4
- src += elementSizeInBytes;
- } // for jj
- src += padBytes;
- src += rowSizeInBytes;
- } // for ii
- assert( src == rowSizeInBytes * height * depth );
- assert( outIndex == halfWidth * halfDepth * components );
- } else if( width == 1 ) {
- assert( height != 1 );
-
- for( ii = 0; ii < halfDepth; ii++ ) {
- for( jj = 0; jj < halfHeight; jj++ ) {
- int cc;
- for( cc = 0; cc < components; cc++ ) {
- int kk;
- double totals[] = new double[4];
- double extractTotals[][] = new double[BOX4][4];
-
- dataIn.position( src );
- extractTotals[0][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + rowSizeInBytes );
- extractTotals[1][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + imageSizeInBytes );
- extractTotals[2][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + imageSizeInBytes + groupSizeInBytes );
- extractTotals[3][cc] = extract.extract( isSwap, dataIn );
-
-
- // grab 4 pixels to average
- totals[cc] = 0.0f;
- // totals[red] = extractTotals[0][red] + extractTotals[1][red] +
- // extractTotals[2][red] + extractTotals[3][red];
- // totals[red] /= (double)BOX4;
- for( kk = 0; kk < BOX4; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= (double)BOX4;
-
- extract.shove( totals[cc], outIndex, dataOut );
- outIndex++;
- src += elementSizeInBytes;
- } // for cc
- // skip over to next horizontal square of 4
- src += padBytes;
- src += rowSizeInBytes;
- } // for jj
- src += imageSizeInBytes;
- } // for ii
- assert( src == rowSizeInBytes * height * depth );
- assert( outIndex == halfWidth * halfDepth * components );
- }
- }
-
- public static void halveImage3D( int components, ExtractPrimitive extract,
- int width, int height, int depth, ByteBuffer dataIn, ByteBuffer dataOut,
- int elementSizeInBytes, int groupSizeInBytes, int rowSizeInBytes,
- int imageSizeInBytes, boolean isSwap ) {
- assert( depth > 1 );
-
- // horizontal/vertical/onecolumn slice viewed from top
- if( width == 1 || height == 1 ) {
- assert( 1 <= depth );
-
- halveImageSlice( components, extract, width, height, depth, dataIn, dataOut,
- elementSizeInBytes, groupSizeInBytes, rowSizeInBytes, imageSizeInBytes,
- isSwap );
- return;
- }
-
- int ii, jj, dd;
-
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int halfDepth = depth / 2;
- int src = 0;
- int padBytes = rowSizeInBytes - ( width * groupSizeInBytes );
- int outIndex = 0;
-
- for( dd = 0; dd < halfDepth; dd++ ) {
- for( ii = 0; ii < halfHeight; ii++ ) {
- for( jj = 0; jj < halfWidth; jj++ ) {
- int cc;
- for( cc = 0; cc < components; cc++ ) {
- int kk;
- double totals[] = new double[4];
- double extractTotals[][] = new double[BOX8][4];
-
- dataIn.position( src );
- extractTotals[0][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + groupSizeInBytes );
- extractTotals[1][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + rowSizeInBytes );
- extractTotals[2][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + rowSizeInBytes + groupSizeInBytes );
- extractTotals[3][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + imageSizeInBytes );
- extractTotals[4][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + groupSizeInBytes + imageSizeInBytes );
- extractTotals[5][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + rowSizeInBytes + imageSizeInBytes );
- extractTotals[6][cc] = extract.extract( isSwap, dataIn );
- dataIn.position( src + rowSizeInBytes + imageSizeInBytes + groupSizeInBytes );
- extractTotals[7][cc] = extract.extract( isSwap, dataIn );
-
- totals[cc] = 0.0f;
-
- for( kk = 0; kk < BOX8; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= (double)BOX8;
-
- extract.shove( totals[cc], outIndex, dataOut );
- outIndex++;
-
- src += elementSizeInBytes;
- } // for cc
- // skip over to next square of 4
- src += groupSizeInBytes;
- } // for jj
- // skip past pad bytes, if any, to get to next row
- src += padBytes;
- src += rowSizeInBytes;
- } // for ii
- src += imageSizeInBytes;
- } // for dd
- assert( src == rowSizeInBytes * height * depth );
- assert( outIndex == halfWidth * halfHeight * halfDepth * components );
- }
-
- public static void halveImagePackedPixel3D( int components, Extract extract,
- int width, int height, int depth, ByteBuffer dataIn,
- ByteBuffer dataOut, int pixelSizeInBytes, int rowSizeInBytes,
- int imageSizeInBytes, boolean isSwap ) {
- if( depth == 1 ) {
- assert( 1 <= width && 1 <= height );
-
- halveImagePackedPixel( components, extract, width, height, dataIn, dataOut,
- pixelSizeInBytes, rowSizeInBytes, isSwap );
- return;
- } else if( width == 1 || height == 1 ) { // a horizontal or vertical slice viewed from top
- assert( 1 <= depth );
-
- halveImagePackedPixelSlice( components, extract, width, height, depth, dataIn,
- dataOut, pixelSizeInBytes, rowSizeInBytes, imageSizeInBytes, isSwap );
- return;
- }
- int ii, jj, dd;
-
- int halfWidth = width / 2;
- int halfHeight = height / 2;
- int halfDepth = depth / 2;
- int src = 0;
- int padBytes = rowSizeInBytes - ( width * pixelSizeInBytes );
- int outIndex = 0;
-
- for( dd = 0; dd < halfDepth; dd++ ) {
- for( ii = 0; ii < halfHeight; ii++ ) {
- for( jj = 0; jj < halfWidth; jj++ ) {
- float totals[] = new float[4]; // 4 is max components
- float extractTotals[][] = new float[BOX8][4];
- int cc;
-
- dataIn.position( src );
- extract.extract( isSwap, dataIn, extractTotals[0] );
- dataIn.position( src + pixelSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[1] );
- dataIn.position( src + rowSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[2] );
- dataIn.position( src + rowSizeInBytes + pixelSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[3] );
- dataIn.position( src + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[4] );
- dataIn.position( src + pixelSizeInBytes + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[5] );
- dataIn.position( src + rowSizeInBytes + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[6] );
- dataIn.position( src + rowSizeInBytes + pixelSizeInBytes + imageSizeInBytes );
- extract.extract( isSwap, dataIn, extractTotals[7] );
-
- for( cc = 0; cc < components; cc++ ) {
- int kk;
- // grab 8 pixels to average
- totals[cc] = 0.0f;
- for( kk = 0; kk < BOX8; kk++ ) {
- totals[cc] += extractTotals[kk][cc];
- }
- totals[cc] /= (float)BOX8;
- }
- extract.shove( totals, outIndex, dataOut );
- outIndex++;
- // skip over to next square of 4
- src += pixelSizeInBytes + pixelSizeInBytes;
- }
- // skip past pad bytes, if any, to get to next row
- src += padBytes;
- src += rowSizeInBytes;
- }
- src += imageSizeInBytes;
- }
- assert( src == rowSizeInBytes * height * depth );
- assert( outIndex == halfWidth * halfHeight * halfDepth );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Image.java b/src/classes/com/sun/opengl/impl/mipmap/Image.java
deleted file mode 100644
index a8568f030..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Image.java
+++ /dev/null
@@ -1,1412 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import javax.media.opengl.GL;
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Image {
-
- /** Creates a new instance of Image */
- public Image() {
- }
-
- public static short getShortFromByteArray( byte[] array, int index ) {
- short s;
- s = (short)(array[index] << 8 );
- s |= (short)(0x00FF & array[index+1]);
- return( s );
- }
-
- public static int getIntFromByteArray( byte[] array, int index ) {
- int i;
- i = ( array[index] << 24 ) & 0xFF000000;
- i |= ( array[index+1] << 16 ) & 0x00FF0000;
- i |= ( array[index+2] << 8 ) & 0x0000FF00;
- i |= ( array[index+3] ) & 0x000000FF;
- return( i );
- }
-
- public static float getFloatFromByteArray( byte[] array, int index ) {
- int i = getIntFromByteArray( array, index );
- return( Float.intBitsToFloat(i) );
- }
-
- /*
- * Extract array from user's data applying all pixel store modes.
- * The internal format used is an array of unsigned shorts.
- */
- public static void fill_image( PixelStorageModes psm, int width, int height,
- int format, int type, boolean index_format, ByteBuffer userdata,
- ShortBuffer newimage ) {
- int components;
- int element_size;
- int rowsize;
- int padding;
- int groups_per_line;
- int group_size;
- int elements_per_line;
- int start;
- int iter = 0;
- int iter2;
- int i, j, k;
- boolean myswap_bytes;
-
- // Create a Extract interface object
- Extract extract = null;
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- extract = new Extract332();
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- extract = new Extract233rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- extract = new Extract565();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- extract = new Extract565rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- extract = new Extract4444();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- extract = new Extract4444rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- extract = new Extract5551();
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- extract = new Extract1555rev();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- extract = new Extract8888();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- extract = new Extract8888rev();
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- extract = new Extract1010102();
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- extract = new Extract2101010rev();
- break;
- }
-
- myswap_bytes = psm.getUnpackSwapBytes();
- components = Mipmap.elements_per_group( format, type );
- if( psm.getUnpackRowLength() > 0 ) {
- groups_per_line = psm.getUnpackRowLength();
- } else {
- groups_per_line = width;
- }
-
- // All formats except GL_BITMAP fall out trivially
- if( type == GL.GL_BITMAP ) {
- int bit_offset;
- int current_bit;
-
- rowsize = ( groups_per_line * components + 7 ) / 8;
- padding = ( rowsize % psm.getUnpackAlignment() );
- if( padding != 0 ) {
- rowsize += psm.getUnpackAlignment() - padding;
- }
- start = psm.getUnpackSkipRows() * rowsize + ( psm.getUnpackSkipPixels() * components / 8 );
- elements_per_line = width * components;
- iter2 = 0;
- for( i = 0; i < height; i++ ) {
- iter = start;
- userdata.position( iter ); // ****************************************
- bit_offset = (psm.getUnpackSkipPixels() * components) % 8;
- for( j = 0; j < elements_per_line; j++ ) {
- // retrieve bit
- if( psm.getUnpackLsbFirst() ) {
- userdata.position( iter );
- current_bit = ( userdata.get() & 0x000000FF ) & ( 1 << bit_offset );//userdata[iter] & ( 1 << bit_offset );
- } else {
- current_bit = ( userdata.get() & 0x000000FF ) & ( 1 << ( 7 - bit_offset ) );
- }
- if( current_bit != 0 ) {
- if( index_format ) {
- newimage.position( iter2 );
- newimage.put( (short)1 );
- } else {
- newimage.position( iter2 );
- newimage.put( (short)65535 );
- }
- } else {
- newimage.position( iter2 );
- newimage.put( (short)0 );
- }
- bit_offset++;
- if( bit_offset == 8 ) {
- bit_offset = 0;
- iter++;
- }
- iter2++;
- }
- start += rowsize;
- }
- } else {
- element_size = Mipmap.bytes_per_element( type );
- group_size = element_size * components;
- if( element_size == 1 ) {
- myswap_bytes = false;
- }
-
- rowsize = groups_per_line * group_size;
- padding = ( rowsize % psm.getUnpackAlignment() );
- if( padding != 0 ) {
- rowsize += psm.getUnpackAlignment() - padding;
- }
- start = psm.getUnpackSkipRows() * rowsize + psm.getUnpackSkipPixels() * group_size;
- elements_per_line = width * components;
-
- iter2 = 0;
- for( i = 0; i < height; i++ ) {
- iter = start;
- userdata.position( iter ); //***************************************
- for( j = 0; j < elements_per_line; j++ ) {
- Type_Widget widget = new Type_Widget();
- float[] extractComponents = new float[4];
- userdata.position( iter );
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- extract.extract( false, userdata /*userdata[iter]*/, extractComponents );
- for( k = 0; k < 3; k++ ) {
- newimage.put( iter2++, (short)(extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- extract.extract( false, userdata /*userdata[iter]*/, extractComponents );
- for( k = 0; k < 3; k++ ) {
- newimage.put( iter2++, (short)(extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_BYTE ):
- if( index_format ) {
- newimage.put( iter2++, (short)( 0x000000FF & userdata.get() ) );//userdata[iter];
- } else {
- newimage.put( iter2++, (short)( 0x000000FF & userdata.get()/*userdata[iter]*/ * 257 ) );
- }
- break;
- case( GL.GL_BYTE ):
- if( index_format ) {
- newimage.put( iter2++, userdata.get() ); //userdata[iter];
- } else {
- newimage.put( iter2++, (short)(userdata.get()/*userdata[iter]*/ * 516 ) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- extract.extract( myswap_bytes, userdata/*userdata[iter]*/, extractComponents );
- for( k = 0; k < 3; k++ ) {
- newimage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 3; k++ ) {
- newimage.put( iter2++, (short)(extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)(extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)(extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- if( myswap_bytes ) {
- widget.setUB1( userdata.get() );
- widget.setUB0( userdata.get() );
- } else {
- widget.setUB0( userdata.get() );
- widget.setUB1( userdata.get() );
- }
- if( type == GL.GL_SHORT ) {
- if( index_format ) {
- newimage.put( iter2++, widget.getS0() );
- } else {
- newimage.put( iter2++, (short)(widget.getS0() * 2) );
- }
- } else {
- newimage.put( iter2++, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- extract.extract( myswap_bytes, userdata, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newimage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_INT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_FLOAT ):
- if( myswap_bytes ) {
- widget.setUB3( userdata.get() );
- widget.setUB2( userdata.get() );
- widget.setUB1( userdata.get() );
- widget.setUB0( userdata.get() );
- } else {
- widget.setUB0( userdata.get() );
- widget.setUB1( userdata.get() );
- widget.setUB2( userdata.get() );
- widget.setUB3( userdata.get() );
- }
- if( type == GL.GL_FLOAT ) {
- if( index_format ) {
- newimage.put( iter2++, (short)widget.getF() );
- } else {
- newimage.put( iter2++, (short)(widget.getF() * 65535 ) );
- }
- } else if( type == GL.GL_UNSIGNED_INT ) {
- if( index_format ) {
- newimage.put( iter2++, (short)( widget.getUI() ) );
- } else {
- newimage.put( iter2++, (short)( widget.getUI() >> 16 ) );
- }
- } else {
- if( index_format ) {
- newimage.put( iter2++, (short)( widget.getI() ) );
- } else {
- newimage.put( iter2++, (short)( widget.getI() >> 15 ) );
- }
- }
- break;
- }
- iter += element_size;
- } // for j
- start += rowsize;
- // want iter pointing at start, not within, row for assertion purposes
- iter = start;
- } // for i
-
- // iterators should be one byte past end
- if( !Mipmap.isTypePackedPixel( type ) ) {
- assert( iter2 == ( width * height * components ) );
- } else {
- assert( iter2 == ( width * height * Mipmap.elements_per_group( format, 0 ) ) );
- }
- assert( iter == ( rowsize * height + psm.getUnpackSkipRows() * rowsize + psm.getUnpackSkipPixels() * group_size ) );
- }
- }
-
- /*
- * Insert array into user's data applying all pixel store modes.
- * Theinternal format is an array of unsigned shorts.
- * empty_image() because it is the opposet of fill_image().
- */
- public static void empty_image( PixelStorageModes psm, int width, int height,
- int format, int type, boolean index_format,
- ShortBuffer oldimage, ByteBuffer userdata ) {
-
- int components;
- int element_size;
- int rowsize;
- int padding;
- int groups_per_line;
- int group_size;
- int elements_per_line;
- int start;
- int iter = 0;
- int iter2;
- int i, j, k;
- boolean myswap_bytes;
-
- // Create a Extract interface object
- Extract extract = null;
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- extract = new Extract332();
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- extract = new Extract233rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- extract = new Extract565();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- extract = new Extract565rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- extract = new Extract4444();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- extract = new Extract4444rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- extract = new Extract5551();
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- extract = new Extract1555rev();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- extract = new Extract8888();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- extract = new Extract8888rev();
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- extract = new Extract1010102();
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- extract = new Extract2101010rev();
- break;
- }
-
- myswap_bytes = psm.getPackSwapBytes();
- components = Mipmap.elements_per_group( format, type );
- if( psm.getPackRowLength() > 0 ) {
- groups_per_line = psm.getPackRowLength();
- } else {
- groups_per_line = width;
- }
-
- // all formats except GL_BITMAP fall out trivially
- if( type == GL.GL_BITMAP ) {
- int bit_offset;
- int current_bit;
-
- rowsize = ( groups_per_line * components + 7 ) / 8;
- padding = ( rowsize % psm.getPackAlignment() );
- if( padding != 0 ) {
- rowsize += psm.getPackAlignment() - padding;
- }
- start = psm.getPackSkipRows() * rowsize + psm.getPackSkipPixels() * components / 8;
- elements_per_line = width * components;
- iter2 = 0;
- for( i = 0; i < height; i++ ) {
- iter = start;
- bit_offset = ( psm.getPackSkipPixels() * components ) % 8;
- for( j = 0; j < elements_per_line; j++ ) {
- if( index_format ) {
- current_bit = oldimage.get( iter2 ) & 1;
- } else {
- if( oldimage.get( iter2 ) < 0 ) { // must check for negative rather than 32767
- current_bit = 1;
- } else {
- current_bit = 0;
- }
- }
-
- if( current_bit != 0 ) {
- if( psm.getPackLsbFirst() ) {
- userdata.put( iter, (byte)( ( userdata.get( iter ) | ( 1 << bit_offset ) ) ) );
- } else {
- userdata.put( iter, (byte)( ( userdata.get( iter ) | ( 7 - bit_offset ) ) ) );
- }
- } else {
- if( psm.getPackLsbFirst() ) {
- //userdata[iter] &= ~( 1 << bit_offset );
- userdata.put( iter, (byte)( ( userdata.get( iter ) & ~( 1 << bit_offset ) ) ) );
- } else {
- //userdata[iter] &= ~( 1 << ( 7 - bit_offset ) );
- userdata.put( iter, (byte)( ( userdata.get( iter ) & ~( 7 - bit_offset ) ) ) );
- }
- }
-
- bit_offset++;
- if( bit_offset == 8 ) {
- bit_offset = 0;
- iter++;
- }
- iter2++;
- }
- start += rowsize;
- }
- } else {
- float shoveComponents[] = new float[4];
-
- element_size = Mipmap.bytes_per_element( type );
- group_size = element_size * components;
- if( element_size == 1 ) {
- myswap_bytes = false;
- }
-
- rowsize = groups_per_line * group_size;
- padding = ( rowsize % psm.getPackAlignment() );
- if( padding != 0 ) {
- rowsize += psm.getPackAlignment() - padding;
- }
- start = psm.getPackSkipRows() * rowsize + psm.getPackSkipPixels() * group_size;
- elements_per_line = width * components;
-
- iter2 = 0;
- for( i = 0; i < height; i++ ) {
- iter = start;
- for( j = 0; j < elements_per_line; j++ ) {
- Type_Widget widget = new Type_Widget();
-
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- for( k = 0; k < 3; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, userdata );
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- for( k = 0; k < 3; k++ ) {
- shoveComponents[k] = oldimage.get(iter2++) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, userdata );
- break;
- case( GL.GL_UNSIGNED_BYTE ):
- if( index_format ) {
- //userdata[iter] = (byte)oldimage[iter2++];
- userdata.put( iter, (byte)oldimage.get(iter2++) );
- } else {
- //userdata[iter] = (byte)( oldimage[iter2++] >> 8 );
- userdata.put( iter, (byte)( oldimage.get(iter2++) ) );
- }
- break;
- case( GL.GL_BYTE ):
- if( index_format ) {
- //userdata[iter] = (byte)oldimage[iter2++];
- userdata.put( iter, (byte)oldimage.get(iter2++) );
- } else {
- //userdata[iter] = (byte)( oldimage[iter2++] >> 9 );
- userdata.put( iter, (byte)( oldimage.get(iter2++) ) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- for( k = 0; k < 3; k++ ) {
- shoveComponents[k] = oldimage.get(iter2++) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter] = widget.getUB1();
- //userdata[iter+1] = widget.getUB0();
- userdata.put( iter, widget.getUB1() );
- userdata.put( iter + 1,widget.getUB0() );
- } else {
- //userdata[iter] = widget.getUB0();
- //userdata[iter+1] = widget.getUB1();
- userdata.put( iter, widget.getUB0() );
- userdata.put( iter + 1, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- for( k = 0; k < 3; k++ ) {
- shoveComponents[k] = oldimage.get(iter2++) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter] = widget.getUB1();
- //userdata[iter+1] = widget.getUB0();
- userdata.put( iter, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB0() );
- } else {
- //userdata[iter] = widget.getUB0();
- //userdata[iter+1] = widget.getUB1();
- userdata.put( iter, widget.getUB0() );
- userdata.put( iter, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get(iter2++) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter] = widget.getUB1();
- //userdata[iter+1] = widget.getUB0();
- userdata.put( iter, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB0() );
- } else {
- //userdata[iter] = widget.getUB0();
- //userdata[iter+1] = widget.getUB1();
- userdata.put( iter, widget.getUB0() );
- userdata.put( iter + 1, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter] = widget.getUB1();
- //userdata[iter+1] = widget.getUB0();
- userdata.put( iter, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB0() );
- } else {
- //userdata[iter] = widget.getUB0();
- //userdata[iter+1] = widget.getUB1();
- userdata.put( iter, widget.getUB0() );
- userdata.put( iter + 1, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter] = widget.getUB1();
- //userdata[iter+1] = widget.getUB0();
- userdata.put( iter, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB0() );
- } else {
- //userdata[iter] = widget.getUB0();
- //userdata[iter+1] = widget.getUB1();
- userdata.put( iter, widget.getUB0() );
- userdata.put( iter + 1, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter] = widget.getUB1();
- //userdata[iter+1] = widget.getUB0();
- userdata.put( iter, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB0() );
- } else {
- //userdata[iter] = widget.getUB0();
- //userdata[iter+1] = widget.getUB1();
- userdata.put( iter, widget.getUB0() );
- userdata.put( iter + 1, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- if( type == GL.GL_SHORT ) {
- if( index_format ) {
- widget.setS0( oldimage.get( iter2++ ) );
- } else {
- widget.setS0( (short)(oldimage.get( iter2++ ) >> 1) );
- }
- } else {
- widget.setUS0( oldimage.get( iter2++ ) );
- }
- if( myswap_bytes ) {
- //userdata[iter] = widget.getUB1();
- //userdata[iter+1] = widget.getUB0();
- userdata.put( iter, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB0() );
- } else {
- //userdata[iter] = widget.getUB0();
- //userdata[iter] = widget.getUB1();
- userdata.put( iter, widget.getUB0() );
- userdata.put( iter + 1, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter+3] = widget.getUB0();
- //userdata[iter+2] = widget.getUB1();
- //userdata[iter+1] = widget.getUB2();
- //userdata[iter ] = widget.getUB3();
- userdata.put( iter + 3, widget.getUB0() );
- userdata.put( iter + 2, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB2() );
- userdata.put( iter , widget.getUB3() );
- } else {
- userdata.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter+3] = widget.getUB0();
- //userdata[iter+2] = widget.getUB1();
- //userdata[iter+1] = widget.getUB2();
- //userdata[iter ] = widget.getUB3();
- userdata.put( iter + 3, widget.getUB0() );
- userdata.put( iter + 2, widget.getUB1() );
- userdata.put( iter + 2, widget.getUB2() );
- userdata.put( iter , widget.getUB3() );
- } else {
- userdata.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter+3] = widget.getUB0();
- //userdata[iter+2] = widget.getUB1();
- //userdata[iter+1] = widget.getUB2();
- //userdata[iter ] = widget.getUB3();
- userdata.put( iter + 3, widget.getUB0() );
- userdata.put( iter + 2, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB2() );
- userdata.put( iter , widget.getUB3() );
- } else {
- userdata.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldimage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswap_bytes ) {
- //userdata[iter+3] = widget.getUB0();
- //userdata[iter+2] = widget.getUB1();
- //userdata[iter+1] = widget.getUB2();
- //userdata[iter ] = widget.getUB3();
- userdata.put( iter + 3, widget.getUB0() );
- userdata.put( iter + 2, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB2() );
- userdata.put( iter , widget.getUB3() );
- } else {
- userdata.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_INT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_FLOAT ):
- if( type == GL.GL_FLOAT ) {
- if( index_format ) {
- widget.setF( oldimage.get( iter2++ ) );
- } else {
- widget.setF( oldimage.get( iter2++ ) / 65535.0f );
- }
- } else if( type == GL.GL_UNSIGNED_INT ) {
- if( index_format ) {
- widget.setUI( oldimage.get( iter2++ ) );
- } else {
- widget.setUI( oldimage.get( iter2++ ) * 65537 );
- }
- } else {
- if( index_format ) {
- widget.setI( oldimage.get( iter2++ ) );
- } else {
- widget.setI( (oldimage.get( iter2++ ) * 65537) / 2 );
- }
- }
- if( myswap_bytes ) {
- userdata.put( iter + 3, widget.getUB0() );
- userdata.put( iter + 2, widget.getUB1() );
- userdata.put( iter + 1, widget.getUB2() );
- userdata.put( iter , widget.getUB3() );
- } else {
- userdata.put( iter , widget.getUB0() );
- userdata.put( iter + 1, widget.getUB1() );
- userdata.put( iter + 2, widget.getUB2() );
- userdata.put( iter + 3, widget.getUB3() );
- }
- break;
- }
- iter += element_size;
- } // for j
- start += rowsize;
- // want iter pointing at start, not within, row for assertion purposes
- iter = start;
- } // for i
- // iterators should be one byte past end
- if( !Mipmap.isTypePackedPixel( type ) ) {
- assert( iter2 == width * height * components );
- } else {
- assert( iter2 == width * height * Mipmap.elements_per_group( format, 0 ) );
- }
- assert( iter == rowsize * height + psm.getPackSkipRows() * rowsize + psm.getPackSkipPixels() * group_size );
- }
- }
-
- public static void fillImage3D( PixelStorageModes psm, int width, int height,
- int depth, int format, int type, boolean indexFormat, ByteBuffer userImage,
- ShortBuffer newImage ) {
- boolean myswapBytes;
- int components;
- int groupsPerLine;
- int elementSize;
- int groupSize;
- int rowSize;
- int padding;
- int elementsPerLine;
- int rowsPerImage;
- int imageSize;
- int start, rowStart;
- int iter = 0;
- int iter2 = 0;
- int ww, hh, dd, k;
- Type_Widget widget = new Type_Widget();
- float extractComponents[] = new float[4];
-
- // Create a Extract interface object
- Extract extract = null;
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- extract = new Extract332();
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- extract = new Extract233rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- extract = new Extract565();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- extract = new Extract565rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- extract = new Extract4444();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- extract = new Extract4444rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- extract = new Extract5551();
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- extract = new Extract1555rev();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- extract = new Extract8888();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- extract = new Extract8888rev();
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- extract = new Extract1010102();
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- extract = new Extract2101010rev();
- break;
- }
-
- myswapBytes = psm.getUnpackSwapBytes();
- components = Mipmap.elements_per_group( format, type );
- if( psm.getUnpackRowLength() > 0 ) {
- groupsPerLine = psm.getUnpackRowLength();
- } else {
- groupsPerLine = width;
- }
- elementSize = Mipmap.bytes_per_element( type );
- groupSize = elementSize * components;
- if( elementSize == 1 ) {
- myswapBytes = false;
- }
-
- // 3dstuff begin
- if( psm.getUnpackImageHeight() > 0 ) {
- rowsPerImage = psm.getUnpackImageHeight();
- } else {
- rowsPerImage = height;
- }
- // 3dstuff end
-
- rowSize = groupsPerLine * groupSize;
- padding = rowSize % psm.getUnpackAlignment();
- if( padding != 0 ) {
- rowSize += psm.getUnpackAlignment() - padding;
- }
-
- imageSize = rowsPerImage * rowSize; // 3dstuff
-
- start = psm.getUnpackSkipRows() * rowSize +
- psm.getUnpackSkipPixels() * groupSize +
- psm.getUnpackSkipImages() * imageSize;
- elementsPerLine = width * components;
-
- iter2 = 0;
- for( dd = 0; dd < depth; dd++ ) {
- rowStart = start;
- for( hh = 0; hh < height; hh++ ) {
- iter = rowStart;
- for( ww = 0; ww < elementsPerLine; ww++ ) {
-
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- if( indexFormat ) {
- newImage.put( iter2++, (short)(0x000000FF & userImage.get( iter ) ) );
- } else {
- newImage.put( iter2++, (short)((0x000000FF & userImage.get( iter ) ) * 257 ) );
- }
- break;
- case( GL.GL_BYTE ):
- if( indexFormat ) {
- newImage.put( iter2++, userImage.get( iter ) );
- } else {
- newImage.put( iter2++, (short)(userImage.get( iter ) * 516 ) );
- }
- break;
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- userImage.position( iter );
- extract.extract( false, userImage, extractComponents );
- for( k = 0; k < 3; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- userImage.position( iter );
- extract.extract( false, userImage, extractComponents );
- for( k = 0; k < 3; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)(extractComponents[k] * 65535) );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- if( myswapBytes ) {
- widget.setUB0( userImage.get( iter + 1 ) );
- widget.setUB1( userImage.get( iter ) );
- } else {
- widget.setUB0( userImage.get( iter ) );
- widget.setUB1( userImage.get( iter + 1 ) );
- }
- if( type == GL.GL_SHORT ) {
- if( indexFormat ) {
- newImage.put( iter2++, widget.getUS0() );
- } else {
- newImage.put( iter2++, (short)(widget.getUS0() * 2) );
- }
- } else {
- newImage.put( iter2++, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- userImage.position( iter );
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- extract.extract( myswapBytes, userImage, extractComponents );
- for( k = 0; k < 4; k++ ) {
- newImage.put( iter2++, (short)( extractComponents[k] * 65535 ) );
- }
- break;
- case( GL.GL_INT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_FLOAT ):
- if( myswapBytes ) {
- widget.setUB0( userImage.get( iter + 3 ) );
- widget.setUB1( userImage.get( iter + 2 ) );
- widget.setUB2( userImage.get( iter + 1 ) );
- widget.setUB3( userImage.get( iter ) );
- } else {
- widget.setUB0( userImage.get( iter ) );
- widget.setUB1( userImage.get( iter + 1 ) );
- widget.setUB2( userImage.get( iter + 2 ) );
- widget.setUB3( userImage.get( iter + 3 ) );
- }
- if( type == GL.GL_FLOAT ) {
- if( indexFormat ) {
- newImage.put( iter2++, (short)widget.getF() );
- } else {
- newImage.put( iter2++, (short)( widget.getF() * 65535.0f ) );
- }
- } else if( type == GL.GL_UNSIGNED_INT ) {
- if( indexFormat ) {
- newImage.put( iter2++, (short)widget.getUI() );
- } else {
- newImage.put( iter2++, (short)(widget.getUI() >> 16) );
- }
- } else {
- if( indexFormat ) {
- newImage.put( iter2++, (short)widget.getI() );
- } else {
- newImage.put( iter2++, (short)(widget.getI() >> 15) );
- }
- }
- break;
- default:
- assert( false );
- }
- iter += elementSize;
- } // for ww
- rowStart += rowSize;
- iter = rowStart; // for assert
- } // for hh
- start += imageSize;
- }// for dd
-
- // iterators should be one byte past end
- if( !Mipmap.isTypePackedPixel( type ) ) {
- assert( iter2 == width * height * depth * components );
- } else {
- assert( iter2 == width * height * depth * Mipmap.elements_per_group( format, 0 ) );
- }
- assert( iter == rowSize * height * depth + psm.getUnpackSkipRows() * rowSize +
- psm.getUnpackSkipPixels() * groupSize +
- psm.getUnpackSkipImages() * imageSize );
- }
-
- public static void emptyImage3D( PixelStorageModes psm, int width, int height, int depth,
- int format, int type, boolean indexFormat, ShortBuffer oldImage, ByteBuffer userImage ) {
- boolean myswapBytes;
- int components;
- int groupsPerLine;
- int elementSize;
- int groupSize;
- int rowSize;
- int padding;
- int start, rowStart, iter;
- int elementsPerLine;
- int iter2;
- int ii, jj, dd, k;
- int rowsPerImage;
- int imageSize;
- Type_Widget widget = new Type_Widget();
- float[] shoveComponents = new float[4];
-
- // Create a Extract interface object
- Extract extract = null;
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- extract = new Extract332();
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- extract = new Extract233rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- extract = new Extract565();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- extract = new Extract565rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- extract = new Extract4444();
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- extract = new Extract4444rev();
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- extract = new Extract5551();
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- extract = new Extract1555rev();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- extract = new Extract8888();
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- extract = new Extract8888rev();
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- extract = new Extract1010102();
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- extract = new Extract2101010rev();
- break;
- }
-
- iter = 0;
-
- myswapBytes = psm.getPackSwapBytes();
- components = Mipmap.elements_per_group( format, type );
- if( psm.getPackRowLength() > 0 ) {
- groupsPerLine = psm.getPackRowLength();
- } else {
- groupsPerLine = width;
- }
-
- elementSize = Mipmap.bytes_per_element( type );
- groupSize = elementSize * components;
- if( elementSize == 1 ) {
- myswapBytes = false;
- }
-
- // 3dstuff begin
- if( psm.getPackImageHeight() > 0 ) {
- rowsPerImage = psm.getPackImageHeight();
- } else {
- rowsPerImage = height;
- }
-
- // 3dstuff end
-
- rowSize = groupsPerLine * groupSize;
- padding = rowSize % psm.getPackAlignment();
- if( padding != 0 ) {
- rowSize += psm.getPackAlignment() - padding;
- }
-
- imageSize = rowsPerImage * rowSize;
-
- start = psm.getPackSkipRows() * rowSize +
- psm.getPackSkipPixels() * groupSize +
- psm.getPackSkipImages() * imageSize;
- elementsPerLine = width * components;
-
- iter2 = 0;
- for( dd = 0; dd < depth; dd++ ) {
- rowStart = start;
-
- for( ii = 0; ii < height; ii++ ) {
- iter = rowStart;
-
- for( jj = 0; jj < elementsPerLine; jj++ ) {
-
- switch( type ) {
- case( GL.GL_UNSIGNED_BYTE ):
- if( indexFormat ) {
- userImage.put( iter, (byte)(oldImage.get( iter2++ ) ) );
- } else {
- userImage.put( iter, (byte)(oldImage.get( iter2++ ) >> 8 ) );
- }
- break;
- case( GL.GL_BYTE ):
- if( indexFormat ) {
- userImage.put( iter, (byte)(oldImage.get(iter2++) ) );
- } else {
- userImage.put( iter, (byte)(oldImage.get(iter2++) >> 9) );
- }
- break;
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- for( k = 0; k < 3; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, userImage );
- break;
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- for( k = 0; k < 3; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, userImage );
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.putShort( iter, widget.getUB1() );
- userImage.putShort( iter + 1, widget.getUB0() );
- } else {
- userImage.putShort( iter, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB0() );
- } else {
- userImage.putShort( iter, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB0() );
- } else {
- userImage.putShort( iter, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB0() );
- } else {
- userImage.putShort( iter, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB0() );
- } else {
- userImage.putShort( iter, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB0() );
- } else {
- userImage.putShort( iter, widget.getUS0() );
- }
- break;
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_SHORT ):
- if( type == GL.GL_SHORT ) {
- if( indexFormat ) {
- widget.setS0( (short)oldImage.get( iter2++ ) );
- } else {
- widget.setS0( (short)(oldImage.get( iter2++ ) >> 1) );
- }
- } else {
- widget.setUS0( (short)oldImage.get( iter2++ ) );
- }
- if( myswapBytes ) {
- userImage.put( iter, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB0() );
- } else {
- userImage.put( iter, widget.getUB0() );
- userImage.put( iter + 1, widget.getUB1() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter + 3, widget.getUB0() );
- userImage.put( iter + 2, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB2() );
- userImage.put( iter , widget.getUB3() );
- } else {
- userImage.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter + 3, widget.getUB0() );
- userImage.put( iter + 2, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB2() );
- userImage.put( iter , widget.getUB3() );
- } else {
- userImage.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter + 3, widget.getUB0() );
- userImage.put( iter + 2, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB2() );
- userImage.put( iter ,widget.getUB3() );
- } else {
- userImage.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- for( k = 0; k < 4; k++ ) {
- shoveComponents[k] = oldImage.get( iter2++ ) / 65535.0f;
- }
- extract.shove( shoveComponents, 0, widget.getBuffer() );
- if( myswapBytes ) {
- userImage.put( iter + 3, widget.getUB0() );
- userImage.put( iter + 2, widget.getUB2() );
- userImage.put( iter + 1, widget.getUB1() );
- userImage.put( iter , widget.getUB0() );
- } else {
- userImage.putInt( iter, widget.getUI() );
- }
- break;
- case( GL.GL_INT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_FLOAT ):
- if( type == GL.GL_FLOAT ) {
- if( indexFormat ) {
- widget.setF( oldImage.get( iter2++ ) );
- } else {
- widget.setF( oldImage.get( iter2++ ) / 65535.0f );
- }
- } else if( type == GL.GL_UNSIGNED_INT ) {
- if( indexFormat ) {
- widget.setUI( oldImage.get( iter2++ ) );
- } else {
- widget.setUI( oldImage.get( iter2++ ) * 65537 );
- }
- } else {
- if( indexFormat ) {
- widget.setI( oldImage.get( iter2++ ) );
- } else {
- widget.setI( ( oldImage.get( iter2++ ) * 65535 ) / 2 );
- }
- }
- if( myswapBytes ) {
- userImage.put( iter + 3, widget.getUB0() );
- userImage.put( iter + 2, widget.getUB1() );
- userImage.put( iter + 1, widget.getUB2() );
- userImage.put( iter , widget.getUB3() );
- } else {
- userImage.put( iter , widget.getUB0() );
- userImage.put( iter + 1, widget.getUB1() );
- userImage.put( iter + 2, widget.getUB2() );
- userImage.put( iter + 3, widget.getUB3() );
- }
- break;
- default:
- assert( false );
- }
-
- iter += elementSize;
- } // for jj
- rowStart += rowSize;
- } // for ii
- start += imageSize;
- } // for dd
-
- if( !Mipmap.isTypePackedPixel( type ) ) {
- assert( iter2 == width * height * depth * components );
- } else {
- assert( iter2 == width * height * depth * Mipmap.elements_per_group( format, 0 ) );
- }
- assert( iter == rowSize * height * depth +
- psm.getUnpackSkipRows() * rowSize +
- psm.getUnpackSkipPixels() * groupSize +
- psm.getUnpackSkipImages() * imageSize );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Mipmap.java b/src/classes/com/sun/opengl/impl/mipmap/Mipmap.java
deleted file mode 100644
index 3484950f6..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Mipmap.java
+++ /dev/null
@@ -1,857 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.glu.GLU;
-import javax.media.opengl.GLException;
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Mipmap {
-
- /** Creates a new instance of Mipmap */
- public Mipmap() {
- }
-
- public static int computeLog( int value ) {
- int i = 0;
- // Error
- if( value == 0 ) {
- return( -1 );
- }
- for( ;; ) {
- if( (value & 1) >= 1 ) {
- if( value != 1 ) {
- return( -1 );
- }
- return( i );
- }
- value = value >> 1;
- i++;
- }
- }
-
- /* Compute the nearest power of 2 number. This algorithm is a little strange
- * but it works quite well.
- */
- public static int nearestPower( int value ) {
- int i = 1;
- // Error!
- if( value == 0 ) {
- return( -1 );
- }
- for( ;; ) {
- if( value == 1 ) {
- return( i );
- } else if( value == 3 ) {
- return( i * 4 );
- }
- value = value >> 1;
- i *= 2;
- }
- }
-
- public static short GLU_SWAP_2_BYTES( short s ) {
- byte b = 0;
- b = (byte)( s >>> 8 );
- s = (short)( s << 8 );
- s = (short)( s | (0x00FF & b) );
- return( s );
- }
-
- public static int GLU_SWAP_4_BYTES( int i ) {
- int t = i << 24;
- t |= 0x00FF0000 & ( i << 8 );
- t |= 0x0000FF00 & ( i >>> 8 );
- t |= 0x000000FF & ( i >>> 24 );
- return( t );
- }
-
- public static float GLU_SWAP_4_BYTES( float f ) {
- int i = Float.floatToRawIntBits( f );
- float temp = Float.intBitsToFloat( i );
- return( temp );
- }
-
- public static int checkMipmapArgs( int internalFormat, int format, int type ) {
- if( !legalFormat( format ) || !legalType( type ) ) {
- return( GLU.GLU_INVALID_ENUM );
- }
- if( format == GL.GL_STENCIL_INDEX ) {
- return( GLU.GLU_INVALID_ENUM );
- }
- if( !isLegalFormatForPackedPixelType( format, type ) ) {
- return( GLU.GLU_INVALID_OPERATION );
- }
- return( 0 );
- }
-
- public static boolean legalFormat( int format ) {
- switch( format ) {
- case( GL.GL_COLOR_INDEX ):
- case( GL.GL_STENCIL_INDEX ):
- case( GL.GL_DEPTH_COMPONENT ):
- case( GL.GL_RED ):
- case( GL.GL_GREEN ):
- case( GL.GL_BLUE ):
- case( GL.GL_ALPHA ):
- case( GL.GL_RGB ):
- case( GL.GL_RGBA ):
- case( GL.GL_LUMINANCE ):
- case( GL.GL_LUMINANCE_ALPHA ):
- case( GL.GL_BGR ):
- case( GL.GL_BGRA ):
- return( true );
- default:
- return( false );
- }
- }
-
- public static boolean legalType( int type ) {
- switch( type ) {
- case( GL.GL_BITMAP ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_INT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_FLOAT ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- return( true );
- default:
- return( false );
- }
- }
-
- public static boolean isTypePackedPixel( int type ) {
- assert( legalType( type ) );
-
- if( type == GL.GL_UNSIGNED_BYTE_3_3_2 ||
- type == GL.GL_UNSIGNED_BYTE_2_3_3_REV ||
- type == GL.GL_UNSIGNED_SHORT_5_6_5 ||
- type == GL.GL_UNSIGNED_SHORT_5_6_5_REV ||
- type == GL.GL_UNSIGNED_SHORT_4_4_4_4 ||
- type == GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ||
- type == GL.GL_UNSIGNED_SHORT_5_5_5_1 ||
- type == GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ||
- type == GL.GL_UNSIGNED_INT_8_8_8_8 ||
- type == GL.GL_UNSIGNED_INT_8_8_8_8_REV ||
- type == GL.GL_UNSIGNED_INT_10_10_10_2 ||
- type == GL.GL_UNSIGNED_INT_2_10_10_10_REV ) {
- return( true );
- }
- return( false );
- }
-
- public static boolean isLegalFormatForPackedPixelType( int format, int type ) {
- // if not a packed pixel type then return true
- if( isTypePackedPixel( type ) ) {
- return( true );
- }
-
- // 3_3_2/2_3_3_REV & 5_6_5/5_6_5_REV are only compatible with RGB
- if( (type == GL.GL_UNSIGNED_BYTE_3_3_2 || type == GL.GL_UNSIGNED_BYTE_2_3_3_REV ||
- type == GL.GL_UNSIGNED_SHORT_5_6_5 || type == GL.GL_UNSIGNED_SHORT_5_6_5_REV )
- & format != GL.GL_RGB ) {
- return( false );
- }
-
- // 4_4_4_4/4_4_4_4_REV & 5_5_5_1/1_5_5_5_REV & 8_8_8_8/8_8_8_8_REV &
- // 10_10_10_2/2_10_10_10_REV are only campatible with RGBA, BGRA & ARGB_EXT
- if( ( type == GL.GL_UNSIGNED_SHORT_4_4_4_4 ||
- type == GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ||
- type == GL.GL_UNSIGNED_SHORT_5_5_5_1 ||
- type == GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ||
- type == GL.GL_UNSIGNED_INT_8_8_8_8 ||
- type == GL.GL_UNSIGNED_INT_8_8_8_8_REV ||
- type == GL.GL_UNSIGNED_INT_10_10_10_2 ||
- type == GL.GL_UNSIGNED_INT_2_10_10_10_REV ) &&
- (format != GL.GL_RGBA && format != GL.GL_BGRA) ) {
- return( false );
- }
- return( true );
- }
-
- public static boolean isLegalLevels( int userLevel, int baseLevel, int maxLevel,
- int totalLevels ) {
- if( (baseLevel < 0) || (baseLevel < userLevel) || (maxLevel < baseLevel) ||
- (totalLevels < maxLevel) ) {
- return( false );
- }
- return( true );
- }
-
- /* Given user requested textures size, determine if it fits. If it doesn't then
- * halve both sides and make the determination again until it does fit ( for
- * IR only ).
- * Note that proxy textures are not implemented in RE* even though they
- * advertise the texture extension.
- * Note that proxy textures are implemented but not according to spec in IMPACT*
- */
- public static void closestFit( GL gl, int target, int width, int height, int internalFormat,
- int format, int type, int[] newWidth, int[] newHeight ) {
- // Use proxy textures if OpenGL version >= 1.1
- if( Double.parseDouble( gl.glGetString( GL.GL_VERSION ).trim().substring( 0, 3 ) ) >= 1.1 ) {
- int widthPowerOf2 = nearestPower( width );
- int heightPowerOf2 = nearestPower( height );
- int[] proxyWidth = new int[1];
- boolean noProxyTextures = false;
-
- // Some drivers (in particular, ATI's) seem to set a GL error
- // when proxy textures are used even though this is in violation
- // of the spec. Guard against this and interactions with the
- // DebugGL by watching for GLException.
- try {
- do {
- // compute level 1 width & height, clamping each at 1
- int widthAtLevelOne = ( ( width > 1 ) ? (widthPowerOf2 >> 1) : widthPowerOf2 );
- int heightAtLevelOne = ( ( height > 1 ) ? (heightPowerOf2 >> 1) : heightPowerOf2 );
- int proxyTarget;
-
- assert( widthAtLevelOne > 0 );
- assert( heightAtLevelOne > 0 );
-
- // does width x height at level 1 & all their mipmaps fit?
- if( target == GL.GL_TEXTURE_2D || target == GL.GL_PROXY_TEXTURE_2D ) {
- proxyTarget = GL.GL_PROXY_TEXTURE_2D;
- gl.glTexImage2D( proxyTarget, 1, internalFormat, widthAtLevelOne,
- heightAtLevelOne, 0, format, type, null );
- } else if( (target == GL.GL_TEXTURE_CUBE_MAP_POSITIVE_X) ||
- (target == GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_X) ||
- (target == GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Y) ||
- (target == GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) ||
- (target == GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Z) ||
- (target == GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) ) {
- proxyTarget = GL.GL_PROXY_TEXTURE_CUBE_MAP;
- gl.glTexImage2D( proxyTarget, 1, internalFormat, widthAtLevelOne,
- heightAtLevelOne, 0, format, type, null );
- } else {
- assert( target == GL.GL_TEXTURE_1D || target == GL.GL_PROXY_TEXTURE_1D );
- proxyTarget = GL.GL_PROXY_TEXTURE_1D;
- gl.glTexImage1D( proxyTarget, 1, internalFormat, widthAtLevelOne,
- 0, format, type, null );
- }
- gl.glGetTexLevelParameteriv( proxyTarget, 1, GL.GL_TEXTURE_WIDTH, proxyWidth, 0 );
- // does it fit?
- if( proxyWidth[0] == 0 ) { // nope, so try again with theses sizes
- if( widthPowerOf2 == 1 && heightPowerOf2 == 1 ) {
- /* A 1x1 texture couldn't fit for some reason so break out. This
- * should never happen. But things happen. The disadvantage with
- * this if-statement is that we will never be aware of when this
- * happens since it will silently branch out.
- */
- noProxyTextures = true;
- break;
- }
- widthPowerOf2 = widthAtLevelOne;
- heightPowerOf2 = heightAtLevelOne;
- }
- // else it does fit
- } while( proxyWidth[0] == 0 );
- } catch (GLException e) {
- noProxyTextures = true;
- }
- // loop must terminate
- // return the width & height at level 0 that fits
- if( !noProxyTextures ) {
- newWidth[0] = widthPowerOf2;
- newHeight[0] = heightPowerOf2;
- return;
- }
- }
- int[] maxsize = new int[1];
- gl.glGetIntegerv( GL.GL_MAX_TEXTURE_SIZE, maxsize , 0);
- // clamp user's texture sizes to maximum sizes, if necessary
- newWidth[0] = nearestPower( width );
- if( newWidth[0] > maxsize[0] ) {
- newWidth[0] = maxsize[0];
- }
- newHeight[0] = nearestPower( height );
- if( newHeight[0] > maxsize[0] ) {
- newHeight[0] = maxsize[0];
- }
- }
-
- public static void closestFit3D( GL gl, int target, int width, int height, int depth,
- int internalFormat, int format, int type, int[] newWidth, int[] newHeight,
- int[] newDepth ) {
- int widthPowerOf2 = nearestPower( width );
- int heightPowerOf2 = nearestPower( height );
- int depthPowerOf2 = nearestPower( depth );
- int[] proxyWidth = new int[1];
-
- do {
- // compute level 1 width & height & depth, clamping each at 1
- int widthAtLevelOne = (widthPowerOf2 > 1) ? widthPowerOf2 >> 1 : widthPowerOf2;
- int heightAtLevelOne = (heightPowerOf2 > 1) ? heightPowerOf2 >> 1 : heightPowerOf2;
- int depthAtLevelOne = (depthPowerOf2 > 1) ? depthPowerOf2 >> 1 : depthPowerOf2;
- int proxyTarget = 0;
- assert( widthAtLevelOne > 0 );
- assert( heightAtLevelOne > 0 );
- assert( depthAtLevelOne > 0 );
-
- // does width x height x depth at level 1 & all their mipmaps fit?
- if( target == GL.GL_TEXTURE_3D || target == GL.GL_PROXY_TEXTURE_3D ) {
- proxyTarget = GL.GL_PROXY_TEXTURE_3D;
- gl.glTexImage3D( proxyTarget, 1, internalFormat, widthAtLevelOne,
- heightAtLevelOne, depthAtLevelOne, 0, format, type, null );
- }
- gl.glGetTexLevelParameteriv( proxyTarget, 1, GL.GL_TEXTURE_WIDTH, proxyWidth, 0 );
- // does it fit
- if( proxyWidth[0] == 0 ) {
- if( widthPowerOf2 == 1 && heightPowerOf2 == 1 && depthPowerOf2 == 1 ) {
- newWidth[0] = newHeight[0] = newDepth[0] = 1;
- return;
- }
- widthPowerOf2 = widthAtLevelOne;
- heightPowerOf2 = heightAtLevelOne;
- depthPowerOf2 = depthAtLevelOne;
- }
- } while( proxyWidth[0] == 0 );
- // loop must terminate
-
- // return the width & height at level 0 that fits
- newWidth[0] = widthPowerOf2;
- newHeight[0] = heightPowerOf2;
- newDepth[0] = depthPowerOf2;
- }
-
- public static int elements_per_group( int format, int type ) {
- // Return the number of elements per grtoup of a specified gromat
-
- // If the type is packedpixels then answer is 1
- if( type == GL.GL_UNSIGNED_BYTE_3_3_2 ||
- type == GL.GL_UNSIGNED_BYTE_2_3_3_REV ||
- type == GL.GL_UNSIGNED_SHORT_5_6_5 ||
- type == GL.GL_UNSIGNED_SHORT_5_6_5_REV ||
- type == GL.GL_UNSIGNED_SHORT_4_4_4_4 ||
- type == GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ||
- type == GL.GL_UNSIGNED_SHORT_5_5_5_1 ||
- type == GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ||
- type == GL.GL_UNSIGNED_INT_8_8_8_8 ||
- type == GL.GL_UNSIGNED_INT_8_8_8_8_REV ||
- type == GL.GL_UNSIGNED_INT_10_10_10_2 ||
- type == GL.GL_UNSIGNED_INT_2_10_10_10_REV ) {
- return( 1 );
- }
-
- // Types are not packed pixels so get elements per group
- switch( format ) {
- case( GL.GL_RGB ):
- case( GL.GL_BGR ):
- return( 3 );
- case( GL.GL_LUMINANCE_ALPHA ):
- return( 2 );
- case( GL.GL_RGBA ):
- case( GL.GL_BGRA ):
- return( 4 );
- default:
- return( 1 );
- }
- }
-
- public static int bytes_per_element( int type ) {
- // return the number of bytes per element, based on the element type
-
- switch( type ) {
- case( GL.GL_BITMAP ):
- case( GL.GL_BYTE ):
- case( GL.GL_UNSIGNED_BYTE ):
- case( GL.GL_UNSIGNED_BYTE_3_3_2 ):
- case( GL.GL_UNSIGNED_BYTE_2_3_3_REV ):
- return( 1 );
- case( GL.GL_SHORT ):
- case( GL.GL_UNSIGNED_SHORT ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5 ):
- case( GL.GL_UNSIGNED_SHORT_5_6_5_REV ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4 ):
- case( GL.GL_UNSIGNED_SHORT_4_4_4_4_REV ):
- case( GL.GL_UNSIGNED_SHORT_5_5_5_1 ):
- case( GL.GL_UNSIGNED_SHORT_1_5_5_5_REV ):
- return( 2 );
- case( GL.GL_INT ):
- case( GL.GL_UNSIGNED_INT ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8 ):
- case( GL.GL_UNSIGNED_INT_8_8_8_8_REV ):
- case( GL.GL_UNSIGNED_INT_10_10_10_2 ):
- case( GL.GL_UNSIGNED_INT_2_10_10_10_REV ):
- case( GL.GL_FLOAT ):
- return( 4 );
- default:
- return( 4 );
- }
- }
-
- public static boolean is_index( int format ) {
- return( format == GL.GL_COLOR_INDEX || format == GL.GL_STENCIL_INDEX );
- }
-
- /* Compute memory required for internal packed array of data of given type and format. */
-
- public static int image_size( int width, int height, int format, int type ) {
- int bytes_per_row;
- int components;
-
- assert( width > 0 );
- assert( height > 0 );
- components = elements_per_group( format, type );
- if( type == GL.GL_BITMAP ) {
- bytes_per_row = (width + 7) / 8;
- } else {
- bytes_per_row = bytes_per_element( type ) * width;
- }
- return( bytes_per_row * height * components );
- }
-
- public static int imageSize3D( int width, int height, int depth, int format, int type ) {
- int components = elements_per_group( format, type );
- int bytes_per_row = bytes_per_element( type ) * width;
-
- assert( width > 0 && height > 0 && depth > 0 );
- assert( type != GL.GL_BITMAP );
-
- return( bytes_per_row * height * depth * components );
- }
-
- public static void retrieveStoreModes( GL gl, PixelStorageModes psm ) {
- int[] a = new int[1];
- gl.glGetIntegerv( GL.GL_UNPACK_ALIGNMENT, a, 0);
- psm.setUnpackAlignment( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_ROW_LENGTH, a, 0);
- psm.setUnpackRowLength( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_SKIP_ROWS, a, 0);
- psm.setUnpackSkipRows( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_SKIP_PIXELS, a, 0);
- psm.setUnpackSkipPixels( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_LSB_FIRST, a, 0);
- psm.setUnpackLsbFirst( ( a[0] == 1 ) );
- gl.glGetIntegerv( GL.GL_UNPACK_SWAP_BYTES, a, 0);
- psm.setUnpackSwapBytes( ( a[0] == 1 ) );
-
- gl.glGetIntegerv( GL.GL_PACK_ALIGNMENT, a, 0);
- psm.setPackAlignment( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_ROW_LENGTH, a, 0);
- psm.setPackRowLength( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_SKIP_ROWS, a, 0);
- psm.setPackSkipRows( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_SKIP_PIXELS, a, 0);
- psm.setPackSkipPixels( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_LSB_FIRST, a, 0);
- psm.setPackLsbFirst( ( a[0] == 1 ) );
- gl.glGetIntegerv( GL.GL_PACK_SWAP_BYTES, a, 0);
- psm.setPackSwapBytes( ( a[0] == 1 ) );
- }
-
- public static void retrieveStoreModes3D( GL gl, PixelStorageModes psm ) {
- int[] a = new int[1];
- gl.glGetIntegerv( GL.GL_UNPACK_ALIGNMENT, a, 0);
- psm.setUnpackAlignment( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_ROW_LENGTH, a, 0);
- psm.setUnpackRowLength( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_SKIP_ROWS, a, 0);
- psm.setUnpackSkipRows( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_SKIP_PIXELS, a, 0);
- psm.setUnpackSkipPixels( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_LSB_FIRST, a, 0);
- psm.setUnpackLsbFirst( ( a[0] == 1 ) );
- gl.glGetIntegerv( GL.GL_UNPACK_SWAP_BYTES, a, 0);
- psm.setUnpackSwapBytes( ( a[0] == 1 ) );
- gl.glGetIntegerv( GL.GL_UNPACK_SKIP_IMAGES, a, 0);
- psm.setUnpackSkipImages( a[0] );
- gl.glGetIntegerv( GL.GL_UNPACK_IMAGE_HEIGHT, a, 0);
- psm.setUnpackImageHeight( a[0] );
-
- gl.glGetIntegerv( GL.GL_PACK_ALIGNMENT, a, 0);
- psm.setPackAlignment( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_ROW_LENGTH, a, 0);
- psm.setPackRowLength( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_SKIP_ROWS, a, 0);
- psm.setPackSkipRows( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_SKIP_PIXELS, a, 0 );
- psm.setPackSkipPixels( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_LSB_FIRST, a, 0 );
- psm.setPackLsbFirst( ( a[0] == 1 ) );
- gl.glGetIntegerv( GL.GL_PACK_SWAP_BYTES, a, 0 );
- psm.setPackSwapBytes( ( a[0] == 1 ) );
- gl.glGetIntegerv( GL.GL_PACK_SKIP_IMAGES, a, 0 );
- psm.setPackSkipImages( a[0] );
- gl.glGetIntegerv( GL.GL_PACK_IMAGE_HEIGHT, a, 0 );
- psm.setPackImageHeight( a[0] );
- }
-
- public static int gluScaleImage( GL gl, int format, int widthin, int heightin,
- int typein, ByteBuffer datain, int widthout, int heightout,
- int typeout, ByteBuffer dataout ) {
- int datainPos = datain.position();
- int dataoutPos = dataout.position();
- try {
-
- int components;
- ByteBuffer beforeimage;
- ByteBuffer afterimage;
- PixelStorageModes psm = new PixelStorageModes();
-
- if( (widthin == 0) || (heightin == 0) || (widthout == 0) || (heightout == 0) ) {
- return( 0 );
- }
- if( (widthin < 0) || (heightin < 0) || (widthout < 0) || (heightout < 0) ) {
- return( GLU.GLU_INVALID_VALUE );
- }
- if( !legalFormat( format ) || !legalType( typein ) || !legalType( typeout ) ) {
- return( GLU.GLU_INVALID_ENUM );
- }
- if( !isLegalFormatForPackedPixelType( format, typein ) ) {
- return( GLU.GLU_INVALID_OPERATION );
- }
- if( !isLegalFormatForPackedPixelType( format, typeout ) ) {
- return( GLU.GLU_INVALID_OPERATION );
- }
- beforeimage = ByteBuffer.allocateDirect( image_size( widthin, heightin, format, GL.GL_UNSIGNED_SHORT ) ).order( ByteOrder.nativeOrder() );
- afterimage = ByteBuffer.allocateDirect( image_size( widthout, heightout, format, GL.GL_UNSIGNED_SHORT ) ).order( ByteOrder.nativeOrder() );
- if( beforeimage == null || afterimage == null ) {
- return( GLU.GLU_OUT_OF_MEMORY );
- }
-
- retrieveStoreModes( gl, psm );
- Image.fill_image( psm, widthin, heightin, format, typein, is_index( format ), datain, beforeimage.asShortBuffer() );
- components = elements_per_group( format, 0 );
- ScaleInternal.scale_internal( components, widthin, heightin, beforeimage.asShortBuffer(), widthout, heightout, afterimage.asShortBuffer() );
- Image.empty_image( psm, widthout, heightout, format, typeout, is_index( format ), afterimage.asShortBuffer(), dataout );
-
- return( 0 );
- } finally {
- datain.position(datainPos);
- dataout.position(dataoutPos);
- }
- }
-
- public static int gluBuild1DMipmapLevels( GL gl, int target, int internalFormat,
- int width, int format, int type, int userLevel, int baseLevel,
- int maxLevel, ByteBuffer data ) {
- int dataPos = data.position();
- try {
-
- int levels;
-
- int rc = checkMipmapArgs( internalFormat, format, type );
- if( rc != 0 ) {
- return( rc );
- }
-
- if( width < 1 ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- levels = computeLog( width );
-
- levels += userLevel;
- if( !isLegalLevels( userLevel, baseLevel, maxLevel, levels ) ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- return( BuildMipmap.gluBuild1DMipmapLevelsCore( gl, target, internalFormat, width,
- width, format, type, userLevel, baseLevel, maxLevel, data ) );
- } finally {
- data.position(dataPos);
- }
- }
-
- public static int gluBuild1DMipmaps( GL gl, int target, int internalFormat, int width,
- int format, int type, ByteBuffer data ) {
- int dataPos = data.position();
-
- try {
- int[] widthPowerOf2 = new int[1];
- int levels;
- int[] dummy = new int[1];
-
- int rc = checkMipmapArgs( internalFormat, format, type );
- if( rc != 0 ) {
- return( rc );
- }
-
- if( width < 1 ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- closestFit( gl, target, width, 1, internalFormat, format, type, widthPowerOf2, dummy );
- levels = computeLog( widthPowerOf2[0] );
-
- return( BuildMipmap.gluBuild1DMipmapLevelsCore( gl, target, internalFormat,
- width, widthPowerOf2[0], format, type, 0, 0, levels, data ) );
- } finally {
- data.position(dataPos);
- }
- }
-
-
- public static int gluBuild2DMipmapLevels( GL gl, int target, int internalFormat,
- int width, int height, int format, int type, int userLevel,
- int baseLevel, int maxLevel, Object data ) {
- int dataPos = 0;
-
- int level, levels;
-
- int rc = checkMipmapArgs( internalFormat, format, type );
- if( rc != 0 ) {
- return( rc );
- }
-
- if( width < 1 || height < 1 ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- levels = computeLog( width );
- level = computeLog( height );
- if( level > levels ) {
- levels = level;
- }
-
- levels += userLevel;
- if( !isLegalLevels( userLevel, baseLevel, maxLevel, levels ) ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- //PointerWrapper pointer = PointerWrapperFactory.getPointerWrapper( data );
- ByteBuffer buffer = null;
- if( data instanceof ByteBuffer ) {
- buffer = (ByteBuffer)data;
- dataPos = buffer.position();
- } else if( data instanceof byte[] ) {
- byte[] array = (byte[])data;
- buffer = ByteBuffer.allocateDirect(array.length);
- buffer.put(array);
- } else if( data instanceof short[] ) {
- short[] array = (short[])data;
- buffer = ByteBuffer.allocateDirect( array.length * 2 );
- ShortBuffer sb = buffer.asShortBuffer();
- sb.put( array );
- } else if( data instanceof int[] ) {
- int[] array = (int[])data;
- buffer = ByteBuffer.allocateDirect( array.length * 4 );
- IntBuffer ib = buffer.asIntBuffer();
- ib.put( array );
- } else if( data instanceof float[] ) {
- float[] array = (float[])data;
- buffer = ByteBuffer.allocateDirect( array.length * 4 );
- FloatBuffer fb = buffer.asFloatBuffer();
- fb.put( array );
- }
-
- try {
- return( BuildMipmap.gluBuild2DMipmapLevelsCore( gl, target, internalFormat,
- width, height, width, height, format, type, userLevel, baseLevel,
- maxLevel, buffer ) );
- } finally {
- buffer.position(dataPos);
- }
- }
-
-
- public static int gluBuild2DMipmaps( GL gl, int target, int internalFormat,
- int width, int height, int format, int type, Object data ) {
- int dataPos = 0;
-
- int[] widthPowerOf2 = new int[1];
- int[] heightPowerOf2 = new int[1];
- int level, levels;
-
- int rc = checkMipmapArgs( internalFormat, format, type );
- if( rc != 0 ) {
- return( rc );
- }
-
- if( width < 1 || height < 1 ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- closestFit( gl, target, width, height, internalFormat, format, type,
- widthPowerOf2, heightPowerOf2 );
-
- levels = computeLog( widthPowerOf2[0] );
- level = computeLog( heightPowerOf2[0] );
- if( level > levels ) {
- levels = level;
- }
-
- //PointerWrapper pointer = PointerWrapperFactory.getPointerWrapper( data );
- ByteBuffer buffer = null;
- if( data instanceof ByteBuffer ) {
- buffer = (ByteBuffer)data;
- dataPos = buffer.position();
- } else if( data instanceof byte[] ) {
- byte[] array = (byte[])data;
- buffer = ByteBuffer.allocateDirect(array.length);
- buffer.put(array);
- } else if( data instanceof short[] ) {
- short[] array = (short[])data;
- buffer = ByteBuffer.allocateDirect( array.length * 2 );
- ShortBuffer sb = buffer.asShortBuffer();
- sb.put( array );
- } else if( data instanceof int[] ) {
- int[] array = (int[])data;
- buffer = ByteBuffer.allocateDirect( array.length * 4 );
- IntBuffer ib = buffer.asIntBuffer();
- ib.put( array );
- } else if( data instanceof float[] ) {
- float[] array = (float[])data;
- buffer = ByteBuffer.allocateDirect( array.length * 4 );
- FloatBuffer fb = buffer.asFloatBuffer();
- fb.put( array );
- }
-
- try {
- return( BuildMipmap.gluBuild2DMipmapLevelsCore( gl, target, internalFormat,
- width, height, widthPowerOf2[0], heightPowerOf2[0], format, type, 0,
- 0, levels, buffer ) );
- } finally {
- buffer.position(dataPos);
- }
- }
-
-
- public static int gluBuild3DMipmaps( GL gl, int target, int internalFormat,
- int width, int height, int depth, int format, int type, ByteBuffer data ) {
- int dataPos = data.position();
- try {
-
- int[] widthPowerOf2 = new int[1];
- int[] heightPowerOf2 = new int[1];
- int[] depthPowerOf2 = new int[1];
- int level, levels;
-
- int rc = checkMipmapArgs( internalFormat, format, type );
- if( rc != 0 ) {
- return( rc );
- }
-
- if( width < 1 || height < 1 || depth < 1 ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- if( type == GL.GL_BITMAP ) {
- return( GLU.GLU_INVALID_ENUM );
- }
-
- closestFit3D( gl, target, width, height, depth, internalFormat, format,
- type, widthPowerOf2, heightPowerOf2, depthPowerOf2 );
-
- levels = computeLog( widthPowerOf2[0] );
- level = computeLog( heightPowerOf2[0] );
- if( level > levels ) {
- levels = level;
- }
- level = computeLog( depthPowerOf2[0] );
- if( level > levels ) {
- levels = level;
- }
-
- return( BuildMipmap.gluBuild3DMipmapLevelsCore( gl, target, internalFormat, width,
- height, depth, widthPowerOf2[0], heightPowerOf2[0], depthPowerOf2[0],
- format, type, 0, 0, levels, data ) );
- } finally {
- data.position(dataPos);
- }
- }
-
- public static int gluBuild3DMipmapLevels( GL gl, int target, int internalFormat,
- int width, int height, int depth, int format, int type, int userLevel,
- int baseLevel, int maxLevel, ByteBuffer data ) {
- int dataPos = data.position();
- try {
- int level, levels;
-
- int rc = checkMipmapArgs( internalFormat, format, type );
- if( rc != 0 ) {
- return( rc );
- }
-
- if( width < 1 || height < 1 || depth < 1 ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- if( type == GL.GL_BITMAP ) {
- return( GLU.GLU_INVALID_ENUM );
- }
-
- levels = computeLog( width );
- level = computeLog( height );
- if( level > levels ) {
- levels = level;
- }
- level = computeLog( depth );
- if( level > levels ) {
- levels = level;
- }
-
- levels += userLevel;
- if( !isLegalLevels( userLevel, baseLevel, maxLevel, levels ) ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- return( BuildMipmap.gluBuild3DMipmapLevelsCore( gl, target, internalFormat, width,
- height, depth, width, height, depth, format, type, userLevel,
- baseLevel, maxLevel, data ) );
- } finally {
- data.position(dataPos);
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/PixelStorageModes.java b/src/classes/com/sun/opengl/impl/mipmap/PixelStorageModes.java
deleted file mode 100644
index bde3624d2..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/PixelStorageModes.java
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-/**
- *
- * @author Administrator
- */
-public class PixelStorageModes {
-
- /**
- * Holds value of property packAlignment.
- */
- private int packAlignment;
-
- /**
- * Holds value of property packRowLength.
- */
- private int packRowLength;
-
- /**
- * Holds value of property packSkipRows.
- */
- private int packSkipRows;
-
- /**
- * Holds value of property packSkipPixels.
- */
- private int packSkipPixels;
-
- /**
- * Holds value of property packLsbFirst.
- */
- private boolean packLsbFirst;
-
- /**
- * Holds value of property packSwapBytes.
- */
- private boolean packSwapBytes;
-
- /**
- * Holds value of property packSkipImages.
- */
- private int packSkipImages;
-
- /**
- * Holds value of property packImageHeight.
- */
- private int packImageHeight;
-
- /**
- * Holds value of property unpackAlignment.
- */
- private int unpackAlignment;
-
- /**
- * Holds value of property unpackRowLength.
- */
- private int unpackRowLength;
-
- /**
- * Holds value of property unpackSkipRows.
- */
- private int unpackSkipRows;
-
- /**
- * Holds value of property unpackSkipPixels.
- */
- private int unpackSkipPixels;
-
- /**
- * Holds value of property unpackLsbFirst.
- */
- private boolean unpackLsbFirst;
-
- /**
- * Holds value of property unpackSwapBytes.
- */
- private boolean unpackSwapBytes;
-
- /**
- * Holds value of property unpackSkipImages.
- */
- private int unpackSkipImages;
-
- /**
- * Holds value of property unpackImageHeight.
- */
- private int unpackImageHeight;
-
- /** Creates a new instance of PixelStorageModes */
- public PixelStorageModes() {
- }
-
- /**
- * Getter for property packAlignment.
- * @return Value of property packAlignment.
- */
- public int getPackAlignment() {
-
- return this.packAlignment;
- }
-
- /**
- * Setter for property packAlignment.
- * @param packAlignment New value of property packAlignment.
- */
- public void setPackAlignment(int packAlignment) {
-
- this.packAlignment = packAlignment;
- }
-
- /**
- * Getter for property packRowLength.
- * @return Value of property packRowLength.
- */
- public int getPackRowLength() {
-
- return this.packRowLength;
- }
-
- /**
- * Setter for property packRowLength.
- * @param packRowLength New value of property packRowLength.
- */
- public void setPackRowLength(int packRowLength) {
-
- this.packRowLength = packRowLength;
- }
-
- /**
- * Getter for property packSkipRows.
- * @return Value of property packSkipRows.
- */
- public int getPackSkipRows() {
-
- return this.packSkipRows;
- }
-
- /**
- * Setter for property packSkipRows.
- * @param packSkipRows New value of property packSkipRows.
- */
- public void setPackSkipRows(int packSkipRows) {
-
- this.packSkipRows = packSkipRows;
- }
-
- /**
- * Getter for property packSkipPixels.
- * @return Value of property packSkipPixels.
- */
- public int getPackSkipPixels() {
-
- return this.packSkipPixels;
- }
-
- /**
- * Setter for property packSkipPixels.
- * @param packSkipPixels New value of property packSkipPixels.
- */
- public void setPackSkipPixels(int packSkipPixels) {
-
- this.packSkipPixels = packSkipPixels;
- }
-
- /**
- * Getter for property packLsbFirst.
- * @return Value of property packLsbFirst.
- */
- public boolean getPackLsbFirst() {
-
- return this.packLsbFirst;
- }
-
- /**
- * Setter for property packLsbFirst.
- * @param packLsbFirst New value of property packLsbFirst.
- */
- public void setPackLsbFirst(boolean packLsbFirst) {
-
- this.packLsbFirst = packLsbFirst;
- }
-
- /**
- * Getter for property packSwapBytes.
- * @return Value of property packSwapBytes.
- */
- public boolean getPackSwapBytes() {
-
- return this.packSwapBytes;
- }
-
- /**
- * Setter for property packSwapBytes.
- * @param packSwapBytes New value of property packSwapBytes.
- */
- public void setPackSwapBytes(boolean packSwapBytes) {
-
- this.packSwapBytes = packSwapBytes;
- }
-
- /**
- * Getter for property packSkipImages.
- * @return Value of property packSkipImages.
- */
- public int getPackSkipImages() {
-
- return this.packSkipImages;
- }
-
- /**
- * Setter for property packSkipImages.
- * @param packSkipImages New value of property packSkipImages.
- */
- public void setPackSkipImages(int packSkipImages) {
-
- this.packSkipImages = packSkipImages;
- }
-
- /**
- * Getter for property packImageHeight.
- * @return Value of property packImageHeight.
- */
- public int getPackImageHeight() {
-
- return this.packImageHeight;
- }
-
- /**
- * Setter for property packImageHeight.
- * @param packImageHeight New value of property packImageHeight.
- */
- public void setPackImageHeight(int packImageHeight) {
-
- this.packImageHeight = packImageHeight;
- }
-
- /**
- * Getter for property unpackAlignment.
- * @return Value of property unpackAlignment.
- */
- public int getUnpackAlignment() {
-
- return this.unpackAlignment;
- }
-
- /**
- * Setter for property unpackAlignment.
- * @param unpackAlignment New value of property unpackAlignment.
- */
- public void setUnpackAlignment(int unpackAlignment) {
-
- this.unpackAlignment = unpackAlignment;
- }
-
- /**
- * Getter for property unpackRowLength.
- * @return Value of property unpackRowLength.
- */
- public int getUnpackRowLength() {
-
- return this.unpackRowLength;
- }
-
- /**
- * Setter for property unpackRowLength.
- * @param unpackRowLength New value of property unpackRowLength.
- */
- public void setUnpackRowLength(int unpackRowLength) {
-
- this.unpackRowLength = unpackRowLength;
- }
-
- /**
- * Getter for property unpackSkipRows.
- * @return Value of property unpackSkipRows.
- */
- public int getUnpackSkipRows() {
-
- return this.unpackSkipRows;
- }
-
- /**
- * Setter for property unpackSkipRows.
- * @param unpackSkipRows New value of property unpackSkipRows.
- */
- public void setUnpackSkipRows(int unpackSkipRows) {
-
- this.unpackSkipRows = unpackSkipRows;
- }
-
- /**
- * Getter for property unpackSkipPixels.
- * @return Value of property unpackSkipPixels.
- */
- public int getUnpackSkipPixels() {
-
- return this.unpackSkipPixels;
- }
-
- /**
- * Setter for property unpackSkipPixels.
- * @param unpackSkipPixels New value of property unpackSkipPixels.
- */
- public void setUnpackSkipPixels(int unpackSkipPixels) {
-
- this.unpackSkipPixels = unpackSkipPixels;
- }
-
- /**
- * Getter for property unpackLsbFirst.
- * @return Value of property unpackLsbFirst.
- */
- public boolean getUnpackLsbFirst() {
-
- return this.unpackLsbFirst;
- }
-
- /**
- * Setter for property unpackLsbFirst.
- * @param unpackLsbFirst New value of property unpackLsbFirst.
- */
- public void setUnpackLsbFirst(boolean unpackLsbFirst) {
-
- this.unpackLsbFirst = unpackLsbFirst;
- }
-
- /**
- * Getter for property unpackSwapBytes.
- * @return Value of property unpackSwapBytes.
- */
- public boolean getUnpackSwapBytes() {
-
- return this.unpackSwapBytes;
- }
-
- /**
- * Setter for property unpackSwapBytes.
- * @param unpackSwapBytes New value of property unpackSwapBytes.
- */
- public void setUnpackSwapBytes(boolean unpackSwapBytes) {
-
- this.unpackSwapBytes = unpackSwapBytes;
- }
-
- /**
- * Getter for property unpackSkipImages.
- * @return Value of property unpackSkipImages.
- */
- public int getUnpackSkipImages() {
-
- return this.unpackSkipImages;
- }
-
- /**
- * Setter for property unpackSkipImages.
- * @param unpackSkipImages New value of property unpackSkipImages.
- */
- public void setUnpackSkipImages(int unpackSkipImages) {
-
- this.unpackSkipImages = unpackSkipImages;
- }
-
- /**
- * Getter for property unpackImageHeight.
- * @return Value of property unpackImageHeight.
- */
- public int getUnpackImageHeight() {
-
- return this.unpackImageHeight;
- }
-
- /**
- * Setter for property unpackImageHeight.
- * @param unpackImageHeight New value of property unpackImageHeight.
- */
- public void setUnpackImageHeight(int unpackImageHeight) {
-
- this.unpackImageHeight = unpackImageHeight;
- }
-
-
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/ScaleInternal.java b/src/classes/com/sun/opengl/impl/mipmap/ScaleInternal.java
deleted file mode 100644
index 90d407c36..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/ScaleInternal.java
+++ /dev/null
@@ -1,2447 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.glu.GLU;
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class ScaleInternal {
-
- public static final float UINT_MAX = (float)(0x00000000FFFFFFFF);
-
- public static void scale_internal( int components, int widthin, int heightin,
- ShortBuffer datain, int widthout, int heightout, ShortBuffer dataout ) {
- float x, lowx, highx, convx, halfconvx;
- float y, lowy, highy, convy, halfconvy;
- float xpercent, ypercent;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, yint, xint, xindex, yindex;
- int temp;
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage( components, widthin, heightin, datain, dataout );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- halfconvx = convx / 2;
- halfconvy = convy / 2;
- for( i = 0; i < heightout; i++ ) {
- y = convy * ( i + 0.5f );
- if( heightin > heightout ) {
- highy = y + halfconvy;
- lowy = y - halfconvy;
- } else {
- highy = y + 0.5f;
- lowy = y - 0.5f;
- }
- for( j = 0; j < widthout; j++ ) {
- x = convx * ( j + 0.5f );
- if( widthin > widthout ) {
- highx = x + halfconvx;
- lowx = x - halfconvx;
- } else {
- highx = x + 0.5f;
- lowx = x - 0.5f;
- }
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
- area = 0.0f;
-
- y = lowy;
- yint = (int)Math.floor( y );
- while( y < highy ) {
- yindex = ( yint + heightin ) % heightin;
- if( highy < yint + 1 ) {
- ypercent = highy - y;
- } else {
- ypercent = yint + 1 - y;
- }
-
- x = lowx;
- xint = (int)Math.floor( x );
-
- while( x < highx ) {
- xindex = ( xint + widthin ) % widthin;
- if( highx < xint + 1 ) {
- xpercent = highx -x;
- } else {
- xpercent = xint + 1 - x;
- }
-
- percent = xpercent * ypercent;
- area += percent;
- temp = ( xindex + ( yindex * widthin) ) * components;
- for( k = 0; k < components; k++ ) {
- totals[k] += datain.get( temp + k ) * percent;
- }
-
- xint++;
- x = xint;
- }
- yint++;
- y = yint;
- }
-
- temp = ( j + ( i * widthout ) ) * components;
- for( k = 0; k < components; k++ ) {
- // totals[] should be rounded in the case of enlarging an RGB
- // ramp when the type is 332 or 4444
- dataout.put( temp + k, (short)((totals[k] + 0.5f) / area) );
- }
- }
- }
- }
-
- public static void scale_internal_ubyte( int components, int widthin, int heightin,
- ByteBuffer datain, int widthout, int heightout,
- ByteBuffer dataout, int element_size, int ysize, int group_size ) {
- float x, convx;
- float y, convy;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outindex;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage_ubyte( components, widthin, heightin, datain, dataout,
- element_size, ysize, group_size );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convy_float;
-
- for( i = 0; i < heightout; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightin)
- highy_int = heightin - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthout; j++ ) {
-
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // caulate the value for pixels in the 1st row
- xindex = lowx_int * group_size;
-
- if( ( highy_int > lowy_int ) && ( highx_int > lowx_int ) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * ysize;
- percent = y_percent * ( 1 - lowx_float );
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * y_percent;
- }
- }
- temp += group_size;
- right = temp;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
-
- // calculate the value for pixels in the last row
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * y_percent;
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
-
- // calculate the value for the pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += ysize;
- right += ysize;
- for( k = 0; k < components; k++, left += element_size, right += element_size ) {
- float f = 0.0f;
- datain.position( left );
- f = ( 0x000000FF & datain.get() ) * ( 1.0f - lowx_float );
- datain.position( right );
- f += ( 0x000000FF & datain.get() ) * highx_float;
- totals[k] += f;
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float) * x_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * x_percent;
- }
- }
- percent = x_percent * highy_float;
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * y_percent;
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() ) * percent;
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + group_size + ( lowy_int + 1 ) * ysize;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += ( 0x000000FF & datain.get() );
- }
- temp += group_size;
- }
- temp0 += ysize;
- }
-
- outindex = ( j + ( i * widthout ) ) * components;
- for( k = 0; k < components; k++ ) {
- dataout.position( outindex + k );
- dataout.put( (byte)(totals[k] / area) );
- }
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthin - 1) {
- int delta = (highx_int - widthin + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- }
-
- public static void scale_internal_byte( int components, int widthin, int heightin,
- ByteBuffer datain, int widthout, int heightout,
- ByteBuffer dataout, int element_size, int ysize,
- int group_size ) {
- float x, convx;
- float y, convy;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outindex;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage_byte( components, widthin, heightin, datain, dataout,
- element_size, ysize, group_size );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convy_float;
-
- for( i = 0; i < heightout; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightin)
- highy_int = heightin - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthout; j++ ) {
-
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // caulate the value for pixels in the 1st row
- xindex = lowx_int * group_size;
- if( ( highy_int > lowy_int ) && ( highx_int > lowx_int ) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * ysize;
- percent = y_percent * ( 1 - lowx_float );
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * y_percent;
- }
- }
- temp += group_size;
- right = temp;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
-
- // calculate the value for pixels in the last row
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * y_percent;
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
-
- // calculate the value for the pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += ysize;
- right += ysize;
- for( k = 0; k < components; k++, left += element_size, right += element_size ) {
- float f = 0.0f;
- datain.position( left );
- f = datain.get() * ( 1 - lowx_float );
- datain.position( right );
- f += datain.get() * highx_float;
- totals[k] += f;
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float) * x_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * x_percent;
- }
- }
- percent = x_percent * highy_float;
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * y_percent;
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get() * percent;
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + group_size + ( lowy_int + 1 ) * ysize;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- totals[k] += datain.get();
- }
- temp += group_size;
- }
- temp0 += ysize;
- }
-
- outindex = ( j + ( i * widthout ) ) * components;
- for( k = 0; k < components; k++ ) {
- dataout.position( outindex + k );
- dataout.put( (byte)(totals[k] / area) );
- }
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthin - 1) {
- int delta = (highx_int - widthin + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- }
-
- public static void scale_internal_ushort( int components, int widthin, int heightin,
- ByteBuffer datain, int widthout, int heightout,
- ShortBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- float x, convx;
- float y, convy;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outindex;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage_ushort( components, widthin, heightin, datain, dataout,
- element_size, ysize, group_size, myswap_bytes );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convy_float;
-
- for( i = 0; i < heightout; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightin)
- highy_int = heightin - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthout; j++ ) {
-
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // caulate the value for pixels in the 1st row
- xindex = lowx_int * group_size;
- if( ( highy_int > lowy_int ) && ( highx_int > lowx_int ) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * ysize;
- percent = y_percent * ( 1 - lowx_float );
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += ( 0x0000FFFF & ((int)Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ))) * percent;
- } else {
- totals[k] += ( 0x0000FFFF & datain.getShort() ) * percent;
- }
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += ( 0x0000FFFF & ((int)Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ))) * y_percent;
- } else {
- totals[k] += ( 0x0000FFFF & datain.getShort()) * y_percent;
- }
- }
- }
- temp += group_size;
- right = temp;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += ( 0x0000FFFF & (Mipmap.GLU_SWAP_2_BYTES( datain.getShort() ))) * percent;
- } else {
- totals[k] += ( 0x0000FFFF & datain.getShort()) * percent;
- }
- }
-
- // calculate the value for pixels in the last row
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * percent;
- } else {
- totals[k] += ( 0x0000FFFF & datain.getShort() ) * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * y_percent;
- } else {
- totals[k] += ( 0x0000FFFF & datain.getShort()) * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += ( 0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * percent;
- } else {
- totals[k] += ( 0x0000FFFF & datain.getShort()) * percent;
- }
- }
-
- // calculate the value for the pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += ysize;
- right += ysize;
- for( k = 0; k < components; k++, left += element_size, right += element_size ) {
- if( myswap_bytes ) {
- datain.position( left );
- float f = (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES(datain.getShort())) * ( 1 - lowx_float );
- datain.position( right );
- f += ((0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES(datain.getShort())) * highx_float);
- totals[k] += f;
- } else {
- datain.position( left );
- float f = ((0x0000FFFF & datain.getShort()) * ( 1 - lowx_float ));
- datain.position( right );
- f += ((0x0000FFFF & datain.getShort()) * highx_float);
- totals[k] += f;
- }
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float) * x_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() )) * percent;
- } else {
- totals[k] += (0x0000FFFF & datain.getShort()) * percent;
- }
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * x_percent;
- } else {
- totals[k] += (0x0000FFFF & datain.getShort()) * x_percent;
- }
- }
- }
- percent = x_percent * highy_float;
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort() )) * percent;
- } else {
- totals[k] += (0x0000FFFF & datain.getShort()) * percent;
- }
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * percent;
- } else {
- totals[k] += (0x0000FFFF & datain.getShort()) * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * y_percent;
- } else {
- totals[k] += (0x0000FFFF & datain.getShort()) * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * percent;
- } else {
- totals[k] += (0x0000FFFF & datain.getShort()) * percent;
- }
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()) ) * percent;
- } else {
- totals[k] += (0x0000FFFF & datain.getShort()) * percent;
- }
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + group_size + ( lowy_int + 1 ) * ysize;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x0000FFFF & Mipmap.GLU_SWAP_2_BYTES( datain.getShort()));
- } else {
- totals[k] += (0x0000FFFF & datain.getShort());
- }
- }
- temp += group_size;
- }
- temp0 += ysize;
- }
-
- outindex = ( j + ( i * widthout ) ) * components;
- for( k = 0; k < components; k++ ) {
- dataout.position( outindex + k );
- dataout.put( (short)(totals[k] / area) );
- }
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthin - 1) {
- int delta = (highx_int - widthin + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- }
-
- public static void scale_internal_short( int components, int widthin, int heightin,
- ByteBuffer datain, int widthout, int heightout,
- ShortBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- float x, convx;
- float y, convy;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outindex;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- int swapbuf; // unsigned buffer
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage_short( components, widthin, heightin, datain, dataout,
- element_size, ysize, group_size, myswap_bytes );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convy_float;
-
- for( i = 0; i < heightout; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightin)
- highy_int = heightin - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthout; j++ ) {
-
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // caulate the value for pixels in the 1st row
- xindex = lowx_int * group_size;
- if( ( highy_int > lowy_int ) && ( highx_int > lowx_int ) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * ysize;
- percent = y_percent * ( 1 - lowx_float );
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getShort() * y_percent;
- }
- }
- }
- temp += group_size;
- right = temp;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
-
- // calculate the value for pixels in the last row
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getShort() * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
-
- // calculate the value for the pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += ysize;
- right += ysize;
- for( k = 0; k < components; k++, left += element_size, right += element_size ) {
- if( myswap_bytes ) {
- datain.position( left );
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * ( 1 - lowx_float );
- datain.position( right );
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * highx_float;
- } else {
- datain.position( left );
- totals[k] += datain.getShort() * ( 1 - lowx_float );
- datain.position( right );
- totals[k] += datain.getShort() * highx_float;
- }
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float) * x_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort());
- totals[k] += swapbuf * x_percent;
- } else {
- totals[k] += datain.getShort() * x_percent;
- }
- }
- }
- percent = x_percent * highy_float;
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getShort() * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getShort() * percent;
- }
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + group_size + ( lowy_int + 1 ) * ysize;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_2_BYTES( datain.getShort() );
- totals[k] += swapbuf;
- } else {
- totals[k] += datain.getShort();
- }
- }
- temp += group_size;
- }
- temp0 += ysize;
- }
-
- outindex = ( j + ( i * widthout ) ) * components;
- for( k = 0; k < components; k++ ) {
- dataout.position( outindex + k );
- dataout.put( (short)(totals[k] / area) );
- }
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthin - 1) {
- int delta = (highx_int - widthin + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- }
-
- public static void scale_internal_uint( int components, int widthin, int heightin,
- ByteBuffer datain, int widthout, int heightout,
- IntBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- float x, convx;
- float y, convy;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outindex;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage_uint( components, widthin, heightin, datain, dataout,
- element_size, ysize, group_size, myswap_bytes );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convy_float;
-
- for( i = 0; i < heightout; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightin)
- highy_int = heightin - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthout; j++ ) {
-
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // caulate the value for pixels in the 1st row
- xindex = lowx_int * group_size;
- if( ( highy_int > lowy_int ) && ( highx_int > lowx_int ) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * ysize;
- percent = y_percent * ( 1 - lowx_float );
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt()) ) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt()) ) * y_percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * y_percent;
- }
- }
- }
- temp += group_size;
- right = temp;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt()) ) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
-
- // calculate the value for pixels in the last row
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt()) ) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt()) ) * y_percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt()) ) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
-
- // calculate the value for the pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += ysize;
- right += ysize;
- for( k = 0; k < components; k++, left += element_size, right += element_size ) {
- if( myswap_bytes ) {
- datain.position( left );
- totals[k] += ((0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES(datain.getInt())) * ( 1 - lowx_float ));
- datain.position( right );
- totals[k] += ((0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES(datain.getInt())) * highx_float);
- } else {
- datain.position( left );
- totals[k] += ((0x00000000FFFFFFFF & datain.getInt()) * ( 1 - lowx_float ));
- datain.position( right );
- totals[k] += ((0x00000000FFFFFFFF & datain.getInt()) * highx_float);
- }
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float) * x_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt())) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt())) * x_percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * x_percent;
- }
- }
- }
- percent = x_percent * highy_float;
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt())) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt())) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt())) * y_percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt())) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- long tempInt0 = ( 0xFFFFFFFFL & datain.getInt( temp_index ) );
- datain.position( temp_index );
- long tempInt1 = ( 0xFFFFFFFFL & datain.getInt() );
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt())) * percent;
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt()) * percent;
- }
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + group_size + ( lowy_int + 1 ) * ysize;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- totals[k] += (0x00000000FFFFFFFF & Mipmap.GLU_SWAP_4_BYTES( datain.getInt()));
- } else {
- totals[k] += (0x00000000FFFFFFFF & datain.getInt());
- }
- }
- temp += group_size;
- }
- temp0 += ysize;
- }
-
- outindex = ( j + ( i * widthout ) ) * components;
- float value = 0.0f;
- for( k = 0; k < components; k++ ) {
- value = totals[k] / area;
- dataout.position( outindex + k );
- if( value >= UINT_MAX ) {
- dataout.put( (int)value );
- } else {
- dataout.put( (int)(totals[k] / area) );
- }
- }
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthin - 1) {
- int delta = (highx_int - widthin + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- }
-
- public static void scale_internal_int( int components, int widthin, int heightin,
- ByteBuffer datain, int widthout, int heightout,
- IntBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- float x, convx;
- float y, convy;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outindex;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- long swapbuf; // unsigned buffer
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage_int( components, widthin, heightin, datain, dataout,
- element_size, ysize, group_size, myswap_bytes );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convy_float;
-
- for( i = 0; i < heightout; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightin)
- highy_int = heightin - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthout; j++ ) {
-
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // caulate the value for pixels in the 1st row
- xindex = lowx_int * group_size;
- if( ( highy_int > lowy_int ) && ( highx_int > lowx_int ) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * ysize;
- percent = y_percent * ( 1 - lowx_float );
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getInt() * y_percent;
- }
- }
- }
- temp += group_size;
- right = temp;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
-
- // calculate the value for pixels in the last row
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getInt() * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
-
- // calculate the value for the pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += ysize;
- right += ysize;
- for( k = 0; k < components; k++, left += element_size, right += element_size ) {
- if( myswap_bytes ) {
- datain.position( left );
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * ( 1 - lowx_float );
- datain.position( right );
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * highx_float;
- } else {
- datain.position( left );
- totals[k] += (datain.getInt() * ( 1 - lowx_float ));
- datain.position( right );
- totals[k] += (datain.getInt() * highx_float);
- }
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float) * x_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * x_percent;
- } else {
- totals[k] += datain.getInt() * x_percent;
- }
- }
- }
- percent = x_percent * highy_float;
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getInt() * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getInt() * percent;
- }
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + group_size + ( lowy_int + 1 ) * ysize;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getInt() );
- totals[k] += swapbuf;
- } else {
- totals[k] += datain.getInt();
- }
- }
- temp += group_size;
- }
- temp0 += ysize;
- }
-
- outindex = ( j + ( i * widthout ) ) * components;
- for( k = 0; k < components; k++ ) {
- dataout.position( outindex + k );
- dataout.put( (int)(totals[k] / area) );
- }
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthin - 1) {
- int delta = (highx_int - widthin + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- }
-
- public static void scale_internal_float( int components, int widthin, int heightin,
- ByteBuffer datain, int widthout, int heightout,
- FloatBuffer dataout, int element_size, int ysize,
- int group_size, boolean myswap_bytes ) {
- float x, convx;
- float y, convy;
- float percent;
- // Max components in a format is 4, so...
- float[] totals = new float[4];
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outindex;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- float swapbuf; // unsigned buffer
-
- if( (widthin == (widthout * 2)) && (heightin == (heightout * 2)) ) {
- HalveImage.halveImage_float( components, widthin, heightin, datain, dataout,
- element_size, ysize, group_size, myswap_bytes );
- return;
- }
- convy = (float)heightin / heightout;
- convx = (float)widthin / widthout;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convy_float;
-
- for( i = 0; i < heightout; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightin)
- highy_int = heightin - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthout; j++ ) {
-
- // Ok, now apply box filter to box that goes from (lowx, lowy)
- // to (highx, highy) on input data into this pixel on output
- // data.
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // caulate the value for pixels in the 1st row
- xindex = lowx_int * group_size;
- if( ( highy_int > lowy_int ) && ( highx_int > lowx_int ) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * ysize;
- percent = y_percent * ( 1 - lowx_float );
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getFloat() * y_percent;
- }
- }
- }
- temp += group_size;
- right = temp;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
-
- // calculate the value for pixels in the last row
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getFloat() * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
-
- // calculate the value for the pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += ysize;
- right += ysize;
- for( k = 0; k < components; k++, left += element_size, right += element_size ) {
- if( myswap_bytes ) {
- datain.position( left );
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * ( 1 - lowx_float );
- datain.position( right );
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * highx_float;
- } else {
- datain.position( left );
- totals[k] += (datain.getFloat() * ( 1 - lowx_float ));
- datain.position( right );
- totals[k] += (datain.getFloat() * highx_float);
- }
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float) * x_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * x_percent;
- } else {
- totals[k] += datain.getFloat() * x_percent;
- }
- }
- }
- percent = x_percent * highy_float;
- temp += ysize;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += group_size;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * y_percent;
- } else {
- totals[k] += datain.getFloat() * y_percent;
- }
- }
- }
- temp += group_size;
- percent = y_percent * highx_float;
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + (lowy_int * ysize);
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf * percent;
- } else {
- totals[k] += datain.getFloat() * percent;
- }
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + group_size + ( lowy_int + 1 ) * ysize;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- for( k = 0, temp_index = temp; k < components; k++, temp_index += element_size ) {
- datain.position( temp_index );
- if( myswap_bytes ) {
- swapbuf = Mipmap.GLU_SWAP_4_BYTES( datain.getFloat() );
- totals[k] += swapbuf;
- } else {
- totals[k] += datain.getFloat();
- }
- }
- temp += group_size;
- }
- temp0 += ysize;
- }
-
- outindex = ( j + ( i * widthout ) ) * components;
- for( k = 0; k < components; k++ ) {
- dataout.position( outindex + k );
- dataout.put( (totals[k] / area) );
- }
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthin - 1) {
- int delta = (highx_int - widthin + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- }
-
- public static void scaleInternalPackedPixel( int components, Extract extract,
- int widthIn, int heightIn, ByteBuffer dataIn, int widthOut,
- int heightOut, ByteBuffer dataOut, int pixelSizeInBytes,
- int rowSizeInBytes, boolean isSwap ) {
- float x, convx;
- float y, convy;
- float percent;
-
- // max components in a format is 4, so
- float[] totals = new float[4];
- float[] extractTotals = new float[4];
- float[] extractMoreTotals = new float[4];
- float[] shoveTotals = new float[4];
-
- float area;
- int i, j, k, xindex;
-
- int temp, temp0;
- int temp_index;
- int outIndex = 0;
-
- int lowx_int, highx_int, lowy_int, highy_int;
- float x_percent, y_percent;
- float lowx_float, highx_float, lowy_float, highy_float;
- float convy_float, convx_float;
- int convy_int, convx_int;
- int l, m;
- int left, right;
-
- if( widthIn == widthOut * 2 && heightIn == heightOut * 2 ) {
- HalveImage.halveImagePackedPixel( components, extract, widthIn, heightIn, dataIn, dataOut,
- pixelSizeInBytes, rowSizeInBytes, isSwap );
- return;
- }
- convy = (float)heightIn / (float)heightOut;
- convx = (float)widthIn / (float)widthOut;
- convy_int = (int)Math.floor( convy );
- convy_float = convy - convy_int;
- convx_int = (int)Math.floor( convx );
- convx_float = convx - convx_int;
-
- area = convx * convy;
-
- lowy_int = 0;
- lowy_float = 0.0f;
- highy_int = convy_int;
- highy_float = convx_float;
-
- for( i = 0; i < heightOut; i++ ) {
- // Clamp here to be sure we don't read beyond input buffer.
- if (highy_int >= heightIn)
- highy_int = heightIn - 1;
- lowx_int = 0;
- lowx_float = 0.0f;
- highx_int = convx_int;
- highx_float = convx_float;
-
- for( j = 0; j < widthOut; j++ ) {
- // ok now apply box filter to box that goes from( lowx, lowy )
- // to ( highx, highy ) on input data into this pixel on output data
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
-
- // calculate that value for pixels in the 1st row
- xindex = lowx_int * pixelSizeInBytes;
- if( (highy_int > lowy_int) && (highx_int > lowx_int) ) {
-
- y_percent = 1 - lowy_float;
- temp = xindex + lowy_int * rowSizeInBytes;
- percent = y_percent * ( 1 - lowx_float );
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- left = temp;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += pixelSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * y_percent;
- }
- }
- temp += pixelSizeInBytes;
- right = temp;
- percent = y_percent * highx_float;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- // calculate the value for pixels in the last row
-
- y_percent = highy_float;
- percent = y_percent * ( 1 - lowx_float );
- temp = xindex + highy_int * rowSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += pixelSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * y_percent;
- }
- }
- temp += pixelSizeInBytes;
- percent = y_percent * highx_float;
- dataIn.position( temp );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
-
- // calculate the value for pixels in the 1st and last column
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- left += rowSizeInBytes;
- right += rowSizeInBytes;
- dataIn.position( left );
- extract.extract( isSwap, dataIn, extractTotals );
- dataIn.position( right );
- extract.extract( isSwap, dataIn, extractMoreTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += ( extractTotals[k] * ( 1 - lowx_float ) + extractMoreTotals[k] * highx_float );
- }
- }
- } else if( highy_int > lowy_int ) {
- x_percent = highx_float - lowx_float;
- percent = ( 1 - lowy_float ) * x_percent;
- temp = xindex + lowy_int * rowSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp += rowSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * x_percent;
- }
- }
- percent = x_percent * highy_float;
- temp += rowSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- } else if( highx_int > lowx_int ) {
- y_percent = highy_float - lowy_float;
- percent = ( 1 - lowx_float ) * y_percent;
- temp = xindex + lowy_int * rowSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- temp += pixelSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * y_percent;
- }
- }
- temp += pixelSizeInBytes;
- percent = y_percent * highx_float;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- } else {
- percent = ( highy_float - lowy_float ) * ( highx_float - lowx_float );
- temp = xindex + lowy_int * rowSizeInBytes;
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- }
-
- // this is for the pixels in the body
- temp0 = xindex + pixelSizeInBytes + ( lowy_int + 1 ) * rowSizeInBytes;
- for( m = lowy_int + 1; m < highy_int; m++ ) {
- temp = temp0;
- for( l = lowx_int + 1; l < highx_int; l++ ) {
- dataIn.position( temp );
- extract.extract( isSwap, dataIn, extractTotals );
- for( k = 0; k < components; k++ ) {
- totals[k] += extractTotals[k] * percent;
- }
- temp += pixelSizeInBytes;
- }
- temp0 += rowSizeInBytes;
- }
-
- outIndex = ( j + ( i * widthOut ) );
- for( k = 0; k < components; k++ ) {
- shoveTotals[k] = totals[k] / area;
- }
- extract.shove( shoveTotals, outIndex, dataOut );
- lowx_int = highx_int;
- lowx_float = highx_float;
- highx_int += convx_int;
- highx_float += convx_float;
- if( highx_float > 1.0f ) {
- highx_float -= 1.0f;
- highx_int++;
- }
-
- // Clamp to make sure we don't run off the right edge
- if (highx_int > widthIn - 1) {
- int delta = (highx_int - widthIn + 1);
- lowx_int -= delta;
- highx_int -= delta;
- }
- }
- lowy_int = highy_int;
- lowy_float = highy_float;
- highy_int += convy_int;
- highy_float += convy_float;
- if( highy_float > 1.0f ) {
- highy_float -= 1.0f;
- highy_int++;
- }
- }
- assert( outIndex == ( widthOut * heightOut - 1) );
- }
-
- public static void scaleInternal3D( int components, int widthIn, int heightIn,
- int depthIn, ShortBuffer dataIn, int widthOut, int heightOut,
- int depthOut, ShortBuffer dataOut ) {
- float x, lowx, highx, convx, halfconvx;
- float y, lowy, highy, convy, halfconvy;
- float z, lowz, highz, convz, halfconvz;
- float xpercent, ypercent, zpercent;
- float percent;
- // max compnents in a format is 4
- float[] totals = new float[4];
- float volume;
- int i, j, d, k, zint, yint, xint, xindex, yindex, zindex;
- int temp;
-
- lowy = highy = lowx = highx = 0.0f;
-
- convz = (float)depthIn / depthOut;
- convy = (float)heightIn / heightOut;
- convx = (float)widthIn / widthOut;
- halfconvz = convz / 2.0f;
- halfconvy = convy / 2.0f;
- halfconvx = convx / 2.0f;
- for( d = 0; d < depthOut; d++ ) {
- z = convz * ( d + 0.5f );
- if( depthIn > depthOut ) {
- highz = z + halfconvz;
- lowz = z - halfconvz;
- } else {
- highz = z + 0.5f;
- lowz = z - 0.5f;
- }
- for( i = 0; i < heightOut; i++ ) {
- y = convy * ( i + 0.5f );
- if( heightIn > heightOut ) {
- highz = y + halfconvy;
- lowz = y - halfconvy;
- } else {
- highz = y + 0.5f;
- lowz = y - 0.5f;
- }
- for( j = 0; j < widthOut; j++ ) {
- x = convx * ( j + 0.5f );
- if( depthIn > depthOut ) {
- highz = x + halfconvx;
- lowz = x - halfconvx;
- } else {
- highz = x + 0.5f;
- lowz = x - 0.5f;
- }
-
- // Ok, now apply box filter to box that goes from ( lowx, lowy, lowz )
- // to ( highx, highy, highz ) on input data into this pixel on output data
-
- totals[0] = totals[1] = totals[2] = totals[3] = 0.0f;
- volume = 0.0f;
-
- z = lowz;
- zint = (int)(Math.floor( z ) );
- while( z < highz ) {
- zindex = ( zint + depthIn ) % depthIn;
- if( highz < zint + 1 ) {
- zpercent = highz - z;
- } else {
- zpercent = zint + 1 - z;
- }
-
- y = lowy;
- yint = (int)(Math.floor( y ) );
- while( y < highy ) {
- yindex = ( yint + heightIn ) % heightIn;
- if( highy < yint + 1 ) {
- ypercent = highy - y;
- } else {
- ypercent = yint + 1 - y;
- }
-
- x = lowx;
- xint = (int)(Math.floor( x ) );
-
- while( x < highx ) {
- xindex = (xint + widthIn ) % widthIn;
- if( highx < xint + 1 ) {
- xpercent = highx - x;
- } else {
- xpercent = xint + 1 - x;
- }
-
- percent = xpercent * ypercent * zpercent;
- volume += percent;
-
- temp = (xindex + ( yindex *widthIn) + (zindex * widthIn *heightIn)) * components;
- for( k = 0; k < components; k++ ) {
- assert( 0 <= (temp+k) && (temp+k) < (widthIn * heightIn * depthIn * components) );
- totals[k] += dataIn.get( temp + k ) * percent;
- }
- xint++;
- x = xint;
- } // while x
- yint++;
- y = yint;
- } // while y
- zint++;
- z = zint;
- } // while z
-
- temp = ( j + ( i * widthOut ) + (d * widthOut * heightOut ) ) * components;
- for( k = 0; k < components; k++ ) {
- // totals should be rounded in the case of enlarging an rgb ramp when the type is 332 or 4444
- assert( 0 <= ( temp + k ) && ( temp + k ) < (widthOut * heightOut* depthOut * components) );
- dataOut.put( temp + k, (short)((totals[k] + 0.5f) / volume ) );
- }
- }
- }
- }
- }
-
- public static int gluScaleImage3D( GL gl, int format, int widthIn, int heightIn,
- int depthIn, int typeIn, ByteBuffer dataIn, int widthOut, int heightOut,
- int depthOut, int typeOut, ByteBuffer dataOut ) {
- int components;
- ShortBuffer beforeImage, afterImage;
- PixelStorageModes psm = new PixelStorageModes();
-
- if( widthIn == 0 || heightIn == 0 || depthIn == 0 ||
- widthOut == 0 || heightOut == 0 || depthOut == 0 ) {
- return( 0 );
- }
-
- if( widthIn < 0 || heightIn < 0 || depthIn < 0 ||
- widthOut < 0 || heightOut < 0 || depthOut < 0 ) {
- return( GLU.GLU_INVALID_VALUE );
- }
-
- if( !Mipmap.legalFormat(format) || !Mipmap.legalType(typeIn) ||
- !Mipmap.legalType(typeOut) || typeIn == GL.GL_BITMAP ||
- typeOut == GL.GL_BITMAP ) {
- return( GLU.GLU_INVALID_ENUM );
- }
-
- if( !Mipmap.isLegalFormatForPackedPixelType( format, typeIn ) ) {
- return( GLU.GLU_INVALID_OPERATION );
- }
-
- if( !Mipmap.isLegalFormatForPackedPixelType( format, typeOut ) ) {
- return( GLU.GLU_INVALID_OPERATION );
- }
-
- try {
- beforeImage = ByteBuffer.allocateDirect( Mipmap.imageSize3D( widthIn,
- heightIn, depthIn, format, GL.GL_UNSIGNED_SHORT ) ).order(
- ByteOrder.nativeOrder() ).asShortBuffer();
- afterImage = ByteBuffer.allocateDirect( Mipmap.imageSize3D( widthIn,
- heightIn, depthIn, format, GL.GL_UNSIGNED_SHORT ) ).order(
- ByteOrder.nativeOrder() ).asShortBuffer();
- } catch( OutOfMemoryError err ) {
- return( GLU.GLU_OUT_OF_MEMORY );
- }
- Mipmap.retrieveStoreModes3D( gl, psm );
-
- Image.fillImage3D( psm, widthIn, heightIn, depthIn, format, typeIn,
- Mipmap.is_index( format ), dataIn, beforeImage );
- components = Mipmap.elements_per_group( format, 0 );
- ScaleInternal.scaleInternal3D( components, widthIn, heightIn, depthIn,
- beforeImage, widthOut, heightOut, depthOut, afterImage );
- Image.emptyImage3D( psm, widthOut, heightOut, depthOut, format, typeOut,
- Mipmap.is_index( format ), afterImage, dataOut );
-
- return( 0 );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/mipmap/Type_Widget.java b/src/classes/com/sun/opengl/impl/mipmap/Type_Widget.java
deleted file mode 100644
index f0e2d2f57..000000000
--- a/src/classes/com/sun/opengl/impl/mipmap/Type_Widget.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.mipmap;
-
-import java.nio.*;
-
-/**
- *
- * @author Administrator
- */
-public class Type_Widget {
-
- ByteBuffer buffer;
-
- /** Creates a new instance of Type_Widget */
- public Type_Widget() {
- buffer = ByteBuffer.allocate( 4 );
- }
-
- public void setUB0( byte b ) {
- buffer.position( 0 );
- buffer.put( b );
- }
-
- public byte getUB0() {
- buffer.position( 0 );
- return( buffer.get() );
- }
-
- public void setUB1( byte b ) {
- buffer.position( 1 );
- buffer.put( b );
- }
-
- public byte getUB1() {
- buffer.position( 1 );
- return( buffer.get() );
- }
-
- public void setUB2( byte b ) {
- buffer.position( 2 );
- buffer.put( b );
- }
-
- public byte getUB2() {
- buffer.position( 2 );
- return( buffer.get() );
- }
-
- public void setUB3( byte b ) {
- buffer.position( 3 );
- buffer.put( b );
- }
-
- public byte getUB3() {
- buffer.position( 3 );
- return( buffer.get() );
- }
-
- public void setUS0( short s ) {
- buffer.position( 0 );
- buffer.putShort( s );
- }
-
- public short getUS0() {
- buffer.position( 0 );
- return( buffer.getShort() );
- }
-
- public void setUS1( short s ) {
- buffer.position( 2 );
- buffer.putShort( s );
- }
-
- public short getUS1() {
- buffer.position( 2 );
- return( buffer.getShort() );
- }
-
- public void setUI( int i ) {
- buffer.position( 0 );
- buffer.putInt( i );
- }
-
- public int getUI() {
- buffer.position( 0 );
- return( buffer.getInt() );
- }
-
- public void setB0( byte b ) {
- buffer.position( 0 );
- buffer.put( b );
- }
-
- public byte getB0() {
- buffer.position( 0 );
- return( buffer.get() );
- }
-
- public void setB1( byte b ) {
- buffer.position( 1 );
- buffer.put( b );
- }
-
- public byte getB1() {
- buffer.position( 1 );
- return( buffer.get() );
- }
-
- public void setB2( byte b ) {
- buffer.position( 2 );
- buffer.put( b );
- }
-
- public byte getB2() {
- buffer.position( 2 );
- return( buffer.get() );
- }
-
- public void setB3( byte b ) {
- buffer.position( 3 );
- buffer.put( b );
- }
-
- public byte getB3() {
- buffer.position( 3 );
- return( buffer.get() );
- }
-
- public void setS0( short s ) {
- buffer.position( 0 );
- buffer.putShort( s );
- }
-
- public short getS0() {
- buffer.position( 0 );
- return( buffer.getShort() );
- }
-
- public void setS1( short s ) {
- buffer.position( 2 );
- buffer.putShort( s );
- }
-
- public short getS1() {
- buffer.position( 2 );
- return( buffer.getShort() );
- }
-
- public void setI( int i ) {
- buffer.position( 0 );
- buffer.putInt( i );
- }
-
- public int getI() {
- buffer.position( 0 );
- return( buffer.getInt() );
- }
-
- public void setF( float f ) {
- buffer.position( 0 );
- buffer.putFloat( f );
- }
-
- public float getF() {
- buffer.position( 0 );
- return( buffer.getFloat() );
- }
-
- public ByteBuffer getBuffer() {
- buffer.rewind();
- return( buffer );
- }
-
- public static void main( String args[] ) {
- Type_Widget t = new Type_Widget();
- t.setI( 1000000 );
-
- System.out.println("int: " + Integer.toHexString( t.getI() ) );
-
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Arc.java b/src/classes/com/sun/opengl/impl/nurbs/Arc.java
deleted file mode 100755
index 717edbb33..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Arc.java
+++ /dev/null
@@ -1,258 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-*/
-
-/**
- * Trimming arc
- * @author Tomas Hrasky
- *
- */
-class Arc {
- /**
- * Corresponding picewise-linear arc
- */
- public PwlArc pwlArc;
-
- /**
- * Arc type
- */
- private long type;
-
- /**
- * Arc link in linked list
- */
- public Arc link;
-
- /**
- * Previous arc
- */
- Arc prev;
-
- /**
- * Next arc
- */
- Arc next;
-
- /**
- * Corresponding berizer type arc
- */
- private BezierArc bezierArc;
-
- /**
- * Makes new arc at specified side
- *
- * @param side
- * which side doeas this arc form
- */
- public Arc(int side) {
- bezierArc = null;
- pwlArc = null;
- type = 0;
- setside(side);
- // nuid=_nuid
- }
-
- /**
- * Sets side the arc is at
- *
- * @param side
- * arc side
- */
- private void setside(int side) {
- // DONE
- clearside();
- type |= side << 8;
- }
-
- /**
- * Unsets side
- */
- private void clearside() {
- // DONE
- type &= ~(0x7 << 8);
- }
-
- // this one replaces enum arc_side
- /**
- * Side not specified
- */
- public static final int ARC_NONE = 0;
-
- /**
- * Arc on right
- */
- public static final int ARC_RIGHT = 1;
-
- /**
- * Arc on top
- */
- public static final int ARC_TOP = 2;
-
- /**
- * Arc on left
- */
- public static final int ARC_LEFT = 3;
-
- /**
- * Arc on bottom
- */
- public static final int ARC_BOTTOM = 4;
-
- /**
- * Bezier type flag
- */
- private static final long BEZIER_TAG = 1 << 13;
-
- /**
- * Arc type flag
- */
- private static final long ARC_TAG = 1 << 3;
-
- /**
- * Tail type tag
- */
- private static final long TAIL_TAG = 1 << 6;
-
- /**
- * Appends arc to the list
- *
- * @param jarc
- * arc to be append
- * @return this
- */
- public Arc append(Arc jarc) {
- // DONE
- if (jarc != null) {
- next = jarc.next;
- prev = jarc;
- next.prev = this;
- prev.next = this;
- } else {
- next = this;
- prev = this;
- }
-
- return this;
- }
-
- /**
- * Unused
- *
- * @return true
- */
- public boolean check() {
- return true;
- }
-
- /**
- * Sets bezier type flag
- */
- public void setbezier() {
- // DONE
- type |= BEZIER_TAG;
-
- }
-
- /**
- * Returns tail of linked list coords
- *
- * @return tail coords
- */
- public float[] tail() {
- // DONE
- return pwlArc.pts[0].param;
- }
-
- /**
- * Returns head of linked list coords
- *
- * @return head coords
- */
- public float[] head() {
- // DONE
- return next.pwlArc.pts[0].param;
- }
-
- /**
- * Returns whether arc is marked with arc_tag
- *
- * @return is arc marked with arc_tag
- */
- public boolean ismarked() {
- // DONE
- return ((type & ARC_TAG) > 0) ? true : false;
- }
-
- /**
- * Cleans arc_tag flag
- */
- public void clearmark() {
- // DONE
- type &= (~ARC_TAG);
- }
-
- /**
- * Sets arc_tag flag
- */
- public void setmark() {
- // DONE
- type |= ARC_TAG;
- }
-
- /**
- * sets tail tag
- */
- public void setitail() {
- // DONE
- type |= TAIL_TAG;
- }
-
- /**
- * Returns whether arc is marked tail
- *
- * @return is tail
- */
- public boolean getitail() {
- return false;
- }
-
- /**
- * Unsets tail tag
- */
- public void clearitail() {
- // DONE
- type &= (~TAIL_TAG);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/ArcSdirSorter.java b/src/classes/com/sun/opengl/impl/nurbs/ArcSdirSorter.java
deleted file mode 100755
index cc420b48c..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/ArcSdirSorter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class for sorting list of Arcs
- * @author Tomas Hrasky
- *
- */
-class ArcSdirSorter {
-
- /**
- * Makes new ArcSdirSorter with Subdivider
- * @param subdivider subdivider
- */
- public ArcSdirSorter(Subdivider subdivider) {
- //TODO
- // System.out.println("TODO arcsdirsorter.constructor");
- }
-
- /**
- * Sorts list of arcs
- * @param list arc list to be sorted
- * @param count size of list
- */
- public void qsort(CArrayOfArcs list, int count) {
- // TODO
- // System.out.println("TODO arcsdirsorter.qsort");
- }
-
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/ArcTdirSorter.java b/src/classes/com/sun/opengl/impl/nurbs/ArcTdirSorter.java
deleted file mode 100755
index 88b6e3285..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/ArcTdirSorter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class for sorting list of Arcs
- * @author Tomas Hrasky
- *
- */
-class ArcTdirSorter {
- /**
- * Makes new ArcSdirSorter with Subdivider
- * @param subdivider subdivider
- */
- public ArcTdirSorter(Subdivider subdivider) {
- // TODO Auto-generated constructor stub
- // System.out.println("TODO arcTsorter.konstruktor");
- }
- /**
- * Sorts list of arcs
- * @param list arc list to be sorted
- * @param count size of list
- */
- public void qsort(CArrayOfArcs list, int count) {
- // TODO Auto-generated method stub
- // System.out.println("TODO arcTsorter.qsort");
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/ArcTesselator.java b/src/classes/com/sun/opengl/impl/nurbs/ArcTesselator.java
deleted file mode 100755
index 61cd969ea..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/ArcTesselator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class for arc tesselation
- * @author Tomas Hrasky
- *
- */
-class ArcTesselator {
-
- /**
- * Makes given arc an bezier arc
- * @param arc arc to work with
- * @param s1 minimum s param
- * @param s2 maximum s param
- * @param t1 minimum t param
- * @param t2 maximum s param
- */
- public void bezier(Arc arc, float s1, float s2, float t1, float t2) {
- // DONE
- TrimVertex[] p = new TrimVertex[2];
- p[0] = new TrimVertex();
- p[1] = new TrimVertex();
- arc.pwlArc = new PwlArc(2, p);
- p[0].param[0] = s1;
- p[0].param[1] = s2;
- p[1].param[0] = t1;
- p[1].param[1] = t2;
- arc.setbezier();
- }
-
- /**
- * Empty method
- * @param newright arc to work with
- * @param s first tail
- * @param t2 second tail
- * @param t1 third tail
- * @param f stepsize
- */
- public void pwl_right(Arc newright, float s, float t1, float t2, float f) {
- // TODO Auto-generated method stub
- // System.out.println("TODO arctesselator.pwl_right");
- }
-
- /**
- * Empty method
- * @param newright arc to work with
- * @param s first tail
- * @param t2 second tail
- * @param t1 third tail
- * @param f stepsize
- */
- public void pwl_left(Arc newright, float s, float t2, float t1, float f) {
- // TODO Auto-generated method stub
- // System.out.println("TODO arctesselator.pwl_left");
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Backend.java b/src/classes/com/sun/opengl/impl/nurbs/Backend.java
deleted file mode 100755
index aff484b04..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Backend.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class responsible for rendering
- * @author Tomas Hrasky
- *
- */
-class Backend {
-
- /**
- * Fill surface
- */
- public static final int N_MESHFILL = 0;
-
- /**
- * Draw surface as wire model
- */
- public static final int N_MESHLINE = 1;
-
- /**
- * Draw surface with points
- */
- public static final int N_MESHPOINT = 2;
-
- /**
- * Object rendering curves
- */
- private OpenGLCurveEvaluator curveEvaluator;
-
- /**
- * Object rendering surfaces
- */
- private OpenGLSurfaceEvaluator surfaceEvaluator;
-
- /**
- * Makes new backend
- */
- public Backend() {
- curveEvaluator = new OpenGLCurveEvaluator();
- surfaceEvaluator = new OpenGLSurfaceEvaluator();
- }
-
- /**
- * Begin a curve
- */
- public void bgncurv() {
- // DONE
- curveEvaluator.bgnmap1f();
-
- }
-
- /**
- * End a curve
- */
- public void endcurv() {
- // DONE
- curveEvaluator.endmap1f();
-
- }
-
- /**
- * Make cuve with given parameters
- * @param type curve type
- * @param ps control points
- * @param stride control points coordinates number
- * @param order order of curve
- * @param ulo smallest u
- * @param uhi highest u
- */
- public void curvpts(int type, CArrayOfFloats ps, int stride, int order,
- float ulo, float uhi) {
- // DONE
- curveEvaluator.map1f(type, ulo, uhi, stride, order, ps);
- curveEvaluator.enable(type);
- }
-
- /**
- * Draw curve
- * @param u1 smallest u
- * @param u2 highest u
- * @param nu number of pieces
- */
- public void curvgrid(float u1, float u2, int nu) {
- // DONE
- curveEvaluator.mapgrid1f(nu, u1, u2);
-
- }
-
- /**
- * Evaluates curve mesh
- * @param from low param
- * @param n step
- */
- public void curvmesh(int from, int n) {
- // DONE
- curveEvaluator.mapmesh1f(N_MESHFILL, from, from + n);
- }
-
- /**
- * Begin surface
- * @param wiretris use triangles
- * @param wirequads use quads
- */
- public void bgnsurf(int wiretris, int wirequads) {
- // DONE
- surfaceEvaluator.bgnmap2f();
-
- if (wiretris > 0)
- surfaceEvaluator.polymode(NurbsConsts.N_MESHLINE);
- else
- surfaceEvaluator.polymode(NurbsConsts.N_MESHFILL);
- }
-
- /**
- * End surface
- */
- public void endsurf() {
- // DONE
- surfaceEvaluator.endmap2f();
- }
-
- /**
- * Empty method
- * @param ulo low u param
- * @param uhi hig u param
- * @param vlo low v param
- * @param vhi high v param
- */
- public void patch(float ulo, float uhi, float vlo, float vhi) {
- // DONE
- surfaceEvaluator.domain2f(ulo, uhi, vlo, vhi);
- }
-
- /**
- * Draw surface
- * @param u0 lowest u
- * @param u1 highest u
- * @param nu number of pieces in u direction
- * @param v0 lowest v
- * @param v1 highest v
- * @param nv number of pieces in v direction
- */
- public void surfgrid(float u0, float u1, int nu, float v0, float v1, int nv) {
- // DONE
- surfaceEvaluator.mapgrid2f(nu, u0, u1, nv, v0, v1);
-
- }
-
- /**
- * Evaluates surface mesh
- * @param u u param
- * @param v v param
- * @param n step in u direction
- * @param m step in v direction
- */
- public void surfmesh(int u, int v, int n, int m) {
- // System.out.println("TODO backend.surfmesh wireframequads");
- // TODO wireframequads
- surfaceEvaluator.mapmesh2f(NurbsConsts.N_MESHFILL, u, u + n, v, v + m);
- }
-
- /**
- * Make surface
- * @param type surface type
- * @param pts control points
- * @param ustride control points coordinates in u direction
- * @param vstride control points coordinates in v direction
- * @param uorder surface order in u direction
- * @param vorder surface order in v direction
- * @param ulo lowest u
- * @param uhi hightest u
- * @param vlo lowest v
- * @param vhi hightest v
- */
- public void surfpts(int type, CArrayOfFloats pts, int ustride, int vstride,
- int uorder, int vorder, float ulo, float uhi, float vlo, float vhi) {
- // DONE
- surfaceEvaluator.map2f(type, ulo, uhi, ustride, uorder, vlo, vhi,
- vstride, vorder, pts);
- surfaceEvaluator.enable(type);
-
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/BezierArc.java b/src/classes/com/sun/opengl/impl/nurbs/BezierArc.java
deleted file mode 100755
index ed05f33c6..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/BezierArc.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Empty class
- * @author Tomas Hrasky
- *
- */
-class BezierArc {
-
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Bin.java b/src/classes/com/sun/opengl/impl/nurbs/Bin.java
deleted file mode 100755
index 2b23c34ab..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Bin.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class holding trimming arcs
- * @author Tomas Hrasky
- *
- */
-class Bin {
-
- /**
- * Head of linked list of arcs
- */
- private Arc head;
-
- /**
- * Current arc
- */
- private Arc current;
-
- /**
- * Indicates whether there are any Arcs in linked list
- * @return true if there are any Arcs in linked list
- */
- public boolean isnonempty() {
- // DONE
- return this.head != null ? true : false;
- }
-
- /**
- * Adds and arc to linked list
- * @param jarc added arc
- */
- public void addarc(Arc jarc) {
- // DONE
- // if (head == null)
- // head = jarc;
- // else {
- jarc.link = head;
- head = jarc;
- // }
-
- }
-
- /**
- * Returns number of arcs in linked list
- * @return number of arcs
- */
- public int numarcs() {
- // DONE
- int count = 0;
- for (Arc jarc = firstarc(); jarc != null; jarc = nextarc())
- count++;
- return count;
- }
-
- /**
- * Removes first arc in list
- * @return new linked list head
- */
- public Arc removearc() {
- // DONE
- Arc jarc = head;
- if (jarc != null)
- head = jarc.link;
- return jarc;
-
- }
-
- /**
- * Consolidates linked list
- */
- public void adopt() {
- // DONE
- markall();
-
- Arc orphan;
- while ((orphan = removearc()) != null) {
- for (Arc parent = orphan.next; !parent.equals(orphan); parent = parent.next) {
- if (!parent.ismarked()) {
- orphan.link = parent.link;
- parent.link = orphan;
- orphan.clearmark();
- break;
- }
- }
- }
-
- }
-
- /**
- * Marks all arc in linked list
- */
- private void markall() {
- // DONE
- for (Arc jarc = firstarc(); jarc != null; jarc = nextarc())
- jarc.setmark();
- }
-
- /**
- * Returns first arc in linked list
- * @return first arc in linked list
- */
- private Arc firstarc() {
- // DONE
- current = head;
- return nextarc();
- }
-
- /**
- * Returns next arc in linked list
- * @return next arc
- *
- */
- private Arc nextarc() {
- // DONE
- Arc jarc = current;
- if (jarc != null)
- current = jarc.link;
- return jarc;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Breakpt.java b/src/classes/com/sun/opengl/impl/nurbs/Breakpt.java
deleted file mode 100755
index a62a8bb80..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Breakpt.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class holding break point parameters
- *
- * @author Tomas Hrasky
- *
- */
-class Breakpt {
-
- /**
- * Breakpoint multiplicity
- */
- public int multi;
-
- /**
- * Breakpint value
- */
- public float value;
-
- /**
- * Breakpoint deficit (how many times it has to be added)
- */
- public int def;
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfArcs.java b/src/classes/com/sun/opengl/impl/nurbs/CArrayOfArcs.java
deleted file mode 100755
index 3d803f09c..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfArcs.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/**
- * Class replacing C language pointer
- *
- * @author Tomas Hrasky
- *
- */
-class CArrayOfArcs {
- /**
- * Underlaying array
- */
- private Arc[] array;
-
- /**
- * Pointer to array member
- */
- private int pointer;
-
- /**
- * Don't check for array borders?
- */
- private boolean noCheck = true;
-
- /**
- * Makes new CArray
- *
- * @param array
- * underlaying array
- * @param pointer
- * pointer (index) to array
- */
- public CArrayOfArcs(Arc[] array, int pointer) {
- this.array = array;
- // this.pointer=pointer;
- setPointer(pointer);
- }
-
- /**
- * Makes new CArray from other CArray
- *
- * @param carray
- * reference array
- */
- public CArrayOfArcs(CArrayOfArcs carray) {
- this.array = carray.array;
- // this.pointer=carray.pointer;
- setPointer(carray.pointer);
- }
-
- /**
- * Makes new CArray with pointer set to 0
- *
- * @param ctlarray
- * underlaying array
- */
- public CArrayOfArcs(Arc[] ctlarray) {
- this.array = ctlarray;
- this.pointer = 0;
- }
-
- /**
- * Returns element at pointer
- *
- * @return element at pointer
- */
- public Arc get() {
- return array[pointer];
- }
-
- /**
- * Increases pointer by one (++)
- */
- public void pp() {
- // pointer++;
- setPointer(pointer + 1);
- }
-
- /**
- * Sets element at pointer
- *
- * @param f
- * desired value
- */
- public void set(Arc f) {
- array[pointer] = f;
-
- }
-
- /**
- * Returns array element at specified index
- *
- * @param i
- * array index
- * @return element at index
- */
- public Arc get(int i) {
- return array[i];
- }
-
- /**
- * Returns array element at specified index relatively to pointer
- *
- * @param i
- * relative index
- * @return element at relative index
- */
- public Arc getRelative(int i) {
- return array[pointer + i];
- }
-
- /**
- * Sets value of element at specified index relatively to pointer
- *
- * @param i
- * relative index
- * @param value
- * value to be set
- */
- public void setRelative(int i, Arc value) {
- array[pointer + i] = value;
- }
-
- /**
- * Lessens pointer by value
- *
- * @param i
- * lessen by
- */
- public void lessenPointerBy(int i) {
- // pointer-=i;
- setPointer(pointer - i);
- }
-
- /**
- * Returns pointer value
- *
- * @return pointer value
- */
- public int getPointer() {
- return pointer;
- }
-
- /**
- * Sets ponter value
- *
- * @param pointer
- * pointer value to be set
- */
- public void setPointer(int pointer) {
- if (!noCheck && pointer > array.length)
- throw new IllegalArgumentException("Pointer " + pointer
- + " out of bounds " + array.length);
- this.pointer = pointer;
- }
-
- /**
- * Raises pointer by value
- *
- * @param i
- * raise by
- */
- public void raisePointerBy(int i) {
- // pointer+=i;
- setPointer(pointer + i);
- }
-
- /**
- * Lessens ponter by one (--)
- */
- public void mm() {
- // pointer--;
- setPointer(pointer - 1);
- }
-
- /**
- * Returns underlaying array
- *
- * @return underlaying array
- */
- public Arc[] getArray() {
- return array;
- }
-
- /**
- * Sets underlaying array
- *
- * @param array
- * underlaying array
- */
- public void setArray(Arc[] array) {
- this.array = array;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfBreakpts.java b/src/classes/com/sun/opengl/impl/nurbs/CArrayOfBreakpts.java
deleted file mode 100755
index c4c14b66c..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfBreakpts.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/**
- * Class replacing C language pointer
- *
- * @author Tomas Hrasky
- *
- */
-class CArrayOfBreakpts {
- /**
- * Underlaying array
- */
- private Breakpt[] pole;
-
- /**
- * Pointer to array member
- */
- private int pointer;
-
- /**
- * Makes new CArray
- *
- * @param array
- * underlaying array
- * @param pointer
- * pointer (index) to array
- */
- public CArrayOfBreakpts(Breakpt[] array, int pointer) {
- this.pole = array;
- this.pointer = pointer;
- }
-
- /**
- * Makes new CArray from other CArray
- *
- * @param carray
- * reference array
- */
- public CArrayOfBreakpts(CArrayOfBreakpts carray) {
- this.pole = carray.pole;
- this.pointer = carray.pointer;
- }
-
- /**
- * Returns element at pointer
- *
- * @return element at pointer
- */
- public Breakpt get() {
- return pole[pointer];
- }
-
- /**
- * Increases pointer by one (++)
- */
- public void pp() {
- pointer++;
- }
-
- /**
- * Sets element at pointer
- *
- * @param f
- * desired value
- */
- public void set(Breakpt f) {
- pole[pointer] = f;
-
- }
-
- /**
- * Returns array element at specified index
- *
- * @param i
- * array index
- * @return element at index
- */
- public Breakpt get(int i) {
- return pole[i];
- }
-
- /**
- * Lessens pointer by value
- *
- * @param i
- * lessen by
- */
- public void lessenPointerBy(int i) {
- pointer -= i;
-
- }
-
- /**
- * Returns pointer value
- *
- * @return pointer value
- */
- public int getPointer() {
- return pointer;
- }
-
- /**
- * Sets ponter value
- *
- * @param pointer
- * pointer value to be set
- */
- public void setPointer(int pointer) {
- this.pointer = pointer;
- }
-
- /**
- * Raises pointer by value
- *
- * @param i
- * raise by
- */
- public void raisePointerBy(int i) {
- pointer += i;
-
- }
-
- /**
- * Lessens ponter by one (--)
- */
- public void mm() {
- pointer--;
-
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfFloats.java b/src/classes/com/sun/opengl/impl/nurbs/CArrayOfFloats.java
deleted file mode 100755
index 237715a01..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfFloats.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/**
- * Class replacing C language pointer
- *
- * @author Tomas Hrasky
- *
- */
-class CArrayOfFloats {
-
- /**
- * Underlaying array
- */
- private float[] array;
-
- /**
- * Pointer to array member
- */
- private int pointer;
-
- /**
- * Don't check for array borders?
- */
- private boolean noCheck = true;
-
- /**
- * Makes new CArray
- *
- * @param array
- * underlaying array
- * @param pointer
- * pointer (index) to array
- */
- public CArrayOfFloats(float[] array, int pointer) {
- this.array = array;
- // this.pointer=pointer;
- setPointer(pointer);
- }
-
- /**
- * Makes new CArray from other CArray
- *
- * @param carray
- * reference array
- */
- public CArrayOfFloats(CArrayOfFloats carray) {
- this.array = carray.array;
- // this.pointer=carray.pointer;
- setPointer(carray.pointer);
- }
-
- /**
- * Makes new CArray with pointer set to 0
- *
- * @param ctlarray
- * underlaying array
- */
- public CArrayOfFloats(float[] ctlarray) {
- this.array = ctlarray;
- this.pointer = 0;
- }
-
- /**
- * Returns element at pointer
- *
- * @return element at pointer
- */
- public float get() {
- return array[pointer];
- }
-
- /**
- * Increases pointer by one (++)
- */
- public void pp() {
- // pointer++;
- setPointer(pointer + 1);
- }
-
- /**
- * Sets element at pointer
- *
- * @param f
- * desired value
- */
- public void set(float f) {
- array[pointer] = f;
-
- }
-
- /**
- * Returns array element at specified index
- *
- * @param i
- * array index
- * @return element at index
- */
- public float get(int i) {
- return array[i];
- }
-
- /**
- * Returns array element at specified index relatively to pointer
- *
- * @param i
- * relative index
- * @return element at relative index
- */
- public float getRelative(int i) {
- return array[pointer + i];
- }
-
- /**
- * Sets value of element at specified index relatively to pointer
- *
- * @param i
- * relative index
- * @param value
- * value to be set
- */
- public void setRelative(int i, float value) {
- array[pointer + i] = value;
- }
-
- /**
- * Lessens pointer by value
- *
- * @param i
- * lessen by
- */
- public void lessenPointerBy(int i) {
- // pointer-=i;
- setPointer(pointer - i);
- }
-
- /**
- * Returns pointer value
- *
- * @return pointer value
- */
- public int getPointer() {
- return pointer;
- }
-
- /**
- * Sets ponter value
- *
- * @param pointer
- * pointer value to be set
- */
- public void setPointer(int pointer) {
- if (!noCheck && pointer > array.length)
- throw new IllegalArgumentException("Pointer " + pointer
- + " out of bounds " + array.length);
- this.pointer = pointer;
- }
-
- /**
- * Raises pointer by value
- *
- * @param i
- * raise by
- */
- public void raisePointerBy(int i) {
- // pointer+=i;
- setPointer(pointer + i);
- }
-
- /**
- * Lessens ponter by one (--)
- */
- public void mm() {
- // pointer--;
- setPointer(pointer - 1);
- }
-
- /**
- * Returns underlaying array
- *
- * @return underlaying array
- */
- public float[] getArray() {
- return array;
- }
-
- /**
- * Sets underlaying array
- *
- * @param array
- * underlaying array
- */
- public void setArray(float[] array) {
- this.array = array;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfQuiltspecs.java b/src/classes/com/sun/opengl/impl/nurbs/CArrayOfQuiltspecs.java
deleted file mode 100755
index 40559fe6b..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/CArrayOfQuiltspecs.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/**
- * Class replacing C language pointer
- *
- * @author Tomas Hrasky
- *
- */
-class CArrayOfQuiltspecs {
- /**
- * Underlaying array
- */
- private Quiltspec[] array;
-
- /**
- * Pointer to array member
- */
- private int pointer;
-
- /**
- * Makes new CArray
- *
- * @param array
- * underlaying array
- * @param pointer
- * pointer (index) to array
- */
- public CArrayOfQuiltspecs(Quiltspec[] array, int pointer) {
- this.array = array;
- this.pointer = pointer;
- }
-
- /**
- * Makes new CArray from other CArray
- *
- * @param carray
- * reference array
- */
- public CArrayOfQuiltspecs(CArrayOfQuiltspecs carray) {
- this.array = carray.array;
- this.pointer = carray.pointer;
- }
-
- /**
- * Makes new CArray with pointer set to 0
- *
- * @param array
- * underlaying array
- */
- public CArrayOfQuiltspecs(Quiltspec[] array) {
- this.array = array;
- this.pointer = 0;
- }
-
- /**
- * Returns element at pointer
- *
- * @return element at pointer
- */
- public Quiltspec get() {
- return array[pointer];
- }
-
- /**
- * Increases pointer by one (++)
- */
- public void pp() {
- pointer++;
- }
-
- /**
- * Sets element at pointer
- *
- * @param f
- * desired value
- */
- public void set(Quiltspec f) {
- array[pointer] = f;
-
- }
-
- /**
- * Returns array element at specified index
- *
- * @param i
- * array index
- * @return element at index
- */
- public Quiltspec get(int i) {
- return array[i];
- }
-
- /**
- * Lessens pointer by value
- *
- * @param i
- * lessen by
- */
- public void lessenPointerBy(int i) {
- pointer -= i;
-
- }
-
- /**
- * Returns pointer value
- *
- * @return pointer value
- */
- public int getPointer() {
- return pointer;
- }
-
- /**
- * Sets ponter value
- *
- * @param pointer
- * pointer value to be set
- */
- public void setPointer(int pointer) {
- this.pointer = pointer;
- }
-
- /**
- * Raises pointer by value
- *
- * @param i
- * raise by
- */
- public void raisePointerBy(int i) {
- pointer += i;
-
- }
-
- /**
- * Lessens ponter by one (--)
- */
- public void mm() {
- pointer--;
-
- }
-
- /**
- * Returns underlaying array
- *
- * @return underlaying array
- */
- public Quiltspec[] getArray() {
- return array;
- }
-
- /**
- * Sets underlaying array
- *
- * @param array
- * underlaying array
- */
- public void setArray(Quiltspec[] array) {
- this.array = array;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Curve.java b/src/classes/com/sun/opengl/impl/nurbs/Curve.java
deleted file mode 100755
index 0fe7418f2..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Curve.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class holding curve definition
- * @author Tomáš Hráský
- *
- */
-class Curve {
-
- /**
- * Maximum coordinates per control point
- */
- private static final int MAXCOORDS = 5;
-
- /**
- * Max curve order
- */
- private static final int MAXORDER = 24;
-
- /**
- * Next curve in linked list
- */
- public Curve next;
-
- /**
- * OpenGL maps
- */
- private Mapdesc mapdesc;
-
- /**
- * Does the curve need sampling
- */
- private boolean needsSampling;
-
- /**
- * Culling
- */
- private int cullval;
-
- /**
- * Number of coords
- */
- private int stride;
-
- /**
- * Curve order
- */
- private int order;
-
- /**
- * Holds conversion range borders
- */
- private float[] range;
-
- /**
- * Subdivision stepsize
- */
- public float stepsize;
-
- /**
- * Minimal subdivision stepsize
- */
- private float minstepsize;
-
- /**
- * Sampling points
- */
- float[] spts;
-
- /**
- * Makes new Curve
- *
- * @param geo
- * @param pta
- * @param ptb
- * @param c
- * next curve in linked list
- */
- public Curve(Quilt geo, float[] pta, float[] ptb, Curve c) {
-
- spts = new float[MAXORDER * MAXCOORDS];
-
- mapdesc = geo.mapdesc;
-
- next = c;
- needsSampling = mapdesc.isRangeSampling() ? true : false;
-
- cullval = mapdesc.isCulling() ? Subdivider.CULL_ACCEPT
- : Subdivider.CULL_TRIVIAL_REJECT;
- order = geo.qspec.get(0).order;
- stride = MAXCOORDS;
-
- // CArrayOfFloats ps = geo.cpts;
- CArrayOfFloats ps = new CArrayOfFloats(geo.cpts.getArray(), 0);
- CArrayOfQuiltspecs qs = geo.qspec;
- ps.raisePointerBy(qs.get().offset);
- ps.raisePointerBy(qs.get().index * qs.get().order * qs.get().stride);
-
- if (needsSampling) {
- mapdesc.xformSampling(ps, qs.get().order, qs.get().stride, spts,
- stride);
- }
- if (cullval == Subdivider.CULL_ACCEPT) {
- // System.out.println("TODO curve.Curve-cullval");
- // mapdesc.xformCulling(ps,qs.get().order,qs.get().stride,cpts,stride);
- }
-
- range = new float[3];
- range[0] = qs.get().breakpoints[qs.get().index];
- range[1] = qs.get().breakpoints[qs.get().index + 1];
- range[2] = range[1] - range[0];
- // TODO it is necessary to solve problem with "this" pointer here
- if (range[0] != pta[0]) {
- // System.out.println("TODO curve.Curve-range0");
- // Curve lower=new Curve(this,pta,0);
- // lower.next=next;
- // this=lower;
- }
- if (range[1] != ptb[0]) {
- // System.out.println("TODO curve.Curve-range1");
- // Curve lower=new Curve(this,ptb,0);
- }
- }
-
- /**
- * Checks culling type
- * @return Subdivider.CULL_ACCEPT
- */
- public int cullCheck() {
- if (cullval == Subdivider.CULL_ACCEPT) {
- // System.out.println("TODO curve.cullval");
- // cullval=mapdesc.cullCheck(cpts,order,stride);
- }
- // TODO compute cullval and return the computed value
- // return cullval;
- return Subdivider.CULL_ACCEPT;
- }
-
- /**
- * Computes subdivision step size
- */
- public void getStepSize() {
- minstepsize = 0;
- if (mapdesc.isConstantSampling()) {
- setstepsize(mapdesc.maxrate);
- } else if (mapdesc.isDomainSampling()) {
- setstepsize(mapdesc.maxrate * range[2]);
- } else {
- assert (order <= MAXORDER);
-
- float tmp[][] = new float[MAXORDER][MAXCOORDS];
-
- int tstride = (MAXORDER);
-
- int val = 0;
- // mapdesc.project(spts,stride,tmp,tstride,order);
-
- // System.out.println("TODO curve.getsptepsize mapdesc.project");
-
- if (val == 0) {
- setstepsize(mapdesc.maxrate);
- } else {
- float t = mapdesc.getProperty(NurbsConsts.N_PIXEL_TOLERANCE);
- if (mapdesc.isParametricDistanceSampling()) {
- // System.out.println("TODO curve.getstepsize - parametric");
- } else if (mapdesc.isPathLengthSampling()) {
- // System.out.println("TODO curve.getstepsize - pathlength");
- } else {
- setstepsize(mapdesc.maxrate);
- }
- }
-
- }
-
- }
-
- /**
- * Sets maximum subdivision step size
- * @param max maximum subdivision step size
- */
- private void setstepsize(float max) {
- // DONE
- stepsize = (max >= 1) ? (range[2] / max) : range[2];
- minstepsize = stepsize;
- }
-
- /**
- * Clamps the curve
- */
- public void clamp() {
- // DONE
- if (stepsize < minstepsize)
- stepsize = mapdesc.clampfactor * minstepsize;
- }
-
- /**
- * Tells whether curve needs subdivision
- *
- * @return curve needs subdivison
- */
- public boolean needsSamplingSubdivision() {
- return (stepsize < minstepsize);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Curvelist.java b/src/classes/com/sun/opengl/impl/nurbs/Curvelist.java
deleted file mode 100755
index b37aac927..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Curvelist.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class for woking with linked list of curves
- * @author Tomas Hrasky
- *
- */
-class Curvelist {
-
- /**
- * Head of linked list
- */
- private Curve curve;
-
- /**
- * Holds conversion range borders
- */
- float[] range;
-
- /**
- * Subdivision step size
- */
- public float stepsize;
-
- /**
- * Do curves need subdivision?
- */
- private boolean needsSubdivision;
-
- /**
- * Makes new instance on top of specified lis of Quilts
- * @param qlist underlaying list of quilts
- * @param pta range start
- * @param ptb range end
- */
- public Curvelist(Quilt qlist, float[] pta, float[] ptb) {
- // DONE
- curve = null;
- range = new float[3];
-
- for (Quilt q = qlist; q != null; q = q.next) {
- curve = new Curve(q, pta, ptb, curve);
- }
- range[0] = pta[0];
- range[1] = ptb[0];
- range[2] = range[1] - range[0];
- }
-
- /**
- * Compute step size
- */
- public void getstepsize() {
- // DONE
- stepsize = range[2];
- Curve c;
- for (c = curve; c != null; c = c.next) {
- c.getStepSize();
- c.clamp();
- stepsize = (c.stepsize < stepsize) ? c.stepsize : stepsize;
- if (c.needsSamplingSubdivision())
- break;
- }
- needsSubdivision = (c != null) ? true : false;
-
- }
-
- /**
- * Indicates whether curves need subdivision
- * @return curves need subdivision
- */
- public boolean needsSamplingSubdivision() {
- // DONE
- return needsSubdivision;
- }
-
- /**
- * Checks for culling
- * @return Subdivider.CULL_TRIVIAL_REJECT or Subdivider.CULL_ACCEPT
- */
- public int cullCheck() {
- // DONE
- for (Curve c = curve; c != null; c = c.next)
- if (c.cullCheck() == Subdivider.CULL_TRIVIAL_REJECT)
- return Subdivider.CULL_TRIVIAL_REJECT;
- return Subdivider.CULL_ACCEPT;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/DisplayList.java b/src/classes/com/sun/opengl/impl/nurbs/DisplayList.java
deleted file mode 100755
index 8ea8392b3..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/DisplayList.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-import java.lang.reflect.Method;
-
-/**
- * Display list
- * @author Tomas Hrasky
- *
- */
-class DisplayList {
-
- /**
- * Append action to the display list
- * @param src source object to invoke method on
- * @param m invoked method
- * @param arg method argument
- */
- public void append(Object src, Method m, Object arg) {
- // TODO Auto-generated method stub
- // System.out.println("TODO displaylist append");
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Flist.java b/src/classes/com/sun/opengl/impl/nurbs/Flist.java
deleted file mode 100755
index bf1b45986..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Flist.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-import java.util.Arrays;
-
-/**
- * List of breakpoints
- * @author Tomas Hrasky
- *
- */
-class Flist {
-
- /**
- * Data elements end index
- *
- */
- public int end;
-
- /**
- *Data elements start index
- */
- public int start;
-
- /**
- * Breakpoint values
- */
- public float[] pts;
-
- /**
- * Number of array fields
- */
- private int npts;
-
- /**
- * Grows list
- * @param maxpts maximum desired size
- */
- public void grow(int maxpts) {
- // DONE
- if (npts < maxpts) {
- // npts=2*maxpts;
- npts = maxpts;
- pts = new float[npts];
- }
- start = 0;
- end = 0;
- }
-
- /**
- * Removes duplicate array elemnts
- */
- public void filter() {
- // INFO the aim of this method is to remove duplicates from array
-
- Arrays.sort(pts);
-
- start = 0;
-
- int j = 0;
-
- for (int i = 1; i < end; i++) {
- if (pts[i] == pts[i - j - 1])
- j++;
- pts[i - j] = pts[i];
- }
-
- end -= j;
-
- }
-
- /**
- * Sets start and and to real start and end of array elements
- * @param from start from
- * @param to end at
- */
- public void taper(float from, float to) {
- // DONE
-
- while (pts[start] != from) {
- start++;
- }
-
- while (pts[end - 1] != to) {
- end--;
- }
-
- }
-
- /**
- * Adds breakpoint value
- * @param f value
- */
- public void add(float f) {
- //DONE
- pts[end++] = f;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/GLUnurbsImpl.java b/src/classes/com/sun/opengl/impl/nurbs/GLUnurbsImpl.java
deleted file mode 100755
index fd277744e..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/GLUnurbsImpl.java
+++ /dev/null
@@ -1,860 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-import java.lang.reflect.Method;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.glu.GLUnurbs;
-
-/**
- * Base object for working with NURBS curves and surfaces
- *
- * @author Tomas Hrasky
- *
- */
-public class GLUnurbsImpl implements GLUnurbs {
-
- /**
- * Curve type - no type
- */
- public static final int CT_NONE = 0;
-
- /**
- * Curve type - NURBS curve
- */
- public static final int CT_NURBSCURVE = 1;
-
- /**
- * Curve type - picewise linear curve
- */
- public static final int CT_NPWLCURVE = 2;
-
- /**
- * Matrixes autoloading
- */
- private boolean autoloadmode;
-
- /**
- * Using callback
- */
- private int callBackFlag;
-
- /**
- * Object for error call backs
- */
- private Object errorCallback;
-
- /**
- * List of map definitions
- */
- Maplist maplist;
-
- /**
- * Indicates validity of data
- */
- private int isDataValid;
-
- /**
- * Are we in the middle of curve processing
- */
- private int inCurve;
-
- /**
- * Current curve
- */
- private O_curve currentCurve;
-
- /**
- * Are we in trim
- */
- private boolean inTrim;
-
- /**
- * Are we playbacking curve/surface rendering
- */
- private boolean playBack;
-
- /**
- * Next curve in linked list
- */
- private O_curve nextCurve;
-
- /**
- * Is curve modified
- */
- private int isCurveModified;
-
- /**
- * Object holding rendering settings
- */
- private Renderhints renderhints;
-
- /**
- * Display list
- */
- private DisplayList dl;
-
- /**
- * Object for subdividing curves and surfaces
- */
- private Subdivider subdivider;
-
- /**
- * Object responsible for rendering
- */
- private Backend backend;
-
- /**
- * Next picewise linear curve in linked list
- */
- private O_pwlcurve nextPwlcurve;
-
- /**
- * Next trimming NURBS curve in linked list
- */
- private O_nurbscurve nextNurbscurve;
-
- /**
- * Are we in the middle of surface processing
- */
- private int inSurface;
-
- /**
- * Are there any changes in trimming
- */
- private boolean isTrimModified;
-
- /**
- * Are there any changes in surface data
- */
- private boolean isDataSurfaceModified;
-
- /**
- * Nurber of trmims of processed surface
- */
- private int numTrims;
-
- /**
- * Current processed surface
- */
- private O_surface currentSurface;
-
- /**
- * Next trimming curve
- */
- private O_trim nextTrim;
-
- /**
- * Nextr surface in linked list
- */
- private O_nurbssurface nextNurbssurface;
-
- /**
- * Are there any changes in surface
- */
- private boolean isSurfaceModified;
-
- /**
- * Initializes default GLUnurbs object
- */
- public GLUnurbsImpl() {
- // DONE
- maplist = new Maplist(backend);
- renderhints = new Renderhints();
- subdivider = new Subdivider();
- // original code
-
- redefineMaps();
-
- defineMap(GL.GL_MAP2_NORMAL, 0, 3);
- defineMap(GL.GL_MAP1_NORMAL, 0, 3);
- defineMap(GL.GL_MAP2_TEXTURE_COORD_1, 0, 1);
- defineMap(GL.GL_MAP1_TEXTURE_COORD_1, 0, 1);
- defineMap(GL.GL_MAP2_TEXTURE_COORD_2, 0, 2);
- defineMap(GL.GL_MAP1_TEXTURE_COORD_2, 0, 2);
- defineMap(GL.GL_MAP2_TEXTURE_COORD_3, 0, 3);
- defineMap(GL.GL_MAP1_TEXTURE_COORD_3, 0, 3);
- defineMap(GL.GL_MAP2_TEXTURE_COORD_4, 1, 4);
- defineMap(GL.GL_MAP1_TEXTURE_COORD_4, 1, 4);
- defineMap(GL.GL_MAP2_VERTEX_4, 1, 4);
- defineMap(GL.GL_MAP1_VERTEX_4, 1, 4);
- defineMap(GL.GL_MAP2_VERTEX_3, 0, 3);
- defineMap(GL.GL_MAP1_VERTEX_3, 0, 3);
- defineMap(GL.GL_MAP2_COLOR_4, 0, 4);
- defineMap(GL.GL_MAP1_COLOR_4, 0, 4);
- defineMap(GL.GL_MAP2_INDEX, 0, 1);
- defineMap(GL.GL_MAP1_INDEX, 0, 1);
-
- setnurbsproperty(GL.GL_MAP1_VERTEX_3, NurbsConsts.N_SAMPLINGMETHOD,
- (float) NurbsConsts.N_PATHLENGTH);
- setnurbsproperty(GL.GL_MAP1_VERTEX_4, NurbsConsts.N_SAMPLINGMETHOD,
- (float) NurbsConsts.N_PATHLENGTH);
- setnurbsproperty(GL.GL_MAP2_VERTEX_3, NurbsConsts.N_SAMPLINGMETHOD,
- (float) NurbsConsts.N_PATHLENGTH);
- setnurbsproperty(GL.GL_MAP2_VERTEX_4, NurbsConsts.N_SAMPLINGMETHOD,
- (float) NurbsConsts.N_PATHLENGTH);
-
- setnurbsproperty(GL.GL_MAP1_VERTEX_3, NurbsConsts.N_PIXEL_TOLERANCE,
- (float) 50.0);
- setnurbsproperty(GL.GL_MAP1_VERTEX_4, NurbsConsts.N_PIXEL_TOLERANCE,
- (float) 50.0);
- setnurbsproperty(GL.GL_MAP2_VERTEX_3, NurbsConsts.N_PIXEL_TOLERANCE,
- (float) 50.0);
- setnurbsproperty(GL.GL_MAP2_VERTEX_4, NurbsConsts.N_PIXEL_TOLERANCE,
- (float) 50.0);
-
- setnurbsproperty(GL.GL_MAP1_VERTEX_3, NurbsConsts.N_ERROR_TOLERANCE,
- (float) 0.50);
- setnurbsproperty(GL.GL_MAP1_VERTEX_4, NurbsConsts.N_ERROR_TOLERANCE,
- (float) 0.50);
- setnurbsproperty(GL.GL_MAP2_VERTEX_3, NurbsConsts.N_ERROR_TOLERANCE,
- (float) 0.50);
- setnurbsproperty(GL.GL_MAP2_VERTEX_4, NurbsConsts.N_ERROR_TOLERANCE,
- (float) 0.50);
-
- setnurbsproperty(GL.GL_MAP1_VERTEX_3, NurbsConsts.N_S_STEPS,
- (float) 100.0);
- setnurbsproperty(GL.GL_MAP1_VERTEX_4, NurbsConsts.N_S_STEPS,
- (float) 100.0);
- setnurbsproperty(GL.GL_MAP2_VERTEX_3, NurbsConsts.N_S_STEPS,
- (float) 100.0);
- setnurbsproperty(GL.GL_MAP2_VERTEX_4, NurbsConsts.N_S_STEPS,
- (float) 100.0);
-
- setnurbsproperty(GL.GL_MAP1_VERTEX_3, NurbsConsts.N_SAMPLINGMETHOD,
- NurbsConsts.N_PATHLENGTH);
-
- set_domain_distance_u_rate(100.0);
- set_domain_distance_v_rate(100.0);
- set_is_domain_distance_sampling(0);
-
- this.autoloadmode = true;
-
- this.callBackFlag = 0;
-
- this.errorCallback = null;
- }
-
- /**
- * Sets domain distance for dom.dist. sampling in u direction
- *
- * @param d
- * distance
- */
- private void set_domain_distance_u_rate(double d) {
- // DONE
- subdivider.set_domain_distance_u_rate(d);
- }
-
- /**
- * Sets domain distance for dom.dist. sampling in v direction
- *
- * @param d
- * distance
- */
- private void set_domain_distance_v_rate(double d) {
- // DONE
- subdivider.set_domain_distance_v_rate(d);
- }
-
- /**
- * Begins new NURBS curve
- */
- public void bgncurve() {
- // DONE
- O_curve o_curve = new O_curve();
- thread("do_bgncurve", o_curve);
- }
-
- /**
- * Calls a method with given name and passes argumet
- *
- * @param name
- * name of a method to be called
- * @param arg
- * parameter to be passed to called method
- */
- private void thread(String name, Object arg) {
- // DONE
- Class partype[] = new Class[1];
- partype[0] = arg.getClass();
- Method m;
- try {
- m = this.getClass().getMethod(name, partype);
- if (dl != null) {
- dl.append(this, m, arg);
- } else {
- m.invoke(this, new Object[] { arg });
- }
- } catch (Throwable e) {
- e.printStackTrace();
- }
-
- }
-
- /**
- * Calls a method with given name
- *
- * @param name
- * name of a method to be called
- */
- private void thread2(String name) {
- // DONE
- try {
- Method m = this.getClass().getMethod(name, (Class[]) null);
- if (dl != null) {
- dl.append(this, m, null);
- } else {
- m.invoke(this, (Object[]) null);
- }
- } catch (Throwable e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Begins a NURBS curve
- *
- * @param o_curve
- * curve object
- */
- public void do_bgncurve(O_curve o_curve) {
- if (inCurve > 0) {
- do_nurbserror(6);
- endcurve();
- }
- inCurve = 1;
- currentCurve = o_curve;
-
- currentCurve.curvetype = CT_NONE;
-
- if (inTrim) {
- if (!nextCurve.equals(o_curve)) {
- isCurveModified = 1;
- nextCurve = o_curve;
- }
- } else {
- if (!playBack)
- bgnrender();
- isDataValid = 1;
- }
- nextCurve = o_curve.next;
- // kind of solution of union
- nextPwlcurve = o_curve.o_pwlcurve;
- nextNurbscurve = o_curve.o_nurbscurve;
- }
-
- /**
- * Begins new surface
- *
- * @param o_surface
- * surface object
- */
- public void do_bgnsurface(O_surface o_surface) {
- // DONE
- if (inSurface > 0) {
- do_nurbserror(27);
- endsurface();
- }
- inSurface = 1;
- if (!playBack)
- bgnrender();
-
- isTrimModified = false;
- isDataSurfaceModified = false;
- isDataValid = 1;
- numTrims = 0;
- currentSurface = o_surface;
- nextTrim = o_surface.o_trim;
- nextNurbssurface = o_surface.o_nurbssurface;
- }
-
- /**
- * End a curve
- */
- public void endcurve() {
- // DONE
- thread2("do_endcurve");
- }
-
- /**
- * Ends surface
- */
- public void do_endsurface() {
- // DONE
- if (inTrim) {
- do_nurbserror(12);
- endtrim();
- }
-
- if (inSurface <= 0) {
- do_nurbserror(13);
- return;
- }
-
- inSurface = 0;
-
- nextNurbssurface = null;
-
- if (isDataValid <= 0) {
- return;
- }
-
- if (nextTrim != null) {
- isTrimModified = true;
- nextTrim = null;
- }
-
- // TODO errval ??
- if (numTrims > 0) {
- // System.out.println("TODO glunurbs.do_endsurface - numtrims > 0");
- }
-
- subdivider.beginQuilts();
- for (O_nurbssurface n = currentSurface.o_nurbssurface; n != null; n = n.next) {
- subdivider.addQuilt(n.bezier_patches);
- }
- subdivider.endQuilts();
- subdivider.drawSurfaces();
- if (!playBack)
- endrender();
-
- }
-
- /**
- * Ends a curve
- */
- public void do_endcurve() {
- // DONE
- // // System.out.println("do_endcurve");
- if (inCurve <= 0) {
- do_nurbserror(7);
- return;
- }
- inCurve = 0;
-
- nextCurve = null;
-
- if (currentCurve.curvetype == CT_NURBSCURVE) {
- // nextNurbscurve = null;
- // currentCurve.o_nurbscurve=null;
- } else {
- // nextPwlcurve = null;
- // currentCurve.o_pwlcurve=null;
- }
- if (!inTrim) {
- if (isDataValid <= 0) {
- return;
- }
- // TODO errval?
- if (currentCurve.curvetype == CT_NURBSCURVE) {
- subdivider.beginQuilts();
-
- for (O_nurbscurve n = currentCurve.o_nurbscurve; n != null; n = n.next)
- subdivider.addQuilt(n.bezier_curves);
-
- subdivider.endQuilts();
- subdivider.drawCurves();
- if (!playBack)
- endrender();
- } else {
- if (!playBack)
- endrender();
- do_nurbserror(9);
- }
- }
-
- }
-
- /**
- * Method for handling error codes
- *
- * @param i
- * error code
- */
- private void do_nurbserror(int i) {
- // TODO nurberror
- // System.out.println("TODO nurbserror " + i);
- }
-
- /**
- * Begin rendering
- */
- private void bgnrender() {
- // DONE
- if (autoloadmode) {
- loadGLMatrices();
- }
- }
-
- /**
- * Load matrices from OpenGL state machine
- */
- private void loadGLMatrices() {
- // TODO Auto-generated method stub
- // System.out.println("TODO glunurbs.loadGLMatrices");
- }
-
- /**
- * End rendering
- */
- private void endrender() {
- // DONE
- }
-
- /**
- * Make a NURBS curve
- *
- * @param nknots
- * number of knots in knot vector
- * @param knot
- * knot vector
- * @param stride
- * number of control points coordinates
- * @param ctlarray
- * control points
- * @param order
- * order of the curve
- * @param realType
- * type of the curve
- */
- public void nurbscurve(int nknots, float[] knot, int stride,
- float[] ctlarray, int order, int realType) {
- // DONE
- Mapdesc mapdesc = maplist.locate(realType);
- if (mapdesc == null) {
- do_nurbserror(35);
- isDataValid = 0;
- return;
- }
- if (ctlarray == null) {
- do_nurbserror(36);
- isDataValid = 0;
- return;
- }
- if (stride < 0) {
- do_nurbserror(34);
- isDataValid = 0;
- return;
- }
- Knotvector knots = new Knotvector(nknots, stride, order, knot);
-
- if (!do_check_knots(knots, "curve"))
- return;
-
- O_nurbscurve o_nurbscurve = new O_nurbscurve(realType);
- o_nurbscurve.bezier_curves = new Quilt(mapdesc);
- CArrayOfFloats ctrlcarr = new CArrayOfFloats(ctlarray);
- o_nurbscurve.bezier_curves.toBezier(knots, ctrlcarr, mapdesc
- .getNCoords());
- thread("do_nurbscurve", o_nurbscurve);
- }
-
- /**
- * Check knot vector specification
- *
- * @param knots
- * knot vector
- * @param msg
- * error message
- * @return knot vector is / is not valid
- */
- public boolean do_check_knots(Knotvector knots, String msg) {
- // DONE
- int status = knots.validate();
- if (status > 0) {
- do_nurbserror(status);
- if (renderhints.errorchecking != NurbsConsts.N_NOMSG)
- knots.show(msg);
- }
- return (status > 0) ? false : true;
- }
-
- /**
- * Draw a curve
- *
- * @param o_nurbscurve
- * NURBS curve object
- */
- public void do_nurbscurve(O_nurbscurve o_nurbscurve) {
- // DONE
-
- if (inCurve <= 0) {
- bgncurve();
- inCurve = 2;
- }
-
- if (o_nurbscurve.used) {
- do_nurbserror(23);
- isDataValid = 0;
- return;
- } else
- o_nurbscurve.used = true;
-
- if (currentCurve.curvetype == CT_NONE) {
- currentCurve.curvetype = CT_NURBSCURVE;
- } else if (currentCurve.curvetype != CT_NURBSCURVE) {
- do_nurbserror(24);
- isDataValid = 0;
- return;
- }
-
- // it was necessary to overcome problem with pointer to pointer here
-
- // if(!o_nurbscurve.equals(nextNurbscurve)){
- if (!o_nurbscurve.equals(currentCurve.o_nurbscurve)) {
- isCurveModified = 1;
- currentCurve.o_nurbscurve = o_nurbscurve;
- // nextNurbscurve=o_nurbscurve;
-
- }
-
- nextNurbscurve = o_nurbscurve.next;
-
- if (!currentCurve.equals(o_nurbscurve.owner)) {
- isCurveModified = 1;
- o_nurbscurve.owner = currentCurve;
- }
-
- if (o_nurbscurve.owner == null)
- isCurveModified = 1;
-
- if (inCurve == 2)
- endcurve();
- }
-
- /**
- * Draw NURBS surface
- *
- * @param o_nurbssurface
- * NURBS surface object
- */
- public void do_nurbssurface(O_nurbssurface o_nurbssurface) {
- // DONE
- if (inSurface <= 0) {
- bgnsurface();
- inSurface = 2;
- }
- if (o_nurbssurface.used) {
- do_nurbserror(25);
- isDataValid = 0;
- return;
- } else
- o_nurbssurface.used = true;
-
- if (!o_nurbssurface.equals(nextNurbscurve)) {
- isSurfaceModified = true;
- // nextNurbssurface=o_nurbssurface;
- currentSurface.o_nurbssurface = o_nurbssurface;
- }
-
- if (!currentSurface.equals(o_nurbssurface.owner)) {
- isSurfaceModified = true;
- o_nurbssurface.owner = currentSurface;
- }
-
- nextNurbssurface = o_nurbssurface.next;
-
- if (inSurface == 2)
- endsurface();
- }
-
- /**
- * (Re)Inicialize maps
- */
- public void redefineMaps() {
- // DONE
- maplist.initialize();
- }
-
- /**
- * Define a map of given properties
- *
- * @param type
- * map type
- * @param rational
- * is rational
- * @param ncoords
- * number of control point coordinates
- */
- public void defineMap(int type, int rational, int ncoords) {
- // DONE
- maplist.define(type, rational, ncoords);
- }
-
- /**
- * Set NURBS property
- *
- * @param type
- * property type
- * @param tag
- * property tag
- * @param value
- * property value
- */
- public void setnurbsproperty(int type, int tag, float value) {
- // DONE
- Mapdesc mapdesc = maplist.locate(type);
- if (mapdesc == null) {
- do_nurbserror(35);
- return;
- }
- if (!mapdesc.isProperty(tag)) {
- do_nurbserror(26);
- return;
- }
- Property prop = new Property(type, tag, value);
- thread("do_setnurbsproperty2", prop);
- }
-
- /**
- * Set parameters of existing property
- *
- * @param prop
- * property
- */
- public void do_setnurbsproperty2(Property prop) {
- Mapdesc mapdesc = maplist.find(prop.type);
- mapdesc.setProperty(prop.tag, prop.value);
- }
-
- /**
- * Set given property to rendering hints
- *
- * @param prop
- * property to be set
- */
- public void do_setnurbsproperty(Property prop) {
- // DONE
- renderhints.setProperty(prop);
- // TODO freeproperty?
- }
-
- /**
- * Sets wheteher we use domain distance sampling
- *
- * @param i
- * domain distance sampling flag
- */
- public void set_is_domain_distance_sampling(int i) {
- // DONE
- subdivider.set_is_domain_distance_sampling(i);
- }
-
- /**
- * Begin new surface
- */
- public void bgnsurface() {
- // DONE
- O_surface o_surface = new O_surface();
- // TODO nuid
- // System.out.println("TODO glunurbs.bgnsurface nuid");
- thread("do_bgnsurface", o_surface);
- }
-
- /**
- * End current surface
- */
- public void endsurface() {
- // DONE
- thread2("do_endsurface");
- }
-
- /**
- * End surface trimming
- */
- private void endtrim() {
- // TODO Auto-generated method stub
- // System.out.println("TODO glunurbs.endtrim");
- }
-
- /**
- * Make NURBS surface
- *
- * @param sknot_count
- * number of knots in s direction
- * @param sknot
- * knot vector in s direction
- * @param tknot_count
- * number of knots in t direction
- * @param tknot
- * knot vector in t direction
- * @param s_stride
- * number of coords of control points in s direction
- * @param t_stride
- * number of coords of control points in t direction
- * @param ctlarray
- * control points
- * @param sorder
- * order of curve in s direction
- * @param torder
- * order of curve in t direction
- * @param type
- * NURBS surface type (rational,...)
- */
- public void nurbssurface(int sknot_count, float[] sknot, int tknot_count,
- float[] tknot, int s_stride, int t_stride, float[] ctlarray,
- int sorder, int torder, int type) {
- // DONE
- Mapdesc mapdesc = maplist.locate(type);
- if (mapdesc == null) {
- do_nurbserror(35);
- isDataValid = 0;
- return;
- }
- if (s_stride < 0 || t_stride < 0) {
- do_nurbserror(34);
- isDataValid = 0;
- return;
- }
- Knotvector sknotvector = new Knotvector(sknot_count, s_stride, sorder,
- sknot);
- if (!do_check_knots(sknotvector, "surface"))
- return;
- Knotvector tknotvector = new Knotvector(tknot_count, t_stride, torder,
- tknot);
- if (!do_check_knots(tknotvector, "surface"))
- return;
-
- O_nurbssurface o_nurbssurface = new O_nurbssurface(type);
- o_nurbssurface.bezier_patches = new Quilt(mapdesc);
-
- CArrayOfFloats ctrlarr = new CArrayOfFloats(ctlarray);
- o_nurbssurface.bezier_patches.toBezier(sknotvector, tknotvector,
- ctrlarr, mapdesc.getNCoords());
- thread("do_nurbssurface", o_nurbssurface);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Knotspec.java b/src/classes/com/sun/opengl/impl/nurbs/Knotspec.java
deleted file mode 100755
index 9739e353c..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Knotspec.java
+++ /dev/null
@@ -1,557 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Knot vector specification
- *
- * @author Tomas Hrasky
- *
- */
-class Knotspec {
-
- /**
- * Begin of input knots
- */
- public CArrayOfFloats inkbegin;
-
- /**
- * End of input knots
- */
- public CArrayOfFloats inkend;
-
- /**
- * Stride before knot operations
- */
- public int prestride;
-
- /**
- * Curve order
- */
- public int order;
-
- /**
- * Next knot specification in linked list (used in surfaces)
- */
- public Knotspec next;
-
- /**
- * Last knot
- */
- public CArrayOfFloats klast;
-
- /**
- * First knot
- */
- CArrayOfFloats kfirst;
-
- /**
- * Beginning of breakpoints
- */
- CArrayOfBreakpts bbegin;
-
- /**
- * End of breakpoints
- */
- CArrayOfBreakpts bend;
-
- /**
- * Considered left end knot
- */
- CArrayOfFloats kleft;
-
- /**
- * Considered right end knot
- */
- CArrayOfFloats kright;
-
- /**
- * Offset before knot operations
- */
- int preoffset;
-
- /**
- * Control points array Length after knot operations
- */
- int postwidth;
-
- /**
- * Beginning of coeficients array
- */
- private CArrayOfFloats sbegin;
-
- /**
- * Beginning of output knots
- */
- private CArrayOfFloats outkbegin;
-
- /**
- * End of output knots
- */
- private CArrayOfFloats outkend;
-
- /**
- * Control points aray length before knot operations
- */
- int prewidth;
-
- /**
- * Offset after knot operations
- */
- int postoffset;
-
- /**
- * Number of control points' coordinates after knot operations
- */
- public int poststride;
-
- /**
- * Number of control points' coordinates
- */
- public int ncoords;
-
- /**
- * Tell whether knotspec has already benn transformed
- */
- public boolean istransformed;
-
- /**
- * Knotspec to be transformed
- */
- public Knotspec kspectotrans;
-
- /**
- * Finds knot border of knot insertion and required multiplicities
- */
- public void preselect() {
- // DONE
- float kval;
-
- klast = new CArrayOfFloats(inkend);
- klast.lessenPointerBy(order);
- for (kval = klast.get(); klast.getPointer() != inkend.getPointer(); klast
- .pp()) {
- if (!Knotvector.identical(klast.get(), kval))
- break;
- }
-
- kfirst = new CArrayOfFloats(inkbegin);
- kfirst.raisePointerBy(order - 1);
- for (kval = kfirst.get(); kfirst.getPointer() != inkend.getPointer(); kfirst
- .pp()) {
- if (!Knotvector.identical(kfirst.get(), kval))
- break;
- }
-
- CArrayOfFloats k = new CArrayOfFloats(kfirst);
- k.mm();
-
- for (; k.getPointer() >= inkbegin.getPointer(); k.mm())
- if (!Knotvector.identical(kval, k.get()))
- break;
- k.pp();
-
- Breakpt[] bbeginArray = new Breakpt[(klast.getPointer() - kfirst
- .getPointer()) + 1];
- for (int i = 0; i < bbeginArray.length; i++)
- bbeginArray[i] = new Breakpt();
- bbegin = new CArrayOfBreakpts(bbeginArray, 0);
- bbegin.get().multi = kfirst.getPointer() - k.getPointer();
- bbegin.get().value = kval;
-
- bend = new CArrayOfBreakpts(bbegin);
- kleft = new CArrayOfFloats(kfirst);
- kright = new CArrayOfFloats(kfirst);
-
- }
-
- /**
- * Perpares knotspec for transformation
- */
- public void select() {
- // DONE
- breakpoints();
- knots();
- factors();
-
- preoffset = kleft.getPointer() - (inkbegin.getPointer() + order);
- postwidth = ((bend.getPointer() - bbegin.getPointer()) * order);
- prewidth = (outkend.getPointer() - outkbegin.getPointer()) - order;
- postoffset = (bbegin.get().def > 1) ? (bbegin.get().def - 1) : 0;
-
- }
-
- /**
- * Computes alpha factors for computing new control points
- */
- private void factors() {
- // DONE
- CArrayOfFloats mid = new CArrayOfFloats(outkend.getArray(), (outkend
- .getPointer() - 1)
- - order + bend.get().multi);
-
- CArrayOfFloats fptr = null;
- if (sbegin != null)
- fptr = new CArrayOfFloats(sbegin);
-
- for (CArrayOfBreakpts bpt = new CArrayOfBreakpts(bend); bpt
- .getPointer() >= bbegin.getPointer(); bpt.mm()) {
- mid.lessenPointerBy(bpt.get().multi);
- int def = bpt.get().def - 1;
- if (def < 0)
- continue;
- float kv = bpt.get().value;
-
- CArrayOfFloats kf = new CArrayOfFloats(mid.getArray(), (mid
- .getPointer() - def)
- + (order - 1));
- for (CArrayOfFloats kl = new CArrayOfFloats(kf.getArray(), kf
- .getPointer()
- + def); kl.getPointer() != kf.getPointer(); kl.mm()) {
- CArrayOfFloats kh, kt;
- for (kt = new CArrayOfFloats(kl), kh = new CArrayOfFloats(mid); kt
- .getPointer() != kf.getPointer(); kh.mm(), kt.mm()) {
- fptr.set((kv - kh.get()) / (kt.get() - kh.get()));
- fptr.pp();
- }
- kl.set(kv);
- }
- }
-
- }
-
- /**
- * Makes new knot vector
- */
- private void knots() {
- // DONE
- CArrayOfFloats inkpt = new CArrayOfFloats(kleft.getArray(), kleft
- .getPointer()
- - order);
- CArrayOfFloats inkend = new CArrayOfFloats(kright.getArray(), kright
- .getPointer()
- + bend.get().def);
-
- outkbegin = new CArrayOfFloats(new float[inkend.getPointer()
- - inkpt.getPointer()], 0);
- CArrayOfFloats outkpt;
- for (outkpt = new CArrayOfFloats(outkbegin); inkpt.getPointer() != inkend
- .getPointer(); inkpt.pp(), outkpt.pp()) {
- outkpt.set(inkpt.get());
- }
- outkend = new CArrayOfFloats(outkpt);
- }
-
- /**
- * Analyzes breakpoints
- */
- private void breakpoints() {
- // DONE
- CArrayOfBreakpts ubpt = new CArrayOfBreakpts(bbegin);
- CArrayOfBreakpts ubend = new CArrayOfBreakpts(bend);
- int nfactors = 0;
-
- ubpt.get().value = ubend.get().value;
- ubpt.get().multi = ubend.get().multi;
-
- kleft = new CArrayOfFloats(kright);
-
- for (; kright.getPointer() != klast.getPointer(); kright.pp()) {
- if (Knotvector.identical(kright.get(), ubpt.get().value)) {
- ubpt.get().multi++;
- } else {
- ubpt.get().def = order - ubpt.get().multi;
- nfactors += (ubpt.get().def * (ubpt.get().def - 1)) / 2;
- ubpt.pp();
- ubpt.get().value = kright.get();
- ubpt.get().multi = 1;
- }
- }
- ubpt.get().def = order - ubpt.get().multi;
- nfactors += (ubpt.get().def * (ubpt.get().def - 1)) / 2;
-
- bend = new CArrayOfBreakpts(ubpt);
-
- if (nfactors > 0) {
- sbegin = new CArrayOfFloats(new float[nfactors], 0);
- } else {
- sbegin = null;
- }
-
- }
-
- /**
- * Copies control points
- *
- * @param _inpt
- * input control points
- * @param _outpt
- * output control points
- */
- public void copy(CArrayOfFloats _inpt, CArrayOfFloats _outpt) {
- CArrayOfFloats inpt = new CArrayOfFloats(_inpt);
- CArrayOfFloats outpt = new CArrayOfFloats(_outpt);
-
- inpt.raisePointerBy(preoffset);
- if (next != null) {
- for (CArrayOfFloats lpt = new CArrayOfFloats(outpt.getArray(),
- outpt.getPointer() + prewidth); outpt.getPointer() != lpt
- .getPointer(); outpt.raisePointerBy(poststride)) {
- next.copy(inpt, outpt);
- inpt.raisePointerBy(prestride);
- }
-
- } else {
- for (CArrayOfFloats lpt = new CArrayOfFloats(outpt.getArray(),
- outpt.getPointer() + prewidth); outpt.getPointer() != lpt
- .getPointer(); outpt.raisePointerBy(poststride)) {
- pt_io_copy(outpt, inpt);
- inpt.raisePointerBy(prestride);
- }
- }
-
- }
-
- /**
- * Copies one control point to other
- *
- * @param topt
- * source control point
- * @param frompt
- * destination control point
- */
- private void pt_io_copy(CArrayOfFloats topt, CArrayOfFloats frompt) {
- // DONE
- switch (ncoords) {
- case 4:
- topt.setRelative(3, frompt.getRelative(3));
- case 3:
- topt.setRelative(2, frompt.getRelative(2));
- case 2:
- topt.setRelative(1, frompt.getRelative(1));
- case 1:
- topt.set(frompt.get());
- break;
- default:
- // TODO break with copying in general case
- // System.out.println("TODO knotspec.pt_io_copy");
- break;
- }
-
- }
-
- /**
- * Inserts a knot
- *
- * @param _p
- * inserted knot
- */
- public void transform(CArrayOfFloats _p) {
- CArrayOfFloats p = new CArrayOfFloats(_p);
- // DONE
- if (next != null) {//surface code
- if (this.equals(kspectotrans)) {
- next.transform(p);
- } else {
- if (istransformed) {
- p.raisePointerBy(postoffset);
- for (CArrayOfFloats pend = new CArrayOfFloats(p.getArray(),
- p.getPointer() + postwidth); p.getPointer() != pend
- .getPointer(); p.raisePointerBy(poststride))
- next.transform(p);
-
- } else {
- CArrayOfFloats pend = new CArrayOfFloats(p.getArray(), p
- .getPointer()
- + prewidth);
- for (; p.getPointer() != pend.getPointer(); p
- .raisePointerBy(poststride))
- next.transform(p);
- }
- }
-
- } else {//code for curve
- if (this.equals(kspectotrans)) {
- insert(p);
- } else {
- if (istransformed) {
- p.raisePointerBy(postoffset);
- for (CArrayOfFloats pend = new CArrayOfFloats(p.getArray(),
- p.getPointer() + postwidth); p.getPointer() != pend
- .getPointer(); p.raisePointerBy(poststride)) {
- kspectotrans.insert(p);
- }
- } else {
- CArrayOfFloats pend = new CArrayOfFloats(p.getArray(), p
- .getPointer()
- + prewidth);
- for (; p.getPointer() != pend.getPointer(); p
- .raisePointerBy(poststride))
- kspectotrans.insert(p);
- }
- }
- }
-
- }
-
- /**
- * Inserts a knot and computes new control points
- *
- * @param p
- * inserted knot
- */
- private void insert(CArrayOfFloats p) {
- // DONE
- CArrayOfFloats fptr = null;
- if (sbegin != null)
- fptr = new CArrayOfFloats(sbegin);
- CArrayOfFloats srcpt = new CArrayOfFloats(p.getArray(), p.getPointer()
- + prewidth - poststride);
- // CArrayOfFloats srcpt = new CArrayOfFloats(p.getArray(), prewidth -
- // poststride);
- CArrayOfFloats dstpt = new CArrayOfFloats(p.getArray(), p.getPointer()
- + postwidth + postoffset - poststride);
- // CArrayOfFloats dstpt = new CArrayOfFloats(p.getArray(), postwidth +
- // postoffset - poststride);
- CArrayOfBreakpts bpt = new CArrayOfBreakpts(bend);
-
- for (CArrayOfFloats pend = new CArrayOfFloats(srcpt.getArray(), srcpt
- .getPointer()
- - poststride * bpt.get().def); srcpt.getPointer() != pend
- .getPointer(); pend.raisePointerBy(poststride)) {
- CArrayOfFloats p1 = new CArrayOfFloats(srcpt);
- for (CArrayOfFloats p2 = new CArrayOfFloats(srcpt.getArray(), srcpt
- .getPointer()
- - poststride); p2.getPointer() != pend.getPointer(); p1
- .setPointer(p2.getPointer()), p2
- .lessenPointerBy(poststride)) {
- pt_oo_sum(p1, p1, p2, fptr.get(), 1.0 - fptr.get());
- fptr.pp();
- }
- }
- bpt.mm();
- for (; bpt.getPointer() >= bbegin.getPointer(); bpt.mm()) {
-
- for (int multi = bpt.get().multi; multi > 0; multi--) {
- pt_oo_copy(dstpt, srcpt);
- dstpt.lessenPointerBy(poststride);
- srcpt.lessenPointerBy(poststride);
- }
- for (CArrayOfFloats pend = new CArrayOfFloats(srcpt.getArray(),
- srcpt.getPointer() - poststride * bpt.get().def); srcpt
- .getPointer() != pend.getPointer(); pend
- .raisePointerBy(poststride), dstpt
- .lessenPointerBy(poststride)) {
- pt_oo_copy(dstpt, srcpt);
- CArrayOfFloats p1 = new CArrayOfFloats(srcpt);
-
- for (CArrayOfFloats p2 = new CArrayOfFloats(srcpt.getArray(),
- srcpt.getPointer() - poststride); p2.getPointer() != pend
- .getPointer(); p1.setPointer(p2.getPointer()), p2
- .lessenPointerBy(poststride)) {
- pt_oo_sum(p1, p1, p2, fptr.get(), 1.0 - fptr.get());
- fptr.pp();
- }
- }
- }
- }
-
- /**
- * Copies one control point to another
- *
- * @param topt
- * source ctrl point
- * @param frompt
- * distance ctrl point
- */
- private void pt_oo_copy(CArrayOfFloats topt, CArrayOfFloats frompt) {
- // DONE
- // this is a "trick" with case - "break" is omitted so it comes through all cases
- switch (ncoords) {
- case 4:
- topt.setRelative(3, frompt.getRelative(3));
- case 3:
- topt.setRelative(2, frompt.getRelative(2));
- case 2:
- topt.setRelative(1, frompt.getRelative(1));
- case 1:
- topt.setRelative(0, frompt.getRelative(0));
- break;
- default:
- // default uses memcpy but it is not needed (we probably won't have more than 4 coords)
- // TODO not sure about it
- break;
- }
-
- }
-
- /**
- * Computes new control point
- *
- * @param x
- * first point
- * @param y
- * second point
- * @param z
- * third pont
- * @param a
- * alpha
- * @param b
- * 1 - alpha
- */
- private void pt_oo_sum(CArrayOfFloats x, CArrayOfFloats y,
- CArrayOfFloats z, float a, double b) {
- // DONE
- switch (ncoords) {
- case 4:
- x.setRelative(3, (float) (a * y.getRelative(3) + b
- * z.getRelative(3)));
- case 3:
- x.setRelative(2, (float) (a * y.getRelative(2) + b
- * z.getRelative(2)));
- case 2:
- x.setRelative(1, (float) (a * y.getRelative(1) + b
- * z.getRelative(1)));
- case 1:
- x.setRelative(0, (float) (a * y.getRelative(0) + b
- * z.getRelative(0)));
- break;
- default:
- //no need of default - see previous method and its case statement
- // System.out.println("TODO pt_oo_sum default");
- break;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Knotvector.java b/src/classes/com/sun/opengl/impl/nurbs/Knotvector.java
deleted file mode 100755
index 1442fe17d..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Knotvector.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Knot vector used in curve specification
- *
- * @author Tomas Hrasky
- *
- */
-class Knotvector {
-
- /**
- * Tolerance used when comparing knots - when difference is smaller, knots
- * are considered equal
- */
- public static final float TOLERANCE = 1.0e-5f;
-
- /**
- * Maximum curve order
- */
- private static final int MAXORDER = 24;
-
- /**
- * Number of knots
- */
- int knotcount;
-
- /**
- * Number of control points' coordinates
- */
- int stride;
-
- /**
- * Curve order
- */
- int order;
-
- /**
- * Knots
- */
- float[] knotlist;
-
- /**
- * Makes new knotvector
- *
- * @param nknots
- * number of knots
- * @param stride
- * number of ctrl points' corrdinates
- * @param order
- * curve order
- * @param knot
- * knots
- */
- public Knotvector(int nknots, int stride, int order, float[] knot) {
- // DONE
- init(nknots, stride, order, knot);
- }
-
- /**
- * Initializes knotvector
- *
- * @param nknots
- * number of knots
- * @param stride
- * number of ctrl points' corrdinates
- * @param order
- * curve order
- * @param knot
- * knots
- */
- public void init(int nknots, int stride, int order, float[] knot) {
- // DONE
- this.knotcount = nknots;
- this.stride = stride;
- this.order = order;
- this.knotlist = new float[nknots];
- for (int i = 0; i < nknots; i++) {
- this.knotlist[i] = knot[i];
- }
-
- }
-
- /**
- * Validates knot vector parameters
- *
- * @return knot vector validity
- */
- public int validate() {
- int kindex = knotcount - 1;
- if (order < 1 || order > MAXORDER) {
- return 1;
- }
- if (knotcount < 2 * order) {
- return 2;
- }
- if (identical(knotlist[kindex - (order - 1)], knotlist[order - 1])) {
- return 3;
- }
- for (int i = 0; i < kindex; i++) {
- if (knotlist[i] > knotlist[i + 1])
- return 4;
- }
- int multi = 1;
- for (; kindex >= 1; kindex--) {
- if (knotlist[kindex] - knotlist[kindex - 1] < TOLERANCE) {
- multi++;
- continue;
- }
- if (multi > order) {
- return 5;
- }
- multi = 1;
- }
- if (multi > order) {
- return 5;
- }
-
- return 0;
- }
-
- /**
- * Show specified message
- *
- * @param msg
- * message to be shown
- */
- public void show(String msg) {
- // TODO Auto-generated method stub
- // System.out.println("TODO knotvector.show");
-
- }
-
- /**
- * Compares two knots for equality
- *
- * @param a
- * first knot
- * @param b
- * second knot
- * @return knots are/are not equal
- */
- public static boolean identical(float a, float b) {
- return ((a - b) < TOLERANCE) ? true : false;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Mapdesc.java b/src/classes/com/sun/opengl/impl/nurbs/Mapdesc.java
deleted file mode 100755
index a6536dcb8..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Mapdesc.java
+++ /dev/null
@@ -1,442 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class holding properties of OpenGL map
- * @author Tomas Hrasky
- *
- */
-class Mapdesc {
-
- /**
- * Maximum control point coords
- */
- private static final int MAXCOORDS = 5;
-
- /**
- * Next description in list
- */
- public Mapdesc next;
-
- /**
- * Is map rational
- */
- public int isrational;
-
- /**
- * Number of control point coords
- */
- public int ncoords;
-
- /**
- * Map type
- */
- private int type;
-
- /**
- * Number of homogenous coords
- */
- private int hcoords;
-
- /**
- * Number of inhomogenous coords
- */
- private int inhcoords;
-
- /**
- * Not used
- */
- private int mask;
-
- /**
- * Value of N_PIXEL_TOLERANCE property
- */
- private float pixel_tolerance;
-
- /**
- * Value of N_ERROR_TOLERANCE property
- */
- private float error_tolerance;
-
- /**
- * Value of N_BBOX_SUBDIVIDING property
- */
- private float bbox_subdividing;
-
- /**
- * Value of N_CULLING property
- */
- private float culling_method;
-
- /**
- * Value of N_SAMPLINGMETHOD property
- */
- private float sampling_method;
-
- /**
- * Value of N_CLAMPFACTOR property
- */
- float clampfactor;
-
- /**
- * Value of N_MINSAVINGS property
- */
- private float minsavings;
-
- /**
- * Steps in u direction
- */
- private float s_steps;
-
- /**
- * Steps in v direction
- */
- private float t_steps;
-
- /**
- * Maximal step
- */
- float maxrate;
-
- /**
- * Maximal u direction step
- */
- private float maxsrate;
-
- /**
- * Maximal v direction step
- */
- private float maxtrate;
-
- /**
- * Not used
- */
- private float[][] bmat;
-
- /**
- * Sampling matrix
- */
- private float[][] smat;
-
- /**
- * Not used
- */
- private float[][] cmat;
-
- /**
- * Not used
- */
- private float[] bboxsize;
-
- /**
- * Makes new mapdesc
- * @param type map type
- * @param rational is rational
- * @param ncoords number of control points coords
- * @param backend backend object
- */
- public Mapdesc(int type, int rational, int ncoords, Backend backend) {
- // DONE
- this.type = type;
- this.isrational = rational;
- this.ncoords = ncoords;
- this.hcoords = ncoords + (isrational > 0 ? 0 : 1);
- this.inhcoords = ncoords - (isrational > 0 ? 1 : 0);
- this.mask = ((1 << (inhcoords * 2)) - 1);
- next = null;
-
- assert (hcoords <= MAXCOORDS);
- assert (inhcoords >= 1);
-
- pixel_tolerance = 1f;
- error_tolerance = 1f;
- bbox_subdividing = NurbsConsts.N_NOBBOXSUBDIVISION;
- culling_method = NurbsConsts.N_NOCULLING;
- sampling_method = NurbsConsts.N_NOSAMPLING;
- clampfactor = NurbsConsts.N_NOCLAMPING;
- minsavings = NurbsConsts.N_NOSAVINGSSUBDIVISION;
- s_steps = 0f;
- t_steps = 0f;
-
- maxrate = (s_steps < 0) ? 0 : s_steps;
- maxsrate = (s_steps < 0) ? 0 : s_steps;
- maxtrate = (t_steps < 0) ? 0 : t_steps;
- bmat = new float[MAXCOORDS][MAXCOORDS];
- cmat = new float[MAXCOORDS][MAXCOORDS];
- smat = new float[MAXCOORDS][MAXCOORDS];
-
- identify(bmat);
- identify(cmat);
- identify(smat);
- bboxsize = new float[MAXCOORDS];
- for (int i = 0; i < inhcoords; i++)
- bboxsize[i] = 1;
- }
-
- /**
- * Make matrix identity matrix
- * @param arr matrix
- */
- private void identify(float[][] arr) {
- // DONE
- for (int i = 0; i < MAXCOORDS; i++)
- for (int j = 0; j < MAXCOORDS; j++)
- arr[i][j] = 0;
- for (int i = 0; i < MAXCOORDS; i++)
- arr[i][i] = 1;
-
- }
-
- /**
- * Tells whether tag is property tag
- * @param tag property tag
- * @return is/is not property
- */
- public boolean isProperty(int tag) {
- boolean ret;
- switch (tag) {
- case NurbsConsts.N_PIXEL_TOLERANCE:
- case NurbsConsts.N_ERROR_TOLERANCE:
- case NurbsConsts.N_CULLING:
- case NurbsConsts.N_BBOX_SUBDIVIDING:
- case NurbsConsts.N_S_STEPS:
- case NurbsConsts.N_T_STEPS:
- case NurbsConsts.N_SAMPLINGMETHOD:
- case NurbsConsts.N_CLAMPFACTOR:
- case NurbsConsts.N_MINSAVINGS:
- ret = true;
- break;
- default:
- ret = false;
- break;
- }
- return ret;
- }
-
- /**
- * Returns number of control points' coords
- * @return number of control points' coords
- */
- public int getNCoords() {
- return ncoords;
- }
-
- /**
- * Returns map type
- * @return map type
- */
- public int getType() {
- return type;
- }
-
- /**
- * Tells whether map is range sampling
- * @return is map range sampling
- */
- public boolean isRangeSampling() {
- // DONE
- return (isParametricDistanceSampling() || isPathLengthSampling()
- || isSurfaceAreaSampling() || isObjectSpaceParaSampling() || isObjectSpacePathSampling());
- }
-
- /**
- * Tells whether map is object space sampling
- * @return is map object space sampling
- */
- private boolean isObjectSpacePathSampling() {
- // DONE
- return sampling_method == NurbsConsts.N_OBJECTSPACE_PATH;
- }
-
- /**
- * Tells whether map is object space parasampling
- * @return is map object space parasampling
- */
- private boolean isObjectSpaceParaSampling() {
- // DONE
- return sampling_method == NurbsConsts.N_OBJECTSPACE_PARA;
- }
-
- /**
- * Tells whether map is area sampling surface
- * @return is map area sampling surface
- */
- private boolean isSurfaceAreaSampling() {
- // DONE
- return sampling_method == NurbsConsts.N_SURFACEAREA;
- }
-
- /**
- * Tells whether map is path length sampling
- * @return is map path length sampling
- */
- boolean isPathLengthSampling() {
- // DONE
- return sampling_method == NurbsConsts.N_PATHLENGTH;
- }
-
- /**
- * Tells whether map is parametric distance sampling
- * @return is map parametric distance sampling
- */
- boolean isParametricDistanceSampling() {
- // DONE
- return sampling_method == NurbsConsts.N_PARAMETRICDISTANCE;
- }
-
- /**
- * Tells whether map is culling
- * @return is map culling
- */
- public boolean isCulling() {
- // DONE
- return culling_method != NurbsConsts.N_NOCULLING ? true : false;
- }
-
- /**
- * Tells whether map is constantly sampling
- * @return is map constant sampling
- */
- public boolean isConstantSampling() {
- return (sampling_method == NurbsConsts.N_FIXEDRATE) ? true : false;
- }
-
- /**
- * Tells whether map is domain sampling
- * @return is map domain sampling
- */
- public boolean isDomainSampling() {
- return (sampling_method == NurbsConsts.N_DOMAINDISTANCE) ? true : false;
- }
-
- /**
- * Returns property of specified tag value
- * @param tag property tag
- * @return property value
- */
- public float getProperty(int tag) {
- // TODO Auto-generated method stub
- // System.out.println("TODO mapdesc.getproperty");
- return 0;
- }
-
- /**
- * Sets property with given tag
- * @param tag property tag
- * @param value desired value
- */
- public void setProperty(int tag, float value) {
- // TODO Auto-generated method stub
- switch (tag) {
- case NurbsConsts.N_PIXEL_TOLERANCE:
- pixel_tolerance = value;
- break;
- case NurbsConsts.N_ERROR_TOLERANCE:
- error_tolerance = value;
- break;
- case NurbsConsts.N_CULLING:
- culling_method = value;
- break;
- case NurbsConsts.N_BBOX_SUBDIVIDING:
- if (value <= 0)
- value = NurbsConsts.N_NOBBOXSUBDIVISION;
- bbox_subdividing = value;
- break;
- case NurbsConsts.N_S_STEPS:
- if (value < 0)
- value = 0;
- s_steps = value;
- maxrate = value;
- maxsrate = value;
- break;
- case NurbsConsts.N_T_STEPS:
- if (value < 0)
- value = 0;
- t_steps = value;
- maxtrate = value;
- break;
- case NurbsConsts.N_SAMPLINGMETHOD:
- sampling_method = value;
- break;
- case NurbsConsts.N_CLAMPFACTOR:
- if (value < 0)
- value = 0;
- clampfactor = value;
- break;
- case NurbsConsts.N_MINSAVINGS:
- if (value <= 0)
- value = NurbsConsts.N_NOSAVINGSSUBDIVISION;
- minsavings = value;
- break;
- }
- }
-
- /**
- * Samples curve
- * @param pts control points
- * @param order curve order
- * @param stride number of control points' coordinates
- * @param sp breakpoints
- * @param outstride output number of control points' coordinates
- */
- public void xformSampling(CArrayOfFloats pts, int order, int stride,
- float[] sp, int outstride) {
- // DONE
- xFormMat(smat, pts, order, stride, sp, outstride);
- }
-
- /**
- * Empty method
- * @param mat sampling matrix
- * @param pts ontrol points
- * @param order curve order
- * @param stride number of control points' coordinates
- * @param cp breakpoints
- * @param outstride output number of control points' coordinates
- */
- private void xFormMat(float[][] mat, CArrayOfFloats pts, int order,
- int stride, float[] cp, int outstride) {
- // TODO Auto-generated method stub
-
- // System.out.println("TODO mapdsc.xformmat ; change cp from float[] to carrayoffloats");
-
- if (isrational > 0) {
-
- } else {
-
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Maplist.java b/src/classes/com/sun/opengl/impl/nurbs/Maplist.java
deleted file mode 100755
index e6450f75d..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Maplist.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class holding list of Mapdescs
- * @author Tomáš Hráský
- *
- */
-class Maplist {
- /**
- * Head of linked list
- */
- private Mapdesc maps;
-
- /**
- * Backend class
- */
- private Backend backend;
-
- /**
- * Makes new Maplist
- * @param backend Backend class
- */
- public Maplist(Backend backend) {
- this.backend = backend;
- }
-
- /**
- * Sets linked list beginning to null
- */
- public void initialize() {
- // TODO mapdespool.clear ?
- maps = null;
- }
-
- /**
- * Defines new Mapdesc if it is not defined and appends it to linked list
- * @param type map type
- * @param rational is map rational
- * @param ncoords number of coords
- */
- public void define(int type, int rational, int ncoords) {
- // DONE
- Mapdesc m = locate(type);
- assert (m == null || (m.isrational == rational && m.ncoords == ncoords));
- add(type, rational, ncoords);
-
- }
-
- /**
- * Adds new Mapdesc to linked list
- * @param type map type
- * @param rational is map rational
- * @param ncoords number of coords
- */
- private void add(int type, int rational, int ncoords) {
- // DONE
- Mapdesc map = new Mapdesc(type, rational, ncoords, backend);
- if (maps == null) {
- maps = map;
- } else {
- map.next = maps;
- maps = map;
- }
- }
-
- /**
- * Tries to find Mapdesc in linked list
- * @param type map type
- * @return Mapdesc of type or null if there is no such map
- */
- public Mapdesc locate(int type) {
- // DONE
- Mapdesc m = null;
- for (m = maps; m != null; m = m.next)
- if (m.getType() == type)
- break;
- return m;
- }
-
- /**
- * Alias for locate
- * @param type maptype
- * @return Mapdesc of type or null if there is no such map
- */
- public Mapdesc find(int type) {
- return locate(type);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/NurbsConsts.java b/src/classes/com/sun/opengl/impl/nurbs/NurbsConsts.java
deleted file mode 100755
index 0ff77069b..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/NurbsConsts.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class hodling NURBS constants as seen in OpenGL GLU documentation
- * @author JOGL project
- *
- */
-class NurbsConsts {
- /*
- * NURBS Properties - one set per map, each takes a single INREAL arg
- */
- public static final int N_SAMPLING_TOLERANCE = 1;
-
- public static final int N_S_RATE = 6;
-
- public static final int N_T_RATE = 7;
-
- public static final int N_CLAMPFACTOR = 13;
-
- public static final float N_NOCLAMPING = 0.0f;
-
- public static final int N_MINSAVINGS = 14;
-
- public static final float N_NOSAVINGSSUBDIVISION = 0.0f;
-
- /*
- * NURBS Properties - one set per map, each takes an enumerated value
- */
- public static final int N_CULLING = 2;
-
- public static final float N_NOCULLING = 0.0f;
-
- public static final float N_CULLINGON = 1.0f;
-
- public static final int N_SAMPLINGMETHOD = 10;
-
- public static final float N_NOSAMPLING = 0.0f;
-
- public static final float N_FIXEDRATE = 3.0f;
-
- public static final float N_DOMAINDISTANCE = 2.0f;
-
- public static final float N_PARAMETRICDISTANCE = 5.0f;
-
- public static final float N_PATHLENGTH = 6.0f;
-
- public static final float N_SURFACEAREA = 7.0f;
-
- public static final float N_OBJECTSPACE_PARA = 8.0f;
-
- public static final float N_OBJECTSPACE_PATH = 9.0f;
-
- public static final int N_BBOX_SUBDIVIDING = 17;
-
- public static final float N_NOBBOXSUBDIVISION = 0.0f;
-
- public static final float N_BBOXTIGHT = 1.0f;
-
- public static final float N_BBOXROUND = 2.0f;
-
- /*
- * NURBS Rendering Properties - one set per renderer each takes an
- * enumerated value
- */
- public static final int N_DISPLAY = 3;
-
- public static final int N_FILL = 1;
-
- public static final int N_OUTLINE_POLY = 2;
-
- public static final int N_OUTLINE_TRI = 3;
-
- public static final int N_OUTLINE_QUAD = 4;
-
- public static final int N_OUTLINE_PATCH = 5;
-
- public static final int N_OUTLINE_PARAM = 6;
-
- public static final int N_OUTLINE_PARAM_S = 7;
-
- public static final int N_OUTLINE_PARAM_ST = 8;
-
- public static final int N_OUTLINE_SUBDIV = 9;
-
- public static final int N_OUTLINE_SUBDIV_S = 10;
-
- public static final int N_OUTLINE_SUBDIV_ST = 11;
-
- public static final int N_ISOLINE_S = 12;
-
- public static final int N_ERRORCHECKING = 4;
-
- public static final int N_NOMSG = 0;
-
- public static final int N_MSG = 1;
-
- /* GL 4.0 propeties not defined above */
-
- public static final int N_PIXEL_TOLERANCE = N_SAMPLING_TOLERANCE;
-
- public static final int N_ERROR_TOLERANCE = 20;
-
- public static final int N_SUBDIVISIONS = 5;
-
- public static final int N_TILES = 8;
-
- public static final int N_TMP1 = 9;
-
- public static final int N_TMP2 = N_SAMPLINGMETHOD;
-
- public static final int N_TMP3 = 11;
-
- public static final int N_TMP4 = 12;
-
- public static final int N_TMP5 = N_CLAMPFACTOR;
-
- public static final int N_TMP6 = N_MINSAVINGS;
-
- public static final int N_S_STEPS = N_S_RATE;
-
- public static final int N_T_STEPS = N_T_RATE;
-
- /*
- * NURBS Rendering Properties - one set per map, each takes an INREAL matrix
- * argument
- */
- public static final int N_CULLINGMATRIX = 1;
-
- public static final int N_SAMPLINGMATRIX = 2;
-
- public static final int N_BBOXMATRIX = 3;
-
- /*
- * NURBS Rendering Properties - one set per map, each takes an INREAL vector
- * argument
- */
- public static final int N_BBOXSIZE = 4;
-
- /* type argument for trimming curves */
-
- public static final int N_P2D = 0x8;
-
- public static final int N_P2DR = 0xd;
-
- public static final int N_MESHLINE = 1;
-
- public static final int N_MESHFILL = 0;
-
- public static final int N_MESHPOINT = 2;
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/O_curve.java b/src/classes/com/sun/opengl/impl/nurbs/O_curve.java
deleted file mode 100755
index 1a88d427f..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/O_curve.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Struct holding curve links
- * @author Tomáš Hráský
- *
- */
-class O_curve {
-
- /**
- * Curve type
- */
- public int curvetype;
-
- /**
- * Next curve in linked list
- */
- public O_curve next;
-
- /**
- * Curve of picewiselinear type
- */
- public O_pwlcurve o_pwlcurve;
-
- /**
- * NURBS curve
- */
- public O_nurbscurve o_nurbscurve;
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/O_nurbscurve.java b/src/classes/com/sun/opengl/impl/nurbs/O_nurbscurve.java
deleted file mode 100755
index 634558815..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/O_nurbscurve.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * NURBS curve object
- * @author Tomáš Hráský
- *
- */
-class O_nurbscurve {
-
- /**
- * List of bezier curves
- */
- public Quilt bezier_curves;
-
- /**
- * Curve type
- */
- public int type;
-
- /**
- * Was curve used ?
- */
- boolean used;
-
- /**
- * Parent curve
- */
- O_curve owner;
-
- /**
- * Next curve in list
- */
- O_nurbscurve next;
-
- /**
- * Makes new O_nurbscurve
- * @param realType type of curve
- */
- public O_nurbscurve(int realType) {
- // DONE
- this.type = realType;
- this.owner = null;
- this.next = null;
- this.used = false;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/O_nurbssurface.java b/src/classes/com/sun/opengl/impl/nurbs/O_nurbssurface.java
deleted file mode 100755
index 7497b8c0f..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/O_nurbssurface.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * NURBS surface object
- * @author Tomáš Hráský
- *
- */
-class O_nurbssurface {
-
- /**
- * List of bezier patches forming NURBS surface
- */
- public Quilt bezier_patches;
-
- /**
- * Was surface used
- */
- public boolean used;
-
- /**
- * Parent O_surface
- */
- public O_surface owner;
-
- /**
- * Next surface in list
- */
- public O_nurbssurface next;
-
- /**
- * Surface type
- */
- private int type;
-
- /**
- * Makes new O_nurbssurface of type
- * @param type surface type
- */
- public O_nurbssurface(int type) {
- this.type = type;
- this.owner = null;
- this.next = null;
- this.used = false;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/O_pwlcurve.java b/src/classes/com/sun/opengl/impl/nurbs/O_pwlcurve.java
deleted file mode 100755
index 460136d49..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/O_pwlcurve.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Empty class
- * @author Tomáš Hráský
- *
- */
-class O_pwlcurve {
-
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/O_surface.java b/src/classes/com/sun/opengl/impl/nurbs/O_surface.java
deleted file mode 100755
index 009953147..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/O_surface.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Surface object
- * @author Tomáš Hráský
- *
- */
-class O_surface {
- /**
- * NURBS surface
- */
- O_nurbssurface o_nurbssurface;
-
- /**
- * Trims
- */
- O_trim o_trim;
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/O_trim.java b/src/classes/com/sun/opengl/impl/nurbs/O_trim.java
deleted file mode 100755
index ccbcc12f0..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/O_trim.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Empty class
- * @author Tomáš Hráský
- *
- */
-class O_trim {
-
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/OpenGLCurveEvaluator.java b/src/classes/com/sun/opengl/impl/nurbs/OpenGLCurveEvaluator.java
deleted file mode 100755
index 65ec983c4..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/OpenGLCurveEvaluator.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-import javax.media.opengl.GL;
-import javax.media.opengl.glu.GLU;
-
-/**
- * Class rendering curves with OpenGL
- * @author Tomáš Hráský
- *
- */
-class OpenGLCurveEvaluator {
-
- /**
- * Output triangles (for callback) or render curve
- */
- private boolean output_triangles;
-
- /**
- * OpenGL object
- */
- private GL gl;
-
- /**
- * Not used
- */
- private int vertex_flag;
-
- /**
- * Not used
- */
- private int normal_flag;
-
- /**
- * Not used
- */
- private int color_flag;
-
- /**
- * Not used
- */
- private int texcoord_flag;
-
- /**
- * Number of bezier arc - used for color distinguishing of arcs forming NURBS curve
- */
- private int poradi;
-
- /**
- * Makes new Evaluator
- */
- public OpenGLCurveEvaluator() {
- gl = GLU.getCurrentGL();
- }
-
- /**
- * Pushes eval bit
- */
- public void bgnmap1f() {
- // DONE
- if (output_triangles) {
- vertex_flag = 0;
- normal_flag = 0;
- color_flag = 0;
- texcoord_flag = 0;
- } else {
- gl.glPushAttrib(GL.GL_EVAL_BIT);
- }
-
- }
-
- /**
- * Pops all OpenGL attributes
- */
- public void endmap1f() {
- // DONE
- if (output_triangles) {
-
- } else {
- gl.glPopAttrib();
- }
-
- }
-
- /**
- * Initializes opengl evaluator
- * @param type curve type
- * @param ulo lowest u
- * @param uhi highest u
- * @param stride control point coords
- * @param order curve order
- * @param ps control points
- */
- public void map1f(int type, float ulo, float uhi, int stride, int order,
- CArrayOfFloats ps) {
- if (output_triangles) {
- // TODO code for callback (output_triangles probably indicates callback)
- // System.out.println("TODO curveevaluator.map1f-output_triangles");
- } else {
- gl.glMap1f(type, ulo, uhi, stride, order, ps.getArray(), ps
- .getPointer());
-
- // DEBUG - drawing bézier control points
- // gl.glColor3d(.5,.5,.5);
- // gl.glPointSize(5);
- // gl.glBegin(GL.GL_POINTS);
- // float[] ctrlpoints=ps.getArray();
- // for(int i=ps.getPointer();i<ps.getPointer()+order;i++){
- // gl.glVertex3d(ctrlpoints[i * 4], ctrlpoints[i * 4 + 1],0);
- // }
- // gl.glEnd();
- }
-
- }
-
- /**
- * Calls opengl enable
- * @param type what to enable
- */
- public void enable(int type) {
- // DONE
- gl.glEnable(type);
- }
-
- /**
- * Calls glMapGrid1f
- * @param nu steps
- * @param u1 low u
- * @param u2 high u
- */
- public void mapgrid1f(int nu, float u1, float u2) {
- if (output_triangles) {
- // System.out.println("TODO curveevaluator.mapgrid1f");
- } else
- gl.glMapGrid1f(nu, u1, u2);
- // // System.out.println("upravit NU");
- // gl.glMapGrid1f(50,u1,u2);
- }
-
- /**
- * Evaluates a curve using glEvalMesh1f
- * @param style Backend.N_MESHFILL/N_MESHLINE/N_MESHPOINT
- * @param from lowest param
- * @param to highest param
- */
- public void mapmesh1f(int style, int from, int to) {
- /* //DEBUG drawing control points
- this.poradi++;
- if (poradi % 2 == 0)
- gl.glColor3f(1, 0, 0);
- else
- gl.glColor3f(0, 1, 0);
- */
- if (output_triangles) {
- // TODO code for callback
- // System.out.println("TODO openglcurveevaluator.mapmesh1f output_triangles");
- } else {
- switch (style) {
- case Backend.N_MESHFILL:
- case Backend.N_MESHLINE:
- gl.glEvalMesh1(GL.GL_LINE, from, to);
- break;
- case Backend.N_MESHPOINT:
- gl.glEvalMesh1(GL.GL_POINT, from, to);
- break;
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/OpenGLSurfaceEvaluator.java b/src/classes/com/sun/opengl/impl/nurbs/OpenGLSurfaceEvaluator.java
deleted file mode 100755
index 2c31bc2bc..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/OpenGLSurfaceEvaluator.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-import javax.media.opengl.GL;
-import javax.media.opengl.glu.GLU;
-
-/**
- * Class rendering surfaces with OpenGL
- * @author Tomas Hrasky
- *
- */
-class OpenGLSurfaceEvaluator {
-
- /**
- * JOGL OpenGL object
- */
- private GL gl;
-
- /**
- * Output triangles (callback)
- */
- private boolean output_triangles;
-
- /**
- * Number of patch - used for distinguishing bezier plates forming NURBS surface with different colors
- */
- private int poradi;
-
- /**
- * Creates new evaluator
- */
- public OpenGLSurfaceEvaluator() {
- gl = GLU.getCurrentGL();
- }
-
- /**
- * Pushes eval bit
- */
- public void bgnmap2f() {
-
- if (output_triangles) {
- // TODO outp triangles surfaceevaluator bgnmap2f
- // System.out.println("TODO surfaceevaluator.bgnmap2f output triangles");
- } else {
- gl.glPushAttrib(GL.GL_EVAL_BIT);
- // System.out.println("TODO surfaceevaluator.bgnmap2f glgetintegerv");
- }
-
- }
-
- /**
- * Sets glPolygonMode
- * @param style polygon mode (N_MESHFILL/N_MESHLINE/N_MESHPOINT)
- */
- public void polymode(int style) {
- if (!output_triangles) {
- switch (style) {
- default:
- case NurbsConsts.N_MESHFILL:
- gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL);
- break;
- case NurbsConsts.N_MESHLINE:
- gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE);
- break;
- case NurbsConsts.N_MESHPOINT:
- gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_POINT);
- break;
- }
- }
-
- }
-
- /**
- * Pops all attributes
- */
- public void endmap2f() {
- // TODO Auto-generated method stub
- if (output_triangles) {
- // System.out.println("TODO surfaceevaluator.endmap2f output triangles");
- } else {
- gl.glPopAttrib();
- // TODO use LOD
- }
- }
-
- /**
- * Empty method
- * @param ulo
- * @param uhi
- * @param vlo
- * @param vhi
- */
- public void domain2f(float ulo, float uhi, float vlo, float vhi) {
- // DONE
- }
-
- /**
- * Defines 2D mesh
- * @param nu number of steps in u direction
- * @param u0 lowest u
- * @param u1 highest u
- * @param nv number of steps in v direction
- * @param v0 lowest v
- * @param v1 highest v
- */
- public void mapgrid2f(int nu, float u0, float u1, int nv, float v0, float v1) {
-
- if (output_triangles) {
- // System.out.println("TODO openglsurfaceavaluator.mapgrid2f output_triangles");
- } else {
- gl.glMapGrid2d(nu, u0, u1, nv, v0, v1);
- }
-
- }
-
- /**
- * Evaluates surface
- * @param style surface style
- * @param umin minimum U
- * @param umax maximum U
- * @param vmin minimum V
- * @param vmax maximum V
- */
- public void mapmesh2f(int style, int umin, int umax, int vmin, int vmax) {
- if (output_triangles) {
- // System.out.println("TODO openglsurfaceavaluator.mapmesh2f output_triangles");
- } else {
- /* //DEBUG - draw control points
- this.poradi++;
- if (poradi % 2 == 0)
- gl.glColor3f(1, 0, 0);
- else if (poradi % 2 == 1)
- gl.glColor3f(0, 1, 0);
- */
- switch (style) {
- case NurbsConsts.N_MESHFILL:
- gl.glEvalMesh2(GL.GL_FILL, umin, umax, vmin, vmax);
- break;
- case NurbsConsts.N_MESHLINE:
- gl.glEvalMesh2(GL.GL_LINE, umin, umax, vmin, vmax);
- break;
- case NurbsConsts.N_MESHPOINT:
- gl.glEvalMesh2(GL.GL_POINT, umin, umax, vmin, vmax);
- break;
- }
- }
- }
-
- /**
- * Initializes evaluator
- * @param type surface type
- * @param ulo lowest u
- * @param uhi highest u
- * @param ustride number of objects between control points in u direction
- * @param uorder surface order in u direction
- * @param vlo lowest v
- * @param vhi highest v
- * @param vstride number of control points' coords
- * @param vorder surface order in v direction
- * @param pts control points
- */
- public void map2f(int type, float ulo, float uhi, int ustride, int uorder,
- float vlo, float vhi, int vstride, int vorder, CArrayOfFloats pts) {
- // TODO Auto-generated method stub
- if (output_triangles) {
- // System.out.println("TODO openglsurfaceevaluator.map2f output_triangles");
- } else {
- gl.glMap2f(type, ulo, uhi, ustride, uorder, vlo, vhi, vstride,
- vorder, pts.getArray(), pts.getPointer());
- }
- }
-
- /**
- * Calls opengl enable
- * @param type what to enable
- */
- public void enable(int type) {
- //DONE
- gl.glEnable(type);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Patch.java b/src/classes/com/sun/opengl/impl/nurbs/Patch.java
deleted file mode 100755
index 176f58cbf..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Patch.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Empty class
- * @author Tomas Hrasky
- *
- */
-class Patch {
-
- /**
- * Empty constructor
- * @param q
- * @param pta
- * @param ptb
- * @param patch
- */
- public Patch(Quilt q, float[] pta, float[] ptb, Patch patch) {
- // System.out.println("TODO patch.constructor");
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Patchlist.java b/src/classes/com/sun/opengl/impl/nurbs/Patchlist.java
deleted file mode 100755
index 0eba45b34..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Patchlist.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * List of patches
- * @author Tomáš Hráský
- *
- */
-class Patchlist {
-
- /**
- * Array of ranges
- */
- public Pspec[] pspec;
-
- /**
- * head of list of patches
- */
- private Patch patch;
-
- /**
- * Makes new list of patches
- * @param quilts list of quilts
- * @param pta low border
- * @param ptb high border
- */
- public Patchlist(Quilt quilts, float[] pta, float[] ptb) {
- // DONE
- patch = null;
-
- for (Quilt q = quilts; q != null; q = q.next)
- patch = new Patch(q, pta, ptb, patch);
- pspec[0] = new Pspec();
- pspec[0].range[0] = pta[0];
- pspec[0].range[1] = ptb[0];
- pspec[0].range[2] = ptb[0] - pta[0];
- pspec[1] = new Pspec();
- pspec[1].range[0] = pta[1];
- pspec[1].range[1] = ptb[1];
- pspec[1].range[2] = ptb[1] - pta[1];
-
- }
-
- /**
- * Empty constructor
- * @param patchlist
- * @param param
- * @param mid
- */
- public Patchlist(Patchlist patchlist, int param, float mid) {
- // TODO Auto-generated constructor stub
- // System.out.println("TODO patchlist.konstruktor 2");
- }
-
- /**
- * Empty method
- * @return 0
- */
- public int cullCheck() {
- // TODO Auto-generated method stub
- // System.out.println("TODO patchlist.cullcheck");
- return 0;
- }
-
- /**
- * Empty method
- */
- public void getstepsize() {
- // System.out.println("TODO patchlist.getsptepsize");
- // TODO Auto-generated method stub
-
- }
-
- /**
- * Empty method
- * @return false
- */
- public boolean needsSamplingSubdivision() {
- // TODO Auto-generated method stub
- // System.out.println("patchlist.needsSamplingSubdivision");
- return false;
- }
-
- /**
- * Empty method
- * @param i
- * @return false
- */
- public boolean needsSubdivision(int i) {
- // TODO Auto-generated method stub
- // System.out.println("TODO patchlist.needsSubdivision");
- return false;
- }
-
- /**
- * Empty method
- * @return false
- */
- public boolean needsNonSamplingSubdivision() {
- // TODO Auto-generated method stub
- // System.out.println("TODO patchlist.needsNonSamplingSubdivision");
- return false;
- }
-
- /**
- * Empty method
- */
- public void bbox() {
- // TODO Auto-generated method stub
- // System.out.println("TODO patchlist.bbox");
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Property.java b/src/classes/com/sun/opengl/impl/nurbs/Property.java
deleted file mode 100755
index 2304973ab..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Property.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class representing property
- *
- * @author Tomas Hrasky
- *
- */
-class Property {
-
- /**
- * Property type
- */
- int type;
-
- /**
- * Property id
- */
- int tag;
-
- /**
- * Property value
- */
- float value;
-
- /**
- * Makes new property with given parameters
- *
- * @param type
- * property type
- * @param tag
- * property id
- * @param value
- * property value
- */
- public Property(int type, int tag, float value) {
- this.type = type;
- this.tag = tag;
- this.value = value;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Pspec.java b/src/classes/com/sun/opengl/impl/nurbs/Pspec.java
deleted file mode 100755
index b6439a73d..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Pspec.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class holding range
- * @author Tomáš Hráský
- *
- */
-class Pspec {
- /**
- * Range
- */
- public float[] range;
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/PwlArc.java b/src/classes/com/sun/opengl/impl/nurbs/PwlArc.java
deleted file mode 100755
index d6c2bbbdb..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/PwlArc.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Picewiselinar trimming arc
- * @author Tomáš Hráský
- *
- */
-class PwlArc {
-
- /**
- * Number of points
- */
- private int npts;
-
- /**
- * Vertexes
- */
- public TrimVertex[] pts;
-
- /**
- * Arc type
- */
- private int type;
-
- /**
- * Makes new trimming arc
- * @param i num ber of vertexes
- * @param p trimming vertexes array
- */
- public PwlArc(int i, TrimVertex[] p) {
- // DONE
- this.npts = i;
- this.pts = p;
- type = NurbsConsts.N_P2D;
-
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Quilt.java b/src/classes/com/sun/opengl/impl/nurbs/Quilt.java
deleted file mode 100755
index f5b566e76..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Quilt.java
+++ /dev/null
@@ -1,282 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class for converting NURBS curves and surfaces to list of bezier arcs or patches repectively
- * @author Tomáš Hráský
- *
- */
-class Quilt {
- /**
- * Maximum quilt dimension
- */
- private static final int MAXDIM = 2;
-
- /**
- * List of map descriptions
- */
- Mapdesc mapdesc;
-
- /**
- * Array of quiltspecs pointer
- */
- public CArrayOfQuiltspecs qspec;
-
- /**
- * End array of quilt specs pointer
- */
- public CArrayOfQuiltspecs eqspec;
-
- /**
- * Control points
- */
- public CArrayOfFloats cpts;
-
- /**
- * Next quilt in list
- */
- public Quilt next;
-
- /**
- * Makes new quilt with mapdesc
- * @param mapdesc map description
- */
- public Quilt(Mapdesc mapdesc) {
- // DONE
- this.mapdesc = mapdesc;
- Quiltspec[] tmpquilts = new Quiltspec[MAXDIM];
- for (int i = 0; i < tmpquilts.length; i++)
- tmpquilts[i] = new Quiltspec();
- this.qspec = new CArrayOfQuiltspecs(tmpquilts);
-
- }
-
- /**
- * Converts NURBS surface to bezier patches
- * @param sknotvector knots in u direction
- * @param tknotvector knots in v direction
- * @param ctrlarr control points
- * @param coords control points coords
- */
- public void toBezier(Knotvector sknotvector, Knotvector tknotvector,
- CArrayOfFloats ctrlarr, int coords) {
- Splinespec spline = new Splinespec(2);
- spline.kspecinit(sknotvector, tknotvector);
- spline.select();
- spline.layout(coords);
- spline.setupquilt(this);
- spline.copy(ctrlarr);
- spline.transform();
- }
-
- /**
- * Converts NURBS curve to list of bezier curves
- * @param knots knot vector
- * @param ctlarray control points
- * @param ncoords number of coordinates
- */
- public void toBezier(Knotvector knots, CArrayOfFloats ctlarray, int ncoords) {
- // DONE
- Splinespec spline = new Splinespec(1);
- spline.kspecinit(knots);
- spline.select();
- spline.layout(ncoords);
- spline.setupquilt(this);
- spline.copy(ctlarray);
- spline.transform();
- }
-
- /**
- * Walks thru all arcs/patches
- * @param pta low border
- * @param ptb high border
- * @param backend Backend
- */
- public void downloadAll(float[] pta, float[] ptb, Backend backend) {
- // DONE
- for (Quilt m = this; m != null; m = m.next) {
- m.select(pta, ptb);
- m.download(backend);
- }
-
- }
-
- /**
- * Renders arcs/patches
- * @param backend Backend for rendering
- */
- private void download(Backend backend) {
- // DONE
- if (getDimension() == 2) {
-
- CArrayOfFloats ps = new CArrayOfFloats(cpts);
- ps.raisePointerBy(qspec.get(0).offset);
- ps.raisePointerBy(qspec.get(1).offset);
- ps.raisePointerBy(qspec.get(0).index * qspec.get(0).order
- * qspec.get(0).stride);
- ps.raisePointerBy(qspec.get(1).index * qspec.get(1).order
- * qspec.get(1).stride);
-
- backend.surfpts(mapdesc.getType(), ps, qspec.get(0).stride, qspec
- .get(1).stride, qspec.get(0).order, qspec.get(1).order,
- qspec.get(0).breakpoints[qspec.get(0).index],
- qspec.get(0).breakpoints[qspec.get(0).index + 1], qspec
- .get(1).breakpoints[qspec.get(1).index], qspec
- .get(1).breakpoints[qspec.get(1).index + 1]);
-
- } else {// code for curves
- // CArrayOfFloats ps=new CArrayOfFloats(cpts);
- CArrayOfFloats ps = new CArrayOfFloats(cpts.getArray(), 0);
- ps.raisePointerBy(qspec.get(0).offset);
- ps.raisePointerBy(qspec.get(0).index * qspec.get(0).order
- * qspec.get(0).stride);
- backend.curvpts(mapdesc.getType(), ps, qspec.get(0).stride, qspec
- .get(0).order,
- qspec.get(0).breakpoints[qspec.get(0).index],
- qspec.get(0).breakpoints[qspec.get(0).index + 1]);
- }
-
- }
-
- /**
- * Returns quilt dimension
- * @return quilt dimesion
- */
- private int getDimension() {
- // DONE
- return eqspec.getPointer() - qspec.getPointer();
- }
-
- /**
- * Finds Quiltspec.index
- * @param pta range
- * @param ptb range
- */
- private void select(float[] pta, float[] ptb) {
- // DONE
- int dim = eqspec.getPointer() - qspec.getPointer();
- int i, j;
- for (i = 0; i < dim; i++) {
- for (j = qspec.get(i).width - 1; j >= 0; j--)
- if (qspec.get(i).breakpoints[j] <= pta[i]
- && ptb[i] <= qspec.get(i).breakpoints[j + 1])
- break;
- assert (j != -1);
- qspec.get(i).index = j;
- }
- }
-
- /**
- * Find range according to breakpoints
- * @param from low param
- * @param to high param
- * @param bpts breakpoints
- */
- public void getRange(float[] from, float[] to, Flist bpts) {
- // DONE
- getRange(from, to, 0, bpts);
-
- }
-
- /**
- * Find range according to breakpoints
- * @param from low param
- * @param to high param
- * @param i from/to array index
- * @param list breakpoints
- */
- private void getRange(float[] from, float[] to, int i, Flist list) {
- // DONE
- Quilt maps = this;
- from[i] = maps.qspec.get(i).breakpoints[0];
- to[i] = maps.qspec.get(i).breakpoints[maps.qspec.get(i).width];
- int maxpts = 0;
- Quilt m;
- for (m = maps; m != null; m = m.next) {
- if (m.qspec.get(i).breakpoints[0] > from[i])
- from[i] = m.qspec.get(i).breakpoints[0];
- if (m.qspec.get(i).breakpoints[m.qspec.get(i).width] < to[i])
- to[i] = m.qspec.get(i).breakpoints[m.qspec.get(i).width];
- maxpts += m.qspec.get(i).width + 1;
- }
- list.grow(maxpts);
- for (m = maps; m != null; m = m.next) {
- for (int j = 0; j <= m.qspec.get(i).width; j++) {
- list.add(m.qspec.get(i).breakpoints[j]);
- }
- }
- list.filter();
- list.taper(from[i], to[i]);
- }
-
- /**
- * Is this quilt culled
- * @return 0 or Subdivider.CULL_ACCEPT
- */
- public int isCulled() {
- if (mapdesc.isCulling()) {
- // System.out.println("TODO quilt.isculled mapdesc.isculling");
- return 0;
- } else {
- return Subdivider.CULL_ACCEPT;
- }
- }
-
- /**
- * Finds range for surface
- * @param from low param
- * @param to high param
- * @param slist u direction breakpoints
- * @param tlist v direction breakpoints
- */
- public void getRange(float[] from, float[] to, Flist slist, Flist tlist) {
- // DONE
- getRange(from, to, 0, slist);
- getRange(from, to, 1, tlist);
-
- }
-
- /**
- * Empty method
- * @param sbrkpts
- * @param tbrkpts
- * @param rate
- */
- public void findRates(Flist sbrkpts, Flist tbrkpts, float[] rate) {
- // TODO Auto-generated method stub
- // System.out.println("TODO quilt.findrates");
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Quiltspec.java b/src/classes/com/sun/opengl/impl/nurbs/Quiltspec.java
deleted file mode 100755
index 1b41c5168..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Quiltspec.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Quilt definition
- * @author Tomas Hrasky
- *
- */
-class Quiltspec {
-
- /**
- * Stride between control points
- */
- public int stride;
-
- /**
- * Quilt width in breakpoints
- */
- public int width;
-
- /**
- * Quilt order
- */
- public int order;
-
- /**
- * Start offset
- */
- public int offset;
-
- /**
- * Breakpoint index
- */
- public int index;
-
- /**
- * Boundary
- */
- public int[] bdry;
-
- /**
- * Breakpoints
- */
- public float[] breakpoints;
-
- /**
- * Makes new quiltspec
- */
- public Quiltspec() {
- this.bdry = new int[2];
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/README.txt b/src/classes/com/sun/opengl/impl/nurbs/README.txt
deleted file mode 100755
index 89630c71e..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/README.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-Unimplemented functionality
- - tesselation and callbacks
- - trimming
- - setting NURBS properties (-> sampling etc.)
-Differences from C++ source
- - no pooling
- - pointers to arrays are replaced by CArrayOf... classes and their methods
-Unimplemented or incomplete "calltree top" methods (according to glu.def in Mesa 6.5)
- gluBeginTrim
- gluDeleteNurbsRenderer - won't be needed
- gluEndTrim
- gluGetNurbsProperty
- gluLoadSamplingMatrices
- gluNurbsCallback
- gluNurbsCallbackData
- gluNurbsCallbackDataEXT
- gluNurbsCurve - TODO type switch
- gluNurbsProperty
- gluPwlCurve
- gluQuadricCallback - not a NURBS method
-As of files
- - Arc[ST]dirSorter.java - unimplemented (part of tesselation)
- - Backend.java:194 - wireframe quads - part of tesselation/callback
- - Curve.java:141-204 - culling
- - DisplayList.java:57 - append to DL - not sure whether it will be needed
- - GLUnurbs.java :443,484 - error values
- :445 - trimming
- :512 - error handling (callback)
- :530 - loadGLmatrices
- :786 - nuid - nurbs object id - won't be needed I think
- :803 - end trim
- - GLUwNURBS.java:68,176 - NUBRS properties
- - Knotspec.java :371 - copying in general case (more than 4 coords)
- :517 - copying with more than 4 coords
- :556 - pt_oo_sum default
- - Knotvector.java:165 - show method (probably debugging)
- - Mapdesc.java :354 - get property
- :435 - xFormMat - change param cp to CArrayOfFloats; probably sampling functionality
- - Maplist.java:68 - clear ?
- - OpenGLCurveEvaluator.java :132 - tess./callback code
- :168 - mapgrid1f
- :190 - tess./callback code (output triangles)
- - OpenGLSurfaceEvaluator.java :77 . tess./callback code
- :81 - glGetIntegerValue
- :114 - tess./callback code
- :117 - Level of detail
- :144,161,201 - tess./callback code - output triangles
- - Patch.java:55 - constructor stuff ?
- - Patchlist.java:55 - constructor stuff ?
- :97 - cull check
- :105 - step size
- :115 - need of sampling subdivision
- :126 - need of subdivision
- :137 - need of non sampling subd.
- :146 - bbox (??)
- -Quilt.java :254 - culling
- :282 - rates
- -Subdivider.java - all TODOs - it's stuff about trimming probably
- :545 - jumpbuffer - not sure purpose it exactly served in original source
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Renderhints.java b/src/classes/com/sun/opengl/impl/nurbs/Renderhints.java
deleted file mode 100755
index 02bc4c5bd..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Renderhints.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class holding rendering params
- * @author Tomas Hrasky
- *
- */
-class Renderhints {
-
- /**
- * Check for errors
- */
- public int errorchecking;
-
- /**
- * Maximum subdivisions
- */
- public int maxsubdivisions;
-
- /**
- * Number of subdivisions
- */
- private int subdivisions;
-
- /**
- * Display method
- */
- int display_method;
-
- /**
- * Output triangles
- */
- int wiretris;
-
- /**
- * Output quads
- */
- int wirequads;
-
- /**
- * Makes new Renderinghints
- */
- public Renderhints() {
- display_method = NurbsConsts.N_FILL;
- errorchecking = NurbsConsts.N_MSG;
- subdivisions = 6;
- // tmp1=0;
- }
-
- /**
- * Set property value
- * @param prop property
- */
- public void setProperty(Property prop) {
- switch (prop.type) {
- case NurbsConsts.N_DISPLAY:
- display_method = (int) prop.value;
- break;
- case NurbsConsts.N_ERRORCHECKING:
- errorchecking = (int) prop.value;
- break;
- case NurbsConsts.N_SUBDIVISIONS:
- subdivisions = (int) prop.value;
- break;
- default:
- // abort - end program
- break;
- }
- }
-
- /**
- * Initialization
- */
- public void init() {
- // DONE
- maxsubdivisions = subdivisions;
- if (maxsubdivisions < 0)
- maxsubdivisions = 0;
-
- if (display_method == NurbsConsts.N_FILL) {
- wiretris = 0;
- wirequads = 0;
- } else if (display_method == NurbsConsts.N_OUTLINE_TRI) {
- wiretris = 1;
- wirequads = 0;
- } else if (display_method == NurbsConsts.N_OUTLINE_QUAD) {
- wiretris = 0;
- wirequads = 1;
- } else {
- wiretris = 1;
- wirequads = 1;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Splinespec.java b/src/classes/com/sun/opengl/impl/nurbs/Splinespec.java
deleted file mode 100755
index 5e7d31ff3..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Splinespec.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * NURBS definition
- * @author Tomas Hrasky
- *
- */
-class Splinespec {
-
- /**
- * Dimension
- */
- private int dim;
-
- /**
- * Knot vector specs
- */
- private Knotspec kspec;
-
- /**
- * Control points after conversion
- */
- private CArrayOfFloats outcpts;
-
- /**
- * Makes new Splinespec with given dimension
- * @param i dimension
- */
- public Splinespec(int i) {
- // DONE
- this.dim = i;
- }
-
- /**
- * Initializes knotspec according to knotvector
- * @param knotvector basic knotvector
- */
- public void kspecinit(Knotvector knotvector) {
- // DONE
- this.kspec = new Knotspec();
- kspec.inkbegin = new CArrayOfFloats(knotvector.knotlist, 0);
- kspec.inkend = new CArrayOfFloats(knotvector.knotlist,
- knotvector.knotcount);
- kspec.prestride = knotvector.stride;
- kspec.order = knotvector.order;
- kspec.next = null;
- }
-
- /**
- * Initializes knotspec according to knotvector - SURFACE
- * @param sknotvector knotvector in u dir
- * @param tknotvector knotvector in v dir
- */
- public void kspecinit(Knotvector sknotvector, Knotvector tknotvector) {
- // DONE
- this.kspec = new Knotspec();
- Knotspec tkspec = new Knotspec();
-
- kspec.inkbegin = new CArrayOfFloats(sknotvector.knotlist, 0);
- kspec.inkend = new CArrayOfFloats(sknotvector.knotlist,
- sknotvector.knotcount);
- kspec.prestride = sknotvector.stride;
- kspec.order = sknotvector.order;
- kspec.next = tkspec;
-
- tkspec.inkbegin = new CArrayOfFloats(tknotvector.knotlist, 0);
- tkspec.inkend = new CArrayOfFloats(tknotvector.knotlist,
- tknotvector.knotcount);
- tkspec.prestride = tknotvector.stride;
- tkspec.order = tknotvector.order;
- tkspec.next = null;
- }
-
- /**
- * Preselect and select knotspecs
- */
- public void select() {
- // DONE
- for (Knotspec knotspec = kspec; knotspec != null; knotspec = knotspec.next) {
- knotspec.preselect();
- knotspec.select();
- }
-
- }
-
- /**
- * Prepares for conversion
- * @param ncoords number of coords
- */
- public void layout(int ncoords) {
- // DONE
- int stride = ncoords;
- for (Knotspec knotspec = kspec; knotspec != null; knotspec = knotspec.next) {
- knotspec.poststride = stride;
- stride *= (knotspec.bend.getPointer() - knotspec.bbegin
- .getPointer())
- * knotspec.order + knotspec.postoffset;
- knotspec.preoffset *= knotspec.prestride;
- knotspec.prewidth *= knotspec.poststride;
- knotspec.postwidth *= knotspec.poststride;
- knotspec.postoffset *= knotspec.poststride;
- knotspec.ncoords = ncoords;
- }
- outcpts = new CArrayOfFloats(new float[stride]);
-
- }
-
- /**
- * Prepares quilt for conversion
- * @param quilt quilt to work with
- */
- public void setupquilt(Quilt quilt) {
- // DONE
- CArrayOfQuiltspecs qspec = new CArrayOfQuiltspecs(quilt.qspec);
- quilt.eqspec = new CArrayOfQuiltspecs(qspec.getArray(), dim);
- for (Knotspec knotspec = kspec; knotspec != null;) {
- qspec.get().stride = knotspec.poststride;
- qspec.get().width = knotspec.bend.getPointer()
- - knotspec.bbegin.getPointer();
- qspec.get().order = knotspec.order;
- qspec.get().offset = knotspec.postoffset;
- qspec.get().index = 0;
- qspec.get().bdry[0] = (knotspec.kleft.getPointer() == knotspec.kfirst
- .getPointer()) ? 1 : 0;
- qspec.get().bdry[1] = (knotspec.kright.getPointer() == knotspec.klast
- .getPointer()) ? 1 : 0;
- qspec.get().breakpoints = new float[qspec.get().width + 1];
- CArrayOfFloats k = new CArrayOfFloats(qspec.get().breakpoints, 0);
- for (CArrayOfBreakpts bk = new CArrayOfBreakpts(knotspec.bbegin); bk
- .getPointer() <= knotspec.bend.getPointer(); bk.pp()) {
- k.set(bk.get().value);
- k.pp();
- }
- knotspec = knotspec.next;
- if (knotspec != null)
- qspec.pp();
- }
- quilt.cpts = new CArrayOfFloats(outcpts);
- quilt.next = null;
- }
-
- /**
- * Copies array of control points to output array
- * @param ctlarray control points array
- */
- public void copy(CArrayOfFloats ctlarray) {
- // DONE
- kspec.copy(ctlarray, outcpts);
-
- }
-
- /**
- * Transforms knotspecs - conversion
- */
- public void transform() {
- // DONE
- Knotspec knotspec;
- outcpts.setPointer(0);
- for (knotspec = kspec; knotspec != null; knotspec = knotspec.next)
- knotspec.istransformed = false;
-
- for (knotspec = kspec; knotspec != null; knotspec = knotspec.next) {
- for (Knotspec kspec2 = kspec; kspec2 != null; kspec2 = kspec2.next)
- kspec2.kspectotrans = knotspec;
- kspec.transform(outcpts);
- knotspec.istransformed = true;
- }
-
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/Subdivider.java b/src/classes/com/sun/opengl/impl/nurbs/Subdivider.java
deleted file mode 100755
index 4e5116106..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/Subdivider.java
+++ /dev/null
@@ -1,1167 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Class working with curves and surfaces
- * @author Tomas Hrasky
- *
- */
-class Subdivider {
- /**
- * Cull type
- */
- public static final int CULL_TRIVIAL_REJECT = 0;
-
- /**
- * Cull type
- */
- public static final int CULL_ACCEPT = 1;
-
- /**
- * Maximum trimming arcs
- */
- private static final int MAXARCS = 10;
-
- /**
- * Linked list of Quilts
- */
- Quilt qlist;
-
- /**
- * Object holding rendering honts information
- */
- private Renderhints renderhints;
-
- /**
- * Backend object
- */
- private Backend backend;
-
- /**
- * Number of subdivisions
- */
- private int subdivisions;
-
- /**
- * U step when using domain distance sampling
- */
- private float domain_distance_u_rate;
-
- /**
- * Use domain distance sampling
- */
- private int is_domain_distance_sampling;
-
- /**
- * Initial class holding trimming arcs
- */
- private Bin initialbin;
-
- /**
- * Not used
- */
- private boolean showDegenerate;
-
- /**
- * Is triming arc type bezier arc
- */
- private boolean isArcTypeBezier;
-
- /**
- * Breakpoints in v direction
- */
- private Flist tpbrkpts;
-
- /**
- * Breakpoints in u direction
- */
- private Flist spbrkpts;
-
- /**
- * Unused
- */
- private int s_index;
-
- /**
- * Head of linked list of trimming arcs
- */
- private Arc pjarc;
-
- /**
- * Class tesselating trimming arcs
- */
- private ArcTesselator arctesselator;
-
- /**
- * Unused
- */
- private int t_index;
-
- /**
- * Breakpoints
- */
- private Flist smbrkpts;
-
- /**
- * Not used
- */
- private float[] stepsizes;
-
- /**
- * Domain distance in V direction
- */
- private float domain_distance_v_rate;
-
- /**
- * Initializes quilt list
- */
- public void beginQuilts() {
- // DONE
- qlist = null;
- renderhints = new Renderhints();
- backend = new Backend();
-
- initialbin = new Bin();
- arctesselator = new ArcTesselator();
- }
-
- /**
- * Adds quilt to linked list
- * @param quilt added quilt
- */
- public void addQuilt(Quilt quilt) {
- // DONE
- if (qlist == null)
- qlist = quilt;
- else {
- quilt.next = qlist;
- qlist = quilt;
- }
-
- }
-
- /**
- * Empty method
- */
- public void endQuilts() {
- // DONE
- }
-
- /**
- * Draws a surface
- */
- public void drawSurfaces() {
- renderhints.init();
-
- if (qlist == null) {
- // System.out.println("qlist is null");
- return;
- }
-
- for (Quilt q = qlist; q != null; q = q.next) {
- if (q.isCulled() == CULL_TRIVIAL_REJECT) {
- freejarcs(initialbin);
- return;
- }
- }
-
- float[] from = new float[2];
- float[] to = new float[2];
-
- spbrkpts = new Flist();
- tpbrkpts = new Flist();
- qlist.getRange(from, to, spbrkpts, tpbrkpts);
-
- boolean optimize = (is_domain_distance_sampling > 0 && (renderhints.display_method != NurbsConsts.N_OUTLINE_PATCH));
-
- // TODO decide whether to optimize (when there is gluNurbsProperty implemented)
- optimize = true;
-
- if (!initialbin.isnonempty()) {
- if (!optimize) {
- makeBorderTrim(from, to);
- }
- } else {
- float[] rate = new float[2];
- qlist.findRates(spbrkpts, tpbrkpts, rate);
- // System.out.println("subdivider.drawsurfaces decompose");
- }
-
- backend.bgnsurf(renderhints.wiretris, renderhints.wirequads);
-
- // TODO partition test
-
- if (!initialbin.isnonempty() && optimize) {
-
- int i, j;
- int num_u_steps;
- int num_v_steps;
- for (i = spbrkpts.start; i < spbrkpts.end - 1; i++) {
- for (j = tpbrkpts.start; j < tpbrkpts.end - 1; j++) {
- float[] pta = new float[2];
- float[] ptb = new float[2];
-
- pta[0] = spbrkpts.pts[i];
- ptb[0] = spbrkpts.pts[i + 1];
- pta[1] = tpbrkpts.pts[j];
- ptb[1] = tpbrkpts.pts[j + 1];
- qlist.downloadAll(pta, ptb, backend);
-
- num_u_steps = (int) (domain_distance_u_rate * (ptb[0] - pta[0]));
- num_v_steps = (int) (domain_distance_v_rate * (ptb[1] - pta[1]));
-
- if (num_u_steps <= 0)
- num_u_steps = 1;
- if (num_v_steps <= 0)
- num_v_steps = 1;
-
- backend.surfgrid(pta[0], ptb[0], num_u_steps, ptb[1],
- pta[1], num_v_steps);
- backend.surfmesh(0, 0, num_u_steps, num_v_steps);
-
- }
- }
-
- } else
-
- subdivideInS(initialbin);
-
- backend.endsurf();
- }
-
- /**
- * Empty method
- * @param initialbin2
- */
- private void freejarcs(Bin initialbin2) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.freejarcs");
- }
-
- /**
- * Subdivide in U direction
- * @param source Trimming arcs source
- */
- private void subdivideInS(Bin source) {
- // DONE
- if (renderhints.display_method == NurbsConsts.N_OUTLINE_PARAM) {
- outline(source);
- freejarcs(source);
- } else {
- setArcTypeBezier();
- setNonDegenerate();
- splitInS(source, spbrkpts.start, spbrkpts.end);
- }
-
- }
-
- /**
- * Split in U direction
- * @param source Trimming arcs source
- * @param start breakpoints start
- * @param end breakpoints end
- */
- private void splitInS(Bin source, int start, int end) {
- // DONE
- if (source.isnonempty()) {
- if (start != end) {
- int i = start + (end - start) / 2;
- Bin left = new Bin();
- Bin right = new Bin();
-
- split(source, left, right, 0, spbrkpts.pts[i]);
- splitInS(left, start, i);
- splitInS(right, i + 1, end);
- } else {
- if (start == spbrkpts.start || start == spbrkpts.end) {
- freejarcs(source);
- } else if (renderhints.display_method == NurbsConsts.N_OUTLINE_PARAM_S) {
- outline(source);
- freejarcs(source);
- } else {
- setArcTypeBezier();
- setNonDegenerate();
- s_index = start;
- splitInT(source, tpbrkpts.start, tpbrkpts.end);
- }
- }
- } else{
- // System.out.println("Source is empty - subdivider.splitins");
- }
- }
-
- /**
- * Split in V direction
- * @param source
- * @param start
- * @param end
- */
- private void splitInT(Bin source, int start, int end) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.splitint");
-
- if (source.isnonempty()) {
- if (start != end) {
- int i = start + (end - start) / 2;
- Bin left = new Bin();
- Bin right = new Bin();
- split(source, left, right, 1, tpbrkpts.pts[i + 1]);
- splitInT(left, start, i);
- splitInT(right, i + 1, end);
- } else {
- if (start == tpbrkpts.start || start == tpbrkpts.end) {
- freejarcs(source);
- } else if (renderhints.display_method == NurbsConsts.N_OUTLINE_PARAM_ST) {
- outline(source);
- freejarcs(source);
- } else {
- t_index = start;
- setArcTypeBezier();
- setDegenerate();
-
- float[] pta = new float[2];
- float[] ptb = new float[2];
-
- pta[0] = spbrkpts.pts[s_index - 1];
- pta[1] = tpbrkpts.pts[t_index - 1];
-
- ptb[0] = spbrkpts.pts[s_index];
- ptb[1] = tpbrkpts.pts[t_index];
- qlist.downloadAll(pta, ptb, backend);
-
- Patchlist patchlist = new Patchlist(qlist, pta, ptb);
-
- samplingSplit(source, patchlist,
- renderhints.maxsubdivisions, 0);
- setNonDegenerate();
- setArcTypeBezier();
- }
- }
- }
-
- }
-
- /**
- * Sample
- * @param source
- * @param patchlist
- * @param subdivisions
- * @param param
- */
- private void samplingSplit(Bin source, Patchlist patchlist,
- int subdivisions, int param) {
- // DONE
- if (!source.isnonempty())
- return;
- if (patchlist.cullCheck() == CULL_TRIVIAL_REJECT) {
- freejarcs(source);
- return;
- }
-
- patchlist.getstepsize();
- if (renderhints.display_method == NurbsConsts.N_OUTLINE_PATCH) {
- tesselation(source, patchlist);
- outline(source);
- freejarcs(source);
- return;
- }
-
- tesselation(source, patchlist);
- if (patchlist.needsSamplingSubdivision() && subdivisions > 0) {
- if (!patchlist.needsSubdivision(0)) {
- param = 1;
- } else if (patchlist.needsSubdivision(1))
- param = 0;
- else
- param = 1 - param;
-
- Bin left = new Bin();
- Bin right = new Bin();
-
- float mid = (float) ((patchlist.pspec[param].range[0] + patchlist.pspec[param].range[1]) * .5);
-
- split(source, left, right, param, mid);
- Patchlist subpatchlist = new Patchlist(patchlist, param, mid);
- samplingSplit(left, subpatchlist, subdivisions - 1, param);
- samplingSplit(right, subpatchlist, subdivisions - 1, param);
- } else {
- setArcTypePwl();
- setDegenerate();
- nonSamplingSplit(source, patchlist, subdivisions, param);
- setDegenerate();
- setArcTypeBezier();
- }
- }
-
- /**
- * Not used
- * @param source
- * @param patchlist
- * @param subdivisions
- * @param param
- */
- private void nonSamplingSplit(Bin source, Patchlist patchlist,
- int subdivisions, int param) {
- // DONE
- if (patchlist.needsNonSamplingSubdivision() && subdivisions > 0) {
- param = 1 - param;
-
- Bin left = new Bin();
- Bin right = new Bin();
-
- float mid = (float) ((patchlist.pspec[param].range[0] + patchlist.pspec[param].range[1]) * .5);
- split(source, left, right, param, mid);
- Patchlist subpatchlist = new Patchlist(patchlist, param, mid);
- if (left.isnonempty()) {
- if (subpatchlist.cullCheck() == CULL_TRIVIAL_REJECT)
- freejarcs(left);
- else
- nonSamplingSplit(left, subpatchlist, subdivisions - 1,
- param);
- }
- if (right.isnonempty()) {
- if (patchlist.cullCheck() == CULL_TRIVIAL_REJECT)
- freejarcs(right);
- else
- nonSamplingSplit(right, subpatchlist, subdivisions - 1,
- param);
- }
- } else {
- patchlist.bbox();
- backend.patch(patchlist.pspec[0].range[0],
- patchlist.pspec[0].range[1], patchlist.pspec[1].range[0],
- patchlist.pspec[1].range[1]);
- if (renderhints.display_method == NurbsConsts.N_OUTLINE_SUBDIV) {
- outline(source);
- freejarcs(source);
- } else {
- setArcTypePwl();
- setDegenerate();
- findIrregularS(source);
- monosplitInS(source, smbrkpts.start, smbrkpts.end);
- }
- }
-
- }
-
- /**
- * Not used
- * @param source
- * @param start
- * @param end
- */
- private void monosplitInS(Bin source, int start, int end) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.monosplitins");
- }
-
- /**
- * Not used
- * @param source
- */
- private void findIrregularS(Bin source) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.findIrregularS");
- }
-
- /**
- * Not used
- */
- private void setArcTypePwl() {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.setarctypepwl");
- }
-
- /**
- * Not used
- * @param source
- * @param patchlist
- */
- private void tesselation(Bin source, Patchlist patchlist) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.tesselation");
- }
-
- /**
- * Not used
- */
- private void setDegenerate() {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.setdegenerate");
- }
-
- /**
- * Not used
- * @param bin
- * @param left
- * @param right
- * @param param
- * @param value
- */
- private void split(Bin bin, Bin left, Bin right, int param, float value) {
- // DONE
- Bin intersections = new Bin();
- Bin unknown = new Bin();
-
- partition(bin, left, intersections, right, unknown, param, value);
-
- int count = intersections.numarcs();
- // TODO jumpbuffer ??
-
- if (count % 2 == 0) {
-
- Arc[] arclist = new Arc[MAXARCS];
- CArrayOfArcs list;
- if (count >= MAXARCS) {
- list = new CArrayOfArcs(new Arc[count]);
- } else {
- list = new CArrayOfArcs(arclist);
- }
-
- CArrayOfArcs last, lptr;
- Arc jarc;
-
- for (last = new CArrayOfArcs(list); (jarc = intersections
- .removearc()) != null; last.pp())
- last.set(jarc);
-
- if (param == 0) {// sort into incrasing t order
- ArcSdirSorter sorter = new ArcSdirSorter(this);
- sorter.qsort(list, count);
-
- for (lptr = new CArrayOfArcs(list); lptr.getPointer() < last
- .getPointer(); lptr.raisePointerBy(2))
- check_s(lptr.get(), lptr.getRelative(1));
- for (lptr = new CArrayOfArcs(list); lptr.getPointer() < last
- .getPointer(); lptr.raisePointerBy(2))
- join_s(left, right, lptr.get(), lptr.getRelative(1));
- for (lptr = new CArrayOfArcs(list); lptr.getPointer() != last
- .getPointer(); lptr.pp()) {
- if (lptr.get().head()[0] <= value
- && lptr.get().tail()[0] <= value)
- left.addarc(lptr.get());
- else
- right.addarc(lptr.get());
- }
-
- } else {// sort into decreasing s order
- ArcTdirSorter sorter = new ArcTdirSorter(this);
- sorter.qsort(list, count);
-
- for (lptr = new CArrayOfArcs(list); lptr.getPointer() < last
- .getPointer(); lptr.raisePointerBy(2))
- check_t(lptr.get(), lptr.getRelative(1));
- for (lptr = new CArrayOfArcs(list); lptr.getPointer() < last
- .getPointer(); lptr.raisePointerBy(2))
- join_t(left, right, lptr.get(), lptr.getRelative(1));
- for (lptr = new CArrayOfArcs(list); lptr.getPointer() != last
- .getPointer(); lptr.raisePointerBy(2)) {
- if (lptr.get().head()[0] <= value
- && lptr.get().tail()[0] <= value)
- left.addarc(lptr.get());
- else
- right.addarc(lptr.get());
- }
-
- }
-
- unknown.adopt();
- }
- }
-
- /**
- * Not used
- * @param left
- * @param right
- * @param arc
- * @param relative
- */
- private void join_t(Bin left, Bin right, Arc arc, Arc relative) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.join_t");
- }
-
- /**
- * Not used
- * @param arc
- * @param relative
- */
- private void check_t(Arc arc, Arc relative) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.check_t");
- }
-
- /**
- * Not used
- * @param left
- * @param right
- * @param jarc1
- * @param jarc2
- */
- private void join_s(Bin left, Bin right, Arc jarc1, Arc jarc2) {
- // DONE
- if (!jarc1.getitail())
- jarc1 = jarc1.next;
- if (!jarc2.getitail())
- jarc2 = jarc2.next;
-
- float s = jarc1.tail()[0];
- float t1 = jarc1.tail()[1];
- float t2 = jarc2.tail()[1];
-
- if (t1 == t2) {
- simplelink(jarc1, jarc2);
- } else {
- Arc newright = new Arc(Arc.ARC_RIGHT);
- Arc newleft = new Arc(Arc.ARC_LEFT);
- if (isBezierArcType()) {
- arctesselator.bezier(newright, s, s, t1, t2);
- arctesselator.bezier(newleft, s, s, t2, t1);
- } else {
- arctesselator.pwl_right(newright, s, t1, t2, stepsizes[0]);
- arctesselator.pwl_left(newright, s, t2, t1, stepsizes[2]);
- }
- link(jarc1, jarc2, newright, newleft);
- left.addarc(newright);
- right.addarc(newleft);
- }
-
- }
-
- /**
- * Not used
- * @param jarc1
- * @param jarc2
- * @param newright
- * @param newleft
- */
- private void link(Arc jarc1, Arc jarc2, Arc newright, Arc newleft) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.link");
- }
-
- /**
- * Not used
- * @return true
- */
- private boolean isBezierArcType() {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.isbezierarc");
- return true;
- }
-
- /**
- * Not used
- * @param jarc1
- * @param jarc2
- */
- private void simplelink(Arc jarc1, Arc jarc2) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.simplelink");
- }
-
- /**
- * Not used
- * @param arc
- * @param relative
- */
- private void check_s(Arc arc, Arc relative) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.check_s");
-
- }
-
- /**
- * Not used
- * @param bin
- * @param left
- * @param intersections
- * @param right
- * @param unknown
- * @param param
- * @param value
- */
- private void partition(Bin bin, Bin left, Bin intersections, Bin right,
- Bin unknown, int param, float value) {
-
- Bin headonleft = new Bin();
- Bin headonright = new Bin();
- Bin tailonleft = new Bin();
- Bin tailonright = new Bin();
-
- for (Arc jarc = bin.removearc(); jarc != null; jarc = bin.removearc()) {
- float tdiff = jarc.tail()[param] - value;
- float hdiff = jarc.head()[param] - value;
-
- if (tdiff > 0) {
- if (hdiff > 0) {
- right.addarc(jarc);
- } else if (hdiff == 0) {
- tailonright.addarc(jarc);
- } else {
- Arc jtemp;
- switch (arc_split(jarc, param, value, 0)) {
- case 2:
- tailonright.addarc(jarc);
- headonleft.addarc(jarc.next);
- break;
- // TODO rest cases
- default:
- System.out
- .println("TODO subdivider.partition rest cases");
- break;
- }
- }
- } else if (tdiff == 0) {
- if (hdiff > 0) {
- headonright.addarc(jarc);
- } else if (hdiff == 0) {
- unknown.addarc(jarc);
- } else {
- headonright.addarc(jarc);
- }
- } else {
- if (hdiff > 0) {
- // TODO rest
- // System.out.println("TODO subdivider.partition rest of else");
- } else if (hdiff == 0) {
- tailonleft.addarc(jarc);
- } else {
- left.addarc(jarc);
- }
- }
-
- }
- if (param == 0) {
- classify_headonleft_s(headonleft, intersections, left, value);
- classify_tailonleft_s(tailonleft, intersections, left, value);
- classify_headonright_s(headonright, intersections, right, value);
- classify_tailonright_s(tailonright, intersections, right, value);
- } else {
- classify_headonleft_t(headonleft, intersections, left, value);
- classify_tailonleft_t(tailonleft, intersections, left, value);
- classify_headonright_t(headonright, intersections, right, value);
- classify_tailonright_t(tailonright, intersections, right, value);
- }
- }
-
- /**
- * Not used
- * @param tailonright
- * @param intersections
- * @param right
- * @param value
- */
- private void classify_tailonright_t(Bin tailonright, Bin intersections,
- Bin right, float value) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.classify_tailonright_t");
-
- }
-
- /**
- * Not used
- * @param bin
- * @param in
- * @param out
- * @param val
- */
- private void classify_tailonleft_s(Bin bin, Bin in, Bin out, float val) {
-
- // DONE
- Arc j;
- while ((j = bin.removearc()) != null) {
- j.clearitail();
-
- float diff = j.next.head()[0] - val;
- if (diff > 0) {
- in.addarc(j);
- } else if (diff < 0) {
- if (ccwTurn_sl(j, j.next))
- out.addarc(j);
- else
- in.addarc(j);
- } else {
- if (j.next.tail()[1] > j.next.head()[1])
- in.addarc(j);
- else
- out.addarc(j);
- }
- }
-
- }
-
- /**
- * Not used
- * @param bin
- * @param in
- * @param out
- * @param val
- */
- private void classify_headonright_s(Bin bin, Bin in, Bin out, float val) {
- // DONE
- Arc j;
- while ((j = bin.removearc()) != null) {
- j.setitail();
-
- float diff = j.prev.tail()[0] - val;
- if (diff > 0) {
- if (ccwTurn_sr(j.prev, j))
- out.addarc(j);
- else
- in.addarc(j);
- } else if (diff < 0) {
- out.addarc(j);
- } else {
- if (j.prev.tail()[1] > j.prev.head()[1])
- out.addarc(j);
- else
- in.addarc(j);
- }
- }
- }
-
- /**
- * Not used
- * @param prev
- * @param j
- * @return false
- */
- private boolean ccwTurn_sr(Arc prev, Arc j) {
- // TODO Auto-generated method stub
- // System.out.println("TODO ccwTurn_sr");
- return false;
- }
-
- /**
- * Not used
- * @param headonright
- * @param intersections
- * @param right
- * @param value
- */
- private void classify_headonright_t(Bin headonright, Bin intersections,
- Bin right, float value) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.classify_headonright_t");
- }
-
- /**
- * Not used
- * @param tailonleft
- * @param intersections
- * @param left
- * @param value
- */
- private void classify_tailonleft_t(Bin tailonleft, Bin intersections,
- Bin left, float value) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.classify_tailonleft_t");
- }
-
- /**
- * Not used
- * @param bin
- * @param in
- * @param out
- * @param val
- */
- private void classify_headonleft_t(Bin bin, Bin in, Bin out, float val) {
- // DONE
- Arc j;
- while ((j = bin.removearc()) != null) {
- j.setitail();
-
- float diff = j.prev.tail()[1] - val;
- if (diff > 0) {
- out.addarc(j);
- } else if (diff < 0) {
- if (ccwTurn_tl(j.prev, j))
- out.addarc(j);
- else
- in.addarc(j);
- } else {
- if (j.prev.tail()[0] > j.prev.head()[0])
- out.addarc(j);
- else
- in.addarc(j);
- }
- }
- }
-
- /**
- * Not used
- * @param prev
- * @param j
- * @return false
- */
- private boolean ccwTurn_tl(Arc prev, Arc j) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.ccwTurn_tl");
- return false;
- }
-
- /**
- * Not used
- * @param bin
- * @param in
- * @param out
- * @param val
- */
- private void classify_tailonright_s(Bin bin, Bin in, Bin out, float val) {
- // DONE
- Arc j;
- while ((j = bin.removearc()) != null) {
- j.clearitail();
-
- float diff = j.next.head()[0] - val;
- if (diff > 0) {
- if (ccwTurn_sr(j, j.next))
- out.addarc(j);
- else
- in.addarc(j);
- } else if (diff < 0) {
- in.addarc(j);
- } else {
- if (j.next.tail()[1] > j.next.head()[1])
- out.addarc(j);
- else
- in.addarc(j);
- }
- }
-
- }
-
- /**
- * Not used
- * @param bin
- * @param in
- * @param out
- * @param val
- */
- private void classify_headonleft_s(Bin bin, Bin in, Bin out, float val) {
- // DONE
- Arc j;
- while ((j = bin.removearc()) != null) {
- j.setitail();
-
- float diff = j.prev.tail()[0] - val;
- if (diff > 0) {
- out.addarc(j);
- } else if (diff < 0) {
- if (ccwTurn_sl(j.prev, j))
- out.addarc(j);
- else
- in.addarc(j);
- } else {
- if (j.prev.tail()[1] > j.prev.head()[1])
- in.addarc(j);
- else
- out.addarc(j);
- }
- }
-
- }
-
- /**
- * Not used
- * @param prev
- * @param j
- * @return false
- */
- private boolean ccwTurn_sl(Arc prev, Arc j) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.ccwTurn_sl");
- return false;
- }
-
- /**
- * Not used
- * @param jarc
- * @param param
- * @param value
- * @param i
- * @return 0
- */
- private int arc_split(Arc jarc, int param, float value, int i) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.arc_split");
- return 0;
- }
-
- /**
- * Not used
- */
- private void setNonDegenerate() {
- // DONE
- this.showDegenerate = false;
-
- }
-
- /**
- * sets trimming arc default type to bezier
- */
- private void setArcTypeBezier() {
- // DONE
- isArcTypeBezier = true;
- }
-
- /**
- * Not used
- * @param source
- */
- private void outline(Bin source) {
- // TODO Auto-generated method stub
- // System.out.println("TODO subdivider.outline");
- }
-
- /**
- * Makes default trim along surface borders
- * @param from range beginnings
- * @param to range ends
- */
- private void makeBorderTrim(float[] from, float[] to) {
- // DONE
- float smin = from[0];
- float smax = to[0];
-
- float tmin = from[1];
- float tmax = to[1];
-
- pjarc = null;
- Arc jarc = null;
-
- jarc = new Arc(Arc.ARC_BOTTOM);
- arctesselator.bezier(jarc, smin, smax, tmin, tmin);
- initialbin.addarc(jarc);
- pjarc = jarc.append(pjarc);
-
- jarc = new Arc(Arc.ARC_RIGHT);
- arctesselator.bezier(jarc, smax, smax, tmin, tmax);
- initialbin.addarc(jarc);
- pjarc = jarc.append(pjarc);
-
- jarc = new Arc(Arc.ARC_TOP);
- arctesselator.bezier(jarc, smax, smin, tmax, tmax);
- initialbin.addarc(jarc);
- pjarc = jarc.append(pjarc);
-
- jarc = new Arc(Arc.ARC_LEFT);
- arctesselator.bezier(jarc, smin, smin, tmax, tmin);
- initialbin.addarc(jarc);
- jarc = jarc.append(pjarc);
-
- // assert (jarc.check() == true);
- }
-
- /**
- * Draws NURBS curve
- */
- public void drawCurves() {
- // DONE
- float[] from = new float[1];
- float[] to = new float[1];
-
- Flist bpts = new Flist();
- qlist.getRange(from, to, bpts);
-
- renderhints.init();
-
- backend.bgncurv();
-
- for (int i = bpts.start; i < bpts.end - 1; i++) {
- float[] pta = new float[1];
- float[] ptb = new float[1];
- pta[0] = bpts.pts[i];
- ptb[0] = bpts.pts[i + 1];
-
- qlist.downloadAll(pta, ptb, backend);
- Curvelist curvelist = new Curvelist(qlist, pta, ptb);
- samplingSplit(curvelist, renderhints.maxsubdivisions);
- }
- backend.endcurv();
- }
-
- /**
- * Samples a curve in case of need, or sends curve to backend
- * @param curvelist list of curves
- * @param maxsubdivisions maximum number of subdivisions
- */
- private void samplingSplit(Curvelist curvelist, int maxsubdivisions) {
- if (curvelist.cullCheck() == CULL_TRIVIAL_REJECT)
- return;
-
- curvelist.getstepsize();
-
- if (curvelist.needsSamplingSubdivision() && (subdivisions > 0)) {
- // TODO kód
- // System.out.println("TODO subdivider-needsSamplingSubdivision");
- } else {
- int nu = (int) (1 + curvelist.range[2] / curvelist.stepsize);
- backend.curvgrid(curvelist.range[0], curvelist.range[1], nu);
- backend.curvmesh(0, nu);
- }
-
- }
-
- /**
- * Sets new domain_distance_u_rate value
- * @param d new domain_distance_u_rate value
-
- */
- public void set_domain_distance_u_rate(double d) {
- // DONE
- domain_distance_u_rate = (float) d;
- }
-
- /**
- * Sets new domain_distance_v_rate value
- * @param d new domain_distance_v_rate value
- */
- public void set_domain_distance_v_rate(double d) {
- // DONE
- domain_distance_v_rate = (float) d;
- }
-
- /**
- * Sets new is_domain_distance_sampling value
- * @param i new is_domain_distance_sampling value
- */
- public void set_is_domain_distance_sampling(int i) {
- // DONE
- this.is_domain_distance_sampling = i;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/nurbs/TrimVertex.java b/src/classes/com/sun/opengl/impl/nurbs/TrimVertex.java
deleted file mode 100755
index e57c5ffbf..000000000
--- a/src/classes/com/sun/opengl/impl/nurbs/TrimVertex.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.sun.opengl.impl.nurbs;
-
-/*
- ** License Applicability. Except to the extent portions of this file are
- ** made subject to an alternative license as permitted in the SGI Free
- ** Software License B, Version 1.1 (the "License"), the contents of this
- ** file are subject only to the provisions of the License. You may not use
- ** this file except in compliance with the License. You may obtain a copy
- ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- **
- ** http://oss.sgi.com/projects/FreeB
- **
- ** Note that, as provided in the License, the Software is distributed on an
- ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- **
- ** Original Code. The Original Code is: OpenGL Sample Implementation,
- ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- ** Copyright in any portions created by third parties is as indicated
- ** elsewhere herein. All Rights Reserved.
- **
- ** Additional Notice Provisions: The application programming interfaces
- ** established by SGI in conjunction with the Original Code are The
- ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- ** Window System(R) (Version 1.3), released October 19, 1998. This software
- ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
- ** published by SGI, but has not been independently verified as being
- ** compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-/**
- * Holds vertex used in trim
- *
- * @author Tomas Hrasky
- *
- */
-class TrimVertex {
-
- /**
- * Trim vertex coords
- */
- public float[] param;
-
- /**
- * Makes new empty trim vertex
- */
- public TrimVertex() {
- param = new float[2];
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/packrect/BackingStoreManager.java b/src/classes/com/sun/opengl/impl/packrect/BackingStoreManager.java
deleted file mode 100755
index 0c4636063..000000000
--- a/src/classes/com/sun/opengl/impl/packrect/BackingStoreManager.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.packrect;
-
-/** This interface must be implemented by the end user and is called
- in response to events like addition of rectangles into the
- RectanglePacker. It is used both when a full re-layout must be
- done as well as when the data in the backing store must be copied
- to a new one. */
-
-public interface BackingStoreManager {
- public Object allocateBackingStore(int w, int h);
- public void deleteBackingStore(Object backingStore);
-
- /** Notification that expansion of the backing store is about to be
- done due to addition of the given rectangle. Gives the manager a
- chance to do some compaction and potentially remove old entries
- from the backing store, if it acts like a least-recently-used
- cache. This method receives as argument the number of attempts
- so far to add the given rectangle. Manager should return true if
- the RectanglePacker should retry the addition (which may result
- in this method being called again, with an increased attempt
- number) or false if the RectanglePacker should just expand the
- backing store. The caller should not call RectanglePacker.add()
- in its preExpand() method. */
- public boolean preExpand(Rect cause, int attemptNumber);
-
- /** Notification that addition of the given Rect failed because a
- maximum size was set in the RectanglePacker and the backing
- store could not be expanded. */
- public void additionFailed(Rect cause, int attemptNumber);
-
- /** Notification that movement is starting. */
- public void beginMovement(Object oldBackingStore, Object newBackingStore);
-
- /** Tells the manager to move the contents of the given rect from
- the old location on the old backing store to the new location on
- the new backing store. The backing stores can be identical in
- the case of compacting the existing backing store instead of
- reallocating it. */
- public void move(Object oldBackingStore,
- Rect oldLocation,
- Object newBackingStore,
- Rect newLocation);
-
- /** Notification that movement is ending. */
- public void endMovement(Object oldBackingStore, Object newBackingStore);
-}
diff --git a/src/classes/com/sun/opengl/impl/packrect/Level.java b/src/classes/com/sun/opengl/impl/packrect/Level.java
deleted file mode 100755
index 12a09cd9a..000000000
--- a/src/classes/com/sun/opengl/impl/packrect/Level.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.packrect;
-
-import java.util.*;
-
-public class Level {
- private int width;
- private int height;
- private int yPos;
- private LevelSet holder;
-
- private List/*<Rect>*/ rects = new ArrayList/*<Rect>*/();
- private List/*<Rect>*/ freeList;
- private int nextAddX;
-
- static class RectXComparator implements Comparator {
- public int compare(Object o1, Object o2) {
- Rect r1 = (Rect) o1;
- Rect r2 = (Rect) o2;
- return r1.x() - r2.x();
- }
-
- public boolean equals(Object obj) {
- return this == obj;
- }
- }
- private static final Comparator rectXComparator = new RectXComparator();
-
- public Level(int width, int height, int yPos, LevelSet holder) {
- this.width = width;
- this.height = height;
- this.yPos = yPos;
- this.holder = holder;
- }
-
- public int w() { return width; }
- public int h() { return height; }
- public int yPos() { return yPos; }
-
- /** Tries to add the given rectangle to this level only allowing
- non-disruptive changes like trivial expansion of the last level
- in the RectanglePacker and allocation from the free list. More
- disruptive changes like compaction of the level must be
- requested explicitly. */
- public boolean add(Rect rect) {
- if (rect.h() > height) {
- // See whether it's worth trying to expand vertically
- if (nextAddX + rect.w() > width) {
- return false;
- }
-
- // See whether we're the last level and can expand
- if (!holder.canExpand(this, rect.h())) {
- return false;
- }
-
- // Trivially expand and try the allocation
- holder.expand(this, height, rect.h());
- height = rect.h();
- }
-
- // See whether we can add at the end
- if (nextAddX + rect.w() <= width) {
- rect.setPosition(nextAddX, yPos);
- rects.add(rect);
- nextAddX += rect.w();
- return true;
- }
-
- // See whether we can add from the free list
- if (freeList != null) {
- Rect candidate = null;
- for (Iterator iter = freeList.iterator(); iter.hasNext(); ) {
- Rect cur = (Rect) iter.next();
- if (cur.canContain(rect)) {
- candidate = cur;
- break;
- }
- }
-
- if (candidate != null) {
- // Remove the candidate from the free list
- freeList.remove(candidate);
- // Set up and add the real rect
- rect.setPosition(candidate.x(), candidate.y());
- rects.add(rect);
- // Re-add any remaining free space
- if (candidate.w() > rect.w()) {
- candidate.setPosition(candidate.x() + rect.w(), candidate.y());
- candidate.setSize(candidate.w() - rect.w(), height);
- freeList.add(candidate);
- }
-
- coalesceFreeList();
-
- return true;
- }
- }
-
- return false;
- }
-
- /** Removes the given Rect from this Level. */
- public boolean remove(Rect rect) {
- if (!rects.remove(rect))
- return false;
-
- // If this is the rightmost rectangle, instead of adding its space
- // to the free list, we can just decrease the nextAddX
- if (rect.maxX() + 1 == nextAddX) {
- nextAddX -= rect.w();
- } else {
- if (freeList == null) {
- freeList = new ArrayList/*<Rect>*/();
- }
- freeList.add(new Rect(rect.x(), rect.y(), rect.w(), height, null));
- coalesceFreeList();
- }
-
- return true;
- }
-
- /** Indicates whether this Level contains no rectangles. */
- public boolean isEmpty() {
- return rects.isEmpty();
- }
-
- /** Indicates whether this Level could satisfy an allocation request
- if it were compacted. */
- public boolean couldAllocateIfCompacted(Rect rect) {
- if (rect.h() > height)
- return false;
- if (freeList == null)
- return false;
- int freeListWidth = 0;
- for (Iterator iter = freeList.iterator(); iter.hasNext(); ) {
- Rect cur = (Rect) iter.next();
- freeListWidth += cur.w();
- }
- // Add on the remaining space at the end
- freeListWidth += (width - nextAddX);
- return (freeListWidth >= rect.w());
- }
-
- public void compact(Object backingStore, BackingStoreManager manager) {
- Collections.sort(rects, rectXComparator);
- int nextCompactionDest = 0;
- manager.beginMovement(backingStore, backingStore);
- for (Iterator iter = rects.iterator(); iter.hasNext(); ) {
- Rect cur = (Rect) iter.next();
- if (cur.x() != nextCompactionDest) {
- manager.move(backingStore, cur,
- backingStore, new Rect(nextCompactionDest, cur.y(), cur.w(), cur.h(), null));
- cur.setPosition(nextCompactionDest, cur.y());
- }
- nextCompactionDest += cur.w();
- }
- nextAddX = nextCompactionDest;
- freeList.clear();
- manager.endMovement(backingStore, backingStore);
- }
-
- public Iterator iterator() {
- return rects.iterator();
- }
-
- /** Visits all Rects contained in this Level. */
- public void visit(RectVisitor visitor) {
- for (Iterator iter = rects.iterator(); iter.hasNext(); ) {
- Rect rect = (Rect) iter.next();
- visitor.visit(rect);
- }
- }
-
- /** Updates the references to the Rect objects in this Level with
- the "next locations" of those Rects. This is actually used to
- update the new Rects in a newly laid-out LevelSet with the
- original Rects. */
- public void updateRectangleReferences() {
- for (int i = 0; i < rects.size(); i++) {
- Rect cur = (Rect) rects.get(i);
- Rect next = cur.getNextLocation();
- next.setPosition(cur.x(), cur.y());
- if (cur.w() != next.w() || cur.h() != next.h())
- throw new RuntimeException("Unexpected disparity in rectangle sizes during updateRectangleReferences");
- rects.set(i, next);
- }
- }
-
- private void coalesceFreeList() {
- if (freeList == null)
- return;
- if (freeList.isEmpty())
- return;
-
- // Try to coalesce adjacent free blocks in the free list
- Collections.sort(freeList, rectXComparator);
- int i = 0;
- while (i < freeList.size() - 1) {
- Rect r1 = (Rect) freeList.get(i);
- Rect r2 = (Rect) freeList.get(i+1);
- if (r1.maxX() + 1 == r2.x()) {
- // Coalesce r1 and r2 into one block
- freeList.remove(i+1);
- r1.setSize(r1.w() + r2.w(), r1.h());
- } else {
- ++i;
- }
- }
- // See whether the last block bumps up against the addition point
- Rect last = (Rect) freeList.get(freeList.size() - 1);
- if (last.maxX() + 1 == nextAddX) {
- nextAddX -= last.w();
- freeList.remove(freeList.size() - 1);
- }
- if (freeList.isEmpty()) {
- freeList = null;
- }
- }
-
- //----------------------------------------------------------------------
- // Debugging functionality
- //
-
- public void dumpFreeSpace() {
- int freeListWidth = 0;
- for (Iterator iter = freeList.iterator(); iter.hasNext(); ) {
- Rect cur = (Rect) iter.next();
- System.err.println(" Free rectangle at " + cur);
- freeListWidth += cur.w();
- }
- // Add on the remaining space at the end
- System.err.println(" Remaining free space " + (width - nextAddX));
- freeListWidth += (width - nextAddX);
- System.err.println(" Total free space " + freeListWidth);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/packrect/LevelSet.java b/src/classes/com/sun/opengl/impl/packrect/LevelSet.java
deleted file mode 100755
index 97a1f2e74..000000000
--- a/src/classes/com/sun/opengl/impl/packrect/LevelSet.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.packrect;
-
-import java.util.*;
-
-/** Manages a list of Levels; this is the core data structure
- contained within the RectanglePacker and encompasses the storage
- algorithm for the contained Rects. */
-
-public class LevelSet {
- // Maintained in sorted order by increasing Y coordinate
- private List/*<Level>*/ levels = new ArrayList/*<Level>*/();
- private int nextAddY;
- private int w;
- private int h;
-
- /** A LevelSet manages all of the backing store for a region of a
- specified width and height. */
- public LevelSet(int w, int h) {
- this.w = w;
- this.h = h;
- }
-
- public int w() { return w; }
- public int h() { return h; }
-
- /** Returns true if the given rectangle was successfully added to
- the LevelSet given its current dimensions, false if not. Caller
- is responsible for performing compaction, expansion, etc. as a
- consequence. */
- public boolean add(Rect rect) {
- if (rect.w() > w)
- return false;
-
- // Go in reverse order through the levels seeing whether we can
- // trivially satisfy the allocation request
- for (int i = levels.size() - 1; i >= 0; --i) {
- Level level = (Level) levels.get(i);
- if (level.add(rect))
- return true;
- }
-
- // See whether compaction could satisfy this allocation. This
- // increases the computational complexity of the addition process,
- // but prevents us from expanding unnecessarily.
- for (int i = levels.size() - 1; i >= 0; --i) {
- Level level = (Level) levels.get(i);
- if (level.couldAllocateIfCompacted(rect))
- return false;
- }
-
- // OK, we need to either add a new Level or expand the backing
- // store. Try to add a new Level.
- if (nextAddY + rect.h() > h)
- return false;
-
- Level newLevel = new Level(w, rect.h(), nextAddY, this);
- levels.add(newLevel);
- nextAddY += rect.h();
- boolean res = newLevel.add(rect);
- if (!res)
- throw new RuntimeException("Unexpected failure in addition to new Level");
- return true;
- }
-
- /** Removes the given Rect from this LevelSet. */
- public boolean remove(Rect rect) {
- for (int i = levels.size() - 1; i >= 0; --i) {
- Level level = (Level) levels.get(i);
- if (level.remove(rect))
- return true;
- }
-
- return false;
- }
-
- /** Allocates the given Rectangle, performing compaction of a Level
- if necessary. This is the correct fallback path to {@link
- #add(Rect)} above. Returns true if allocated successfully, false
- otherwise (indicating the need to expand the backing store). */
- public boolean compactAndAdd(Rect rect,
- Object backingStore,
- BackingStoreManager manager) {
- for (int i = levels.size() - 1; i >= 0; --i) {
- Level level = (Level) levels.get(i);
- if (level.couldAllocateIfCompacted(rect)) {
- level.compact(backingStore, manager);
- boolean res = level.add(rect);
- if (!res)
- throw new RuntimeException("Unexpected failure to add after compaction");
- return true;
- }
- }
-
- return false;
- }
-
- /** Indicates whether it's legal to trivially increase the height of
- the given Level. This is only possible if it's the last Level
- added and there's enough room in the backing store. */
- public boolean canExpand(Level level, int height) {
- if (levels.isEmpty())
- return false; // Should not happen
- if (levels.get(levels.size() - 1) == level &&
- (h - nextAddY >= height - level.h()))
- return true;
- return false;
- }
-
- public void expand(Level level, int oldHeight, int newHeight) {
- nextAddY += (newHeight - oldHeight);
- }
-
- /** Gets the used height of the levels in this LevelSet. */
- public int getUsedHeight() {
- return nextAddY;
- }
-
- /** Sets the height of this LevelSet. It is only legal to reduce the
- height to greater than or equal to the currently used height. */
- public void setHeight(int height) throws IllegalArgumentException {
- if (height < getUsedHeight()) {
- throw new IllegalArgumentException("May not reduce height below currently used height");
- }
- h = height;
- }
-
- /** Returns the vertical fragmentation ratio of this LevelSet. This
- is defined as the ratio of the sum of the heights of all
- completely empty Levels divided by the overall used height of
- the LevelSet. A high vertical fragmentation ratio indicates that
- it may be profitable to perform a compaction. */
- public float verticalFragmentationRatio() {
- int freeHeight = 0;
- int usedHeight = getUsedHeight();
- if (usedHeight == 0)
- return 0.0f;
- for (Iterator iter = iterator(); iter.hasNext(); ) {
- Level level = (Level) iter.next();
- if (level.isEmpty()) {
- freeHeight += level.h();
- }
- }
- return (float) freeHeight / (float) usedHeight;
- }
-
- public Iterator iterator() {
- return levels.iterator();
- }
-
- /** Visits all Rects contained in this LevelSet. */
- public void visit(RectVisitor visitor) {
- for (Iterator iter = levels.iterator(); iter.hasNext(); ) {
- Level level = (Level) iter.next();
- level.visit(visitor);
- }
- }
-
- /** Updates the references to the Rect objects in this LevelSet with
- the "next locations" of those Rects. This is actually used to
- update the new Rects in a newly laid-out LevelSet with the
- original Rects. */
- public void updateRectangleReferences() {
- for (Iterator iter = levels.iterator(); iter.hasNext(); ) {
- Level level = (Level) iter.next();
- level.updateRectangleReferences();
- }
- }
-
- /** Clears out all Levels stored in this LevelSet. */
- public void clear() {
- levels.clear();
- nextAddY = 0;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/packrect/Rect.java b/src/classes/com/sun/opengl/impl/packrect/Rect.java
deleted file mode 100755
index f47660e94..000000000
--- a/src/classes/com/sun/opengl/impl/packrect/Rect.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.packrect;
-
-/** Represents a rectangular region on the backing store. The edges of
- the rectangle are the infinitely thin region between adjacent
- pixels on the screen. The origin of the rectangle is its
- upper-left corner. It is inclusive of the pixels on the top and
- left edges and exclusive of the pixels on the bottom and right
- edges. For example, a rect at position (0, 0) and of size (1, 1)
- would include only the pixel at (0, 0). <P>
-
- Negative coordinates and sizes are not supported, since they make
- no sense in the context of the packer, which deals only with
- positively sized regions. <P>
-
- This class contains a user data field for efficient hookup to
- external data structures as well as enough other hooks to
- efficiently plug into the rectangle packer. */
-
-public class Rect {
- private int x;
- private int y;
- private int w;
- private int h;
-
- // The level we're currently installed in in the parent
- // RectanglePacker, or null if not hooked in to the table yet
- private Level level;
-
- // The user's object this rectangle represents.
- private Object userData;
-
- // Used transiently during re-layout of the backing store (when
- // there is no room left due either to fragmentation or just being
- // out of space)
- private Rect nextLocation;
-
- public Rect() {
- this(null);
- }
-
- public Rect(Object userData) {
- this(0, 0, 0, 0, userData);
- }
-
- public Rect(int x, int y, int w, int h, Object userData) {
- setPosition(x, y);
- setSize(w, h);
- setUserData(userData);
- }
-
- public int x() { return x; }
- public int y() { return y; }
- public int w() { return w; }
- public int h() { return h; }
- public Object getUserData() { return userData; }
- public Rect getNextLocation() { return nextLocation; }
-
- public void setPosition(int x, int y) {
- if (x < 0)
- throw new IllegalArgumentException("Negative x");
- if (y < 0)
- throw new IllegalArgumentException("Negative y");
- this.x = x;
- this.y = y;
- }
-
- public void setSize(int w, int h) throws IllegalArgumentException {
- if (w < 0)
- throw new IllegalArgumentException("Negative width");
- if (h < 0)
- throw new IllegalArgumentException("Negative height");
- this.w = w;
- this.h = h;
- }
-
- public void setUserData(Object obj) { userData = obj; }
- public void setNextLocation(Rect nextLocation) { this.nextLocation = nextLocation; }
-
- // Helpers for computations.
-
- /** Returns the maximum x-coordinate contained within this
- rectangle. Note that this returns a different result than Java
- 2D's rectangles; for a rectangle of position (0, 0) and size (1,
- 1) this will return 0, not 1. Returns -1 if the width of this
- rectangle is 0. */
- public int maxX() {
- if (w() < 1)
- return -1;
- return x() + w() - 1;
- }
-
- /** Returns the maximum y-coordinate contained within this
- rectangle. Note that this returns a different result than Java
- 2D's rectangles; for a rectangle of position (0, 0) and size (1,
- 1) this will return 0, not 1. Returns -1 if the height of this
- rectangle is 0. */
- public int maxY() {
- if (h() < 1)
- return -1;
- return y() + h() - 1;
- }
-
- public boolean canContain(Rect other) {
- return (w() >= other.w() &&
- h() >= other.h());
- }
-
- public String toString() {
- return "[Rect x: " + x() + " y: " + y() + " w: " + w() + " h: " + h() + "]";
- }
-
- // Unclear whether it's a good idea to override hashCode and equals
- // for these objects
- /*
- public boolean equals(Object other) {
- if (other == null || (!(other instanceof Rect))) {
- return false;
- }
-
- Rect r = (Rect) other;
- return (this.x() == r.x() &&
- this.y() == r.y() &&
- this.w() == r.w() &&
- this.h() == r.h());
- }
-
- public int hashCode() {
- return (x + y * 13 + w * 17 + h * 23);
- }
- */
-}
diff --git a/src/classes/com/sun/opengl/impl/packrect/RectVisitor.java b/src/classes/com/sun/opengl/impl/packrect/RectVisitor.java
deleted file mode 100755
index 6474f204e..000000000
--- a/src/classes/com/sun/opengl/impl/packrect/RectVisitor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.packrect;
-
-/** Iteration construct without exposing the internals of the
- RectanglePacker and without implementing a complex Iterator. */
-
-public interface RectVisitor {
- public void visit(Rect rect);
-}
diff --git a/src/classes/com/sun/opengl/impl/packrect/RectanglePacker.java b/src/classes/com/sun/opengl/impl/packrect/RectanglePacker.java
deleted file mode 100755
index 3a77b3bd1..000000000
--- a/src/classes/com/sun/opengl/impl/packrect/RectanglePacker.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.packrect;
-
-import java.util.*;
-
-/** Packs rectangles supplied by the user (typically representing
- image regions) into a larger backing store rectangle (typically
- representing a large texture). Supports automatic compaction of
- the space on the backing store, and automatic expansion of the
- backing store, when necessary. */
-
-public class RectanglePacker {
- private BackingStoreManager manager;
- private Object backingStore;
- private LevelSet levels;
- private float EXPANSION_FACTOR = 0.5f;
- private float SHRINK_FACTOR = 0.3f;
-
- private int initialWidth;
- private int initialHeight;
-
- private int maxWidth = -1;
- private int maxHeight = -1;
-
- static class RectHComparator implements Comparator {
- public int compare(Object o1, Object o2) {
- Rect r1 = (Rect) o1;
- Rect r2 = (Rect) o2;
- return r2.h() - r1.h();
- }
-
- public boolean equals(Object obj) {
- return this == obj;
- }
- }
- private static final Comparator rectHComparator = new RectHComparator();
-
- public RectanglePacker(BackingStoreManager manager,
- int initialWidth,
- int initialHeight) {
- this.manager = manager;
- levels = new LevelSet(initialWidth, initialHeight);
- this.initialWidth = initialWidth;
- this.initialHeight = initialHeight;
- }
-
- public Object getBackingStore() {
- if (backingStore == null) {
- backingStore = manager.allocateBackingStore(levels.w(), levels.h());
- }
-
- return backingStore;
- }
-
- /** Sets up a maximum width and height for the backing store. These
- are optional and if not specified the backing store will grow as
- necessary. Setting up a maximum width and height introduces the
- possibility that additions will fail; these are handled with the
- BackingStoreManager's allocationFailed notification. */
- public void setMaxSize(int maxWidth, int maxHeight) {
- this.maxWidth = maxWidth;
- this.maxHeight = maxHeight;
- }
-
- /** Decides upon an (x, y) position for the given rectangle (leaving
- its width and height unchanged) and places it on the backing
- store. May provoke re-layout of other Rects already added. */
- public void add(Rect rect) {
- // Allocate backing store if we don't have any yet
- if (backingStore == null)
- backingStore = manager.allocateBackingStore(levels.w(), levels.h());
-
- int attemptNumber = 0;
- boolean tryAgain = false;
-
- do {
- // Try to allocate
- if (levels.add(rect))
- return;
-
- // Try to allocate with horizontal compaction
- if (levels.compactAndAdd(rect, backingStore, manager))
- return;
-
- // Let the manager have a chance at potentially evicting some entries
- tryAgain = manager.preExpand(rect, attemptNumber++);
- } while (tryAgain);
-
- compactImpl(rect);
-
- // Retry the addition of the incoming rectangle
- add(rect);
- // Done
- }
-
- /** Removes the given rectangle from this RectanglePacker. */
- public void remove(Rect rect) {
- levels.remove(rect);
- }
-
- /** Visits all Rects contained in this RectanglePacker. */
- public void visit(RectVisitor visitor) {
- levels.visit(visitor);
- }
-
- /** Returns the vertical fragmentation ratio of this
- RectanglePacker. This is defined as the ratio of the sum of the
- heights of all completely empty Levels divided by the overall
- used height of the LevelSet. A high vertical fragmentation ratio
- indicates that it may be profitable to perform a compaction. */
- public float verticalFragmentationRatio() {
- return levels.verticalFragmentationRatio();
- }
-
- /** Forces a compaction cycle, which typically results in allocating
- a new backing store and copying all entries to it. */
- public void compact() {
- compactImpl(null);
- }
-
- // The "cause" rect may be null
- private void compactImpl(Rect cause) {
- // Have to either expand, compact or both. Need to figure out what
- // direction to go. Prefer to expand vertically. Expand
- // horizontally only if rectangle being added is too wide. FIXME:
- // may want to consider rebalancing the width and height to be
- // more equal if it turns out we keep expanding in the vertical
- // direction.
- boolean done = false;
- int newWidth = levels.w();
- int newHeight = levels.h();
- LevelSet nextLevelSet = null;
- int attemptNumber = 0;
- boolean needAdditionFailureNotification = false;
-
- while (!done) {
- if (cause != null) {
- if (cause.w() > newWidth) {
- newWidth = cause.w();
- } else {
- newHeight = (int) (newHeight * (1.0f + EXPANSION_FACTOR));
- }
- }
-
- // Clamp to maximum values
- needAdditionFailureNotification = false;
- if (maxWidth > 0 && newWidth > maxWidth) {
- newWidth = maxWidth;
- needAdditionFailureNotification = true;
- }
- if (maxHeight > 0 && newHeight > maxHeight) {
- newHeight = maxHeight;
- needAdditionFailureNotification = true;
- }
-
- nextLevelSet = new LevelSet(newWidth, newHeight);
-
- // Make copies of all existing rectangles
- List/*<Rect>*/ newRects = new ArrayList/*<Rect>*/();
- for (Iterator i1 = levels.iterator(); i1.hasNext(); ) {
- Level level = (Level) i1.next();
- for (Iterator i2 = level.iterator(); i2.hasNext(); ) {
- Rect cur = (Rect) i2.next();
- Rect newRect = new Rect(0, 0, cur.w(), cur.h(), null);
- cur.setNextLocation(newRect);
- // Hook up the reverse mapping too for easier replacement
- newRect.setNextLocation(cur);
- newRects.add(newRect);
- }
- }
- // Sort them by decreasing height (note: this isn't really
- // guaranteed to improve the chances of a successful layout)
- Collections.sort(newRects, rectHComparator);
- // Try putting all of these rectangles into the new level set
- done = true;
- for (Iterator iter = newRects.iterator(); iter.hasNext(); ) {
- if (!nextLevelSet.add((Rect) iter.next())) {
- done = false;
- break;
- }
- }
-
- if (done && cause != null) {
- // Try to add the new rectangle as well
- if (nextLevelSet.add(cause)) {
- // We're OK
- } else {
- done = false;
- }
- }
-
- // Don't send addition failure notifications if we're only doing
- // a compaction
- if (!done && needAdditionFailureNotification && cause != null) {
- manager.additionFailed(cause, attemptNumber);
- }
- ++attemptNumber;
- }
-
- // See whether the implicit compaction that just occurred has
- // yielded excess empty space.
- if (nextLevelSet.getUsedHeight() > 0 &&
- nextLevelSet.getUsedHeight() < nextLevelSet.h() * SHRINK_FACTOR) {
- int shrunkHeight = Math.max(initialHeight,
- (int) (nextLevelSet.getUsedHeight() * (1.0f + EXPANSION_FACTOR)));
- if (maxHeight > 0 && shrunkHeight > maxHeight) {
- shrunkHeight = maxHeight;
- }
- nextLevelSet.setHeight(shrunkHeight);
- }
-
- // If we temporarily added the new rectangle to the new LevelSet,
- // take it out since we don't "really" add it here but in add(), above
- if (cause != null) {
- nextLevelSet.remove(cause);
- }
-
- // OK, now we have a new layout and a mapping from the old to the
- // new locations of rectangles on the backing store. Allocate a
- // new backing store, move the contents over and deallocate the
- // old one.
- Object newBackingStore = manager.allocateBackingStore(nextLevelSet.w(),
- nextLevelSet.h());
- manager.beginMovement(backingStore, newBackingStore);
- for (Iterator i1 = levels.iterator(); i1.hasNext(); ) {
- Level level = (Level) i1.next();
- for (Iterator i2 = level.iterator(); i2.hasNext(); ) {
- Rect cur = (Rect) i2.next();
- manager.move(backingStore, cur,
- newBackingStore, cur.getNextLocation());
- }
- }
- // Replace references to temporary rectangles with original ones
- nextLevelSet.updateRectangleReferences();
- manager.endMovement(backingStore, newBackingStore);
- // Now delete the old backing store
- manager.deleteBackingStore(backingStore);
- // Update to new versions of backing store and LevelSet
- backingStore = newBackingStore;
- levels = nextLevelSet;
- }
-
- /** Clears all Rects contained in this RectanglePacker. */
- public void clear() {
- levels.clear();
- }
-
- /** Disposes the backing store allocated by the
- BackingStoreManager. This RectanglePacker may no longer be used
- after calling this method. */
- public void dispose() {
- if (backingStore != null)
- manager.deleteBackingStore(backingStore);
- backingStore = null;
- levels = null;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/packrect/package.html b/src/classes/com/sun/opengl/impl/packrect/package.html
deleted file mode 100755
index 7f2522244..000000000
--- a/src/classes/com/sun/opengl/impl/packrect/package.html
+++ /dev/null
@@ -1,7 +0,0 @@
-This package implements a rectangle packing algorithm suitable for
-tracking the placement of multiple rectangles inside a larger one. It
-is useful for cases such as placing the contents of multiple windows
-on a larger backing store texture for a compositing window manager;
-placing multiple rasterized strings in a texture map for quick
-rendering to the screen; and many other situations where it is useful
-to carve up a larger texture into smaller pieces dynamically. <P>
diff --git a/src/classes/com/sun/opengl/impl/registry/Registry.java b/src/classes/com/sun/opengl/impl/registry/Registry.java
deleted file mode 100644
index b5c67e250..000000000
--- a/src/classes/com/sun/opengl/impl/registry/Registry.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * License Applicability. Except to the extent portions of this file are
- * made subject to an alternative license as permitted in the SGI Free
- * Software License B, Version 1.1 (the "License"), the contents of this
- * file are subject only to the provisions of the License. You may not use
- * this file except in compliance with the License. You may obtain a copy
- * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
- * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
- *
- * http://oss.sgi.com/projects/FreeB
- *
- * Note that, as provided in the License, the Software is distributed on an
- * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
- * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
- * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
- *
- * NOTE: The Original Code (as defined below) has been licensed to Sun
- * Microsystems, Inc. ("Sun") under the SGI Free Software License B
- * (Version 1.1), shown above ("SGI License"). Pursuant to Section
- * 3.2(3) of the SGI License, Sun is distributing the Covered Code to
- * you under an alternative license ("Alternative License"). This
- * Alternative License includes all of the provisions of the SGI License
- * except that Section 2.2 and 11 are omitted. Any differences between
- * the Alternative License and the SGI License are offered solely by Sun
- * and not by SGI.
- *
- * Original Code. The Original Code is: OpenGL Sample Implementation,
- * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
- * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
- * Copyright in any portions created by third parties is as indicated
- * elsewhere herein. All Rights Reserved.
- *
- * Additional Notice Provisions: The application programming interfaces
- * established by SGI in conjunction with the Original Code are The
- * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
- * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
- * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
- * Window System(R) (Version 1.3), released October 19, 1998. This software
- * was created using the OpenGL(R) version 1.2.1 Sample Implementation
- * published by SGI, but has not been independently verified as being
- * compliant with the OpenGL(R) version 1.2.1 Specification.
- */
-
-package com.sun.opengl.impl.registry;
-
-import java.util.regex.*;
-import javax.media.opengl.glu.GLU;
-
-/**
- *
- * @author Administrator
- */
-public class Registry {
-
- /** Creates a new instance of Registry */
- public Registry() {
- }
-
- public static String gluGetString(int name) {
- if( name == GLU.GLU_VERSION ) {
- return( "1.3" );
- } else if( name == GLU.GLU_EXTENSIONS ) {
- return( "GLU_EXT_nurbs_tessellator GLU_EXT_object_space_tess " );
- }
- return( null );
- }
-
- public static boolean gluCheckExtension( String extName, String extString ) {
- if( extName == null || extString == null ) {
- return( false );
- }
- return( Pattern.compile( extName + "\\b" ).matcher( extString ).find() );
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/ActiveRegion.java b/src/classes/com/sun/opengl/impl/tessellator/ActiveRegion.java
deleted file mode 100644
index e013d21c1..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/ActiveRegion.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class ActiveRegion {
- GLUhalfEdge eUp; /* upper edge, directed right to left */
- DictNode nodeUp; /* dictionary node corresponding to eUp */
- int windingNumber; /* used to determine which regions are
- * inside the polygon */
- boolean inside; /* is this region inside the polygon? */
- boolean sentinel; /* marks fake edges at t = +/-infinity */
- boolean dirty; /* marks regions where the upper or lower
- * edge has changed, but we haven't checked
- * whether they intersect yet */
- boolean fixUpperEdge; /* marks temporary edges introduced when
- * we process a "right vertex" (one without
- * any edges leaving to the right) */
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/CachedVertex.java b/src/classes/com/sun/opengl/impl/tessellator/CachedVertex.java
deleted file mode 100644
index a9bcc4f80..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/CachedVertex.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class CachedVertex {
- public double[] coords = new double[3];
- public Object data;
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/Dict.java b/src/classes/com/sun/opengl/impl/tessellator/Dict.java
deleted file mode 100644
index c8435ce69..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/Dict.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class Dict {
- DictNode head;
- Object frame;
- DictLeq leq;
-
- private Dict() {
- }
-
- static Dict dictNewDict(Object frame, DictLeq leq) {
- Dict dict = new Dict();
- dict.head = new DictNode();
-
- dict.head.key = null;
- dict.head.next = dict.head;
- dict.head.prev = dict.head;
-
- dict.frame = frame;
- dict.leq = leq;
-
- return dict;
- }
-
- static void dictDeleteDict(Dict dict) {
- dict.head = null;
- dict.frame = null;
- dict.leq = null;
- }
-
- static DictNode dictInsert(Dict dict, Object key) {
- return dictInsertBefore(dict, dict.head, key);
- }
-
- static DictNode dictInsertBefore(Dict dict, DictNode node, Object key) {
- do {
- node = node.prev;
- } while (node.key != null && !dict.leq.leq(dict.frame, node.key, key));
-
- DictNode newNode = new DictNode();
- newNode.key = key;
- newNode.next = node.next;
- node.next.prev = newNode;
- newNode.prev = node;
- node.next = newNode;
-
- return newNode;
- }
-
- static Object dictKey(DictNode aNode) {
- return aNode.key;
- }
-
- static DictNode dictSucc(DictNode aNode) {
- return aNode.next;
- }
-
- static DictNode dictPred(DictNode aNode) {
- return aNode.prev;
- }
-
- static DictNode dictMin(Dict aDict) {
- return aDict.head.next;
- }
-
- static DictNode dictMax(Dict aDict) {
- return aDict.head.prev;
- }
-
- static void dictDelete(Dict dict, DictNode node) {
- node.next.prev = node.prev;
- node.prev.next = node.next;
- }
-
- static DictNode dictSearch(Dict dict, Object key) {
- DictNode node = dict.head;
-
- do {
- node = node.next;
- } while (node.key != null && !(dict.leq.leq(dict.frame, key, node.key)));
-
- return node;
- }
-
- public interface DictLeq {
- boolean leq(Object frame, Object key1, Object key2);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/DictNode.java b/src/classes/com/sun/opengl/impl/tessellator/DictNode.java
deleted file mode 100644
index 1ae71053b..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/DictNode.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class DictNode {
- Object key;
- DictNode next;
- DictNode prev;
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/GLUface.java b/src/classes/com/sun/opengl/impl/tessellator/GLUface.java
deleted file mode 100644
index f0df8d5e4..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/GLUface.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class GLUface {
- public GLUface next; /* next face (never NULL) */
- public GLUface prev; /* previous face (never NULL) */
- public GLUhalfEdge anEdge; /* a half edge with this left face */
- public Object data; /* room for client's data */
-
- /* Internal data (keep hidden) */
- public GLUface trail; /* "stack" for conversion to strips */
- public boolean marked; /* flag for conversion to strips */
- public boolean inside; /* this face is in the polygon interior */
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/GLUhalfEdge.java b/src/classes/com/sun/opengl/impl/tessellator/GLUhalfEdge.java
deleted file mode 100644
index 6a46cfdaf..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/GLUhalfEdge.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-
-
-class GLUhalfEdge {
- public GLUhalfEdge next; /* doubly-linked list (prev==Sym->next) */
- public GLUhalfEdge Sym; /* same edge, opposite direction */
- public GLUhalfEdge Onext; /* next edge CCW around origin */
- public GLUhalfEdge Lnext; /* next edge CCW around left face */
- public GLUvertex Org; /* origin vertex (Overtex too long) */
- public com.sun.opengl.impl.tessellator.GLUface Lface; /* left face */
-
- /* Internal data (keep hidden) */
- public com.sun.opengl.impl.tessellator.ActiveRegion activeRegion; /* a region with this upper edge (sweep.c) */
- public int winding; /* change in winding number when crossing */
- public boolean first;
-
- public GLUhalfEdge(boolean first) {
- this.first = first;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/GLUmesh.java b/src/classes/com/sun/opengl/impl/tessellator/GLUmesh.java
deleted file mode 100644
index a6ecf5382..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/GLUmesh.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-
-
-class GLUmesh {
- GLUvertex vHead = new GLUvertex(); /* dummy header for vertex list */
- com.sun.opengl.impl.tessellator.GLUface fHead = new GLUface(); /* dummy header for face list */
- com.sun.opengl.impl.tessellator.GLUhalfEdge eHead = new GLUhalfEdge(true); /* dummy header for edge list */
- com.sun.opengl.impl.tessellator.GLUhalfEdge eHeadSym = new GLUhalfEdge(false); /* and its symmetric counterpart */
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/GLUtessellatorImpl.java b/src/classes/com/sun/opengl/impl/tessellator/GLUtessellatorImpl.java
deleted file mode 100644
index c004a5281..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/GLUtessellatorImpl.java
+++ /dev/null
@@ -1,635 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-import com.sun.opengl.impl.tessellator.*;
-
-public class GLUtessellatorImpl implements GLUtessellator {
- public static final int TESS_MAX_CACHE = 100;
-
- private int state; /* what begin/end calls have we seen? */
-
- private GLUhalfEdge lastEdge; /* lastEdge->Org is the most recent vertex */
- GLUmesh mesh; /* stores the input contours, and eventually
- the tessellation itself */
-
- /*** state needed for projecting onto the sweep plane ***/
-
- double[] normal = new double[3]; /* user-specified normal (if provided) */
- double[] sUnit = new double[3]; /* unit vector in s-direction (debugging) */
- double[] tUnit = new double[3]; /* unit vector in t-direction (debugging) */
-
- /*** state needed for the line sweep ***/
-
- private double relTolerance; /* tolerance for merging features */
- int windingRule; /* rule for determining polygon interior */
- boolean fatalError; /* fatal error: needed combine callback */
-
- Dict dict; /* edge dictionary for sweep line */
- PriorityQ pq; /* priority queue of vertex events */
- GLUvertex event; /* current sweep event being processed */
-
- /*** state needed for rendering callbacks (see render.c) ***/
-
- boolean flagBoundary; /* mark boundary edges (use EdgeFlag) */
- boolean boundaryOnly; /* Extract contours, not triangles */
- GLUface lonelyTriList;
- /* list of triangles which could not be rendered as strips or fans */
-
-
-
- /*** state needed to cache single-contour polygons for renderCache() */
-
- private boolean flushCacheOnNextVertex; /* empty cache on next vertex() call */
- int cacheCount; /* number of cached vertices */
- CachedVertex[] cache = new CachedVertex[TESS_MAX_CACHE]; /* the vertex data */
-
- /*** rendering callbacks that also pass polygon data ***/
- private Object polygonData; /* client data for current polygon */
-
- private GLUtessellatorCallback callBegin;
- private GLUtessellatorCallback callEdgeFlag;
- private GLUtessellatorCallback callVertex;
- private GLUtessellatorCallback callEnd;
-// private GLUtessellatorCallback callMesh;
- private GLUtessellatorCallback callError;
- private GLUtessellatorCallback callCombine;
-
- private GLUtessellatorCallback callBeginData;
- private GLUtessellatorCallback callEdgeFlagData;
- private GLUtessellatorCallback callVertexData;
- private GLUtessellatorCallback callEndData;
-// private GLUtessellatorCallback callMeshData;
- private GLUtessellatorCallback callErrorData;
- private GLUtessellatorCallback callCombineData;
-
- private static final double GLU_TESS_DEFAULT_TOLERANCE = 0.0;
-// private static final int GLU_TESS_MESH = 100112; /* void (*)(GLUmesh *mesh) */
- private static GLUtessellatorCallback NULL_CB = new GLUtessellatorCallbackAdapter();
-
-// #define MAX_FAST_ALLOC (MAX(sizeof(EdgePair), \
-// MAX(sizeof(GLUvertex),sizeof(GLUface))))
-
- private GLUtessellatorImpl() {
- state = TessState.T_DORMANT;
-
- normal[0] = 0;
- normal[1] = 0;
- normal[2] = 0;
-
- relTolerance = GLU_TESS_DEFAULT_TOLERANCE;
- windingRule = GLU.GLU_TESS_WINDING_ODD;
- flagBoundary = false;
- boundaryOnly = false;
-
- callBegin = NULL_CB;
- callEdgeFlag = NULL_CB;
- callVertex = NULL_CB;
- callEnd = NULL_CB;
- callError = NULL_CB;
- callCombine = NULL_CB;
-// callMesh = NULL_CB;
-
- callBeginData = NULL_CB;
- callEdgeFlagData = NULL_CB;
- callVertexData = NULL_CB;
- callEndData = NULL_CB;
- callErrorData = NULL_CB;
- callCombineData = NULL_CB;
-
- polygonData = null;
-
- for (int i = 0; i < cache.length; i++) {
- cache[i] = new CachedVertex();
- }
- }
-
- static public GLUtessellator gluNewTess()
- {
- return new GLUtessellatorImpl();
- }
-
-
- private void makeDormant() {
- /* Return the tessellator to its original dormant state. */
-
- if (mesh != null) {
- Mesh.__gl_meshDeleteMesh(mesh);
- }
- state = TessState.T_DORMANT;
- lastEdge = null;
- mesh = null;
- }
-
- private void requireState(int newState) {
- if (state != newState) gotoState(newState);
- }
-
- private void gotoState(int newState) {
- while (state != newState) {
- /* We change the current state one level at a time, to get to
- * the desired state.
- */
- if (state < newState) {
- if (state == TessState.T_DORMANT) {
- callErrorOrErrorData(GLU.GLU_TESS_MISSING_BEGIN_POLYGON);
- gluTessBeginPolygon(null);
- } else if (state == TessState.T_IN_POLYGON) {
- callErrorOrErrorData(GLU.GLU_TESS_MISSING_BEGIN_CONTOUR);
- gluTessBeginContour();
- }
- } else {
- if (state == TessState.T_IN_CONTOUR) {
- callErrorOrErrorData(GLU.GLU_TESS_MISSING_END_CONTOUR);
- gluTessEndContour();
- } else if (state == TessState.T_IN_POLYGON) {
- callErrorOrErrorData(GLU.GLU_TESS_MISSING_END_POLYGON);
- /* gluTessEndPolygon( tess ) is too much work! */
- makeDormant();
- }
- }
- }
- }
-
- public void gluDeleteTess() {
- requireState(TessState.T_DORMANT);
- }
-
- public void gluTessProperty(int which, double value) {
- switch (which) {
- case GLU.GLU_TESS_TOLERANCE:
- if (value < 0.0 || value > 1.0) break;
- relTolerance = value;
- return;
-
- case GLU.GLU_TESS_WINDING_RULE:
- int windingRule = (int) value;
- if (windingRule != value) break; /* not an integer */
-
- switch (windingRule) {
- case GLU.GLU_TESS_WINDING_ODD:
- case GLU.GLU_TESS_WINDING_NONZERO:
- case GLU.GLU_TESS_WINDING_POSITIVE:
- case GLU.GLU_TESS_WINDING_NEGATIVE:
- case GLU.GLU_TESS_WINDING_ABS_GEQ_TWO:
- this.windingRule = windingRule;
- return;
- default:
- break;
- }
-
- case GLU.GLU_TESS_BOUNDARY_ONLY:
- boundaryOnly = (value != 0);
- return;
-
- default:
- callErrorOrErrorData(GLU.GLU_INVALID_ENUM);
- return;
- }
- callErrorOrErrorData(GLU.GLU_INVALID_VALUE);
- }
-
-/* Returns tessellator property */
- public void gluGetTessProperty(int which, double[] value, int value_offset) {
- switch (which) {
- case GLU.GLU_TESS_TOLERANCE:
-/* tolerance should be in range [0..1] */
- assert (0.0 <= relTolerance && relTolerance <= 1.0);
- value[value_offset] = relTolerance;
- break;
- case GLU.GLU_TESS_WINDING_RULE:
- assert (windingRule == GLU.GLU_TESS_WINDING_ODD ||
- windingRule == GLU.GLU_TESS_WINDING_NONZERO ||
- windingRule == GLU.GLU_TESS_WINDING_POSITIVE ||
- windingRule == GLU.GLU_TESS_WINDING_NEGATIVE ||
- windingRule == GLU.GLU_TESS_WINDING_ABS_GEQ_TWO);
- value[value_offset] = windingRule;
- break;
- case GLU.GLU_TESS_BOUNDARY_ONLY:
- assert (boundaryOnly == true || boundaryOnly == false);
- value[value_offset] = boundaryOnly ? 1 : 0;
- break;
- default:
- value[value_offset] = 0.0;
- callErrorOrErrorData(GLU.GLU_INVALID_ENUM);
- break;
- }
- } /* gluGetTessProperty() */
-
- public void gluTessNormal(double x, double y, double z) {
- normal[0] = x;
- normal[1] = y;
- normal[2] = z;
- }
-
- public void gluTessCallback(int which, GLUtessellatorCallback aCallback) {
- switch (which) {
- case GLU.GLU_TESS_BEGIN:
- callBegin = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_BEGIN_DATA:
- callBeginData = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_EDGE_FLAG:
- callEdgeFlag = aCallback == null ? NULL_CB : aCallback;
-/* If the client wants boundary edges to be flagged,
- * we render everything as separate triangles (no strips or fans).
- */
- flagBoundary = aCallback != null;
- return;
- case GLU.GLU_TESS_EDGE_FLAG_DATA:
- callEdgeFlagData = callBegin = aCallback == null ? NULL_CB : aCallback;
-/* If the client wants boundary edges to be flagged,
- * we render everything as separate triangles (no strips or fans).
- */
- flagBoundary = (aCallback != null);
- return;
- case GLU.GLU_TESS_VERTEX:
- callVertex = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_VERTEX_DATA:
- callVertexData = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_END:
- callEnd = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_END_DATA:
- callEndData = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_ERROR:
- callError = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_ERROR_DATA:
- callErrorData = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_COMBINE:
- callCombine = aCallback == null ? NULL_CB : aCallback;
- return;
- case GLU.GLU_TESS_COMBINE_DATA:
- callCombineData = aCallback == null ? NULL_CB : aCallback;
- return;
-// case GLU_TESS_MESH:
-// callMesh = aCallback == null ? NULL_CB : aCallback;
-// return;
- default:
- callErrorOrErrorData(GLU.GLU_INVALID_ENUM);
- return;
- }
- }
-
- private boolean addVertex(double[] coords, Object vertexData) {
- GLUhalfEdge e;
-
- e = lastEdge;
- if (e == null) {
-/* Make a self-loop (one vertex, one edge). */
-
- e = Mesh.__gl_meshMakeEdge(mesh);
- if (e == null) return false;
- if (!Mesh.__gl_meshSplice(e, e.Sym)) return false;
- } else {
-/* Create a new vertex and edge which immediately follow e
- * in the ordering around the left face.
- */
- if (Mesh.__gl_meshSplitEdge(e) == null) return false;
- e = e.Lnext;
- }
-
-/* The new vertex is now e.Org. */
- e.Org.data = vertexData;
- e.Org.coords[0] = coords[0];
- e.Org.coords[1] = coords[1];
- e.Org.coords[2] = coords[2];
-
-/* The winding of an edge says how the winding number changes as we
- * cross from the edge''s right face to its left face. We add the
- * vertices in such an order that a CCW contour will add +1 to
- * the winding number of the region inside the contour.
- */
- e.winding = 1;
- e.Sym.winding = -1;
-
- lastEdge = e;
-
- return true;
- }
-
- private void cacheVertex(double[] coords, Object vertexData) {
- if (cache[cacheCount] == null) {
- cache[cacheCount] = new CachedVertex();
- }
-
- CachedVertex v = cache[cacheCount];
-
- v.data = vertexData;
- v.coords[0] = coords[0];
- v.coords[1] = coords[1];
- v.coords[2] = coords[2];
- ++cacheCount;
- }
-
-
- private boolean flushCache() {
- CachedVertex[] v = cache;
-
- mesh = Mesh.__gl_meshNewMesh();
- if (mesh == null) return false;
-
- for (int i = 0; i < cacheCount; i++) {
- CachedVertex vertex = v[i];
- if (!addVertex(vertex.coords, vertex.data)) return false;
- }
- cacheCount = 0;
- flushCacheOnNextVertex = false;
-
- return true;
- }
-
- public void gluTessVertex(double[] coords, int coords_offset, Object vertexData) {
- int i;
- boolean tooLarge = false;
- double x;
- double[] clamped = new double[3];
-
- requireState(TessState.T_IN_CONTOUR);
-
- if (flushCacheOnNextVertex) {
- if (!flushCache()) {
- callErrorOrErrorData(GLU.GLU_OUT_OF_MEMORY);
- return;
- }
- lastEdge = null;
- }
- for (i = 0; i < 3; ++i) {
- x = coords[i+coords_offset];
- if (x < -GLU.GLU_TESS_MAX_COORD) {
- x = -GLU.GLU_TESS_MAX_COORD;
- tooLarge = true;
- }
- if (x > GLU.GLU_TESS_MAX_COORD) {
- x = GLU.GLU_TESS_MAX_COORD;
- tooLarge = true;
- }
- clamped[i] = x;
- }
- if (tooLarge) {
- callErrorOrErrorData(GLU.GLU_TESS_COORD_TOO_LARGE);
- }
-
- if (mesh == null) {
- if (cacheCount < TESS_MAX_CACHE) {
- cacheVertex(clamped, vertexData);
- return;
- }
- if (!flushCache()) {
- callErrorOrErrorData(GLU.GLU_OUT_OF_MEMORY);
- return;
- }
- }
-
- if (!addVertex(clamped, vertexData)) {
- callErrorOrErrorData(GLU.GLU_OUT_OF_MEMORY);
- }
- }
-
-
- public void gluTessBeginPolygon(Object data) {
- requireState(TessState.T_DORMANT);
-
- state = TessState.T_IN_POLYGON;
- cacheCount = 0;
- flushCacheOnNextVertex = false;
- mesh = null;
-
- polygonData = data;
- }
-
-
- public void gluTessBeginContour() {
- requireState(TessState.T_IN_POLYGON);
-
- state = TessState.T_IN_CONTOUR;
- lastEdge = null;
- if (cacheCount > 0) {
-/* Just set a flag so we don't get confused by empty contours
- * -- these can be generated accidentally with the obsolete
- * NextContour() interface.
- */
- flushCacheOnNextVertex = true;
- }
- }
-
-
- public void gluTessEndContour() {
- requireState(TessState.T_IN_CONTOUR);
- state = TessState.T_IN_POLYGON;
- }
-
- public void gluTessEndPolygon() {
- GLUmesh mesh;
-
- try {
- requireState(TessState.T_IN_POLYGON);
- state = TessState.T_DORMANT;
-
- if (this.mesh == null) {
- if (!flagBoundary /*&& callMesh == NULL_CB*/) {
-
-/* Try some special code to make the easy cases go quickly
- * (eg. convex polygons). This code does NOT handle multiple contours,
- * intersections, edge flags, and of course it does not generate
- * an explicit mesh either.
- */
- if (Render.__gl_renderCache(this)) {
- polygonData = null;
- return;
- }
- }
- if (!flushCache()) throw new RuntimeException(); /* could've used a label*/
- }
-
-/* Determine the polygon normal and project vertices onto the plane
- * of the polygon.
- */
- Normal.__gl_projectPolygon(this);
-
-/* __gl_computeInterior( tess ) computes the planar arrangement specified
- * by the given contours, and further subdivides this arrangement
- * into regions. Each region is marked "inside" if it belongs
- * to the polygon, according to the rule given by windingRule.
- * Each interior region is guaranteed be monotone.
- */
- if (!Sweep.__gl_computeInterior(this)) {
- throw new RuntimeException(); /* could've used a label */
- }
-
- mesh = this.mesh;
- if (!fatalError) {
- boolean rc = true;
-
-/* If the user wants only the boundary contours, we throw away all edges
- * except those which separate the interior from the exterior.
- * Otherwise we tessellate all the regions marked "inside".
- */
- if (boundaryOnly) {
- rc = TessMono.__gl_meshSetWindingNumber(mesh, 1, true);
- } else {
- rc = TessMono.__gl_meshTessellateInterior(mesh);
- }
- if (!rc) throw new RuntimeException(); /* could've used a label */
-
- Mesh.__gl_meshCheckMesh(mesh);
-
- if (callBegin != NULL_CB || callEnd != NULL_CB
- || callVertex != NULL_CB || callEdgeFlag != NULL_CB
- || callBeginData != NULL_CB
- || callEndData != NULL_CB
- || callVertexData != NULL_CB
- || callEdgeFlagData != NULL_CB) {
- if (boundaryOnly) {
- Render.__gl_renderBoundary(this, mesh); /* output boundary contours */
- } else {
- Render.__gl_renderMesh(this, mesh); /* output strips and fans */
- }
- }
-// if (callMesh != NULL_CB) {
-//
-///* Throw away the exterior faces, so that all faces are interior.
-// * This way the user doesn't have to check the "inside" flag,
-// * and we don't need to even reveal its existence. It also leaves
-// * the freedom for an implementation to not generate the exterior
-// * faces in the first place.
-// */
-// TessMono.__gl_meshDiscardExterior(mesh);
-// callMesh.mesh(mesh); /* user wants the mesh itself */
-// mesh = null;
-// polygonData = null;
-// return;
-// }
- }
- Mesh.__gl_meshDeleteMesh(mesh);
- polygonData = null;
- mesh = null;
- } catch (Exception e) {
- e.printStackTrace();
- callErrorOrErrorData(GLU.GLU_OUT_OF_MEMORY);
- }
- }
-
- /*******************************************************/
-
-/* Obsolete calls -- for backward compatibility */
-
- public void gluBeginPolygon() {
- gluTessBeginPolygon(null);
- gluTessBeginContour();
- }
-
-
-/*ARGSUSED*/
- public void gluNextContour(int type) {
- gluTessEndContour();
- gluTessBeginContour();
- }
-
-
- public void gluEndPolygon() {
- gluTessEndContour();
- gluTessEndPolygon();
- }
-
- void callBeginOrBeginData(int a) {
- if (callBeginData != NULL_CB)
- callBeginData.beginData(a, polygonData);
- else
- callBegin.begin(a);
- }
-
- void callVertexOrVertexData(Object a) {
- if (callVertexData != NULL_CB)
- callVertexData.vertexData(a, polygonData);
- else
- callVertex.vertex(a);
- }
-
- void callEdgeFlagOrEdgeFlagData(boolean a) {
- if (callEdgeFlagData != NULL_CB)
- callEdgeFlagData.edgeFlagData(a, polygonData);
- else
- callEdgeFlag.edgeFlag(a);
- }
-
- void callEndOrEndData() {
- if (callEndData != NULL_CB)
- callEndData.endData(polygonData);
- else
- callEnd.end();
- }
-
- void callCombineOrCombineData(double[] coords, Object[] vertexData, float[] weights, Object[] outData) {
- if (callCombineData != NULL_CB)
- callCombineData.combineData(coords, vertexData, weights, outData, polygonData);
- else
- callCombine.combine(coords, vertexData, weights, outData);
- }
-
- void callErrorOrErrorData(int a) {
- if (callErrorData != NULL_CB)
- callErrorData.errorData(a, polygonData);
- else
- callError.error(a);
- }
-
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/GLUvertex.java b/src/classes/com/sun/opengl/impl/tessellator/GLUvertex.java
deleted file mode 100644
index 68a02a103..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/GLUvertex.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class GLUvertex {
- public GLUvertex next; /* next vertex (never NULL) */
- public GLUvertex prev; /* previous vertex (never NULL) */
- public com.sun.opengl.impl.tessellator.GLUhalfEdge anEdge; /* a half-edge with this origin */
- public Object data; /* client's data */
-
- /* Internal data (keep hidden) */
- public double[] coords = new double[3]; /* vertex location in 3D */
- public double s, t; /* projection onto the sweep plane */
- public int pqHandle; /* to allow deletion from priority queue */
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/Geom.java b/src/classes/com/sun/opengl/impl/tessellator/Geom.java
deleted file mode 100644
index 11e17d535..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/Geom.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class Geom {
- private Geom() {
- }
-
- /* Given three vertices u,v,w such that VertLeq(u,v) && VertLeq(v,w),
- * evaluates the t-coord of the edge uw at the s-coord of the vertex v.
- * Returns v->t - (uw)(v->s), ie. the signed distance from uw to v.
- * If uw is vertical (and thus passes thru v), the result is zero.
- *
- * The calculation is extremely accurate and stable, even when v
- * is very close to u or w. In particular if we set v->t = 0 and
- * let r be the negated result (this evaluates (uw)(v->s)), then
- * r is guaranteed to satisfy MIN(u->t,w->t) <= r <= MAX(u->t,w->t).
- */
- static double EdgeEval(GLUvertex u, GLUvertex v, GLUvertex w) {
- double gapL, gapR;
-
- assert (VertLeq(u, v) && VertLeq(v, w));
-
- gapL = v.s - u.s;
- gapR = w.s - v.s;
-
- if (gapL + gapR > 0) {
- if (gapL < gapR) {
- return (v.t - u.t) + (u.t - w.t) * (gapL / (gapL + gapR));
- } else {
- return (v.t - w.t) + (w.t - u.t) * (gapR / (gapL + gapR));
- }
- }
- /* vertical line */
- return 0;
- }
-
- static double EdgeSign(GLUvertex u, GLUvertex v, GLUvertex w) {
- double gapL, gapR;
-
- assert (VertLeq(u, v) && VertLeq(v, w));
-
- gapL = v.s - u.s;
- gapR = w.s - v.s;
-
- if (gapL + gapR > 0) {
- return (v.t - w.t) * gapL + (v.t - u.t) * gapR;
- }
- /* vertical line */
- return 0;
- }
-
-
- /***********************************************************************
- * Define versions of EdgeSign, EdgeEval with s and t transposed.
- */
-
- static double TransEval(GLUvertex u, GLUvertex v, GLUvertex w) {
- /* Given three vertices u,v,w such that TransLeq(u,v) && TransLeq(v,w),
- * evaluates the t-coord of the edge uw at the s-coord of the vertex v.
- * Returns v->s - (uw)(v->t), ie. the signed distance from uw to v.
- * If uw is vertical (and thus passes thru v), the result is zero.
- *
- * The calculation is extremely accurate and stable, even when v
- * is very close to u or w. In particular if we set v->s = 0 and
- * let r be the negated result (this evaluates (uw)(v->t)), then
- * r is guaranteed to satisfy MIN(u->s,w->s) <= r <= MAX(u->s,w->s).
- */
- double gapL, gapR;
-
- assert (TransLeq(u, v) && TransLeq(v, w));
-
- gapL = v.t - u.t;
- gapR = w.t - v.t;
-
- if (gapL + gapR > 0) {
- if (gapL < gapR) {
- return (v.s - u.s) + (u.s - w.s) * (gapL / (gapL + gapR));
- } else {
- return (v.s - w.s) + (w.s - u.s) * (gapR / (gapL + gapR));
- }
- }
- /* vertical line */
- return 0;
- }
-
- static double TransSign(GLUvertex u, GLUvertex v, GLUvertex w) {
- /* Returns a number whose sign matches TransEval(u,v,w) but which
- * is cheaper to evaluate. Returns > 0, == 0 , or < 0
- * as v is above, on, or below the edge uw.
- */
- double gapL, gapR;
-
- assert (TransLeq(u, v) && TransLeq(v, w));
-
- gapL = v.t - u.t;
- gapR = w.t - v.t;
-
- if (gapL + gapR > 0) {
- return (v.s - w.s) * gapL + (v.s - u.s) * gapR;
- }
- /* vertical line */
- return 0;
- }
-
-
- static boolean VertCCW(GLUvertex u, GLUvertex v, GLUvertex w) {
- /* For almost-degenerate situations, the results are not reliable.
- * Unless the floating-point arithmetic can be performed without
- * rounding errors, *any* implementation will give incorrect results
- * on some degenerate inputs, so the client must have some way to
- * handle this situation.
- */
- return (u.s * (v.t - w.t) + v.s * (w.t - u.t) + w.s * (u.t - v.t)) >= 0;
- }
-
-/* Given parameters a,x,b,y returns the value (b*x+a*y)/(a+b),
- * or (x+y)/2 if a==b==0. It requires that a,b >= 0, and enforces
- * this in the rare case that one argument is slightly negative.
- * The implementation is extremely stable numerically.
- * In particular it guarantees that the result r satisfies
- * MIN(x,y) <= r <= MAX(x,y), and the results are very accurate
- * even when a and b differ greatly in magnitude.
- */
- static double Interpolate(double a, double x, double b, double y) {
- a = (a < 0) ? 0 : a;
- b = (b < 0) ? 0 : b;
- if (a <= b) {
- if (b == 0) {
- return (x + y) / 2.0;
- } else {
- return (x + (y - x) * (a / (a + b)));
- }
- } else {
- return (y + (x - y) * (b / (a + b)));
- }
- }
-
- static void EdgeIntersect(GLUvertex o1, GLUvertex d1,
- GLUvertex o2, GLUvertex d2,
- GLUvertex v)
-/* Given edges (o1,d1) and (o2,d2), compute their point of intersection.
- * The computed point is guaranteed to lie in the intersection of the
- * bounding rectangles defined by each edge.
- */ {
- double z1, z2;
-
- /* This is certainly not the most efficient way to find the intersection
- * of two line segments, but it is very numerically stable.
- *
- * Strategy: find the two middle vertices in the VertLeq ordering,
- * and interpolate the intersection s-value from these. Then repeat
- * using the TransLeq ordering to find the intersection t-value.
- */
-
- if (!VertLeq(o1, d1)) {
- GLUvertex temp = o1;
- o1 = d1;
- d1 = temp;
- }
- if (!VertLeq(o2, d2)) {
- GLUvertex temp = o2;
- o2 = d2;
- d2 = temp;
- }
- if (!VertLeq(o1, o2)) {
- GLUvertex temp = o1;
- o1 = o2;
- o2 = temp;
- temp = d1;
- d1 = d2;
- d2 = temp;
- }
-
- if (!VertLeq(o2, d1)) {
- /* Technically, no intersection -- do our best */
- v.s = (o2.s + d1.s) / 2.0;
- } else if (VertLeq(d1, d2)) {
- /* Interpolate between o2 and d1 */
- z1 = EdgeEval(o1, o2, d1);
- z2 = EdgeEval(o2, d1, d2);
- if (z1 + z2 < 0) {
- z1 = -z1;
- z2 = -z2;
- }
- v.s = Interpolate(z1, o2.s, z2, d1.s);
- } else {
- /* Interpolate between o2 and d2 */
- z1 = EdgeSign(o1, o2, d1);
- z2 = -EdgeSign(o1, d2, d1);
- if (z1 + z2 < 0) {
- z1 = -z1;
- z2 = -z2;
- }
- v.s = Interpolate(z1, o2.s, z2, d2.s);
- }
-
- /* Now repeat the process for t */
-
- if (!TransLeq(o1, d1)) {
- GLUvertex temp = o1;
- o1 = d1;
- d1 = temp;
- }
- if (!TransLeq(o2, d2)) {
- GLUvertex temp = o2;
- o2 = d2;
- d2 = temp;
- }
- if (!TransLeq(o1, o2)) {
- GLUvertex temp = o2;
- o2 = o1;
- o1 = temp;
- temp = d2;
- d2 = d1;
- d1 = temp;
- }
-
- if (!TransLeq(o2, d1)) {
- /* Technically, no intersection -- do our best */
- v.t = (o2.t + d1.t) / 2.0;
- } else if (TransLeq(d1, d2)) {
- /* Interpolate between o2 and d1 */
- z1 = TransEval(o1, o2, d1);
- z2 = TransEval(o2, d1, d2);
- if (z1 + z2 < 0) {
- z1 = -z1;
- z2 = -z2;
- }
- v.t = Interpolate(z1, o2.t, z2, d1.t);
- } else {
- /* Interpolate between o2 and d2 */
- z1 = TransSign(o1, o2, d1);
- z2 = -TransSign(o1, d2, d1);
- if (z1 + z2 < 0) {
- z1 = -z1;
- z2 = -z2;
- }
- v.t = Interpolate(z1, o2.t, z2, d2.t);
- }
- }
-
- static boolean VertEq(GLUvertex u, GLUvertex v) {
- return u.s == v.s && u.t == v.t;
- }
-
- static boolean VertLeq(GLUvertex u, GLUvertex v) {
- return u.s < v.s || (u.s == v.s && u.t <= v.t);
- }
-
-/* Versions of VertLeq, EdgeSign, EdgeEval with s and t transposed. */
-
- static boolean TransLeq(GLUvertex u, GLUvertex v) {
- return u.t < v.t || (u.t == v.t && u.s <= v.s);
- }
-
- static boolean EdgeGoesLeft(GLUhalfEdge e) {
- return VertLeq(e.Sym.Org, e.Org);
- }
-
- static boolean EdgeGoesRight(GLUhalfEdge e) {
- return VertLeq(e.Org, e.Sym.Org);
- }
-
- static double VertL1dist(GLUvertex u, GLUvertex v) {
- return Math.abs(u.s - v.s) + Math.abs(u.t - v.t);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/Mesh.java b/src/classes/com/sun/opengl/impl/tessellator/Mesh.java
deleted file mode 100644
index 2f4d5e3cc..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/Mesh.java
+++ /dev/null
@@ -1,734 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class Mesh {
- private Mesh() {
- }
-
- /************************ Utility Routines ************************/
-/* MakeEdge creates a new pair of half-edges which form their own loop.
- * No vertex or face structures are allocated, but these must be assigned
- * before the current edge operation is completed.
- */
- static com.sun.opengl.impl.tessellator.GLUhalfEdge MakeEdge(com.sun.opengl.impl.tessellator.GLUhalfEdge eNext) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
- com.sun.opengl.impl.tessellator.GLUhalfEdge eSym;
- com.sun.opengl.impl.tessellator.GLUhalfEdge ePrev;
-
-// EdgePair * pair = (EdgePair *)
-// memAlloc(sizeof(EdgePair));
-// if (pair == NULL) return NULL;
-//
-// e = &pair - > e;
- e = new com.sun.opengl.impl.tessellator.GLUhalfEdge(true);
-// eSym = &pair - > eSym;
- eSym = new com.sun.opengl.impl.tessellator.GLUhalfEdge(false);
-
-
- /* Make sure eNext points to the first edge of the edge pair */
- if (!eNext.first) {
- eNext = eNext.Sym;
- }
-
- /* Insert in circular doubly-linked list before eNext.
- * Note that the prev pointer is stored in Sym->next.
- */
- ePrev = eNext.Sym.next;
- eSym.next = ePrev;
- ePrev.Sym.next = e;
- e.next = eNext;
- eNext.Sym.next = eSym;
-
- e.Sym = eSym;
- e.Onext = e;
- e.Lnext = eSym;
- e.Org = null;
- e.Lface = null;
- e.winding = 0;
- e.activeRegion = null;
-
- eSym.Sym = e;
- eSym.Onext = eSym;
- eSym.Lnext = e;
- eSym.Org = null;
- eSym.Lface = null;
- eSym.winding = 0;
- eSym.activeRegion = null;
-
- return e;
- }
-
-/* Splice( a, b ) is best described by the Guibas/Stolfi paper or the
- * CS348a notes (see mesh.h). Basically it modifies the mesh so that
- * a->Onext and b->Onext are exchanged. This can have various effects
- * depending on whether a and b belong to different face or vertex rings.
- * For more explanation see __gl_meshSplice() below.
- */
- static void Splice(com.sun.opengl.impl.tessellator.GLUhalfEdge a, com.sun.opengl.impl.tessellator.GLUhalfEdge b) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge aOnext = a.Onext;
- com.sun.opengl.impl.tessellator.GLUhalfEdge bOnext = b.Onext;
-
- aOnext.Sym.Lnext = b;
- bOnext.Sym.Lnext = a;
- a.Onext = bOnext;
- b.Onext = aOnext;
- }
-
-/* MakeVertex( newVertex, eOrig, vNext ) attaches a new vertex and makes it the
- * origin of all edges in the vertex loop to which eOrig belongs. "vNext" gives
- * a place to insert the new vertex in the global vertex list. We insert
- * the new vertex *before* vNext so that algorithms which walk the vertex
- * list will not see the newly created vertices.
- */
- static void MakeVertex(com.sun.opengl.impl.tessellator.GLUvertex newVertex,
- com.sun.opengl.impl.tessellator.GLUhalfEdge eOrig, com.sun.opengl.impl.tessellator.GLUvertex vNext) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
- com.sun.opengl.impl.tessellator.GLUvertex vPrev;
- com.sun.opengl.impl.tessellator.GLUvertex vNew = newVertex;
-
- assert (vNew != null);
-
- /* insert in circular doubly-linked list before vNext */
- vPrev = vNext.prev;
- vNew.prev = vPrev;
- vPrev.next = vNew;
- vNew.next = vNext;
- vNext.prev = vNew;
-
- vNew.anEdge = eOrig;
- vNew.data = null;
- /* leave coords, s, t undefined */
-
- /* fix other edges on this vertex loop */
- e = eOrig;
- do {
- e.Org = vNew;
- e = e.Onext;
- } while (e != eOrig);
- }
-
-/* MakeFace( newFace, eOrig, fNext ) attaches a new face and makes it the left
- * face of all edges in the face loop to which eOrig belongs. "fNext" gives
- * a place to insert the new face in the global face list. We insert
- * the new face *before* fNext so that algorithms which walk the face
- * list will not see the newly created faces.
- */
- static void MakeFace(com.sun.opengl.impl.tessellator.GLUface newFace, com.sun.opengl.impl.tessellator.GLUhalfEdge eOrig, com.sun.opengl.impl.tessellator.GLUface fNext) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
- com.sun.opengl.impl.tessellator.GLUface fPrev;
- com.sun.opengl.impl.tessellator.GLUface fNew = newFace;
-
- assert (fNew != null);
-
- /* insert in circular doubly-linked list before fNext */
- fPrev = fNext.prev;
- fNew.prev = fPrev;
- fPrev.next = fNew;
- fNew.next = fNext;
- fNext.prev = fNew;
-
- fNew.anEdge = eOrig;
- fNew.data = null;
- fNew.trail = null;
- fNew.marked = false;
-
- /* The new face is marked "inside" if the old one was. This is a
- * convenience for the common case where a face has been split in two.
- */
- fNew.inside = fNext.inside;
-
- /* fix other edges on this face loop */
- e = eOrig;
- do {
- e.Lface = fNew;
- e = e.Lnext;
- } while (e != eOrig);
- }
-
-/* KillEdge( eDel ) destroys an edge (the half-edges eDel and eDel->Sym),
- * and removes from the global edge list.
- */
- static void KillEdge(com.sun.opengl.impl.tessellator.GLUhalfEdge eDel) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge ePrev, eNext;
-
- /* Half-edges are allocated in pairs, see EdgePair above */
- if (!eDel.first) {
- eDel = eDel.Sym;
- }
-
- /* delete from circular doubly-linked list */
- eNext = eDel.next;
- ePrev = eDel.Sym.next;
- eNext.Sym.next = ePrev;
- ePrev.Sym.next = eNext;
- }
-
-
-/* KillVertex( vDel ) destroys a vertex and removes it from the global
- * vertex list. It updates the vertex loop to point to a given new vertex.
- */
- static void KillVertex(com.sun.opengl.impl.tessellator.GLUvertex vDel, com.sun.opengl.impl.tessellator.GLUvertex newOrg) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge e, eStart = vDel.anEdge;
- com.sun.opengl.impl.tessellator.GLUvertex vPrev, vNext;
-
- /* change the origin of all affected edges */
- e = eStart;
- do {
- e.Org = newOrg;
- e = e.Onext;
- } while (e != eStart);
-
- /* delete from circular doubly-linked list */
- vPrev = vDel.prev;
- vNext = vDel.next;
- vNext.prev = vPrev;
- vPrev.next = vNext;
- }
-
-/* KillFace( fDel ) destroys a face and removes it from the global face
- * list. It updates the face loop to point to a given new face.
- */
- static void KillFace(com.sun.opengl.impl.tessellator.GLUface fDel, com.sun.opengl.impl.tessellator.GLUface newLface) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge e, eStart = fDel.anEdge;
- com.sun.opengl.impl.tessellator.GLUface fPrev, fNext;
-
- /* change the left face of all affected edges */
- e = eStart;
- do {
- e.Lface = newLface;
- e = e.Lnext;
- } while (e != eStart);
-
- /* delete from circular doubly-linked list */
- fPrev = fDel.prev;
- fNext = fDel.next;
- fNext.prev = fPrev;
- fPrev.next = fNext;
- }
-
-
- /****************** Basic Edge Operations **********************/
-
-/* __gl_meshMakeEdge creates one edge, two vertices, and a loop (face).
- * The loop consists of the two new half-edges.
- */
- public static com.sun.opengl.impl.tessellator.GLUhalfEdge __gl_meshMakeEdge(com.sun.opengl.impl.tessellator.GLUmesh mesh) {
- com.sun.opengl.impl.tessellator.GLUvertex newVertex1 = new com.sun.opengl.impl.tessellator.GLUvertex();
- com.sun.opengl.impl.tessellator.GLUvertex newVertex2 = new com.sun.opengl.impl.tessellator.GLUvertex();
- com.sun.opengl.impl.tessellator.GLUface newFace = new com.sun.opengl.impl.tessellator.GLUface();
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
-
- e = MakeEdge(mesh.eHead);
- if (e == null) return null;
-
- MakeVertex(newVertex1, e, mesh.vHead);
- MakeVertex(newVertex2, e.Sym, mesh.vHead);
- MakeFace(newFace, e, mesh.fHead);
- return e;
- }
-
-
-/* __gl_meshSplice( eOrg, eDst ) is the basic operation for changing the
- * mesh connectivity and topology. It changes the mesh so that
- * eOrg->Onext <- OLD( eDst->Onext )
- * eDst->Onext <- OLD( eOrg->Onext )
- * where OLD(...) means the value before the meshSplice operation.
- *
- * This can have two effects on the vertex structure:
- * - if eOrg->Org != eDst->Org, the two vertices are merged together
- * - if eOrg->Org == eDst->Org, the origin is split into two vertices
- * In both cases, eDst->Org is changed and eOrg->Org is untouched.
- *
- * Similarly (and independently) for the face structure,
- * - if eOrg->Lface == eDst->Lface, one loop is split into two
- * - if eOrg->Lface != eDst->Lface, two distinct loops are joined into one
- * In both cases, eDst->Lface is changed and eOrg->Lface is unaffected.
- *
- * Some special cases:
- * If eDst == eOrg, the operation has no effect.
- * If eDst == eOrg->Lnext, the new face will have a single edge.
- * If eDst == eOrg->Lprev, the old face will have a single edge.
- * If eDst == eOrg->Onext, the new vertex will have a single edge.
- * If eDst == eOrg->Oprev, the old vertex will have a single edge.
- */
- public static boolean __gl_meshSplice(com.sun.opengl.impl.tessellator.GLUhalfEdge eOrg, com.sun.opengl.impl.tessellator.GLUhalfEdge eDst) {
- boolean joiningLoops = false;
- boolean joiningVertices = false;
-
- if (eOrg == eDst) return true;
-
- if (eDst.Org != eOrg.Org) {
- /* We are merging two disjoint vertices -- destroy eDst->Org */
- joiningVertices = true;
- KillVertex(eDst.Org, eOrg.Org);
- }
- if (eDst.Lface != eOrg.Lface) {
- /* We are connecting two disjoint loops -- destroy eDst.Lface */
- joiningLoops = true;
- KillFace(eDst.Lface, eOrg.Lface);
- }
-
- /* Change the edge structure */
- Splice(eDst, eOrg);
-
- if (!joiningVertices) {
- com.sun.opengl.impl.tessellator.GLUvertex newVertex = new com.sun.opengl.impl.tessellator.GLUvertex();
-
- /* We split one vertex into two -- the new vertex is eDst.Org.
- * Make sure the old vertex points to a valid half-edge.
- */
- MakeVertex(newVertex, eDst, eOrg.Org);
- eOrg.Org.anEdge = eOrg;
- }
- if (!joiningLoops) {
- com.sun.opengl.impl.tessellator.GLUface newFace = new com.sun.opengl.impl.tessellator.GLUface();
-
- /* We split one loop into two -- the new loop is eDst.Lface.
- * Make sure the old face points to a valid half-edge.
- */
- MakeFace(newFace, eDst, eOrg.Lface);
- eOrg.Lface.anEdge = eOrg;
- }
-
- return true;
- }
-
-
-/* __gl_meshDelete( eDel ) removes the edge eDel. There are several cases:
- * if (eDel.Lface != eDel.Rface), we join two loops into one; the loop
- * eDel.Lface is deleted. Otherwise, we are splitting one loop into two;
- * the newly created loop will contain eDel.Dst. If the deletion of eDel
- * would create isolated vertices, those are deleted as well.
- *
- * This function could be implemented as two calls to __gl_meshSplice
- * plus a few calls to memFree, but this would allocate and delete
- * unnecessary vertices and faces.
- */
- static boolean __gl_meshDelete(com.sun.opengl.impl.tessellator.GLUhalfEdge eDel) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge eDelSym = eDel.Sym;
- boolean joiningLoops = false;
-
- /* First step: disconnect the origin vertex eDel.Org. We make all
- * changes to get a consistent mesh in this "intermediate" state.
- */
- if (eDel.Lface != eDel.Sym.Lface) {
- /* We are joining two loops into one -- remove the left face */
- joiningLoops = true;
- KillFace(eDel.Lface, eDel.Sym.Lface);
- }
-
- if (eDel.Onext == eDel) {
- KillVertex(eDel.Org, null);
- } else {
- /* Make sure that eDel.Org and eDel.Sym.Lface point to valid half-edges */
- eDel.Sym.Lface.anEdge = eDel.Sym.Lnext;
- eDel.Org.anEdge = eDel.Onext;
-
- Splice(eDel, eDel.Sym.Lnext);
- if (!joiningLoops) {
- com.sun.opengl.impl.tessellator.GLUface newFace = new com.sun.opengl.impl.tessellator.GLUface();
-
- /* We are splitting one loop into two -- create a new loop for eDel. */
- MakeFace(newFace, eDel, eDel.Lface);
- }
- }
-
- /* Claim: the mesh is now in a consistent state, except that eDel.Org
- * may have been deleted. Now we disconnect eDel.Dst.
- */
- if (eDelSym.Onext == eDelSym) {
- KillVertex(eDelSym.Org, null);
- KillFace(eDelSym.Lface, null);
- } else {
- /* Make sure that eDel.Dst and eDel.Lface point to valid half-edges */
- eDel.Lface.anEdge = eDelSym.Sym.Lnext;
- eDelSym.Org.anEdge = eDelSym.Onext;
- Splice(eDelSym, eDelSym.Sym.Lnext);
- }
-
- /* Any isolated vertices or faces have already been freed. */
- KillEdge(eDel);
-
- return true;
- }
-
-
- /******************** Other Edge Operations **********************/
-
-/* All these routines can be implemented with the basic edge
- * operations above. They are provided for convenience and efficiency.
- */
-
-
-/* __gl_meshAddEdgeVertex( eOrg ) creates a new edge eNew such that
- * eNew == eOrg.Lnext, and eNew.Dst is a newly created vertex.
- * eOrg and eNew will have the same left face.
- */
- static com.sun.opengl.impl.tessellator.GLUhalfEdge __gl_meshAddEdgeVertex(com.sun.opengl.impl.tessellator.GLUhalfEdge eOrg) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge eNewSym;
- com.sun.opengl.impl.tessellator.GLUhalfEdge eNew = MakeEdge(eOrg);
-
- eNewSym = eNew.Sym;
-
- /* Connect the new edge appropriately */
- Splice(eNew, eOrg.Lnext);
-
- /* Set the vertex and face information */
- eNew.Org = eOrg.Sym.Org;
- {
- com.sun.opengl.impl.tessellator.GLUvertex newVertex = new com.sun.opengl.impl.tessellator.GLUvertex();
-
- MakeVertex(newVertex, eNewSym, eNew.Org);
- }
- eNew.Lface = eNewSym.Lface = eOrg.Lface;
-
- return eNew;
- }
-
-
-/* __gl_meshSplitEdge( eOrg ) splits eOrg into two edges eOrg and eNew,
- * such that eNew == eOrg.Lnext. The new vertex is eOrg.Sym.Org == eNew.Org.
- * eOrg and eNew will have the same left face.
- */
- public static com.sun.opengl.impl.tessellator.GLUhalfEdge __gl_meshSplitEdge(com.sun.opengl.impl.tessellator.GLUhalfEdge eOrg) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge eNew;
- com.sun.opengl.impl.tessellator.GLUhalfEdge tempHalfEdge = __gl_meshAddEdgeVertex(eOrg);
-
- eNew = tempHalfEdge.Sym;
-
- /* Disconnect eOrg from eOrg.Sym.Org and connect it to eNew.Org */
- Splice(eOrg.Sym, eOrg.Sym.Sym.Lnext);
- Splice(eOrg.Sym, eNew);
-
- /* Set the vertex and face information */
- eOrg.Sym.Org = eNew.Org;
- eNew.Sym.Org.anEdge = eNew.Sym; /* may have pointed to eOrg.Sym */
- eNew.Sym.Lface = eOrg.Sym.Lface;
- eNew.winding = eOrg.winding; /* copy old winding information */
- eNew.Sym.winding = eOrg.Sym.winding;
-
- return eNew;
- }
-
-
-/* __gl_meshConnect( eOrg, eDst ) creates a new edge from eOrg.Sym.Org
- * to eDst.Org, and returns the corresponding half-edge eNew.
- * If eOrg.Lface == eDst.Lface, this splits one loop into two,
- * and the newly created loop is eNew.Lface. Otherwise, two disjoint
- * loops are merged into one, and the loop eDst.Lface is destroyed.
- *
- * If (eOrg == eDst), the new face will have only two edges.
- * If (eOrg.Lnext == eDst), the old face is reduced to a single edge.
- * If (eOrg.Lnext.Lnext == eDst), the old face is reduced to two edges.
- */
- static com.sun.opengl.impl.tessellator.GLUhalfEdge __gl_meshConnect(com.sun.opengl.impl.tessellator.GLUhalfEdge eOrg, com.sun.opengl.impl.tessellator.GLUhalfEdge eDst) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge eNewSym;
- boolean joiningLoops = false;
- com.sun.opengl.impl.tessellator.GLUhalfEdge eNew = MakeEdge(eOrg);
-
- eNewSym = eNew.Sym;
-
- if (eDst.Lface != eOrg.Lface) {
- /* We are connecting two disjoint loops -- destroy eDst.Lface */
- joiningLoops = true;
- KillFace(eDst.Lface, eOrg.Lface);
- }
-
- /* Connect the new edge appropriately */
- Splice(eNew, eOrg.Lnext);
- Splice(eNewSym, eDst);
-
- /* Set the vertex and face information */
- eNew.Org = eOrg.Sym.Org;
- eNewSym.Org = eDst.Org;
- eNew.Lface = eNewSym.Lface = eOrg.Lface;
-
- /* Make sure the old face points to a valid half-edge */
- eOrg.Lface.anEdge = eNewSym;
-
- if (!joiningLoops) {
- com.sun.opengl.impl.tessellator.GLUface newFace = new com.sun.opengl.impl.tessellator.GLUface();
-
- /* We split one loop into two -- the new loop is eNew.Lface */
- MakeFace(newFace, eNew, eOrg.Lface);
- }
- return eNew;
- }
-
-
- /******************** Other Operations **********************/
-
-/* __gl_meshZapFace( fZap ) destroys a face and removes it from the
- * global face list. All edges of fZap will have a null pointer as their
- * left face. Any edges which also have a null pointer as their right face
- * are deleted entirely (along with any isolated vertices this produces).
- * An entire mesh can be deleted by zapping its faces, one at a time,
- * in any order. Zapped faces cannot be used in further mesh operations!
- */
- static void __gl_meshZapFace(com.sun.opengl.impl.tessellator.GLUface fZap) {
- com.sun.opengl.impl.tessellator.GLUhalfEdge eStart = fZap.anEdge;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e, eNext, eSym;
- com.sun.opengl.impl.tessellator.GLUface fPrev, fNext;
-
- /* walk around face, deleting edges whose right face is also null */
- eNext = eStart.Lnext;
- do {
- e = eNext;
- eNext = e.Lnext;
-
- e.Lface = null;
- if (e.Sym.Lface == null) {
- /* delete the edge -- see __gl_MeshDelete above */
-
- if (e.Onext == e) {
- KillVertex(e.Org, null);
- } else {
- /* Make sure that e.Org points to a valid half-edge */
- e.Org.anEdge = e.Onext;
- Splice(e, e.Sym.Lnext);
- }
- eSym = e.Sym;
- if (eSym.Onext == eSym) {
- KillVertex(eSym.Org, null);
- } else {
- /* Make sure that eSym.Org points to a valid half-edge */
- eSym.Org.anEdge = eSym.Onext;
- Splice(eSym, eSym.Sym.Lnext);
- }
- KillEdge(e);
- }
- } while (e != eStart);
-
- /* delete from circular doubly-linked list */
- fPrev = fZap.prev;
- fNext = fZap.next;
- fNext.prev = fPrev;
- fPrev.next = fNext;
- }
-
-
-/* __gl_meshNewMesh() creates a new mesh with no edges, no vertices,
- * and no loops (what we usually call a "face").
- */
- public static com.sun.opengl.impl.tessellator.GLUmesh __gl_meshNewMesh() {
- com.sun.opengl.impl.tessellator.GLUvertex v;
- com.sun.opengl.impl.tessellator.GLUface f;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
- com.sun.opengl.impl.tessellator.GLUhalfEdge eSym;
- com.sun.opengl.impl.tessellator.GLUmesh mesh = new com.sun.opengl.impl.tessellator.GLUmesh();
-
- v = mesh.vHead;
- f = mesh.fHead;
- e = mesh.eHead;
- eSym = mesh.eHeadSym;
-
- v.next = v.prev = v;
- v.anEdge = null;
- v.data = null;
-
- f.next = f.prev = f;
- f.anEdge = null;
- f.data = null;
- f.trail = null;
- f.marked = false;
- f.inside = false;
-
- e.next = e;
- e.Sym = eSym;
- e.Onext = null;
- e.Lnext = null;
- e.Org = null;
- e.Lface = null;
- e.winding = 0;
- e.activeRegion = null;
-
- eSym.next = eSym;
- eSym.Sym = e;
- eSym.Onext = null;
- eSym.Lnext = null;
- eSym.Org = null;
- eSym.Lface = null;
- eSym.winding = 0;
- eSym.activeRegion = null;
-
- return mesh;
- }
-
-
-/* __gl_meshUnion( mesh1, mesh2 ) forms the union of all structures in
- * both meshes, and returns the new mesh (the old meshes are destroyed).
- */
- static com.sun.opengl.impl.tessellator.GLUmesh __gl_meshUnion(com.sun.opengl.impl.tessellator.GLUmesh mesh1, com.sun.opengl.impl.tessellator.GLUmesh mesh2) {
- com.sun.opengl.impl.tessellator.GLUface f1 = mesh1.fHead;
- com.sun.opengl.impl.tessellator.GLUvertex v1 = mesh1.vHead;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e1 = mesh1.eHead;
- com.sun.opengl.impl.tessellator.GLUface f2 = mesh2.fHead;
- com.sun.opengl.impl.tessellator.GLUvertex v2 = mesh2.vHead;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e2 = mesh2.eHead;
-
- /* Add the faces, vertices, and edges of mesh2 to those of mesh1 */
- if (f2.next != f2) {
- f1.prev.next = f2.next;
- f2.next.prev = f1.prev;
- f2.prev.next = f1;
- f1.prev = f2.prev;
- }
-
- if (v2.next != v2) {
- v1.prev.next = v2.next;
- v2.next.prev = v1.prev;
- v2.prev.next = v1;
- v1.prev = v2.prev;
- }
-
- if (e2.next != e2) {
- e1.Sym.next.Sym.next = e2.next;
- e2.next.Sym.next = e1.Sym.next;
- e2.Sym.next.Sym.next = e1;
- e1.Sym.next = e2.Sym.next;
- }
-
- return mesh1;
- }
-
-
-/* __gl_meshDeleteMesh( mesh ) will free all storage for any valid mesh.
- */
- static void __gl_meshDeleteMeshZap(com.sun.opengl.impl.tessellator.GLUmesh mesh) {
- com.sun.opengl.impl.tessellator.GLUface fHead = mesh.fHead;
-
- while (fHead.next != fHead) {
- __gl_meshZapFace(fHead.next);
- }
- assert (mesh.vHead.next == mesh.vHead);
- }
-
-/* __gl_meshDeleteMesh( mesh ) will free all storage for any valid mesh.
- */
- public static void __gl_meshDeleteMesh(com.sun.opengl.impl.tessellator.GLUmesh mesh) {
- com.sun.opengl.impl.tessellator.GLUface f, fNext;
- com.sun.opengl.impl.tessellator.GLUvertex v, vNext;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e, eNext;
-
- for (f = mesh.fHead.next; f != mesh.fHead; f = fNext) {
- fNext = f.next;
- }
-
- for (v = mesh.vHead.next; v != mesh.vHead; v = vNext) {
- vNext = v.next;
- }
-
- for (e = mesh.eHead.next; e != mesh.eHead; e = eNext) {
- /* One call frees both e and e.Sym (see EdgePair above) */
- eNext = e.next;
- }
- }
-
-/* __gl_meshCheckMesh( mesh ) checks a mesh for self-consistency.
- */
- public static void __gl_meshCheckMesh(com.sun.opengl.impl.tessellator.GLUmesh mesh) {
- com.sun.opengl.impl.tessellator.GLUface fHead = mesh.fHead;
- com.sun.opengl.impl.tessellator.GLUvertex vHead = mesh.vHead;
- com.sun.opengl.impl.tessellator.GLUhalfEdge eHead = mesh.eHead;
- com.sun.opengl.impl.tessellator.GLUface f, fPrev;
- com.sun.opengl.impl.tessellator.GLUvertex v, vPrev;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e, ePrev;
-
- fPrev = fHead;
- for (fPrev = fHead; (f = fPrev.next) != fHead; fPrev = f) {
- assert (f.prev == fPrev);
- e = f.anEdge;
- do {
- assert (e.Sym != e);
- assert (e.Sym.Sym == e);
- assert (e.Lnext.Onext.Sym == e);
- assert (e.Onext.Sym.Lnext == e);
- assert (e.Lface == f);
- e = e.Lnext;
- } while (e != f.anEdge);
- }
- assert (f.prev == fPrev && f.anEdge == null && f.data == null);
-
- vPrev = vHead;
- for (vPrev = vHead; (v = vPrev.next) != vHead; vPrev = v) {
- assert (v.prev == vPrev);
- e = v.anEdge;
- do {
- assert (e.Sym != e);
- assert (e.Sym.Sym == e);
- assert (e.Lnext.Onext.Sym == e);
- assert (e.Onext.Sym.Lnext == e);
- assert (e.Org == v);
- e = e.Onext;
- } while (e != v.anEdge);
- }
- assert (v.prev == vPrev && v.anEdge == null && v.data == null);
-
- ePrev = eHead;
- for (ePrev = eHead; (e = ePrev.next) != eHead; ePrev = e) {
- assert (e.Sym.next == ePrev.Sym);
- assert (e.Sym != e);
- assert (e.Sym.Sym == e);
- assert (e.Org != null);
- assert (e.Sym.Org != null);
- assert (e.Lnext.Onext.Sym == e);
- assert (e.Onext.Sym.Lnext == e);
- }
- assert (e.Sym.next == ePrev.Sym
- && e.Sym == mesh.eHeadSym
- && e.Sym.Sym == e
- && e.Org == null && e.Sym.Org == null
- && e.Lface == null && e.Sym.Lface == null);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/Normal.java b/src/classes/com/sun/opengl/impl/tessellator/Normal.java
deleted file mode 100644
index 2bbfbb3a6..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/Normal.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-class Normal {
- private Normal() {
- }
-
- static boolean SLANTED_SWEEP = false;
- static double S_UNIT_X; /* Pre-normalized */
- static double S_UNIT_Y;
- private static final boolean TRUE_PROJECT = false;
-
- static {
- if (SLANTED_SWEEP) {
-/* The "feature merging" is not intended to be complete. There are
- * special cases where edges are nearly parallel to the sweep line
- * which are not implemented. The algorithm should still behave
- * robustly (ie. produce a reasonable tesselation) in the presence
- * of such edges, however it may miss features which could have been
- * merged. We could minimize this effect by choosing the sweep line
- * direction to be something unusual (ie. not parallel to one of the
- * coordinate axes).
- */
- S_UNIT_X = 0.50941539564955385; /* Pre-normalized */
- S_UNIT_Y = 0.86052074622010633;
- } else {
- S_UNIT_X = 1.0;
- S_UNIT_Y = 0.0;
- }
- }
-
- private static double Dot(double[] u, double[] v) {
- return (u[0] * v[0] + u[1] * v[1] + u[2] * v[2]);
- }
-
- static void Normalize(double[] v) {
- double len = v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
-
- assert (len > 0);
- len = Math.sqrt(len);
- v[0] /= len;
- v[1] /= len;
- v[2] /= len;
- }
-
- static int LongAxis(double[] v) {
- int i = 0;
-
- if (Math.abs(v[1]) > Math.abs(v[0])) {
- i = 1;
- }
- if (Math.abs(v[2]) > Math.abs(v[i])) {
- i = 2;
- }
- return i;
- }
-
- static void ComputeNormal(GLUtessellatorImpl tess, double[] norm) {
- com.sun.opengl.impl.tessellator.GLUvertex v, v1, v2;
- double c, tLen2, maxLen2;
- double[] maxVal, minVal, d1, d2, tNorm;
- com.sun.opengl.impl.tessellator.GLUvertex[] maxVert, minVert;
- com.sun.opengl.impl.tessellator.GLUvertex vHead = tess.mesh.vHead;
- int i;
-
- maxVal = new double[3];
- minVal = new double[3];
- minVert = new com.sun.opengl.impl.tessellator.GLUvertex[3];
- maxVert = new com.sun.opengl.impl.tessellator.GLUvertex[3];
- d1 = new double[3];
- d2 = new double[3];
- tNorm = new double[3];
-
- maxVal[0] = maxVal[1] = maxVal[2] = -2 * GLU.GLU_TESS_MAX_COORD;
- minVal[0] = minVal[1] = minVal[2] = 2 * GLU.GLU_TESS_MAX_COORD;
-
- for (v = vHead.next; v != vHead; v = v.next) {
- for (i = 0; i < 3; ++i) {
- c = v.coords[i];
- if (c < minVal[i]) {
- minVal[i] = c;
- minVert[i] = v;
- }
- if (c > maxVal[i]) {
- maxVal[i] = c;
- maxVert[i] = v;
- }
- }
- }
-
-/* Find two vertices separated by at least 1/sqrt(3) of the maximum
- * distance between any two vertices
- */
- i = 0;
- if (maxVal[1] - minVal[1] > maxVal[0] - minVal[0]) {
- i = 1;
- }
- if (maxVal[2] - minVal[2] > maxVal[i] - minVal[i]) {
- i = 2;
- }
- if (minVal[i] >= maxVal[i]) {
-/* All vertices are the same -- normal doesn't matter */
- norm[0] = 0;
- norm[1] = 0;
- norm[2] = 1;
- return;
- }
-
-/* Look for a third vertex which forms the triangle with maximum area
- * (Length of normal == twice the triangle area)
- */
- maxLen2 = 0;
- v1 = minVert[i];
- v2 = maxVert[i];
- d1[0] = v1.coords[0] - v2.coords[0];
- d1[1] = v1.coords[1] - v2.coords[1];
- d1[2] = v1.coords[2] - v2.coords[2];
- for (v = vHead.next; v != vHead; v = v.next) {
- d2[0] = v.coords[0] - v2.coords[0];
- d2[1] = v.coords[1] - v2.coords[1];
- d2[2] = v.coords[2] - v2.coords[2];
- tNorm[0] = d1[1] * d2[2] - d1[2] * d2[1];
- tNorm[1] = d1[2] * d2[0] - d1[0] * d2[2];
- tNorm[2] = d1[0] * d2[1] - d1[1] * d2[0];
- tLen2 = tNorm[0] * tNorm[0] + tNorm[1] * tNorm[1] + tNorm[2] * tNorm[2];
- if (tLen2 > maxLen2) {
- maxLen2 = tLen2;
- norm[0] = tNorm[0];
- norm[1] = tNorm[1];
- norm[2] = tNorm[2];
- }
- }
-
- if (maxLen2 <= 0) {
-/* All points lie on a single line -- any decent normal will do */
- norm[0] = norm[1] = norm[2] = 0;
- norm[LongAxis(d1)] = 1;
- }
- }
-
- static void CheckOrientation(GLUtessellatorImpl tess) {
- double area;
- com.sun.opengl.impl.tessellator.GLUface f, fHead = tess.mesh.fHead;
- com.sun.opengl.impl.tessellator.GLUvertex v, vHead = tess.mesh.vHead;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
-
-/* When we compute the normal automatically, we choose the orientation
- * so that the the sum of the signed areas of all contours is non-negative.
- */
- area = 0;
- for (f = fHead.next; f != fHead; f = f.next) {
- e = f.anEdge;
- if (e.winding <= 0) continue;
- do {
- area += (e.Org.s - e.Sym.Org.s) * (e.Org.t + e.Sym.Org.t);
- e = e.Lnext;
- } while (e != f.anEdge);
- }
- if (area < 0) {
-/* Reverse the orientation by flipping all the t-coordinates */
- for (v = vHead.next; v != vHead; v = v.next) {
- v.t = -v.t;
- }
- tess.tUnit[0] = -tess.tUnit[0];
- tess.tUnit[1] = -tess.tUnit[1];
- tess.tUnit[2] = -tess.tUnit[2];
- }
- }
-
-/* Determine the polygon normal and project vertices onto the plane
- * of the polygon.
- */
- public static void __gl_projectPolygon(GLUtessellatorImpl tess) {
- com.sun.opengl.impl.tessellator.GLUvertex v, vHead = tess.mesh.vHead;
- double w;
- double[] norm = new double[3];
- double[] sUnit, tUnit;
- int i;
- boolean computedNormal = false;
-
- norm[0] = tess.normal[0];
- norm[1] = tess.normal[1];
- norm[2] = tess.normal[2];
- if (norm[0] == 0 && norm[1] == 0 && norm[2] == 0) {
- ComputeNormal(tess, norm);
- computedNormal = true;
- }
- sUnit = tess.sUnit;
- tUnit = tess.tUnit;
- i = LongAxis(norm);
-
- if (TRUE_PROJECT) {
-/* Choose the initial sUnit vector to be approximately perpendicular
- * to the normal.
- */
- Normalize(norm);
-
- sUnit[i] = 0;
- sUnit[(i + 1) % 3] = S_UNIT_X;
- sUnit[(i + 2) % 3] = S_UNIT_Y;
-
-/* Now make it exactly perpendicular */
- w = Dot(sUnit, norm);
- sUnit[0] -= w * norm[0];
- sUnit[1] -= w * norm[1];
- sUnit[2] -= w * norm[2];
- Normalize(sUnit);
-
-/* Choose tUnit so that (sUnit,tUnit,norm) form a right-handed frame */
- tUnit[0] = norm[1] * sUnit[2] - norm[2] * sUnit[1];
- tUnit[1] = norm[2] * sUnit[0] - norm[0] * sUnit[2];
- tUnit[2] = norm[0] * sUnit[1] - norm[1] * sUnit[0];
- Normalize(tUnit);
- } else {
-/* Project perpendicular to a coordinate axis -- better numerically */
- sUnit[i] = 0;
- sUnit[(i + 1) % 3] = S_UNIT_X;
- sUnit[(i + 2) % 3] = S_UNIT_Y;
-
- tUnit[i] = 0;
- tUnit[(i + 1) % 3] = (norm[i] > 0) ? -S_UNIT_Y : S_UNIT_Y;
- tUnit[(i + 2) % 3] = (norm[i] > 0) ? S_UNIT_X : -S_UNIT_X;
- }
-
-/* Project the vertices onto the sweep plane */
- for (v = vHead.next; v != vHead; v = v.next) {
- v.s = Dot(v.coords, sUnit);
- v.t = Dot(v.coords, tUnit);
- }
- if (computedNormal) {
- CheckOrientation(tess);
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/PriorityQ.java b/src/classes/com/sun/opengl/impl/tessellator/PriorityQ.java
deleted file mode 100644
index df8a5b383..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/PriorityQ.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-abstract class PriorityQ {
- public static final int INIT_SIZE = 32;
-
- public static class PQnode {
- int handle;
- }
-
- public static class PQhandleElem {
- Object key;
- int node;
- }
-
- public static interface Leq {
- boolean leq(Object key1, Object key2);
- }
-
- // #ifdef FOR_TRITE_TEST_PROGRAM
-// private static boolean LEQ(PriorityQCommon.Leq leq, Object x,Object y) {
-// return pq.leq.leq(x,y);
-// }
-// #else
-/* Violates modularity, but a little faster */
-// #include "geom.h"
- public static boolean LEQ(Leq leq, Object x, Object y) {
- return com.sun.opengl.impl.tessellator.Geom.VertLeq((com.sun.opengl.impl.tessellator.GLUvertex) x, (com.sun.opengl.impl.tessellator.GLUvertex) y);
- }
-
- static PriorityQ pqNewPriorityQ(Leq leq) {
- return new PriorityQSort(leq);
- }
-
- abstract void pqDeletePriorityQ();
-
- abstract boolean pqInit();
-
- abstract int pqInsert(Object keyNew);
-
- abstract Object pqExtractMin();
-
- abstract void pqDelete(int hCurr);
-
- abstract Object pqMinimum();
-
- abstract boolean pqIsEmpty();
-// #endif
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/PriorityQHeap.java b/src/classes/com/sun/opengl/impl/tessellator/PriorityQHeap.java
deleted file mode 100644
index 75e8bebcb..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/PriorityQHeap.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-
-
-class PriorityQHeap extends com.sun.opengl.impl.tessellator.PriorityQ {
- com.sun.opengl.impl.tessellator.PriorityQ.PQnode[] nodes;
- com.sun.opengl.impl.tessellator.PriorityQ.PQhandleElem[] handles;
- int size, max;
- int freeList;
- boolean initialized;
- com.sun.opengl.impl.tessellator.PriorityQ.Leq leq;
-
-/* really __gl_pqHeapNewPriorityQ */
- public PriorityQHeap(com.sun.opengl.impl.tessellator.PriorityQ.Leq leq) {
- size = 0;
- max = com.sun.opengl.impl.tessellator.PriorityQ.INIT_SIZE;
- nodes = new com.sun.opengl.impl.tessellator.PriorityQ.PQnode[com.sun.opengl.impl.tessellator.PriorityQ.INIT_SIZE + 1];
- for (int i = 0; i < nodes.length; i++) {
- nodes[i] = new PQnode();
- }
- handles = new com.sun.opengl.impl.tessellator.PriorityQ.PQhandleElem[com.sun.opengl.impl.tessellator.PriorityQ.INIT_SIZE + 1];
- for (int i = 0; i < handles.length; i++) {
- handles[i] = new PQhandleElem();
- }
- initialized = false;
- freeList = 0;
- this.leq = leq;
-
- nodes[1].handle = 1; /* so that Minimum() returns NULL */
- handles[1].key = null;
- }
-
-/* really __gl_pqHeapDeletePriorityQ */
- void pqDeletePriorityQ() {
- handles = null;
- nodes = null;
- }
-
- void FloatDown(int curr) {
- com.sun.opengl.impl.tessellator.PriorityQ.PQnode[] n = nodes;
- com.sun.opengl.impl.tessellator.PriorityQ.PQhandleElem[] h = handles;
- int hCurr, hChild;
- int child;
-
- hCurr = n[curr].handle;
- for (; ;) {
- child = curr << 1;
- if (child < size && LEQ(leq, h[n[child + 1].handle].key,
- h[n[child].handle].key)) {
- ++child;
- }
-
- assert (child <= max);
-
- hChild = n[child].handle;
- if (child > size || LEQ(leq, h[hCurr].key, h[hChild].key)) {
- n[curr].handle = hCurr;
- h[hCurr].node = curr;
- break;
- }
- n[curr].handle = hChild;
- h[hChild].node = curr;
- curr = child;
- }
- }
-
-
- void FloatUp(int curr) {
- com.sun.opengl.impl.tessellator.PriorityQ.PQnode[] n = nodes;
- com.sun.opengl.impl.tessellator.PriorityQ.PQhandleElem[] h = handles;
- int hCurr, hParent;
- int parent;
-
- hCurr = n[curr].handle;
- for (; ;) {
- parent = curr >> 1;
- hParent = n[parent].handle;
- if (parent == 0 || LEQ(leq, h[hParent].key, h[hCurr].key)) {
- n[curr].handle = hCurr;
- h[hCurr].node = curr;
- break;
- }
- n[curr].handle = hParent;
- h[hParent].node = curr;
- curr = parent;
- }
- }
-
-/* really __gl_pqHeapInit */
- boolean pqInit() {
- int i;
-
- /* This method of building a heap is O(n), rather than O(n lg n). */
-
- for (i = size; i >= 1; --i) {
- FloatDown(i);
- }
- initialized = true;
-
- return true;
- }
-
-/* really __gl_pqHeapInsert */
-/* returns LONG_MAX iff out of memory */
- int pqInsert(Object keyNew) {
- int curr;
- int free;
-
- curr = ++size;
- if ((curr * 2) > max) {
- com.sun.opengl.impl.tessellator.PriorityQ.PQnode[] saveNodes = nodes;
- com.sun.opengl.impl.tessellator.PriorityQ.PQhandleElem[] saveHandles = handles;
-
- /* If the heap overflows, double its size. */
- max <<= 1;
-// pq->nodes = (PQnode *)memRealloc( pq->nodes, (size_t) ((pq->max + 1) * sizeof( pq->nodes[0] )));
- PriorityQ.PQnode[] pqNodes = new PriorityQ.PQnode[max + 1];
- System.arraycopy( nodes, 0, pqNodes, 0, nodes.length );
- for (int i = nodes.length; i < pqNodes.length; i++) {
- pqNodes[i] = new PQnode();
- }
- nodes = pqNodes;
- if (nodes == null) {
- nodes = saveNodes; /* restore ptr to free upon return */
- return Integer.MAX_VALUE;
- }
-
-// pq->handles = (PQhandleElem *)memRealloc( pq->handles,(size_t)((pq->max + 1) * sizeof( pq->handles[0] )));
- PriorityQ.PQhandleElem[] pqHandles = new PriorityQ.PQhandleElem[max + 1];
- System.arraycopy( handles, 0, pqHandles, 0, handles.length );
- for (int i = handles.length; i < pqHandles.length; i++) {
- pqHandles[i] = new PQhandleElem();
- }
- handles = pqHandles;
- if (handles == null) {
- handles = saveHandles; /* restore ptr to free upon return */
- return Integer.MAX_VALUE;
- }
- }
-
- if (freeList == 0) {
- free = curr;
- } else {
- free = freeList;
- freeList = handles[free].node;
- }
-
- nodes[curr].handle = free;
- handles[free].node = curr;
- handles[free].key = keyNew;
-
- if (initialized) {
- FloatUp(curr);
- }
- assert (free != Integer.MAX_VALUE);
- return free;
- }
-
-/* really __gl_pqHeapExtractMin */
- Object pqExtractMin() {
- com.sun.opengl.impl.tessellator.PriorityQ.PQnode[] n = nodes;
- com.sun.opengl.impl.tessellator.PriorityQ.PQhandleElem[] h = handles;
- int hMin = n[1].handle;
- Object min = h[hMin].key;
-
- if (size > 0) {
- n[1].handle = n[size].handle;
- h[n[1].handle].node = 1;
-
- h[hMin].key = null;
- h[hMin].node = freeList;
- freeList = hMin;
-
- if (--size > 0) {
- FloatDown(1);
- }
- }
- return min;
- }
-
-/* really __gl_pqHeapDelete */
- void pqDelete(int hCurr) {
- com.sun.opengl.impl.tessellator.PriorityQ.PQnode[] n = nodes;
- com.sun.opengl.impl.tessellator.PriorityQ.PQhandleElem[] h = handles;
- int curr;
-
- assert (hCurr >= 1 && hCurr <= max && h[hCurr].key != null);
-
- curr = h[hCurr].node;
- n[curr].handle = n[size].handle;
- h[n[curr].handle].node = curr;
-
- if (curr <= --size) {
- if (curr <= 1 || LEQ(leq, h[n[curr >> 1].handle].key, h[n[curr].handle].key)) {
- FloatDown(curr);
- } else {
- FloatUp(curr);
- }
- }
- h[hCurr].key = null;
- h[hCurr].node = freeList;
- freeList = hCurr;
- }
-
- Object pqMinimum() {
- return handles[nodes[1].handle].key;
- }
-
- boolean pqIsEmpty() {
- return size == 0;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/PriorityQSort.java b/src/classes/com/sun/opengl/impl/tessellator/PriorityQSort.java
deleted file mode 100644
index 200c88c67..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/PriorityQSort.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-
-
-class PriorityQSort extends com.sun.opengl.impl.tessellator.PriorityQ {
- com.sun.opengl.impl.tessellator.PriorityQHeap heap;
- Object[] keys;
-
- // JAVA: 'order' contains indices into the keys array.
- // This simulates the indirect pointers used in the original C code
- // (from Frank Suykens, Luciad.com).
- int[] order;
- int size, max;
- boolean initialized;
- com.sun.opengl.impl.tessellator.PriorityQ.Leq leq;
-
- public PriorityQSort(com.sun.opengl.impl.tessellator.PriorityQ.Leq leq) {
- heap = new com.sun.opengl.impl.tessellator.PriorityQHeap(leq);
-
- keys = new Object[com.sun.opengl.impl.tessellator.PriorityQ.INIT_SIZE];
-
- size = 0;
- max = com.sun.opengl.impl.tessellator.PriorityQ.INIT_SIZE;
- initialized = false;
- this.leq = leq;
- }
-
-/* really __gl_pqSortDeletePriorityQ */
- void pqDeletePriorityQ() {
- if (heap != null) heap.pqDeletePriorityQ();
- order = null;
- keys = null;
- }
-
- private static boolean LT(com.sun.opengl.impl.tessellator.PriorityQ.Leq leq, Object x, Object y) {
- return (!com.sun.opengl.impl.tessellator.PriorityQHeap.LEQ(leq, y, x));
- }
-
- private static boolean GT(com.sun.opengl.impl.tessellator.PriorityQ.Leq leq, Object x, Object y) {
- return (!com.sun.opengl.impl.tessellator.PriorityQHeap.LEQ(leq, x, y));
- }
-
- private static void Swap(int[] array, int a, int b) {
- if (true) {
- int tmp = array[a];
- array[a] = array[b];
- array[b] = tmp;
- } else {
-
- }
- }
-
- private static class Stack {
- int p, r;
- }
-
-/* really __gl_pqSortInit */
- boolean pqInit() {
- int p, r, i, j;
- int piv;
- Stack[] stack = new Stack[50];
- for (int k = 0; k < stack.length; k++) {
- stack[k] = new Stack();
- }
- int top = 0;
-
- int seed = 2016473283;
-
- /* Create an array of indirect pointers to the keys, so that we
- * the handles we have returned are still valid.
- */
- order = new int[size + 1];
-/* the previous line is a patch to compensate for the fact that IBM */
-/* machines return a null on a malloc of zero bytes (unlike SGI), */
-/* so we have to put in this defense to guard against a memory */
-/* fault four lines down. from [email protected]. */
- p = 0;
- r = size - 1;
- for (piv = 0, i = p; i <= r; ++piv, ++i) {
- // indirect pointers: keep an index into the keys array, not a direct pointer to its contents
- order[i] = piv;
- }
-
- /* Sort the indirect pointers in descending order,
- * using randomized Quicksort
- */
- stack[top].p = p;
- stack[top].r = r;
- ++top;
- while (--top >= 0) {
- p = stack[top].p;
- r = stack[top].r;
- while (r > p + 10) {
- seed = Math.abs( seed * 1539415821 + 1 );
- i = p + seed % (r - p + 1);
- piv = order[i];
- order[i] = order[p];
- order[p] = piv;
- i = p - 1;
- j = r + 1;
- do {
- do {
- ++i;
- } while (GT(leq, keys[order[i]], keys[piv]));
- do {
- --j;
- } while (LT(leq, keys[order[j]], keys[piv]));
- Swap(order, i, j);
- } while (i < j);
- Swap(order, i, j); /* Undo last swap */
- if (i - p < r - j) {
- stack[top].p = j + 1;
- stack[top].r = r;
- ++top;
- r = i - 1;
- } else {
- stack[top].p = p;
- stack[top].r = i - 1;
- ++top;
- p = j + 1;
- }
- }
- /* Insertion sort small lists */
- for (i = p + 1; i <= r; ++i) {
- piv = order[i];
- for (j = i; j > p && LT(leq, keys[order[j - 1]], keys[piv]); --j) {
- order[j] = order[j - 1];
- }
- order[j] = piv;
- }
- }
- max = size;
- initialized = true;
- heap.pqInit(); /* always succeeds */
-
-/* #ifndef NDEBUG
- p = order;
- r = p + size - 1;
- for (i = p; i < r; ++i) {
- Assertion.doAssert(LEQ( * * (i + 1), **i ));
- }
- #endif*/
-
- return true;
- }
-
-/* really __gl_pqSortInsert */
-/* returns LONG_MAX iff out of memory */
- int pqInsert(Object keyNew) {
- int curr;
-
- if (initialized) {
- return heap.pqInsert(keyNew);
- }
- curr = size;
- if (++size >= max) {
- Object[] saveKey = keys;
-
- /* If the heap overflows, double its size. */
- max <<= 1;
-// pq->keys = (PQHeapKey *)memRealloc( pq->keys,(size_t)(pq->max * sizeof( pq->keys[0] )));
- Object[] pqKeys = new Object[max];
- System.arraycopy( keys, 0, pqKeys, 0, keys.length );
- keys = pqKeys;
- if (keys == null) {
- keys = saveKey; /* restore ptr to free upon return */
- return Integer.MAX_VALUE;
- }
- }
- assert curr != Integer.MAX_VALUE;
- keys[curr] = keyNew;
-
- /* Negative handles index the sorted array. */
- return -(curr + 1);
- }
-
-/* really __gl_pqSortExtractMin */
- Object pqExtractMin() {
- Object sortMin, heapMin;
-
- if (size == 0) {
- return heap.pqExtractMin();
- }
- sortMin = keys[order[size - 1]];
- if (!heap.pqIsEmpty()) {
- heapMin = heap.pqMinimum();
- if (LEQ(leq, heapMin, sortMin)) {
- return heap.pqExtractMin();
- }
- }
- do {
- --size;
- } while (size > 0 && keys[order[size - 1]] == null);
- return sortMin;
- }
-
-/* really __gl_pqSortMinimum */
- Object pqMinimum() {
- Object sortMin, heapMin;
-
- if (size == 0) {
- return heap.pqMinimum();
- }
- sortMin = keys[order[size - 1]];
- if (!heap.pqIsEmpty()) {
- heapMin = heap.pqMinimum();
- if (com.sun.opengl.impl.tessellator.PriorityQHeap.LEQ(leq, heapMin, sortMin)) {
- return heapMin;
- }
- }
- return sortMin;
- }
-
-/* really __gl_pqSortIsEmpty */
- boolean pqIsEmpty() {
- return (size == 0) && heap.pqIsEmpty();
- }
-
-/* really __gl_pqSortDelete */
- void pqDelete(int curr) {
- if (curr >= 0) {
- heap.pqDelete(curr);
- return;
- }
- curr = -(curr + 1);
- assert curr < max && keys[curr] != null;
-
- keys[curr] = null;
- while (size > 0 && keys[order[size - 1]] == null) {
- --size;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/Render.java b/src/classes/com/sun/opengl/impl/tessellator/Render.java
deleted file mode 100644
index 17d602e42..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/Render.java
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-class Render {
- private static final boolean USE_OPTIMIZED_CODE_PATH = false;
-
- private Render() {
- }
-
- private static final RenderFan renderFan = new RenderFan();
- private static final RenderStrip renderStrip = new RenderStrip();
- private static final RenderTriangle renderTriangle = new RenderTriangle();
-
-/* This structure remembers the information we need about a primitive
- * to be able to render it later, once we have determined which
- * primitive is able to use the most triangles.
- */
- private static class FaceCount {
- public FaceCount() {
- }
-
- public FaceCount(long size, com.sun.opengl.impl.tessellator.GLUhalfEdge eStart, renderCallBack render) {
- this.size = size;
- this.eStart = eStart;
- this.render = render;
- }
-
- long size; /* number of triangles used */
- com.sun.opengl.impl.tessellator.GLUhalfEdge eStart; /* edge where this primitive starts */
- renderCallBack render;
- };
-
- private static interface renderCallBack {
- void render(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUhalfEdge e, long size);
- }
-
- /************************ Strips and Fans decomposition ******************/
-
-/* __gl_renderMesh( tess, mesh ) takes a mesh and breaks it into triangle
- * fans, strips, and separate triangles. A substantial effort is made
- * to use as few rendering primitives as possible (ie. to make the fans
- * and strips as large as possible).
- *
- * The rendering output is provided as callbacks (see the api).
- */
- public static void __gl_renderMesh(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUmesh mesh) {
- com.sun.opengl.impl.tessellator.GLUface f;
-
- /* Make a list of separate triangles so we can render them all at once */
- tess.lonelyTriList = null;
-
- for (f = mesh.fHead.next; f != mesh.fHead; f = f.next) {
- f.marked = false;
- }
- for (f = mesh.fHead.next; f != mesh.fHead; f = f.next) {
-
- /* We examine all faces in an arbitrary order. Whenever we find
- * an unprocessed face F, we output a group of faces including F
- * whose size is maximum.
- */
- if (f.inside && !f.marked) {
- RenderMaximumFaceGroup(tess, f);
- assert (f.marked);
- }
- }
- if (tess.lonelyTriList != null) {
- RenderLonelyTriangles(tess, tess.lonelyTriList);
- tess.lonelyTriList = null;
- }
- }
-
-
- static void RenderMaximumFaceGroup(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUface fOrig) {
- /* We want to find the largest triangle fan or strip of unmarked faces
- * which includes the given face fOrig. There are 3 possible fans
- * passing through fOrig (one centered at each vertex), and 3 possible
- * strips (one for each CCW permutation of the vertices). Our strategy
- * is to try all of these, and take the primitive which uses the most
- * triangles (a greedy approach).
- */
- com.sun.opengl.impl.tessellator.GLUhalfEdge e = fOrig.anEdge;
- FaceCount max = new FaceCount();
- FaceCount newFace = new FaceCount();
-
- max.size = 1;
- max.eStart = e;
- max.render = renderTriangle;
-
- if (!tess.flagBoundary) {
- newFace = MaximumFan(e);
- if (newFace.size > max.size) {
- max = newFace;
- }
- newFace = MaximumFan(e.Lnext);
- if (newFace.size > max.size) {
- max = newFace;
- }
- newFace = MaximumFan(e.Onext.Sym);
- if (newFace.size > max.size) {
- max = newFace;
- }
-
- newFace = MaximumStrip(e);
- if (newFace.size > max.size) {
- max = newFace;
- }
- newFace = MaximumStrip(e.Lnext);
- if (newFace.size > max.size) {
- max = newFace;
- }
- newFace = MaximumStrip(e.Onext.Sym);
- if (newFace.size > max.size) {
- max = newFace;
- }
- }
- max.render.render(tess, max.eStart, max.size);
- }
-
-
-/* Macros which keep track of faces we have marked temporarily, and allow
- * us to backtrack when necessary. With triangle fans, this is not
- * really necessary, since the only awkward case is a loop of triangles
- * around a single origin vertex. However with strips the situation is
- * more complicated, and we need a general tracking method like the
- * one here.
- */
- private static boolean Marked(com.sun.opengl.impl.tessellator.GLUface f) {
- return !f.inside || f.marked;
- }
-
- private static GLUface AddToTrail(com.sun.opengl.impl.tessellator.GLUface f, com.sun.opengl.impl.tessellator.GLUface t) {
- f.trail = t;
- f.marked = true;
- return f;
- }
-
- private static void FreeTrail(com.sun.opengl.impl.tessellator.GLUface t) {
- if (true) {
- while (t != null) {
- t.marked = false;
- t = t.trail;
- }
- } else {
- /* absorb trailing semicolon */
- }
- }
-
- static FaceCount MaximumFan(com.sun.opengl.impl.tessellator.GLUhalfEdge eOrig) {
- /* eOrig.Lface is the face we want to render. We want to find the size
- * of a maximal fan around eOrig.Org. To do this we just walk around
- * the origin vertex as far as possible in both directions.
- */
- FaceCount newFace = new FaceCount(0, null, renderFan);
- com.sun.opengl.impl.tessellator.GLUface trail = null;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
-
- for (e = eOrig; !Marked(e.Lface); e = e.Onext) {
- trail = AddToTrail(e.Lface, trail);
- ++newFace.size;
- }
- for (e = eOrig; !Marked(e.Sym.Lface); e = e.Sym.Lnext) {
- trail = AddToTrail(e.Sym.Lface, trail);
- ++newFace.size;
- }
- newFace.eStart = e;
- /*LINTED*/
- FreeTrail(trail);
- return newFace;
- }
-
-
- private static boolean IsEven(long n) {
- return (n & 0x1L) == 0;
- }
-
- static FaceCount MaximumStrip(com.sun.opengl.impl.tessellator.GLUhalfEdge eOrig) {
- /* Here we are looking for a maximal strip that contains the vertices
- * eOrig.Org, eOrig.Dst, eOrig.Lnext.Dst (in that order or the
- * reverse, such that all triangles are oriented CCW).
- *
- * Again we walk forward and backward as far as possible. However for
- * strips there is a twist: to get CCW orientations, there must be
- * an *even* number of triangles in the strip on one side of eOrig.
- * We walk the strip starting on a side with an even number of triangles;
- * if both side have an odd number, we are forced to shorten one side.
- */
- FaceCount newFace = new FaceCount(0, null, renderStrip);
- long headSize = 0, tailSize = 0;
- com.sun.opengl.impl.tessellator.GLUface trail = null;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e, eTail, eHead;
-
- for (e = eOrig; !Marked(e.Lface); ++tailSize, e = e.Onext) {
- trail = AddToTrail(e.Lface, trail);
- ++tailSize;
- e = e.Lnext.Sym;
- if (Marked(e.Lface)) break;
- trail = AddToTrail(e.Lface, trail);
- }
- eTail = e;
-
- for (e = eOrig; !Marked(e.Sym.Lface); ++headSize, e = e.Sym.Onext.Sym) {
- trail = AddToTrail(e.Sym.Lface, trail);
- ++headSize;
- e = e.Sym.Lnext;
- if (Marked(e.Sym.Lface)) break;
- trail = AddToTrail(e.Sym.Lface, trail);
- }
- eHead = e;
-
- newFace.size = tailSize + headSize;
- if (IsEven(tailSize)) {
- newFace.eStart = eTail.Sym;
- } else if (IsEven(headSize)) {
- newFace.eStart = eHead;
- } else {
- /* Both sides have odd length, we must shorten one of them. In fact,
- * we must start from eHead to guarantee inclusion of eOrig.Lface.
- */
- --newFace.size;
- newFace.eStart = eHead.Onext;
- }
- /*LINTED*/
- FreeTrail(trail);
- return newFace;
- }
-
- private static class RenderTriangle implements renderCallBack {
- public void render(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUhalfEdge e, long size) {
- /* Just add the triangle to a triangle list, so we can render all
- * the separate triangles at once.
- */
- assert (size == 1);
- tess.lonelyTriList = AddToTrail(e.Lface, tess.lonelyTriList);
- }
- }
-
-
- static void RenderLonelyTriangles(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUface f) {
- /* Now we render all the separate triangles which could not be
- * grouped into a triangle fan or strip.
- */
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
- int newState;
- int edgeState = -1; /* force edge state output for first vertex */
-
- tess.callBeginOrBeginData(GL.GL_TRIANGLES);
-
- for (; f != null; f = f.trail) {
- /* Loop once for each edge (there will always be 3 edges) */
-
- e = f.anEdge;
- do {
- if (tess.flagBoundary) {
- /* Set the "edge state" to true just before we output the
- * first vertex of each edge on the polygon boundary.
- */
- newState = (!e.Sym.Lface.inside) ? 1 : 0;
- if (edgeState != newState) {
- edgeState = newState;
- tess.callEdgeFlagOrEdgeFlagData( edgeState != 0);
- }
- }
- tess.callVertexOrVertexData( e.Org.data);
-
- e = e.Lnext;
- } while (e != f.anEdge);
- }
- tess.callEndOrEndData();
- }
-
- private static class RenderFan implements renderCallBack {
- public void render(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUhalfEdge e, long size) {
- /* Render as many CCW triangles as possible in a fan starting from
- * edge "e". The fan *should* contain exactly "size" triangles
- * (otherwise we've goofed up somewhere).
- */
- tess.callBeginOrBeginData( GL.GL_TRIANGLE_FAN);
- tess.callVertexOrVertexData( e.Org.data);
- tess.callVertexOrVertexData( e.Sym.Org.data);
-
- while (!Marked(e.Lface)) {
- e.Lface.marked = true;
- --size;
- e = e.Onext;
- tess.callVertexOrVertexData( e.Sym.Org.data);
- }
-
- assert (size == 0);
- tess.callEndOrEndData();
- }
- }
-
- private static class RenderStrip implements renderCallBack {
- public void render(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUhalfEdge e, long size) {
- /* Render as many CCW triangles as possible in a strip starting from
- * edge "e". The strip *should* contain exactly "size" triangles
- * (otherwise we've goofed up somewhere).
- */
- tess.callBeginOrBeginData( GL.GL_TRIANGLE_STRIP);
- tess.callVertexOrVertexData( e.Org.data);
- tess.callVertexOrVertexData( e.Sym.Org.data);
-
- while (!Marked(e.Lface)) {
- e.Lface.marked = true;
- --size;
- e = e.Lnext.Sym;
- tess.callVertexOrVertexData( e.Org.data);
- if (Marked(e.Lface)) break;
-
- e.Lface.marked = true;
- --size;
- e = e.Onext;
- tess.callVertexOrVertexData( e.Sym.Org.data);
- }
-
- assert (size == 0);
- tess.callEndOrEndData();
- }
- }
-
- /************************ Boundary contour decomposition ******************/
-
-/* __gl_renderBoundary( tess, mesh ) takes a mesh, and outputs one
- * contour for each face marked "inside". The rendering output is
- * provided as callbacks (see the api).
- */
- public static void __gl_renderBoundary(GLUtessellatorImpl tess, com.sun.opengl.impl.tessellator.GLUmesh mesh) {
- com.sun.opengl.impl.tessellator.GLUface f;
- com.sun.opengl.impl.tessellator.GLUhalfEdge e;
-
- for (f = mesh.fHead.next; f != mesh.fHead; f = f.next) {
- if (f.inside) {
- tess.callBeginOrBeginData( GL.GL_LINE_LOOP);
- e = f.anEdge;
- do {
- tess.callVertexOrVertexData( e.Org.data);
- e = e.Lnext;
- } while (e != f.anEdge);
- tess.callEndOrEndData();
- }
- }
- }
-
-
- /************************ Quick-and-dirty decomposition ******************/
-
- private static final int SIGN_INCONSISTENT = 2;
-
- static int ComputeNormal(GLUtessellatorImpl tess, double[] norm, boolean check)
-/*
- * If check==false, we compute the polygon normal and place it in norm[].
- * If check==true, we check that each triangle in the fan from v0 has a
- * consistent orientation with respect to norm[]. If triangles are
- * consistently oriented CCW, return 1; if CW, return -1; if all triangles
- * are degenerate return 0; otherwise (no consistent orientation) return
- * SIGN_INCONSISTENT.
- */ {
- com.sun.opengl.impl.tessellator.CachedVertex[] v = tess.cache;
-// CachedVertex vn = v0 + tess.cacheCount;
- int vn = tess.cacheCount;
-// CachedVertex vc;
- int vc;
- double dot, xc, yc, zc, xp, yp, zp;
- double[] n = new double[3];
- int sign = 0;
-
- /* Find the polygon normal. It is important to get a reasonable
- * normal even when the polygon is self-intersecting (eg. a bowtie).
- * Otherwise, the computed normal could be very tiny, but perpendicular
- * to the true plane of the polygon due to numerical noise. Then all
- * the triangles would appear to be degenerate and we would incorrectly
- * decompose the polygon as a fan (or simply not render it at all).
- *
- * We use a sum-of-triangles normal algorithm rather than the more
- * efficient sum-of-trapezoids method (used in CheckOrientation()
- * in normal.c). This lets us explicitly reverse the signed area
- * of some triangles to get a reasonable normal in the self-intersecting
- * case.
- */
- if (!check) {
- norm[0] = norm[1] = norm[2] = 0.0;
- }
-
- vc = 1;
- xc = v[vc].coords[0] - v[0].coords[0];
- yc = v[vc].coords[1] - v[0].coords[1];
- zc = v[vc].coords[2] - v[0].coords[2];
- while (++vc < vn) {
- xp = xc;
- yp = yc;
- zp = zc;
- xc = v[vc].coords[0] - v[0].coords[0];
- yc = v[vc].coords[1] - v[0].coords[1];
- zc = v[vc].coords[2] - v[0].coords[2];
-
- /* Compute (vp - v0) cross (vc - v0) */
- n[0] = yp * zc - zp * yc;
- n[1] = zp * xc - xp * zc;
- n[2] = xp * yc - yp * xc;
-
- dot = n[0] * norm[0] + n[1] * norm[1] + n[2] * norm[2];
- if (!check) {
- /* Reverse the contribution of back-facing triangles to get
- * a reasonable normal for self-intersecting polygons (see above)
- */
- if (dot >= 0) {
- norm[0] += n[0];
- norm[1] += n[1];
- norm[2] += n[2];
- } else {
- norm[0] -= n[0];
- norm[1] -= n[1];
- norm[2] -= n[2];
- }
- } else if (dot != 0) {
- /* Check the new orientation for consistency with previous triangles */
- if (dot > 0) {
- if (sign < 0) return SIGN_INCONSISTENT;
- sign = 1;
- } else {
- if (sign > 0) return SIGN_INCONSISTENT;
- sign = -1;
- }
- }
- }
- return sign;
- }
-
-/* __gl_renderCache( tess ) takes a single contour and tries to render it
- * as a triangle fan. This handles convex polygons, as well as some
- * non-convex polygons if we get lucky.
- *
- * Returns true if the polygon was successfully rendered. The rendering
- * output is provided as callbacks (see the api).
- */
- public static boolean __gl_renderCache(GLUtessellatorImpl tess) {
- com.sun.opengl.impl.tessellator.CachedVertex[] v = tess.cache;
-// CachedVertex vn = v0 + tess.cacheCount;
- int vn = tess.cacheCount;
-// CachedVertex vc;
- int vc;
- double[] norm = new double[3];
- int sign;
-
- if (tess.cacheCount < 3) {
- /* Degenerate contour -- no output */
- return true;
- }
-
- norm[0] = tess.normal[0];
- norm[1] = tess.normal[1];
- norm[2] = tess.normal[2];
- if (norm[0] == 0 && norm[1] == 0 && norm[2] == 0) {
- ComputeNormal( tess, norm, false);
- }
-
- sign = ComputeNormal( tess, norm, true);
- if (sign == SIGN_INCONSISTENT) {
- /* Fan triangles did not have a consistent orientation */
- return false;
- }
- if (sign == 0) {
- /* All triangles were degenerate */
- return true;
- }
-
- if ( !USE_OPTIMIZED_CODE_PATH ) {
- return false;
- } else {
- /* Make sure we do the right thing for each winding rule */
- switch (tess.windingRule) {
- case GLU.GLU_TESS_WINDING_ODD:
- case GLU.GLU_TESS_WINDING_NONZERO:
- break;
- case GLU.GLU_TESS_WINDING_POSITIVE:
- if (sign < 0) return true;
- break;
- case GLU.GLU_TESS_WINDING_NEGATIVE:
- if (sign > 0) return true;
- break;
- case GLU.GLU_TESS_WINDING_ABS_GEQ_TWO:
- return true;
- }
-
- tess.callBeginOrBeginData( tess.boundaryOnly ? GL.GL_LINE_LOOP
- : (tess.cacheCount > 3) ? GL.GL_TRIANGLE_FAN
- : GL.GL_TRIANGLES);
-
- tess.callVertexOrVertexData( v[0].data);
- if (sign > 0) {
- for (vc = 1; vc < vn; ++vc) {
- tess.callVertexOrVertexData( v[vc].data);
- }
- } else {
- for (vc = vn - 1; vc > 0; --vc) {
- tess.callVertexOrVertexData( v[vc].data);
- }
- }
- tess.callEndOrEndData();
- return true;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/Sweep.java b/src/classes/com/sun/opengl/impl/tessellator/Sweep.java
deleted file mode 100644
index dee53552a..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/Sweep.java
+++ /dev/null
@@ -1,1353 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-class Sweep {
- private Sweep() {
- }
-
-// #ifdef FOR_TRITE_TEST_PROGRAM
-// extern void DebugEvent( GLUtessellator *tess );
-// #else
- private static void DebugEvent(GLUtessellatorImpl tess) {
-
- }
-// #endif
-
-/*
- * Invariants for the Edge Dictionary.
- * - each pair of adjacent edges e2=Succ(e1) satisfies EdgeLeq(e1,e2)
- * at any valid location of the sweep event
- * - if EdgeLeq(e2,e1) as well (at any valid sweep event), then e1 and e2
- * share a common endpoint
- * - for each e, e.Dst has been processed, but not e.Org
- * - each edge e satisfies VertLeq(e.Dst,event) && VertLeq(event,e.Org)
- * where "event" is the current sweep line event.
- * - no edge e has zero length
- *
- * Invariants for the Mesh (the processed portion).
- * - the portion of the mesh left of the sweep line is a planar graph,
- * ie. there is *some* way to embed it in the plane
- * - no processed edge has zero length
- * - no two processed vertices have identical coordinates
- * - each "inside" region is monotone, ie. can be broken into two chains
- * of monotonically increasing vertices according to VertLeq(v1,v2)
- * - a non-invariant: these chains may intersect (very slightly)
- *
- * Invariants for the Sweep.
- * - if none of the edges incident to the event vertex have an activeRegion
- * (ie. none of these edges are in the edge dictionary), then the vertex
- * has only right-going edges.
- * - if an edge is marked "fixUpperEdge" (it is a temporary edge introduced
- * by ConnectRightVertex), then it is the only right-going edge from
- * its associated vertex. (This says that these edges exist only
- * when it is necessary.)
- */
-
-/* When we merge two edges into one, we need to compute the combined
- * winding of the new edge.
- */
- private static void AddWinding(GLUhalfEdge eDst, GLUhalfEdge eSrc) {
- eDst.winding += eSrc.winding;
- eDst.Sym.winding += eSrc.Sym.winding;
- }
-
-
- private static ActiveRegion RegionBelow(ActiveRegion r) {
- return ((ActiveRegion) Dict.dictKey(Dict.dictPred(r.nodeUp)));
- }
-
- private static ActiveRegion RegionAbove(ActiveRegion r) {
- return ((ActiveRegion) Dict.dictKey(Dict.dictSucc(r.nodeUp)));
- }
-
- static boolean EdgeLeq(GLUtessellatorImpl tess, ActiveRegion reg1, ActiveRegion reg2)
-/*
- * Both edges must be directed from right to left (this is the canonical
- * direction for the upper edge of each region).
- *
- * The strategy is to evaluate a "t" value for each edge at the
- * current sweep line position, given by tess.event. The calculations
- * are designed to be very stable, but of course they are not perfect.
- *
- * Special case: if both edge destinations are at the sweep event,
- * we sort the edges by slope (they would otherwise compare equally).
- */ {
- GLUvertex event = tess.event;
- GLUhalfEdge e1, e2;
- double t1, t2;
-
- e1 = reg1.eUp;
- e2 = reg2.eUp;
-
- if (e1.Sym.Org == event) {
- if (e2.Sym.Org == event) {
- /* Two edges right of the sweep line which meet at the sweep event.
- * Sort them by slope.
- */
- if (Geom.VertLeq(e1.Org, e2.Org)) {
- return Geom.EdgeSign(e2.Sym.Org, e1.Org, e2.Org) <= 0;
- }
- return Geom.EdgeSign(e1.Sym.Org, e2.Org, e1.Org) >= 0;
- }
- return Geom.EdgeSign(e2.Sym.Org, event, e2.Org) <= 0;
- }
- if (e2.Sym.Org == event) {
- return Geom.EdgeSign(e1.Sym.Org, event, e1.Org) >= 0;
- }
-
- /* General case - compute signed distance *from* e1, e2 to event */
- t1 = Geom.EdgeEval(e1.Sym.Org, event, e1.Org);
- t2 = Geom.EdgeEval(e2.Sym.Org, event, e2.Org);
- return (t1 >= t2);
- }
-
-
- static void DeleteRegion(GLUtessellatorImpl tess, ActiveRegion reg) {
- if (reg.fixUpperEdge) {
- /* It was created with zero winding number, so it better be
- * deleted with zero winding number (ie. it better not get merged
- * with a real edge).
- */
- assert (reg.eUp.winding == 0);
- }
- reg.eUp.activeRegion = null;
- Dict.dictDelete(tess.dict, reg.nodeUp); /* __gl_dictListDelete */
- }
-
-
- static boolean FixUpperEdge(ActiveRegion reg, GLUhalfEdge newEdge)
-/*
- * Replace an upper edge which needs fixing (see ConnectRightVertex).
- */ {
- assert (reg.fixUpperEdge);
- if (!Mesh.__gl_meshDelete(reg.eUp)) return false;
- reg.fixUpperEdge = false;
- reg.eUp = newEdge;
- newEdge.activeRegion = reg;
-
- return true;
- }
-
- static ActiveRegion TopLeftRegion(ActiveRegion reg) {
- GLUvertex org = reg.eUp.Org;
- GLUhalfEdge e;
-
- /* Find the region above the uppermost edge with the same origin */
- do {
- reg = RegionAbove(reg);
- } while (reg.eUp.Org == org);
-
- /* If the edge above was a temporary edge introduced by ConnectRightVertex,
- * now is the time to fix it.
- */
- if (reg.fixUpperEdge) {
- e = Mesh.__gl_meshConnect(RegionBelow(reg).eUp.Sym, reg.eUp.Lnext);
- if (e == null) return null;
- if (!FixUpperEdge(reg, e)) return null;
- reg = RegionAbove(reg);
- }
- return reg;
- }
-
- static ActiveRegion TopRightRegion(ActiveRegion reg) {
- GLUvertex dst = reg.eUp.Sym.Org;
-
- /* Find the region above the uppermost edge with the same destination */
- do {
- reg = RegionAbove(reg);
- } while (reg.eUp.Sym.Org == dst);
- return reg;
- }
-
- static ActiveRegion AddRegionBelow(GLUtessellatorImpl tess,
- ActiveRegion regAbove,
- GLUhalfEdge eNewUp)
-/*
- * Add a new active region to the sweep line, *somewhere* below "regAbove"
- * (according to where the new edge belongs in the sweep-line dictionary).
- * The upper edge of the new region will be "eNewUp".
- * Winding number and "inside" flag are not updated.
- */ {
- ActiveRegion regNew = new ActiveRegion();
- if (regNew == null) throw new RuntimeException();
-
- regNew.eUp = eNewUp;
- /* __gl_dictListInsertBefore */
- regNew.nodeUp = Dict.dictInsertBefore(tess.dict, regAbove.nodeUp, regNew);
- if (regNew.nodeUp == null) throw new RuntimeException();
- regNew.fixUpperEdge = false;
- regNew.sentinel = false;
- regNew.dirty = false;
-
- eNewUp.activeRegion = regNew;
- return regNew;
- }
-
- static boolean IsWindingInside(GLUtessellatorImpl tess, int n) {
- switch (tess.windingRule) {
- case GLU.GLU_TESS_WINDING_ODD:
- return (n & 1) != 0;
- case GLU.GLU_TESS_WINDING_NONZERO:
- return (n != 0);
- case GLU.GLU_TESS_WINDING_POSITIVE:
- return (n > 0);
- case GLU.GLU_TESS_WINDING_NEGATIVE:
- return (n < 0);
- case GLU.GLU_TESS_WINDING_ABS_GEQ_TWO:
- return (n >= 2) || (n <= -2);
- }
- /*LINTED*/
-// assert (false);
- throw new InternalError();
- /*NOTREACHED*/
- }
-
-
- static void ComputeWinding(GLUtessellatorImpl tess, ActiveRegion reg) {
- reg.windingNumber = RegionAbove(reg).windingNumber + reg.eUp.winding;
- reg.inside = IsWindingInside(tess, reg.windingNumber);
- }
-
-
- static void FinishRegion(GLUtessellatorImpl tess, ActiveRegion reg)
-/*
- * Delete a region from the sweep line. This happens when the upper
- * and lower chains of a region meet (at a vertex on the sweep line).
- * The "inside" flag is copied to the appropriate mesh face (we could
- * not do this before -- since the structure of the mesh is always
- * changing, this face may not have even existed until now).
- */ {
- GLUhalfEdge e = reg.eUp;
- GLUface f = e.Lface;
-
- f.inside = reg.inside;
- f.anEdge = e; /* optimization for __gl_meshTessellateMonoRegion() */
- DeleteRegion(tess, reg);
- }
-
-
- static GLUhalfEdge FinishLeftRegions(GLUtessellatorImpl tess,
- ActiveRegion regFirst, ActiveRegion regLast)
-/*
- * We are given a vertex with one or more left-going edges. All affected
- * edges should be in the edge dictionary. Starting at regFirst.eUp,
- * we walk down deleting all regions where both edges have the same
- * origin vOrg. At the same time we copy the "inside" flag from the
- * active region to the face, since at this point each face will belong
- * to at most one region (this was not necessarily true until this point
- * in the sweep). The walk stops at the region above regLast; if regLast
- * is null we walk as far as possible. At the same time we relink the
- * mesh if necessary, so that the ordering of edges around vOrg is the
- * same as in the dictionary.
- */ {
- ActiveRegion reg, regPrev;
- GLUhalfEdge e, ePrev;
-
- regPrev = regFirst;
- ePrev = regFirst.eUp;
- while (regPrev != regLast) {
- regPrev.fixUpperEdge = false; /* placement was OK */
- reg = RegionBelow(regPrev);
- e = reg.eUp;
- if (e.Org != ePrev.Org) {
- if (!reg.fixUpperEdge) {
- /* Remove the last left-going edge. Even though there are no further
- * edges in the dictionary with this origin, there may be further
- * such edges in the mesh (if we are adding left edges to a vertex
- * that has already been processed). Thus it is important to call
- * FinishRegion rather than just DeleteRegion.
- */
- FinishRegion(tess, regPrev);
- break;
- }
- /* If the edge below was a temporary edge introduced by
- * ConnectRightVertex, now is the time to fix it.
- */
- e = Mesh.__gl_meshConnect(ePrev.Onext.Sym, e.Sym);
- if (e == null) throw new RuntimeException();
- if (!FixUpperEdge(reg, e)) throw new RuntimeException();
- }
-
- /* Relink edges so that ePrev.Onext == e */
- if (ePrev.Onext != e) {
- if (!Mesh.__gl_meshSplice(e.Sym.Lnext, e)) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(ePrev, e)) throw new RuntimeException();
- }
- FinishRegion(tess, regPrev); /* may change reg.eUp */
- ePrev = reg.eUp;
- regPrev = reg;
- }
- return ePrev;
- }
-
-
- static void AddRightEdges(GLUtessellatorImpl tess, ActiveRegion regUp,
- GLUhalfEdge eFirst, GLUhalfEdge eLast, GLUhalfEdge eTopLeft,
- boolean cleanUp)
-/*
- * Purpose: insert right-going edges into the edge dictionary, and update
- * winding numbers and mesh connectivity appropriately. All right-going
- * edges share a common origin vOrg. Edges are inserted CCW starting at
- * eFirst; the last edge inserted is eLast.Sym.Lnext. If vOrg has any
- * left-going edges already processed, then eTopLeft must be the edge
- * such that an imaginary upward vertical segment from vOrg would be
- * contained between eTopLeft.Sym.Lnext and eTopLeft; otherwise eTopLeft
- * should be null.
- */ {
- ActiveRegion reg, regPrev;
- GLUhalfEdge e, ePrev;
- boolean firstTime = true;
-
- /* Insert the new right-going edges in the dictionary */
- e = eFirst;
- do {
- assert (Geom.VertLeq(e.Org, e.Sym.Org));
- AddRegionBelow(tess, regUp, e.Sym);
- e = e.Onext;
- } while (e != eLast);
-
- /* Walk *all* right-going edges from e.Org, in the dictionary order,
- * updating the winding numbers of each region, and re-linking the mesh
- * edges to match the dictionary ordering (if necessary).
- */
- if (eTopLeft == null) {
- eTopLeft = RegionBelow(regUp).eUp.Sym.Onext;
- }
- regPrev = regUp;
- ePrev = eTopLeft;
- for (; ;) {
- reg = RegionBelow(regPrev);
- e = reg.eUp.Sym;
- if (e.Org != ePrev.Org) break;
-
- if (e.Onext != ePrev) {
- /* Unlink e from its current position, and relink below ePrev */
- if (!Mesh.__gl_meshSplice(e.Sym.Lnext, e)) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(ePrev.Sym.Lnext, e)) throw new RuntimeException();
- }
- /* Compute the winding number and "inside" flag for the new regions */
- reg.windingNumber = regPrev.windingNumber - e.winding;
- reg.inside = IsWindingInside(tess, reg.windingNumber);
-
- /* Check for two outgoing edges with same slope -- process these
- * before any intersection tests (see example in __gl_computeInterior).
- */
- regPrev.dirty = true;
- if (!firstTime && CheckForRightSplice(tess, regPrev)) {
- AddWinding(e, ePrev);
- DeleteRegion(tess, regPrev);
- if (!Mesh.__gl_meshDelete(ePrev)) throw new RuntimeException();
- }
- firstTime = false;
- regPrev = reg;
- ePrev = e;
- }
- regPrev.dirty = true;
- assert (regPrev.windingNumber - e.winding == reg.windingNumber);
-
- if (cleanUp) {
- /* Check for intersections between newly adjacent edges. */
- WalkDirtyRegions(tess, regPrev);
- }
- }
-
-
- static void CallCombine(GLUtessellatorImpl tess, GLUvertex isect,
- Object[] data, float[] weights, boolean needed) {
- double[] coords = new double[3];
-
- /* Copy coord data in case the callback changes it. */
- coords[0] = isect.coords[0];
- coords[1] = isect.coords[1];
- coords[2] = isect.coords[2];
-
- Object[] outData = new Object[1];
- tess.callCombineOrCombineData(coords, data, weights, outData);
- isect.data = outData[0];
- if (isect.data == null) {
- if (!needed) {
- isect.data = data[0];
- } else if (!tess.fatalError) {
- /* The only way fatal error is when two edges are found to intersect,
- * but the user has not provided the callback necessary to handle
- * generated intersection points.
- */
- tess.callErrorOrErrorData(GLU.GLU_TESS_NEED_COMBINE_CALLBACK);
- tess.fatalError = true;
- }
- }
- }
-
- static void SpliceMergeVertices(GLUtessellatorImpl tess, GLUhalfEdge e1,
- GLUhalfEdge e2)
-/*
- * Two vertices with idential coordinates are combined into one.
- * e1.Org is kept, while e2.Org is discarded.
- */ {
- Object[] data = new Object[4];
- float[] weights = new float[]{0.5f, 0.5f, 0.0f, 0.0f};
-
- data[0] = e1.Org.data;
- data[1] = e2.Org.data;
- CallCombine(tess, e1.Org, data, weights, false);
- if (!Mesh.__gl_meshSplice(e1, e2)) throw new RuntimeException();
- }
-
- static void VertexWeights(GLUvertex isect, GLUvertex org, GLUvertex dst,
- float[] weights)
-/*
- * Find some weights which describe how the intersection vertex is
- * a linear combination of "org" and "dest". Each of the two edges
- * which generated "isect" is allocated 50% of the weight; each edge
- * splits the weight between its org and dst according to the
- * relative distance to "isect".
- */ {
- double t1 = Geom.VertL1dist(org, isect);
- double t2 = Geom.VertL1dist(dst, isect);
-
- weights[0] = (float) (0.5 * t2 / (t1 + t2));
- weights[1] = (float) (0.5 * t1 / (t1 + t2));
- isect.coords[0] += weights[0] * org.coords[0] + weights[1] * dst.coords[0];
- isect.coords[1] += weights[0] * org.coords[1] + weights[1] * dst.coords[1];
- isect.coords[2] += weights[0] * org.coords[2] + weights[1] * dst.coords[2];
- }
-
-
- static void GetIntersectData(GLUtessellatorImpl tess, GLUvertex isect,
- GLUvertex orgUp, GLUvertex dstUp,
- GLUvertex orgLo, GLUvertex dstLo)
-/*
- * We've computed a new intersection point, now we need a "data" pointer
- * from the user so that we can refer to this new vertex in the
- * rendering callbacks.
- */ {
- Object[] data = new Object[4];
- float[] weights = new float[4];
- float[] weights1 = new float[2];
- float[] weights2 = new float[2];
-
- data[0] = orgUp.data;
- data[1] = dstUp.data;
- data[2] = orgLo.data;
- data[3] = dstLo.data;
-
- isect.coords[0] = isect.coords[1] = isect.coords[2] = 0;
- VertexWeights(isect, orgUp, dstUp, weights1);
- VertexWeights(isect, orgLo, dstLo, weights2);
- System.arraycopy(weights1, 0, weights, 0, 2);
- System.arraycopy(weights2, 0, weights, 2, 2);
-
- CallCombine(tess, isect, data, weights, true);
- }
-
- static boolean CheckForRightSplice(GLUtessellatorImpl tess, ActiveRegion regUp)
-/*
- * Check the upper and lower edge of "regUp", to make sure that the
- * eUp.Org is above eLo, or eLo.Org is below eUp (depending on which
- * origin is leftmost).
- *
- * The main purpose is to splice right-going edges with the same
- * dest vertex and nearly identical slopes (ie. we can't distinguish
- * the slopes numerically). However the splicing can also help us
- * to recover from numerical errors. For example, suppose at one
- * point we checked eUp and eLo, and decided that eUp.Org is barely
- * above eLo. Then later, we split eLo into two edges (eg. from
- * a splice operation like this one). This can change the result of
- * our test so that now eUp.Org is incident to eLo, or barely below it.
- * We must correct this condition to maintain the dictionary invariants.
- *
- * One possibility is to check these edges for intersection again
- * (ie. CheckForIntersect). This is what we do if possible. However
- * CheckForIntersect requires that tess.event lies between eUp and eLo,
- * so that it has something to fall back on when the intersection
- * calculation gives us an unusable answer. So, for those cases where
- * we can't check for intersection, this routine fixes the problem
- * by just splicing the offending vertex into the other edge.
- * This is a guaranteed solution, no matter how degenerate things get.
- * Basically this is a combinatorial solution to a numerical problem.
- */ {
- ActiveRegion regLo = RegionBelow(regUp);
- GLUhalfEdge eUp = regUp.eUp;
- GLUhalfEdge eLo = regLo.eUp;
-
- if (Geom.VertLeq(eUp.Org, eLo.Org)) {
- if (Geom.EdgeSign(eLo.Sym.Org, eUp.Org, eLo.Org) > 0) return false;
-
- /* eUp.Org appears to be below eLo */
- if (!Geom.VertEq(eUp.Org, eLo.Org)) {
- /* Splice eUp.Org into eLo */
- if (Mesh.__gl_meshSplitEdge(eLo.Sym) == null) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(eUp, eLo.Sym.Lnext)) throw new RuntimeException();
- regUp.dirty = regLo.dirty = true;
-
- } else if (eUp.Org != eLo.Org) {
- /* merge the two vertices, discarding eUp.Org */
- tess.pq.pqDelete(eUp.Org.pqHandle); /* __gl_pqSortDelete */
- SpliceMergeVertices(tess, eLo.Sym.Lnext, eUp);
- }
- } else {
- if (Geom.EdgeSign(eUp.Sym.Org, eLo.Org, eUp.Org) < 0) return false;
-
- /* eLo.Org appears to be above eUp, so splice eLo.Org into eUp */
- RegionAbove(regUp).dirty = regUp.dirty = true;
- if (Mesh.__gl_meshSplitEdge(eUp.Sym) == null) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(eLo.Sym.Lnext, eUp)) throw new RuntimeException();
- }
- return true;
- }
-
- static boolean CheckForLeftSplice(GLUtessellatorImpl tess, ActiveRegion regUp)
-/*
- * Check the upper and lower edge of "regUp", to make sure that the
- * eUp.Sym.Org is above eLo, or eLo.Sym.Org is below eUp (depending on which
- * destination is rightmost).
- *
- * Theoretically, this should always be true. However, splitting an edge
- * into two pieces can change the results of previous tests. For example,
- * suppose at one point we checked eUp and eLo, and decided that eUp.Sym.Org
- * is barely above eLo. Then later, we split eLo into two edges (eg. from
- * a splice operation like this one). This can change the result of
- * the test so that now eUp.Sym.Org is incident to eLo, or barely below it.
- * We must correct this condition to maintain the dictionary invariants
- * (otherwise new edges might get inserted in the wrong place in the
- * dictionary, and bad stuff will happen).
- *
- * We fix the problem by just splicing the offending vertex into the
- * other edge.
- */ {
- ActiveRegion regLo = RegionBelow(regUp);
- GLUhalfEdge eUp = regUp.eUp;
- GLUhalfEdge eLo = regLo.eUp;
- GLUhalfEdge e;
-
- assert (!Geom.VertEq(eUp.Sym.Org, eLo.Sym.Org));
-
- if (Geom.VertLeq(eUp.Sym.Org, eLo.Sym.Org)) {
- if (Geom.EdgeSign(eUp.Sym.Org, eLo.Sym.Org, eUp.Org) < 0) return false;
-
- /* eLo.Sym.Org is above eUp, so splice eLo.Sym.Org into eUp */
- RegionAbove(regUp).dirty = regUp.dirty = true;
- e = Mesh.__gl_meshSplitEdge(eUp);
- if (e == null) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(eLo.Sym, e)) throw new RuntimeException();
- e.Lface.inside = regUp.inside;
- } else {
- if (Geom.EdgeSign(eLo.Sym.Org, eUp.Sym.Org, eLo.Org) > 0) return false;
-
- /* eUp.Sym.Org is below eLo, so splice eUp.Sym.Org into eLo */
- regUp.dirty = regLo.dirty = true;
- e = Mesh.__gl_meshSplitEdge(eLo);
- if (e == null) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(eUp.Lnext, eLo.Sym)) throw new RuntimeException();
- e.Sym.Lface.inside = regUp.inside;
- }
- return true;
- }
-
-
- static boolean CheckForIntersect(GLUtessellatorImpl tess, ActiveRegion regUp)
-/*
- * Check the upper and lower edges of the given region to see if
- * they intersect. If so, create the intersection and add it
- * to the data structures.
- *
- * Returns true if adding the new intersection resulted in a recursive
- * call to AddRightEdges(); in this case all "dirty" regions have been
- * checked for intersections, and possibly regUp has been deleted.
- */ {
- ActiveRegion regLo = RegionBelow(regUp);
- GLUhalfEdge eUp = regUp.eUp;
- GLUhalfEdge eLo = regLo.eUp;
- GLUvertex orgUp = eUp.Org;
- GLUvertex orgLo = eLo.Org;
- GLUvertex dstUp = eUp.Sym.Org;
- GLUvertex dstLo = eLo.Sym.Org;
- double tMinUp, tMaxLo;
- GLUvertex isect = new GLUvertex();
- GLUvertex orgMin;
- GLUhalfEdge e;
-
- assert (!Geom.VertEq(dstLo, dstUp));
- assert (Geom.EdgeSign(dstUp, tess.event, orgUp) <= 0);
- assert (Geom.EdgeSign(dstLo, tess.event, orgLo) >= 0);
- assert (orgUp != tess.event && orgLo != tess.event);
- assert (!regUp.fixUpperEdge && !regLo.fixUpperEdge);
-
- if (orgUp == orgLo) return false; /* right endpoints are the same */
-
- tMinUp = Math.min(orgUp.t, dstUp.t);
- tMaxLo = Math.max(orgLo.t, dstLo.t);
- if (tMinUp > tMaxLo) return false; /* t ranges do not overlap */
-
- if (Geom.VertLeq(orgUp, orgLo)) {
- if (Geom.EdgeSign(dstLo, orgUp, orgLo) > 0) return false;
- } else {
- if (Geom.EdgeSign(dstUp, orgLo, orgUp) < 0) return false;
- }
-
- /* At this point the edges intersect, at least marginally */
- DebugEvent(tess);
-
- Geom.EdgeIntersect(dstUp, orgUp, dstLo, orgLo, isect);
- /* The following properties are guaranteed: */
- assert (Math.min(orgUp.t, dstUp.t) <= isect.t);
- assert (isect.t <= Math.max(orgLo.t, dstLo.t));
- assert (Math.min(dstLo.s, dstUp.s) <= isect.s);
- assert (isect.s <= Math.max(orgLo.s, orgUp.s));
-
- if (Geom.VertLeq(isect, tess.event)) {
- /* The intersection point lies slightly to the left of the sweep line,
- * so move it until it''s slightly to the right of the sweep line.
- * (If we had perfect numerical precision, this would never happen
- * in the first place). The easiest and safest thing to do is
- * replace the intersection by tess.event.
- */
- isect.s = tess.event.s;
- isect.t = tess.event.t;
- }
- /* Similarly, if the computed intersection lies to the right of the
- * rightmost origin (which should rarely happen), it can cause
- * unbelievable inefficiency on sufficiently degenerate inputs.
- * (If you have the test program, try running test54.d with the
- * "X zoom" option turned on).
- */
- orgMin = Geom.VertLeq(orgUp, orgLo) ? orgUp : orgLo;
- if (Geom.VertLeq(orgMin, isect)) {
- isect.s = orgMin.s;
- isect.t = orgMin.t;
- }
-
- if (Geom.VertEq(isect, orgUp) || Geom.VertEq(isect, orgLo)) {
- /* Easy case -- intersection at one of the right endpoints */
- CheckForRightSplice(tess, regUp);
- return false;
- }
-
- if ((!Geom.VertEq(dstUp, tess.event)
- && Geom.EdgeSign(dstUp, tess.event, isect) >= 0)
- || (!Geom.VertEq(dstLo, tess.event)
- && Geom.EdgeSign(dstLo, tess.event, isect) <= 0)) {
- /* Very unusual -- the new upper or lower edge would pass on the
- * wrong side of the sweep event, or through it. This can happen
- * due to very small numerical errors in the intersection calculation.
- */
- if (dstLo == tess.event) {
- /* Splice dstLo into eUp, and process the new region(s) */
- if (Mesh.__gl_meshSplitEdge(eUp.Sym) == null) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(eLo.Sym, eUp)) throw new RuntimeException();
- regUp = TopLeftRegion(regUp);
- if (regUp == null) throw new RuntimeException();
- eUp = RegionBelow(regUp).eUp;
- FinishLeftRegions(tess, RegionBelow(regUp), regLo);
- AddRightEdges(tess, regUp, eUp.Sym.Lnext, eUp, eUp, true);
- return true;
- }
- if (dstUp == tess.event) {
- /* Splice dstUp into eLo, and process the new region(s) */
- if (Mesh.__gl_meshSplitEdge(eLo.Sym) == null) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(eUp.Lnext, eLo.Sym.Lnext)) throw new RuntimeException();
- regLo = regUp;
- regUp = TopRightRegion(regUp);
- e = RegionBelow(regUp).eUp.Sym.Onext;
- regLo.eUp = eLo.Sym.Lnext;
- eLo = FinishLeftRegions(tess, regLo, null);
- AddRightEdges(tess, regUp, eLo.Onext, eUp.Sym.Onext, e, true);
- return true;
- }
- /* Special case: called from ConnectRightVertex. If either
- * edge passes on the wrong side of tess.event, split it
- * (and wait for ConnectRightVertex to splice it appropriately).
- */
- if (Geom.EdgeSign(dstUp, tess.event, isect) >= 0) {
- RegionAbove(regUp).dirty = regUp.dirty = true;
- if (Mesh.__gl_meshSplitEdge(eUp.Sym) == null) throw new RuntimeException();
- eUp.Org.s = tess.event.s;
- eUp.Org.t = tess.event.t;
- }
- if (Geom.EdgeSign(dstLo, tess.event, isect) <= 0) {
- regUp.dirty = regLo.dirty = true;
- if (Mesh.__gl_meshSplitEdge(eLo.Sym) == null) throw new RuntimeException();
- eLo.Org.s = tess.event.s;
- eLo.Org.t = tess.event.t;
- }
- /* leave the rest for ConnectRightVertex */
- return false;
- }
-
- /* General case -- split both edges, splice into new vertex.
- * When we do the splice operation, the order of the arguments is
- * arbitrary as far as correctness goes. However, when the operation
- * creates a new face, the work done is proportional to the size of
- * the new face. We expect the faces in the processed part of
- * the mesh (ie. eUp.Lface) to be smaller than the faces in the
- * unprocessed original contours (which will be eLo.Sym.Lnext.Lface).
- */
- if (Mesh.__gl_meshSplitEdge(eUp.Sym) == null) throw new RuntimeException();
- if (Mesh.__gl_meshSplitEdge(eLo.Sym) == null) throw new RuntimeException();
- if (!Mesh.__gl_meshSplice(eLo.Sym.Lnext, eUp)) throw new RuntimeException();
- eUp.Org.s = isect.s;
- eUp.Org.t = isect.t;
- eUp.Org.pqHandle = tess.pq.pqInsert(eUp.Org); /* __gl_pqSortInsert */
- if (eUp.Org.pqHandle == Long.MAX_VALUE) {
- tess.pq.pqDeletePriorityQ(); /* __gl_pqSortDeletePriorityQ */
- tess.pq = null;
- throw new RuntimeException();
- }
- GetIntersectData(tess, eUp.Org, orgUp, dstUp, orgLo, dstLo);
- RegionAbove(regUp).dirty = regUp.dirty = regLo.dirty = true;
- return false;
- }
-
- static void WalkDirtyRegions(GLUtessellatorImpl tess, ActiveRegion regUp)
-/*
- * When the upper or lower edge of any region changes, the region is
- * marked "dirty". This routine walks through all the dirty regions
- * and makes sure that the dictionary invariants are satisfied
- * (see the comments at the beginning of this file). Of course
- * new dirty regions can be created as we make changes to restore
- * the invariants.
- */ {
- ActiveRegion regLo = RegionBelow(regUp);
- GLUhalfEdge eUp, eLo;
-
- for (; ;) {
- /* Find the lowest dirty region (we walk from the bottom up). */
- while (regLo.dirty) {
- regUp = regLo;
- regLo = RegionBelow(regLo);
- }
- if (!regUp.dirty) {
- regLo = regUp;
- regUp = RegionAbove(regUp);
- if (regUp == null || !regUp.dirty) {
- /* We've walked all the dirty regions */
- return;
- }
- }
- regUp.dirty = false;
- eUp = regUp.eUp;
- eLo = regLo.eUp;
-
- if (eUp.Sym.Org != eLo.Sym.Org) {
- /* Check that the edge ordering is obeyed at the Dst vertices. */
- if (CheckForLeftSplice(tess, regUp)) {
-
- /* If the upper or lower edge was marked fixUpperEdge, then
- * we no longer need it (since these edges are needed only for
- * vertices which otherwise have no right-going edges).
- */
- if (regLo.fixUpperEdge) {
- DeleteRegion(tess, regLo);
- if (!Mesh.__gl_meshDelete(eLo)) throw new RuntimeException();
- regLo = RegionBelow(regUp);
- eLo = regLo.eUp;
- } else if (regUp.fixUpperEdge) {
- DeleteRegion(tess, regUp);
- if (!Mesh.__gl_meshDelete(eUp)) throw new RuntimeException();
- regUp = RegionAbove(regLo);
- eUp = regUp.eUp;
- }
- }
- }
- if (eUp.Org != eLo.Org) {
- if (eUp.Sym.Org != eLo.Sym.Org
- && !regUp.fixUpperEdge && !regLo.fixUpperEdge
- && (eUp.Sym.Org == tess.event || eLo.Sym.Org == tess.event)) {
- /* When all else fails in CheckForIntersect(), it uses tess.event
- * as the intersection location. To make this possible, it requires
- * that tess.event lie between the upper and lower edges, and also
- * that neither of these is marked fixUpperEdge (since in the worst
- * case it might splice one of these edges into tess.event, and
- * violate the invariant that fixable edges are the only right-going
- * edge from their associated vertex).
- */
- if (CheckForIntersect(tess, regUp)) {
- /* WalkDirtyRegions() was called recursively; we're done */
- return;
- }
- } else {
- /* Even though we can't use CheckForIntersect(), the Org vertices
- * may violate the dictionary edge ordering. Check and correct this.
- */
- CheckForRightSplice(tess, regUp);
- }
- }
- if (eUp.Org == eLo.Org && eUp.Sym.Org == eLo.Sym.Org) {
- /* A degenerate loop consisting of only two edges -- delete it. */
- AddWinding(eLo, eUp);
- DeleteRegion(tess, regUp);
- if (!Mesh.__gl_meshDelete(eUp)) throw new RuntimeException();
- regUp = RegionAbove(regLo);
- }
- }
- }
-
-
- static void ConnectRightVertex(GLUtessellatorImpl tess, ActiveRegion regUp,
- GLUhalfEdge eBottomLeft)
-/*
- * Purpose: connect a "right" vertex vEvent (one where all edges go left)
- * to the unprocessed portion of the mesh. Since there are no right-going
- * edges, two regions (one above vEvent and one below) are being merged
- * into one. "regUp" is the upper of these two regions.
- *
- * There are two reasons for doing this (adding a right-going edge):
- * - if the two regions being merged are "inside", we must add an edge
- * to keep them separated (the combined region would not be monotone).
- * - in any case, we must leave some record of vEvent in the dictionary,
- * so that we can merge vEvent with features that we have not seen yet.
- * For example, maybe there is a vertical edge which passes just to
- * the right of vEvent; we would like to splice vEvent into this edge.
- *
- * However, we don't want to connect vEvent to just any vertex. We don''t
- * want the new edge to cross any other edges; otherwise we will create
- * intersection vertices even when the input data had no self-intersections.
- * (This is a bad thing; if the user's input data has no intersections,
- * we don't want to generate any false intersections ourselves.)
- *
- * Our eventual goal is to connect vEvent to the leftmost unprocessed
- * vertex of the combined region (the union of regUp and regLo).
- * But because of unseen vertices with all right-going edges, and also
- * new vertices which may be created by edge intersections, we don''t
- * know where that leftmost unprocessed vertex is. In the meantime, we
- * connect vEvent to the closest vertex of either chain, and mark the region
- * as "fixUpperEdge". This flag says to delete and reconnect this edge
- * to the next processed vertex on the boundary of the combined region.
- * Quite possibly the vertex we connected to will turn out to be the
- * closest one, in which case we won''t need to make any changes.
- */ {
- GLUhalfEdge eNew;
- GLUhalfEdge eTopLeft = eBottomLeft.Onext;
- ActiveRegion regLo = RegionBelow(regUp);
- GLUhalfEdge eUp = regUp.eUp;
- GLUhalfEdge eLo = regLo.eUp;
- boolean degenerate = false;
-
- if (eUp.Sym.Org != eLo.Sym.Org) {
- CheckForIntersect(tess, regUp);
- }
-
- /* Possible new degeneracies: upper or lower edge of regUp may pass
- * through vEvent, or may coincide with new intersection vertex
- */
- if (Geom.VertEq(eUp.Org, tess.event)) {
- if (!Mesh.__gl_meshSplice(eTopLeft.Sym.Lnext, eUp)) throw new RuntimeException();
- regUp = TopLeftRegion(regUp);
- if (regUp == null) throw new RuntimeException();
- eTopLeft = RegionBelow(regUp).eUp;
- FinishLeftRegions(tess, RegionBelow(regUp), regLo);
- degenerate = true;
- }
- if (Geom.VertEq(eLo.Org, tess.event)) {
- if (!Mesh.__gl_meshSplice(eBottomLeft, eLo.Sym.Lnext)) throw new RuntimeException();
- eBottomLeft = FinishLeftRegions(tess, regLo, null);
- degenerate = true;
- }
- if (degenerate) {
- AddRightEdges(tess, regUp, eBottomLeft.Onext, eTopLeft, eTopLeft, true);
- return;
- }
-
- /* Non-degenerate situation -- need to add a temporary, fixable edge.
- * Connect to the closer of eLo.Org, eUp.Org.
- */
- if (Geom.VertLeq(eLo.Org, eUp.Org)) {
- eNew = eLo.Sym.Lnext;
- } else {
- eNew = eUp;
- }
- eNew = Mesh.__gl_meshConnect(eBottomLeft.Onext.Sym, eNew);
- if (eNew == null) throw new RuntimeException();
-
- /* Prevent cleanup, otherwise eNew might disappear before we've even
- * had a chance to mark it as a temporary edge.
- */
- AddRightEdges(tess, regUp, eNew, eNew.Onext, eNew.Onext, false);
- eNew.Sym.activeRegion.fixUpperEdge = true;
- WalkDirtyRegions(tess, regUp);
- }
-
-/* Because vertices at exactly the same location are merged together
- * before we process the sweep event, some degenerate cases can't occur.
- * However if someone eventually makes the modifications required to
- * merge features which are close together, the cases below marked
- * TOLERANCE_NONZERO will be useful. They were debugged before the
- * code to merge identical vertices in the main loop was added.
- */
- private static final boolean TOLERANCE_NONZERO = false;
-
- static void ConnectLeftDegenerate(GLUtessellatorImpl tess,
- ActiveRegion regUp, GLUvertex vEvent)
-/*
- * The event vertex lies exacty on an already-processed edge or vertex.
- * Adding the new vertex involves splicing it into the already-processed
- * part of the mesh.
- */ {
- GLUhalfEdge e, eTopLeft, eTopRight, eLast;
- ActiveRegion reg;
-
- e = regUp.eUp;
- if (Geom.VertEq(e.Org, vEvent)) {
- /* e.Org is an unprocessed vertex - just combine them, and wait
- * for e.Org to be pulled from the queue
- */
- assert (TOLERANCE_NONZERO);
- SpliceMergeVertices(tess, e, vEvent.anEdge);
- return;
- }
-
- if (!Geom.VertEq(e.Sym.Org, vEvent)) {
- /* General case -- splice vEvent into edge e which passes through it */
- if (Mesh.__gl_meshSplitEdge(e.Sym) == null) throw new RuntimeException();
- if (regUp.fixUpperEdge) {
- /* This edge was fixable -- delete unused portion of original edge */
- if (!Mesh.__gl_meshDelete(e.Onext)) throw new RuntimeException();
- regUp.fixUpperEdge = false;
- }
- if (!Mesh.__gl_meshSplice(vEvent.anEdge, e)) throw new RuntimeException();
- SweepEvent(tess, vEvent); /* recurse */
- return;
- }
-
- /* vEvent coincides with e.Sym.Org, which has already been processed.
- * Splice in the additional right-going edges.
- */
- assert (TOLERANCE_NONZERO);
- regUp = TopRightRegion(regUp);
- reg = RegionBelow(regUp);
- eTopRight = reg.eUp.Sym;
- eTopLeft = eLast = eTopRight.Onext;
- if (reg.fixUpperEdge) {
- /* Here e.Sym.Org has only a single fixable edge going right.
- * We can delete it since now we have some real right-going edges.
- */
- assert (eTopLeft != eTopRight); /* there are some left edges too */
- DeleteRegion(tess, reg);
- if (!Mesh.__gl_meshDelete(eTopRight)) throw new RuntimeException();
- eTopRight = eTopLeft.Sym.Lnext;
- }
- if (!Mesh.__gl_meshSplice(vEvent.anEdge, eTopRight)) throw new RuntimeException();
- if (!Geom.EdgeGoesLeft(eTopLeft)) {
- /* e.Sym.Org had no left-going edges -- indicate this to AddRightEdges() */
- eTopLeft = null;
- }
- AddRightEdges(tess, regUp, eTopRight.Onext, eLast, eTopLeft, true);
- }
-
-
- static void ConnectLeftVertex(GLUtessellatorImpl tess, GLUvertex vEvent)
-/*
- * Purpose: connect a "left" vertex (one where both edges go right)
- * to the processed portion of the mesh. Let R be the active region
- * containing vEvent, and let U and L be the upper and lower edge
- * chains of R. There are two possibilities:
- *
- * - the normal case: split R into two regions, by connecting vEvent to
- * the rightmost vertex of U or L lying to the left of the sweep line
- *
- * - the degenerate case: if vEvent is close enough to U or L, we
- * merge vEvent into that edge chain. The subcases are:
- * - merging with the rightmost vertex of U or L
- * - merging with the active edge of U or L
- * - merging with an already-processed portion of U or L
- */ {
- ActiveRegion regUp, regLo, reg;
- GLUhalfEdge eUp, eLo, eNew;
- ActiveRegion tmp = new ActiveRegion();
-
- /* assert ( vEvent.anEdge.Onext.Onext == vEvent.anEdge ); */
-
- /* Get a pointer to the active region containing vEvent */
- tmp.eUp = vEvent.anEdge.Sym;
- /* __GL_DICTLISTKEY */ /* __gl_dictListSearch */
- regUp = (ActiveRegion) Dict.dictKey(Dict.dictSearch(tess.dict, tmp));
- regLo = RegionBelow(regUp);
- eUp = regUp.eUp;
- eLo = regLo.eUp;
-
- /* Try merging with U or L first */
- if (Geom.EdgeSign(eUp.Sym.Org, vEvent, eUp.Org) == 0) {
- ConnectLeftDegenerate(tess, regUp, vEvent);
- return;
- }
-
- /* Connect vEvent to rightmost processed vertex of either chain.
- * e.Sym.Org is the vertex that we will connect to vEvent.
- */
- reg = Geom.VertLeq(eLo.Sym.Org, eUp.Sym.Org) ? regUp : regLo;
-
- if (regUp.inside || reg.fixUpperEdge) {
- if (reg == regUp) {
- eNew = Mesh.__gl_meshConnect(vEvent.anEdge.Sym, eUp.Lnext);
- if (eNew == null) throw new RuntimeException();
- } else {
- GLUhalfEdge tempHalfEdge = Mesh.__gl_meshConnect(eLo.Sym.Onext.Sym, vEvent.anEdge);
- if (tempHalfEdge == null) throw new RuntimeException();
-
- eNew = tempHalfEdge.Sym;
- }
- if (reg.fixUpperEdge) {
- if (!FixUpperEdge(reg, eNew)) throw new RuntimeException();
- } else {
- ComputeWinding(tess, AddRegionBelow(tess, regUp, eNew));
- }
- SweepEvent(tess, vEvent);
- } else {
- /* The new vertex is in a region which does not belong to the polygon.
- * We don''t need to connect this vertex to the rest of the mesh.
- */
- AddRightEdges(tess, regUp, vEvent.anEdge, vEvent.anEdge, null, true);
- }
- }
-
-
- static void SweepEvent(GLUtessellatorImpl tess, GLUvertex vEvent)
-/*
- * Does everything necessary when the sweep line crosses a vertex.
- * Updates the mesh and the edge dictionary.
- */ {
- ActiveRegion regUp, reg;
- GLUhalfEdge e, eTopLeft, eBottomLeft;
-
- tess.event = vEvent; /* for access in EdgeLeq() */
- DebugEvent(tess);
-
- /* Check if this vertex is the right endpoint of an edge that is
- * already in the dictionary. In this case we don't need to waste
- * time searching for the location to insert new edges.
- */
- e = vEvent.anEdge;
- while (e.activeRegion == null) {
- e = e.Onext;
- if (e == vEvent.anEdge) {
- /* All edges go right -- not incident to any processed edges */
- ConnectLeftVertex(tess, vEvent);
- return;
- }
- }
-
- /* Processing consists of two phases: first we "finish" all the
- * active regions where both the upper and lower edges terminate
- * at vEvent (ie. vEvent is closing off these regions).
- * We mark these faces "inside" or "outside" the polygon according
- * to their winding number, and delete the edges from the dictionary.
- * This takes care of all the left-going edges from vEvent.
- */
- regUp = TopLeftRegion(e.activeRegion);
- if (regUp == null) throw new RuntimeException();
- reg = RegionBelow(regUp);
- eTopLeft = reg.eUp;
- eBottomLeft = FinishLeftRegions(tess, reg, null);
-
- /* Next we process all the right-going edges from vEvent. This
- * involves adding the edges to the dictionary, and creating the
- * associated "active regions" which record information about the
- * regions between adjacent dictionary edges.
- */
- if (eBottomLeft.Onext == eTopLeft) {
- /* No right-going edges -- add a temporary "fixable" edge */
- ConnectRightVertex(tess, regUp, eBottomLeft);
- } else {
- AddRightEdges(tess, regUp, eBottomLeft.Onext, eTopLeft, eTopLeft, true);
- }
- }
-
-
-/* Make the sentinel coordinates big enough that they will never be
- * merged with real input features. (Even with the largest possible
- * input contour and the maximum tolerance of 1.0, no merging will be
- * done with coordinates larger than 3 * GLU_TESS_MAX_COORD).
- */
- private static final double SENTINEL_COORD = (4.0 * GLU.GLU_TESS_MAX_COORD);
-
- static void AddSentinel(GLUtessellatorImpl tess, double t)
-/*
- * We add two sentinel edges above and below all other edges,
- * to avoid special cases at the top and bottom.
- */ {
- GLUhalfEdge e;
- ActiveRegion reg = new ActiveRegion();
- if (reg == null) throw new RuntimeException();
-
- e = Mesh.__gl_meshMakeEdge(tess.mesh);
- if (e == null) throw new RuntimeException();
-
- e.Org.s = SENTINEL_COORD;
- e.Org.t = t;
- e.Sym.Org.s = -SENTINEL_COORD;
- e.Sym.Org.t = t;
- tess.event = e.Sym.Org; /* initialize it */
-
- reg.eUp = e;
- reg.windingNumber = 0;
- reg.inside = false;
- reg.fixUpperEdge = false;
- reg.sentinel = true;
- reg.dirty = false;
- reg.nodeUp = Dict.dictInsert(tess.dict, reg); /* __gl_dictListInsertBefore */
- if (reg.nodeUp == null) throw new RuntimeException();
- }
-
-
- static void InitEdgeDict(final GLUtessellatorImpl tess)
-/*
- * We maintain an ordering of edge intersections with the sweep line.
- * This order is maintained in a dynamic dictionary.
- */ {
- /* __gl_dictListNewDict */
- tess.dict = Dict.dictNewDict(tess, new Dict.DictLeq() {
- public boolean leq(Object frame, Object key1, Object key2) {
- return EdgeLeq(tess, (ActiveRegion) key1, (ActiveRegion) key2);
- }
- });
- if (tess.dict == null) throw new RuntimeException();
-
- AddSentinel(tess, -SENTINEL_COORD);
- AddSentinel(tess, SENTINEL_COORD);
- }
-
-
- static void DoneEdgeDict(GLUtessellatorImpl tess) {
- ActiveRegion reg;
- int fixedEdges = 0;
-
- /* __GL_DICTLISTKEY */ /* __GL_DICTLISTMIN */
- while ((reg = (ActiveRegion) Dict.dictKey(Dict.dictMin(tess.dict))) != null) {
- /*
- * At the end of all processing, the dictionary should contain
- * only the two sentinel edges, plus at most one "fixable" edge
- * created by ConnectRightVertex().
- */
- if (!reg.sentinel) {
- assert (reg.fixUpperEdge);
- assert (++fixedEdges == 1);
- }
- assert (reg.windingNumber == 0);
- DeleteRegion(tess, reg);
-/* __gl_meshDelete( reg.eUp );*/
- }
- Dict.dictDeleteDict(tess.dict); /* __gl_dictListDeleteDict */
- }
-
-
- static void RemoveDegenerateEdges(GLUtessellatorImpl tess)
-/*
- * Remove zero-length edges, and contours with fewer than 3 vertices.
- */ {
- GLUhalfEdge e, eNext, eLnext;
- GLUhalfEdge eHead = tess.mesh.eHead;
-
- /*LINTED*/
- for (e = eHead.next; e != eHead; e = eNext) {
- eNext = e.next;
- eLnext = e.Lnext;
-
- if (Geom.VertEq(e.Org, e.Sym.Org) && e.Lnext.Lnext != e) {
- /* Zero-length edge, contour has at least 3 edges */
-
- SpliceMergeVertices(tess, eLnext, e); /* deletes e.Org */
- if (!Mesh.__gl_meshDelete(e)) throw new RuntimeException(); /* e is a self-loop */
- e = eLnext;
- eLnext = e.Lnext;
- }
- if (eLnext.Lnext == e) {
- /* Degenerate contour (one or two edges) */
-
- if (eLnext != e) {
- if (eLnext == eNext || eLnext == eNext.Sym) {
- eNext = eNext.next;
- }
- if (!Mesh.__gl_meshDelete(eLnext)) throw new RuntimeException();
- }
- if (e == eNext || e == eNext.Sym) {
- eNext = eNext.next;
- }
- if (!Mesh.__gl_meshDelete(e)) throw new RuntimeException();
- }
- }
- }
-
- static boolean InitPriorityQ(GLUtessellatorImpl tess)
-/*
- * Insert all vertices into the priority queue which determines the
- * order in which vertices cross the sweep line.
- */ {
- PriorityQ pq;
- GLUvertex v, vHead;
-
- /* __gl_pqSortNewPriorityQ */
- pq = tess.pq = PriorityQ.pqNewPriorityQ(new PriorityQ.Leq() {
- public boolean leq(Object key1, Object key2) {
- return Geom.VertLeq(((GLUvertex) key1), (GLUvertex) key2);
- }
- });
- if (pq == null) return false;
-
- vHead = tess.mesh.vHead;
- for (v = vHead.next; v != vHead; v = v.next) {
- v.pqHandle = pq.pqInsert(v); /* __gl_pqSortInsert */
- if (v.pqHandle == Long.MAX_VALUE) break;
- }
- if (v != vHead || !pq.pqInit()) { /* __gl_pqSortInit */
- tess.pq.pqDeletePriorityQ(); /* __gl_pqSortDeletePriorityQ */
- tess.pq = null;
- return false;
- }
-
- return true;
- }
-
-
- static void DonePriorityQ(GLUtessellatorImpl tess) {
- tess.pq.pqDeletePriorityQ(); /* __gl_pqSortDeletePriorityQ */
- }
-
-
- static boolean RemoveDegenerateFaces(GLUmesh mesh)
-/*
- * Delete any degenerate faces with only two edges. WalkDirtyRegions()
- * will catch almost all of these, but it won't catch degenerate faces
- * produced by splice operations on already-processed edges.
- * The two places this can happen are in FinishLeftRegions(), when
- * we splice in a "temporary" edge produced by ConnectRightVertex(),
- * and in CheckForLeftSplice(), where we splice already-processed
- * edges to ensure that our dictionary invariants are not violated
- * by numerical errors.
- *
- * In both these cases it is *very* dangerous to delete the offending
- * edge at the time, since one of the routines further up the stack
- * will sometimes be keeping a pointer to that edge.
- */ {
- GLUface f, fNext;
- GLUhalfEdge e;
-
- /*LINTED*/
- for (f = mesh.fHead.next; f != mesh.fHead; f = fNext) {
- fNext = f.next;
- e = f.anEdge;
- assert (e.Lnext != e);
-
- if (e.Lnext.Lnext == e) {
- /* A face with only two edges */
- AddWinding(e.Onext, e);
- if (!Mesh.__gl_meshDelete(e)) return false;
- }
- }
- return true;
- }
-
- public static boolean __gl_computeInterior(GLUtessellatorImpl tess)
-/*
- * __gl_computeInterior( tess ) computes the planar arrangement specified
- * by the given contours, and further subdivides this arrangement
- * into regions. Each region is marked "inside" if it belongs
- * to the polygon, according to the rule given by tess.windingRule.
- * Each interior region is guaranteed be monotone.
- */ {
- GLUvertex v, vNext;
-
- tess.fatalError = false;
-
- /* Each vertex defines an event for our sweep line. Start by inserting
- * all the vertices in a priority queue. Events are processed in
- * lexicographic order, ie.
- *
- * e1 < e2 iff e1.x < e2.x || (e1.x == e2.x && e1.y < e2.y)
- */
- RemoveDegenerateEdges(tess);
- if (!InitPriorityQ(tess)) return false; /* if error */
- InitEdgeDict(tess);
-
- /* __gl_pqSortExtractMin */
- while ((v = (GLUvertex) tess.pq.pqExtractMin()) != null) {
- for (; ;) {
- vNext = (GLUvertex) tess.pq.pqMinimum(); /* __gl_pqSortMinimum */
- if (vNext == null || !Geom.VertEq(vNext, v)) break;
-
- /* Merge together all vertices at exactly the same location.
- * This is more efficient than processing them one at a time,
- * simplifies the code (see ConnectLeftDegenerate), and is also
- * important for correct handling of certain degenerate cases.
- * For example, suppose there are two identical edges A and B
- * that belong to different contours (so without this code they would
- * be processed by separate sweep events). Suppose another edge C
- * crosses A and B from above. When A is processed, we split it
- * at its intersection point with C. However this also splits C,
- * so when we insert B we may compute a slightly different
- * intersection point. This might leave two edges with a small
- * gap between them. This kind of error is especially obvious
- * when using boundary extraction (GLU_TESS_BOUNDARY_ONLY).
- */
- vNext = (GLUvertex) tess.pq.pqExtractMin(); /* __gl_pqSortExtractMin*/
- SpliceMergeVertices(tess, v.anEdge, vNext.anEdge);
- }
- SweepEvent(tess, v);
- }
-
- /* Set tess.event for debugging purposes */
- /* __GL_DICTLISTKEY */ /* __GL_DICTLISTMIN */
- tess.event = ((ActiveRegion) Dict.dictKey(Dict.dictMin(tess.dict))).eUp.Org;
- DebugEvent(tess);
- DoneEdgeDict(tess);
- DonePriorityQ(tess);
-
- if (!RemoveDegenerateFaces(tess.mesh)) return false;
- Mesh.__gl_meshCheckMesh(tess.mesh);
-
- return true;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/TessMono.java b/src/classes/com/sun/opengl/impl/tessellator/TessMono.java
deleted file mode 100644
index 1f4a653e0..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/TessMono.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-class TessMono {
-/* __gl_meshTessellateMonoRegion( face ) tessellates a monotone region
- * (what else would it do??) The region must consist of a single
- * loop of half-edges (see mesh.h) oriented CCW. "Monotone" in this
- * case means that any vertical line intersects the interior of the
- * region in a single interval.
- *
- * Tessellation consists of adding interior edges (actually pairs of
- * half-edges), to split the region into non-overlapping triangles.
- *
- * The basic idea is explained in Preparata and Shamos (which I don''t
- * have handy right now), although their implementation is more
- * complicated than this one. The are two edge chains, an upper chain
- * and a lower chain. We process all vertices from both chains in order,
- * from right to left.
- *
- * The algorithm ensures that the following invariant holds after each
- * vertex is processed: the untessellated region consists of two
- * chains, where one chain (say the upper) is a single edge, and
- * the other chain is concave. The left vertex of the single edge
- * is always to the left of all vertices in the concave chain.
- *
- * Each step consists of adding the rightmost unprocessed vertex to one
- * of the two chains, and forming a fan of triangles from the rightmost
- * of two chain endpoints. Determining whether we can add each triangle
- * to the fan is a simple orientation test. By making the fan as large
- * as possible, we restore the invariant (check it yourself).
- */
- static boolean __gl_meshTessellateMonoRegion(GLUface face) {
- GLUhalfEdge up, lo;
-
- /* All edges are oriented CCW around the boundary of the region.
- * First, find the half-edge whose origin vertex is rightmost.
- * Since the sweep goes from left to right, face->anEdge should
- * be close to the edge we want.
- */
- up = face.anEdge;
- assert (up.Lnext != up && up.Lnext.Lnext != up);
-
- for (; Geom.VertLeq(up.Sym.Org, up.Org); up = up.Onext.Sym)
- ;
- for (; Geom.VertLeq(up.Org, up.Sym.Org); up = up.Lnext)
- ;
- lo = up.Onext.Sym;
-
- while (up.Lnext != lo) {
- if (Geom.VertLeq(up.Sym.Org, lo.Org)) {
- /* up.Sym.Org is on the left. It is safe to form triangles from lo.Org.
- * The EdgeGoesLeft test guarantees progress even when some triangles
- * are CW, given that the upper and lower chains are truly monotone.
- */
- while (lo.Lnext != up && (Geom.EdgeGoesLeft(lo.Lnext)
- || Geom.EdgeSign(lo.Org, lo.Sym.Org, lo.Lnext.Sym.Org) <= 0)) {
- GLUhalfEdge tempHalfEdge = Mesh.__gl_meshConnect(lo.Lnext, lo);
- if (tempHalfEdge == null) return false;
- lo = tempHalfEdge.Sym;
- }
- lo = lo.Onext.Sym;
- } else {
- /* lo.Org is on the left. We can make CCW triangles from up.Sym.Org. */
- while (lo.Lnext != up && (Geom.EdgeGoesRight(up.Onext.Sym)
- || Geom.EdgeSign(up.Sym.Org, up.Org, up.Onext.Sym.Org) >= 0)) {
- GLUhalfEdge tempHalfEdge = Mesh.__gl_meshConnect(up, up.Onext.Sym);
- if (tempHalfEdge == null) return false;
- up = tempHalfEdge.Sym;
- }
- up = up.Lnext;
- }
- }
-
- /* Now lo.Org == up.Sym.Org == the leftmost vertex. The remaining region
- * can be tessellated in a fan from this leftmost vertex.
- */
- assert (lo.Lnext != up);
- while (lo.Lnext.Lnext != up) {
- GLUhalfEdge tempHalfEdge = Mesh.__gl_meshConnect(lo.Lnext, lo);
- if (tempHalfEdge == null) return false;
- lo = tempHalfEdge.Sym;
- }
-
- return true;
- }
-
-
-/* __gl_meshTessellateInterior( mesh ) tessellates each region of
- * the mesh which is marked "inside" the polygon. Each such region
- * must be monotone.
- */
- public static boolean __gl_meshTessellateInterior(GLUmesh mesh) {
- GLUface f, next;
-
- /*LINTED*/
- for (f = mesh.fHead.next; f != mesh.fHead; f = next) {
- /* Make sure we don''t try to tessellate the new triangles. */
- next = f.next;
- if (f.inside) {
- if (!__gl_meshTessellateMonoRegion(f)) return false;
- }
- }
-
- return true;
- }
-
-
-/* __gl_meshDiscardExterior( mesh ) zaps (ie. sets to NULL) all faces
- * which are not marked "inside" the polygon. Since further mesh operations
- * on NULL faces are not allowed, the main purpose is to clean up the
- * mesh so that exterior loops are not represented in the data structure.
- */
- public static void __gl_meshDiscardExterior(GLUmesh mesh) {
- GLUface f, next;
-
- /*LINTED*/
- for (f = mesh.fHead.next; f != mesh.fHead; f = next) {
- /* Since f will be destroyed, save its next pointer. */
- next = f.next;
- if (!f.inside) {
- Mesh.__gl_meshZapFace(f);
- }
- }
- }
-
- private static final int MARKED_FOR_DELETION = 0x7fffffff;
-
-/* __gl_meshSetWindingNumber( mesh, value, keepOnlyBoundary ) resets the
- * winding numbers on all edges so that regions marked "inside" the
- * polygon have a winding number of "value", and regions outside
- * have a winding number of 0.
- *
- * If keepOnlyBoundary is TRUE, it also deletes all edges which do not
- * separate an interior region from an exterior one.
- */
- public static boolean __gl_meshSetWindingNumber(GLUmesh mesh, int value, boolean keepOnlyBoundary) {
- GLUhalfEdge e, eNext;
-
- for (e = mesh.eHead.next; e != mesh.eHead; e = eNext) {
- eNext = e.next;
- if (e.Sym.Lface.inside != e.Lface.inside) {
-
- /* This is a boundary edge (one side is interior, one is exterior). */
- e.winding = (e.Lface.inside) ? value : -value;
- } else {
-
- /* Both regions are interior, or both are exterior. */
- if (!keepOnlyBoundary) {
- e.winding = 0;
- } else {
- if (!Mesh.__gl_meshDelete(e)) return false;
- }
- }
- }
- return true;
- }
-
-}
diff --git a/src/classes/com/sun/opengl/impl/tessellator/TessState.java b/src/classes/com/sun/opengl/impl/tessellator/TessState.java
deleted file mode 100644
index 8364de2a3..000000000
--- a/src/classes/com/sun/opengl/impl/tessellator/TessState.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package com.sun.opengl.impl.tessellator;
-
-
-class TessState {
- public static final int T_DORMANT = 0;
- public static final int T_IN_POLYGON = 1;
- public static final int T_IN_CONTOUR = 2;
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsDummyGLDrawable.java b/src/classes/com/sun/opengl/impl/windows/WindowsDummyGLDrawable.java
deleted file mode 100644
index a307493d7..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsDummyGLDrawable.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsDummyGLDrawable extends WindowsGLDrawable {
- private long hwnd;
-
- public WindowsDummyGLDrawable() {
- super(new GLCapabilities(), null);
- // All entries to CreateDummyWindow must synchronize on one object
- // to avoid accidentally registering the dummy window class twice
- synchronized (WindowsDummyGLDrawable.class) {
- hwnd = WGL.CreateDummyWindow(0, 0, 1, 1);
- }
- hdc = WGL.GetDC(hwnd);
- // Choose a (hopefully hardware-accelerated) OpenGL pixel format for this device context
- GLCapabilities caps = new GLCapabilities();
- caps.setDepthBits(16);
- PIXELFORMATDESCRIPTOR pfd = glCapabilities2PFD(caps, true);
- int pixelFormat = WGL.ChoosePixelFormat(hdc, pfd);
- if ((pixelFormat == 0) ||
- (!WGL.SetPixelFormat(hdc, pixelFormat, pfd))) {
- destroy();
- }
- }
-
- public void setSize(int width, int height) {
- }
-
- public int getWidth() {
- return 1;
- }
-
- public int getHeight() {
- return 1;
- }
-
- public GLContext createContext(GLContext shareWith) {
- if (hdc == 0) {
- // Construction failed
- return null;
- }
- return new WindowsGLContext(this, shareWith, true);
- }
-
- public void destroy() {
- if (hdc != 0) {
- WGL.ReleaseDC(hwnd, hdc);
- hdc = 0;
- }
- if (hwnd != 0) {
- WGL.ShowWindow(hwnd, WGL.SW_HIDE);
- WGL.DestroyWindow(hwnd);
- hwnd = 0;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java b/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java
deleted file mode 100755
index a73cc7ac4..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import java.nio.*;
-import java.util.*;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsExternalGLContext extends WindowsGLContext {
- private boolean firstMakeCurrent = true;
- private boolean created = true;
- private GLContext lastContext;
-
- public WindowsExternalGLContext() {
- super(null, null, true);
- hglrc = WGL.wglGetCurrentContext();
- if (hglrc == 0) {
- throw new GLException("Error: attempted to make an external GLContext without a drawable/context current");
- }
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Created external OpenGL context " + toHexString(hglrc) + " for " + this);
- }
- GLContextShareSet.contextCreated(this);
- resetGLFunctionAvailability();
- }
-
- public int makeCurrent() throws GLException {
- // Save last context if necessary to allow external GLContexts to
- // talk to other GLContexts created by this library
- GLContext cur = getCurrent();
- if (cur != null && cur != this) {
- lastContext = cur;
- setCurrent(null);
- }
- return super.makeCurrent();
- }
-
- public void release() throws GLException {
- super.release();
- setCurrent(lastContext);
- lastContext = null;
- }
-
- protected int makeCurrentImpl() throws GLException {
- if (firstMakeCurrent) {
- firstMakeCurrent = false;
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected void releaseImpl() throws GLException {
- }
-
- protected void destroyImpl() throws GLException {
- created = false;
- GLContextShareSet.contextDestroyed(this);
- }
-
- public boolean isCreated() {
- return created;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLDrawable.java b/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLDrawable.java
deleted file mode 100755
index 23ec0a1fc..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLDrawable.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsExternalGLDrawable extends WindowsGLDrawable {
- public WindowsExternalGLDrawable() {
- super(new GLCapabilities(), null);
- hdc = WGL.wglGetCurrentDC();
- if (hdc == 0) {
- throw new GLException("Error: attempted to make an external GLDrawable without a drawable/context current");
- }
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new WindowsGLContext(this, shareWith);
- }
-
- public void setSize(int newWidth, int newHeight) {
- throw new GLException("Should not call this");
- }
-
- public int getWidth() {
- throw new GLException("Should not call this");
- }
-
- public int getHeight() {
- throw new GLException("Should not call this");
- }
-
- public void destroy() {
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsGLContext.java b/src/classes/com/sun/opengl/impl/windows/WindowsGLContext.java
deleted file mode 100644
index 1276aea92..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsGLContext.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import java.nio.*;
-import java.util.*;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsGLContext extends GLContextImpl {
- protected WindowsGLDrawable drawable;
- protected long hglrc;
- private boolean wglGetExtensionsStringEXTInitialized;
- private boolean wglGetExtensionsStringEXTAvailable;
- private static final Map/*<String, String>*/ functionNameMap;
- private static final Map/*<String, String>*/ extensionNameMap;
- private WGLExt wglExt;
- // Table that holds the addresses of the native C-language entry points for
- // WGL extension functions.
- private WGLExtProcAddressTable wglExtProcAddressTable;
-
- static {
- functionNameMap = new HashMap();
- functionNameMap.put("glAllocateMemoryNV", "wglAllocateMemoryNV");
- functionNameMap.put("glFreeMemoryNV", "wglFreeMemoryNV");
-
- extensionNameMap = new HashMap();
- extensionNameMap.put("GL_ARB_pbuffer", "WGL_ARB_pbuffer");
- extensionNameMap.put("GL_ARB_pixel_format", "WGL_ARB_pixel_format");
- }
-
- public WindowsGLContext(WindowsGLDrawable drawable,
- GLContext shareWith) {
- this(drawable, shareWith, false);
- }
-
- public WindowsGLContext(WindowsGLDrawable drawable,
- GLContext shareWith,
- boolean dontShareWithJava2D) {
- super(shareWith, dontShareWithJava2D);
- this.drawable = drawable;
- }
-
- public Object getPlatformGLExtensions() {
- return getWGLExt();
- }
-
- public WGLExt getWGLExt() {
- if (wglExt == null) {
- wglExt = new WGLExtImpl(this);
- }
- return wglExt;
- }
-
- public GLDrawable getGLDrawable() {
- return drawable;
- }
-
- protected String mapToRealGLFunctionName(String glFunctionName) {
- String lookup = (String) functionNameMap.get(glFunctionName);
- if (lookup != null) {
- return lookup;
- }
- return glFunctionName;
- }
-
- protected String mapToRealGLExtensionName(String glExtensionName) {
- String lookup = (String) extensionNameMap.get(glExtensionName);
- if (lookup != null) {
- return lookup;
- }
- return glExtensionName;
- }
-
- /**
- * Creates and initializes an appropriate OpenGL context. Should only be
- * called by {@link #makeCurrentImpl()}.
- */
- protected void create() {
- if (drawable.getHDC() == 0) {
- throw new GLException("Internal error: attempted to create OpenGL context without an associated drawable");
- }
- hglrc = WGL.wglCreateContext(drawable.getHDC());
- if (hglrc == 0) {
- throw new GLException("Unable to create OpenGL context for device context " + toHexString(drawable.getHDC()));
- }
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Created OpenGL context " + toHexString(hglrc) + " for " + this + ", device context " + toHexString(drawable.getHDC()) + ", not yet sharing");
- }
- // Windows can set up sharing of display lists after creation time
- WindowsGLContext other = (WindowsGLContext) GLContextShareSet.getShareContext(this);
- long hglrc2 = 0;
- if (other != null) {
- hglrc2 = other.getHGLRC();
- if (hglrc2 == 0) {
- throw new GLException("GLContextShareSet returned an invalid OpenGL context");
- }
- if (!WGL.wglShareLists(hglrc2, hglrc)) {
- throw new GLException("wglShareLists(" + toHexString(hglrc2) +
- ", " + toHexString(hglrc) + ") failed: error code " +
- WGL.GetLastError());
- }
- }
- GLContextShareSet.contextCreated(this);
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Created OpenGL context " + toHexString(hglrc) + " for " + this + ", device context " + toHexString(drawable.getHDC()) + ", sharing with " + toHexString(hglrc2));
- }
- }
-
- protected int makeCurrentImpl() throws GLException {
- boolean created = false;
- if (hglrc == 0) {
- create();
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Created GL context for " + getClass().getName());
- }
- created = true;
- }
-
- boolean skipMakeCurrent = false;
- if (NO_FREE) {
- if (WGL.wglGetCurrentContext() == hglrc) {
- if (DEBUG && VERBOSE) {
- System.err.println(getThreadName() + ": skipping wglMakeCurrent because context already current");
- }
- skipMakeCurrent = true;
- }
- }
-
- if (!skipMakeCurrent) {
- if (!WGL.wglMakeCurrent(drawable.getHDC(), hglrc)) {
- throw new GLException("Error making context current: " + WGL.GetLastError());
- } else {
- if (DEBUG && VERBOSE) {
- System.err.println(getThreadName() + ": wglMakeCurrent(hdc " + toHexString(drawable.getHDC()) +
- ", hglrc " + toHexString(hglrc) + ") succeeded");
- }
- }
- }
-
- if (created) {
- resetGLFunctionAvailability();
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected void releaseImpl() throws GLException {
- if (!NO_FREE) {
- if (!WGL.wglMakeCurrent(0, 0)) {
- throw new GLException("Error freeing OpenGL context: " + WGL.GetLastError());
- }
- }
- }
-
- protected void destroyImpl() throws GLException {
- if (hglrc != 0) {
- if (!WGL.wglDeleteContext(hglrc)) {
- throw new GLException("Unable to delete OpenGL context");
- }
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Destroyed OpenGL context " + toHexString(hglrc));
- }
- hglrc = 0;
- GLContextShareSet.contextDestroyed(this);
- }
- }
-
- public boolean isCreated() {
- return (hglrc != 0);
- }
-
- public void copy(GLContext source, int mask) throws GLException {
- long dst = getHGLRC();
- long src = ((WindowsGLContext) source).getHGLRC();
- if (src == 0) {
- throw new GLException("Source OpenGL context has not been created");
- }
- if (dst == 0) {
- throw new GLException("Destination OpenGL context has not been created");
- }
- if (!WGL.wglCopyContext(src, dst, mask)) {
- throw new GLException("wglCopyContext failed");
- }
- }
-
- protected void resetGLFunctionAvailability() {
- super.resetGLFunctionAvailability();
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Initializing WGL extension address table for " + this);
- }
- resetProcAddressTable(getWGLExtProcAddressTable());
- }
-
- public WGLExtProcAddressTable getWGLExtProcAddressTable() {
- if (wglExtProcAddressTable == null) {
- // FIXME: cache ProcAddressTables by capability bits so we can
- // share them among contexts with the same capabilities
- wglExtProcAddressTable = new WGLExtProcAddressTable();
- }
- return wglExtProcAddressTable;
- }
-
- public String getPlatformExtensionsString() {
- if (!wglGetExtensionsStringEXTInitialized) {
- wglGetExtensionsStringEXTAvailable = (WGL.wglGetProcAddress("wglGetExtensionsStringEXT") != 0);
- wglGetExtensionsStringEXTInitialized = true;
- }
- if (wglGetExtensionsStringEXTAvailable) {
- return getWGLExt().wglGetExtensionsStringEXT();
- } else {
- return "";
- }
- }
-
- protected boolean isFunctionAvailable(String glFunctionName)
- {
- boolean available = super.isFunctionAvailable(glFunctionName);
-
- // Sanity check for implementations that use proc addresses for run-time
- // linking: if the function IS available, then make sure there's a proc
- // address for it if it's an extension or not part of the OpenGL 1.1 core
- // (post GL 1.1 functions are run-time linked on windows).
- assert(!available ||
- (getGLProcAddressTable().getAddressFor(mapToRealGLFunctionName(glFunctionName)) != 0 ||
- FunctionAvailabilityCache.isPartOfGLCore("1.1", mapToRealGLFunctionName(glFunctionName)))
- );
-
- return available;
- }
-
- public void setSwapInterval(int interval) {
- // FIXME: make the context current first? Currently assumes that
- // will not be necessary. Make the caller do this?
- WGLExt wglExt = getWGLExt();
- if (wglExt.isExtensionAvailable("WGL_EXT_swap_control")) {
- wglExt.wglSwapIntervalEXT(interval);
- }
- }
-
- public ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
- return getWGLExt().wglAllocateMemoryNV(arg0, arg1, arg2, arg3);
- }
-
- public int getOffscreenContextPixelDataType() {
- throw new GLException("Should not call this");
- }
-
- public int getOffscreenContextReadBuffer() {
- throw new GLException("Should not call this");
- }
-
- public boolean offscreenImageNeedsVerticalFlip() {
- throw new GLException("Should not call this");
- }
-
- public void bindPbufferToTexture() {
- throw new GLException("Should not call this");
- }
-
- public void releasePbufferFromTexture() {
- throw new GLException("Should not call this");
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- public long getHGLRC() {
- return hglrc;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsGLDrawable.java b/src/classes/com/sun/opengl/impl/windows/WindowsGLDrawable.java
deleted file mode 100644
index d930e4dd8..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsGLDrawable.java
+++ /dev/null
@@ -1,640 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public abstract class WindowsGLDrawable extends GLDrawableImpl {
- protected static final boolean DEBUG = Debug.debug("WindowsGLDrawable");
-
- protected long hdc;
- protected GLCapabilities capabilities;
- protected GLCapabilitiesChooser chooser;
- protected boolean pixelFormatChosen;
-
- protected static final int MAX_PFORMATS = 256;
- protected static final int MAX_ATTRIBS = 256;
-
- public WindowsGLDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- this.capabilities = (GLCapabilities) capabilities.clone();
- this.chooser = chooser;
- }
-
- public void setRealized(boolean val) {
- throw new GLException("Should not call this (should only be called for onscreen GLDrawables)");
- }
-
- public void destroy() {
- throw new GLException("Should not call this (should only be called for offscreen GLDrawables)");
- }
-
- public void swapBuffers() throws GLException {
- }
-
- public long getHDC() {
- return hdc;
- }
-
- protected void choosePixelFormat(boolean onscreen) {
- PIXELFORMATDESCRIPTOR pfd = null;
- int pixelFormat = 0;
- GLCapabilities chosenCaps = null;
- if (onscreen) {
- if ((pixelFormat = WGL.GetPixelFormat(hdc)) != 0) {
- // The Java2D/OpenGL pipeline probably already set a pixel
- // format for this canvas.
- if (DEBUG) {
- System.err.println("NOTE: pixel format already chosen (by Java2D/OpenGL pipeline?) for window: " +
- WGL.GetPixelFormat(hdc));
- }
- pfd = newPixelFormatDescriptor();
- if (WGL.DescribePixelFormat(hdc, pixelFormat, pfd.size(), pfd) == 0) {
- // FIXME: should this just be a warning? Not really critical...
- throw new GLException("Unable to describe pixel format " + pixelFormat +
- " of window set by Java2D/OpenGL pipeline");
- }
- setChosenGLCapabilities(pfd2GLCapabilities(pfd));
- pixelFormatChosen = true;
- return;
- }
-
- GLCapabilities[] availableCaps = null;
- int numFormats = 0;
- pfd = newPixelFormatDescriptor();
- // Produce a recommended pixel format selection for the GLCapabilitiesChooser.
- // Use wglChoosePixelFormatARB if user requested multisampling and if we have it available
- WindowsGLDrawable dummyDrawable = null;
- GLContextImpl dummyContext = null;
- WGLExt dummyWGLExt = null;
- if (capabilities.getSampleBuffers()) {
- dummyDrawable = new WindowsDummyGLDrawable();
- dummyContext = (GLContextImpl) dummyDrawable.createContext(null);
- if (dummyContext != null) {
- dummyContext.makeCurrent();
- dummyWGLExt = (WGLExt) dummyContext.getPlatformGLExtensions();
- }
- }
- int recommendedPixelFormat = -1;
- boolean haveWGLChoosePixelFormatARB = false;
- boolean haveWGLARBMultisample = false;
- boolean gotAvailableCaps = false;
- if (dummyWGLExt != null) {
- try {
- haveWGLChoosePixelFormatARB = dummyWGLExt.isExtensionAvailable("WGL_ARB_pixel_format");
- if (haveWGLChoosePixelFormatARB) {
- haveWGLARBMultisample = dummyWGLExt.isExtensionAvailable("WGL_ARB_multisample");
-
- int[] iattributes = new int [2 * MAX_ATTRIBS];
- int[] iresults = new int [2 * MAX_ATTRIBS];
- float[] fattributes = new float[1];
-
- if (glCapabilities2iattributes(capabilities,
- iattributes,
- dummyWGLExt,
- false,
- null)) {
- int[] pformats = new int[MAX_PFORMATS];
- int[] numFormatsTmp = new int[1];
- if (dummyWGLExt.wglChoosePixelFormatARB(hdc,
- iattributes, 0,
- fattributes, 0,
- MAX_PFORMATS,
- pformats, 0,
- numFormatsTmp, 0)) {
- numFormats = numFormatsTmp[0];
- if (numFormats > 0) {
- // Remove one-basing of pixel format (added on later)
- recommendedPixelFormat = pformats[0] - 1;
- if (DEBUG) {
- System.err.println(getThreadName() + ": Used wglChoosePixelFormatARB to recommend pixel format " + recommendedPixelFormat);
- }
- }
- } else {
- if (DEBUG) {
- System.err.println(getThreadName() + ": wglChoosePixelFormatARB failed: " + WGL.GetLastError() );
- Thread.dumpStack();
- }
- }
- if (DEBUG) {
- if (recommendedPixelFormat < 0) {
- System.err.print(getThreadName() + ": wglChoosePixelFormatARB didn't recommend a pixel format");
- if (capabilities.getSampleBuffers()) {
- System.err.print(" for multisampled GLCapabilities");
- }
- System.err.println();
- }
- }
-
- // Produce a list of GLCapabilities to give to the
- // GLCapabilitiesChooser.
- // Use wglGetPixelFormatAttribivARB instead of
- // DescribePixelFormat to get higher-precision information
- // about the pixel format (should make the GLCapabilities
- // more precise as well...i.e., remove the
- // "HardwareAccelerated" bit, which is basically
- // meaningless, and put in whether it can render to a
- // window, to a pbuffer, or to a pixmap)
- int niattribs = 0;
- iattributes[0] = WGLExt.WGL_NUMBER_PIXEL_FORMATS_ARB;
- if (dummyWGLExt.wglGetPixelFormatAttribivARB(hdc, 0, 0, 1, iattributes, 0, iresults, 0)) {
- numFormats = iresults[0];
-
- if (DEBUG) {
- System.err.println("wglGetPixelFormatAttribivARB reported WGL_NUMBER_PIXEL_FORMATS_ARB = " + numFormats);
- }
-
- // Should we be filtering out the pixel formats which aren't
- // applicable, as we are doing here?
- // We don't have enough information in the GLCapabilities to
- // represent those that aren't...
- iattributes[niattribs++] = WGLExt.WGL_DRAW_TO_WINDOW_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCELERATION_ARB;
- iattributes[niattribs++] = WGLExt.WGL_SUPPORT_OPENGL_ARB;
- iattributes[niattribs++] = WGLExt.WGL_DEPTH_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_STENCIL_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_DOUBLE_BUFFER_ARB;
- iattributes[niattribs++] = WGLExt.WGL_STEREO_ARB;
- iattributes[niattribs++] = WGLExt.WGL_PIXEL_TYPE_ARB;
- iattributes[niattribs++] = WGLExt.WGL_RED_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_GREEN_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_BLUE_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ALPHA_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_RED_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_GREEN_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_BLUE_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_ALPHA_BITS_ARB;
- if (haveWGLARBMultisample) {
- iattributes[niattribs++] = WGLExt.WGL_SAMPLE_BUFFERS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_SAMPLES_ARB;
- }
-
- availableCaps = new GLCapabilities[numFormats];
- for (int i = 0; i < numFormats; i++) {
- if (!dummyWGLExt.wglGetPixelFormatAttribivARB(hdc, i+1, 0, niattribs, iattributes, 0, iresults, 0)) {
- throw new GLException("Error getting pixel format attributes for pixel format " + (i + 1) + " of device context");
- }
- availableCaps[i] = iattributes2GLCapabilities(iattributes, niattribs, iresults, true);
- }
- gotAvailableCaps = true;
- } else {
- long lastErr = WGL.GetLastError();
- // Intel Extreme graphics fails with a zero error code
- if (lastErr != 0) {
- throw new GLException("Unable to enumerate pixel formats of window using wglGetPixelFormatAttribivARB: error code " + WGL.GetLastError());
- }
- }
- }
- }
- } finally {
- dummyContext.release();
- dummyContext.destroy();
- dummyDrawable.destroy();
- }
- }
-
- // Fallback path for older cards, in particular Intel Extreme motherboard graphics
- if (!gotAvailableCaps) {
- if (DEBUG) {
- if (!capabilities.getSampleBuffers()) {
- System.err.println(getThreadName() + ": Using ChoosePixelFormat because multisampling not requested");
- } else {
- System.err.println(getThreadName() + ": Using ChoosePixelFormat because no wglChoosePixelFormatARB");
- }
- }
- pfd = glCapabilities2PFD(capabilities, onscreen);
- // Remove one-basing of pixel format (added on later)
- recommendedPixelFormat = WGL.ChoosePixelFormat(hdc, pfd) - 1;
-
- numFormats = WGL.DescribePixelFormat(hdc, 1, 0, null);
- if (numFormats == 0) {
- throw new GLException("Unable to enumerate pixel formats of window for GLCapabilitiesChooser");
- }
- availableCaps = new GLCapabilities[numFormats];
- for (int i = 0; i < numFormats; i++) {
- if (WGL.DescribePixelFormat(hdc, 1 + i, pfd.size(), pfd) == 0) {
- throw new GLException("Error describing pixel format " + (1 + i) + " of device context");
- }
- availableCaps[i] = pfd2GLCapabilities(pfd);
- }
- }
-
- // NOTE: officially, should make a copy of all of these
- // GLCapabilities to avoid mutation by the end user during the
- // chooseCapabilities call, but for the time being, assume they
- // won't be changed
-
- // Supply information to chooser
- pixelFormat = chooser.chooseCapabilities(capabilities, availableCaps, recommendedPixelFormat);
- if ((pixelFormat < 0) || (pixelFormat >= numFormats)) {
- throw new GLException("Invalid result " + pixelFormat +
- " from GLCapabilitiesChooser (should be between 0 and " +
- (numFormats - 1) + ")");
- }
- if (DEBUG) {
- System.err.println(getThreadName() + ": Chosen pixel format (" + pixelFormat + "):");
- System.err.println(availableCaps[pixelFormat]);
- }
- chosenCaps = availableCaps[pixelFormat];
- pixelFormat += 1; // one-base the index
- if (WGL.DescribePixelFormat(hdc, pixelFormat, pfd.size(), pfd) == 0) {
- throw new GLException("Error re-describing the chosen pixel format: " + WGL.GetLastError());
- }
- } else {
- // For now, use ChoosePixelFormat for offscreen surfaces until
- // we figure out how to properly choose an offscreen-
- // compatible pixel format
- pfd = glCapabilities2PFD(capabilities, onscreen);
- pixelFormat = WGL.ChoosePixelFormat(hdc, pfd);
- }
- if (!WGL.SetPixelFormat(hdc, pixelFormat, pfd)) {
- long lastError = WGL.GetLastError();
- if (DEBUG) {
- System.err.println(getThreadName() + ": SetPixelFormat failed: current context = " + WGL.wglGetCurrentContext() +
- ", current DC = " + WGL.wglGetCurrentDC());
- System.err.println(getThreadName() + ": GetPixelFormat(hdc " + toHexString(hdc) + ") returns " + WGL.GetPixelFormat(hdc));
- }
- throw new GLException("Unable to set pixel format " + pixelFormat + " for device context " + toHexString(hdc) + ": error code " + lastError);
- }
- // Reuse the previously-constructed GLCapabilities because it
- // turns out that using DescribePixelFormat on some pixel formats
- // (which, for example, support full-scene antialiasing) for some
- // reason return that they are not OpenGL-capable
- if (chosenCaps != null) {
- setChosenGLCapabilities(chosenCaps);
- } else {
- setChosenGLCapabilities(pfd2GLCapabilities(pfd));
- }
- pixelFormatChosen = true;
- }
-
- protected static PIXELFORMATDESCRIPTOR glCapabilities2PFD(GLCapabilities caps, boolean onscreen) {
- int colorDepth = (caps.getRedBits() +
- caps.getGreenBits() +
- caps.getBlueBits());
- if (colorDepth < 15) {
- throw new GLException("Bit depths < 15 (i.e., non-true-color) not supported");
- }
- PIXELFORMATDESCRIPTOR pfd = newPixelFormatDescriptor();
- int pfdFlags = (WGL.PFD_SUPPORT_OPENGL |
- WGL.PFD_GENERIC_ACCELERATED);
- if (caps.getDoubleBuffered()) {
- pfdFlags |= WGL.PFD_DOUBLEBUFFER;
- }
- if (onscreen) {
- pfdFlags |= WGL.PFD_DRAW_TO_WINDOW;
- } else {
- pfdFlags |= WGL.PFD_DRAW_TO_BITMAP;
- }
- if (caps.getStereo()) {
- pfdFlags |= WGL.PFD_STEREO;
- }
- pfd.dwFlags(pfdFlags);
- pfd.iPixelType((byte) WGL.PFD_TYPE_RGBA);
- pfd.cColorBits((byte) colorDepth);
- pfd.cRedBits ((byte) caps.getRedBits());
- pfd.cGreenBits((byte) caps.getGreenBits());
- pfd.cBlueBits ((byte) caps.getBlueBits());
- pfd.cAlphaBits((byte) caps.getAlphaBits());
- int accumDepth = (caps.getAccumRedBits() +
- caps.getAccumGreenBits() +
- caps.getAccumBlueBits());
- pfd.cAccumBits ((byte) accumDepth);
- pfd.cAccumRedBits ((byte) caps.getAccumRedBits());
- pfd.cAccumGreenBits((byte) caps.getAccumGreenBits());
- pfd.cAccumBlueBits ((byte) caps.getAccumBlueBits());
- pfd.cAccumAlphaBits((byte) caps.getAccumAlphaBits());
- pfd.cDepthBits((byte) caps.getDepthBits());
- pfd.cStencilBits((byte) caps.getStencilBits());
- pfd.iLayerType((byte) WGL.PFD_MAIN_PLANE);
- return pfd;
- }
-
- protected static PIXELFORMATDESCRIPTOR newPixelFormatDescriptor() {
- PIXELFORMATDESCRIPTOR pfd = PIXELFORMATDESCRIPTOR.create();
- pfd.nSize((short) pfd.size());
- pfd.nVersion((short) 1);
- return pfd;
- }
-
- protected static GLCapabilities pfd2GLCapabilities(PIXELFORMATDESCRIPTOR pfd) {
- if ((pfd.dwFlags() & WGL.PFD_SUPPORT_OPENGL) == 0) {
- return null;
- }
- GLCapabilities res = new GLCapabilities();
- res.setRedBits (pfd.cRedBits());
- res.setGreenBits (pfd.cGreenBits());
- res.setBlueBits (pfd.cBlueBits());
- res.setAlphaBits (pfd.cAlphaBits());
- res.setAccumRedBits (pfd.cAccumRedBits());
- res.setAccumGreenBits(pfd.cAccumGreenBits());
- res.setAccumBlueBits (pfd.cAccumBlueBits());
- res.setAccumAlphaBits(pfd.cAccumAlphaBits());
- res.setDepthBits (pfd.cDepthBits());
- res.setStencilBits (pfd.cStencilBits());
- res.setDoubleBuffered((pfd.dwFlags() & WGL.PFD_DOUBLEBUFFER) != 0);
- res.setStereo ((pfd.dwFlags() & WGL.PFD_STEREO) != 0);
- res.setHardwareAccelerated(((pfd.dwFlags() & WGL.PFD_GENERIC_FORMAT) == 0) ||
- ((pfd.dwFlags() & WGL.PFD_GENERIC_ACCELERATED) != 0));
- return res;
- }
-
- protected static boolean glCapabilities2iattributes(GLCapabilities capabilities,
- int[] iattributes,
- WGLExt wglExt,
- boolean pbuffer,
- int[] floatMode) throws GLException {
- if (!wglExt.isExtensionAvailable("WGL_ARB_pixel_format")) {
- return false;
- }
-
- int niattribs = 0;
-
- iattributes[niattribs++] = WGLExt.WGL_SUPPORT_OPENGL_ARB;
- iattributes[niattribs++] = GL.GL_TRUE;
- if (pbuffer) {
- iattributes[niattribs++] = WGLExt.WGL_DRAW_TO_PBUFFER_ARB;
- iattributes[niattribs++] = GL.GL_TRUE;
- } else {
- iattributes[niattribs++] = WGLExt.WGL_DRAW_TO_WINDOW_ARB;
- iattributes[niattribs++] = GL.GL_TRUE;
- }
-
- iattributes[niattribs++] = WGLExt.WGL_DOUBLE_BUFFER_ARB;
- if (capabilities.getDoubleBuffered()) {
- iattributes[niattribs++] = GL.GL_TRUE;
- } else {
- iattributes[niattribs++] = GL.GL_FALSE;
- }
-
- iattributes[niattribs++] = WGLExt.WGL_STEREO_ARB;
- if (capabilities.getStereo()) {
- iattributes[niattribs++] = GL.GL_TRUE;
- } else {
- iattributes[niattribs++] = GL.GL_FALSE;
- }
-
- iattributes[niattribs++] = WGLExt.WGL_DEPTH_BITS_ARB;
- iattributes[niattribs++] = capabilities.getDepthBits();
- iattributes[niattribs++] = WGLExt.WGL_RED_BITS_ARB;
- iattributes[niattribs++] = capabilities.getRedBits();
- iattributes[niattribs++] = WGLExt.WGL_GREEN_BITS_ARB;
- iattributes[niattribs++] = capabilities.getGreenBits();
- iattributes[niattribs++] = WGLExt.WGL_BLUE_BITS_ARB;
- iattributes[niattribs++] = capabilities.getBlueBits();
- iattributes[niattribs++] = WGLExt.WGL_ALPHA_BITS_ARB;
- iattributes[niattribs++] = capabilities.getAlphaBits();
- iattributes[niattribs++] = WGLExt.WGL_STENCIL_BITS_ARB;
- iattributes[niattribs++] = capabilities.getStencilBits();
- if (capabilities.getAccumRedBits() > 0 ||
- capabilities.getAccumGreenBits() > 0 ||
- capabilities.getAccumBlueBits() > 0 ||
- capabilities.getAccumAlphaBits() > 0) {
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_BITS_ARB;
- iattributes[niattribs++] = (capabilities.getAccumRedBits() +
- capabilities.getAccumGreenBits() +
- capabilities.getAccumBlueBits() +
- capabilities.getAccumAlphaBits());
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_RED_BITS_ARB;
- iattributes[niattribs++] = capabilities.getAccumRedBits();
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_GREEN_BITS_ARB;
- iattributes[niattribs++] = capabilities.getAccumGreenBits();
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_BLUE_BITS_ARB;
- iattributes[niattribs++] = capabilities.getAccumBlueBits();
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_ALPHA_BITS_ARB;
- iattributes[niattribs++] = capabilities.getAccumAlphaBits();
- }
-
- if (wglExt.isExtensionAvailable("WGL_ARB_multisample")) {
- if (capabilities.getSampleBuffers()) {
- iattributes[niattribs++] = WGLExt.WGL_SAMPLE_BUFFERS_ARB;
- iattributes[niattribs++] = GL.GL_TRUE;
- iattributes[niattribs++] = WGLExt.WGL_SAMPLES_ARB;
- iattributes[niattribs++] = capabilities.getNumSamples();
- }
- }
-
- boolean rtt = capabilities.getPbufferRenderToTexture();
- boolean rect = capabilities.getPbufferRenderToTextureRectangle();
- boolean useFloat = capabilities.getPbufferFloatingPointBuffers();
- boolean ati = false;
- if (pbuffer) {
- // Check some invariants and set up some state
- if (rect && !rtt) {
- throw new GLException("Render-to-texture-rectangle requires render-to-texture to be specified");
- }
-
- if (rect) {
- if (!wglExt.isExtensionAvailable("GL_NV_texture_rectangle")) {
- throw new GLException("Render-to-texture-rectangle requires GL_NV_texture_rectangle extension");
- }
- }
-
- if (useFloat) {
- if (!wglExt.isExtensionAvailable("WGL_ATI_pixel_format_float") &&
- !wglExt.isExtensionAvailable("WGL_NV_float_buffer")) {
- throw new GLException("Floating-point pbuffers not supported by this hardware");
- }
-
- // Prefer NVidia extension over ATI
- if (wglExt.isExtensionAvailable("WGL_NV_float_buffer")) {
- ati = false;
- floatMode[0] = GLPbuffer.NV_FLOAT;
- } else {
- ati = true;
- floatMode[0] = GLPbuffer.ATI_FLOAT;
- }
- if (DEBUG) {
- System.err.println("Using " + (ati ? "ATI" : "NVidia") + " floating-point extension");
- }
- }
-
- // See whether we need to change the pixel type to support ATI's
- // floating-point pbuffers
- if (useFloat && ati) {
- if (rtt) {
- throw new GLException("Render-to-floating-point-texture not supported on ATI hardware");
- } else {
- iattributes[niattribs++] = WGLExt.WGL_PIXEL_TYPE_ARB;
- iattributes[niattribs++] = WGLExt.WGL_TYPE_RGBA_FLOAT_ATI;
- }
- } else {
- if (!rtt) {
- // Currently we don't support non-truecolor visuals in the
- // GLCapabilities, so we don't offer the option of making
- // color-index pbuffers.
- iattributes[niattribs++] = WGLExt.WGL_PIXEL_TYPE_ARB;
- iattributes[niattribs++] = WGLExt.WGL_TYPE_RGBA_ARB;
- }
- }
-
- if (useFloat && !ati) {
- iattributes[niattribs++] = WGLExt.WGL_FLOAT_COMPONENTS_NV;
- iattributes[niattribs++] = GL.GL_TRUE;
- }
-
- if (rtt) {
- if (useFloat) {
- assert(!ati);
- if (!rect) {
- throw new GLException("Render-to-floating-point-texture only supported on NVidia hardware with render-to-texture-rectangle");
- }
- iattributes[niattribs++] = WGLExt.WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV;
- iattributes[niattribs++] = GL.GL_TRUE;
- } else {
- iattributes[niattribs++] = rect ? WGLExt.WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV : WGLExt.WGL_BIND_TO_TEXTURE_RGB_ARB;
- iattributes[niattribs++] = GL.GL_TRUE;
- }
- }
- } else {
- iattributes[niattribs++] = WGLExt.WGL_PIXEL_TYPE_ARB;
- iattributes[niattribs++] = WGLExt.WGL_TYPE_RGBA_ARB;
- }
-
- return true;
- }
-
- protected static GLCapabilities iattributes2GLCapabilities(int[] iattribs,
- int niattribs,
- int[] iresults,
- boolean requireRenderToWindow) {
- GLCapabilities res = new GLCapabilities();
- for (int i = 0; i < niattribs; i++) {
- int attr = iattribs[i];
- switch (attr) {
- case WGLExt.WGL_DRAW_TO_WINDOW_ARB:
- if (requireRenderToWindow && iresults[i] != GL.GL_TRUE)
- return null;
- break;
-
- case WGLExt.WGL_DRAW_TO_PBUFFER_ARB:
- break;
-
- case WGLExt.WGL_ACCELERATION_ARB:
- res.setHardwareAccelerated(iresults[i] == WGLExt.WGL_FULL_ACCELERATION_ARB);
- break;
-
- case WGLExt.WGL_SUPPORT_OPENGL_ARB:
- if (iresults[i] != GL.GL_TRUE)
- return null;
- break;
-
- case WGLExt.WGL_DEPTH_BITS_ARB:
- res.setDepthBits(iresults[i]);
- break;
-
- case WGLExt.WGL_STENCIL_BITS_ARB:
- res.setStencilBits(iresults[i]);
- break;
-
- case WGLExt.WGL_DOUBLE_BUFFER_ARB:
- res.setDoubleBuffered(iresults[i] == GL.GL_TRUE);
- break;
-
- case WGLExt.WGL_STEREO_ARB:
- res.setStereo(iresults[i] == GL.GL_TRUE);
- break;
-
- case WGLExt.WGL_PIXEL_TYPE_ARB:
- // Fail softly with unknown results here
- if (iresults[i] == WGLExt.WGL_TYPE_RGBA_ARB ||
- iresults[i] == WGLExt.WGL_TYPE_RGBA_FLOAT_ATI) {
- res.setPbufferFloatingPointBuffers(true);
- }
- break;
-
- case WGLExt.WGL_FLOAT_COMPONENTS_NV:
- if (iresults[i] != 0) {
- res.setPbufferFloatingPointBuffers(true);
- }
- break;
-
- case WGLExt.WGL_RED_BITS_ARB:
- res.setRedBits(iresults[i]);
- break;
-
- case WGLExt.WGL_GREEN_BITS_ARB:
- res.setGreenBits(iresults[i]);
- break;
-
- case WGLExt.WGL_BLUE_BITS_ARB:
- res.setBlueBits(iresults[i]);
- break;
-
- case WGLExt.WGL_ALPHA_BITS_ARB:
- res.setAlphaBits(iresults[i]);
- break;
-
- case WGLExt.WGL_ACCUM_RED_BITS_ARB:
- res.setAccumRedBits(iresults[i]);
- break;
-
- case WGLExt.WGL_ACCUM_GREEN_BITS_ARB:
- res.setAccumGreenBits(iresults[i]);
- break;
-
- case WGLExt.WGL_ACCUM_BLUE_BITS_ARB:
- res.setAccumBlueBits(iresults[i]);
- break;
-
- case WGLExt.WGL_ACCUM_ALPHA_BITS_ARB:
- res.setAccumAlphaBits(iresults[i]);
- break;
-
- case WGLExt.WGL_SAMPLE_BUFFERS_ARB:
- res.setSampleBuffers(iresults[i] != 0);
- break;
-
- case WGLExt.WGL_SAMPLES_ARB:
- res.setNumSamples(iresults[i]);
- break;
-
- default:
- throw new GLException("Unknown pixel format attribute " + iattribs[i]);
- }
- }
- return res;
- }
-
- protected static String getThreadName() {
- return Thread.currentThread().getName();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsGLDrawableFactory.java b/src/classes/com/sun/opengl/impl/windows/WindowsGLDrawableFactory.java
deleted file mode 100644
index 6e1b4ca99..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsGLDrawableFactory.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.nio.*;
-import java.util.*;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-import com.sun.opengl.util.BufferUtil;
-
-public class WindowsGLDrawableFactory extends GLDrawableFactoryImpl {
- private static final boolean DEBUG = Debug.debug("WindowsGLDrawableFactory");
- private static final boolean VERBOSE = Debug.verbose();
-
- // Handle to GLU32.dll
- // FIXME: this should go away once we delete support for the C GLU library
- private long hglu32;
-
- static {
- NativeLibLoader.loadCore();
- }
-
- public AbstractGraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- AbstractGraphicsDevice device) {
- return null;
- }
-
- public GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- if (target == null) {
- throw new IllegalArgumentException("Null target");
- }
- if (!(target instanceof Component)) {
- throw new IllegalArgumentException("GLDrawables not supported for objects of type " +
- target.getClass().getName() + " (only Components are supported in this implementation)");
- }
- if (capabilities == null) {
- capabilities = new GLCapabilities();
- }
- if (chooser == null) {
- chooser = new DefaultGLCapabilitiesChooser();
- }
- return new WindowsOnscreenGLDrawable((Component) target, capabilities, chooser);
- }
-
- public GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- return new WindowsOffscreenGLDrawable(capabilities, chooser);
- }
-
- private boolean pbufferSupportInitialized = false;
- private boolean canCreateGLPbuffer = false;
- public boolean canCreateGLPbuffer() {
- if (!pbufferSupportInitialized) {
- Runnable r = new Runnable() {
- public void run() {
- WindowsDummyGLDrawable dummyDrawable = new WindowsDummyGLDrawable();
- GLContext dummyContext = dummyDrawable.createContext(null);
- if (dummyContext != null) {
- GLContext lastContext = GLContext.getCurrent();
- if (lastContext != null) {
- lastContext.release();
- }
- dummyContext.makeCurrent();
- GL dummyGL = dummyContext.getGL();
- canCreateGLPbuffer = dummyGL.isExtensionAvailable("GL_ARB_pbuffer");
- pbufferSupportInitialized = true;
- dummyContext.release();
- dummyContext.destroy();
- dummyDrawable.destroy();
- if (lastContext != null) {
- lastContext.makeCurrent();
- }
- }
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- }
- if (DEBUG) {
- System.err.println("WindowsGLDrawableFactory.canCreateGLPbuffer() = " + canCreateGLPbuffer);
- }
- return canCreateGLPbuffer;
- }
-
- public GLPbuffer createGLPbuffer(final GLCapabilities capabilities,
- final GLCapabilitiesChooser chooser,
- final int initialWidth,
- final int initialHeight,
- final GLContext shareWith) {
- if (!canCreateGLPbuffer()) {
- throw new GLException("Pbuffer support not available with current graphics card");
- }
- final List returnList = new ArrayList();
- Runnable r = new Runnable() {
- public void run() {
- WindowsDummyGLDrawable dummyDrawable = new WindowsDummyGLDrawable();
- WindowsGLContext dummyContext = (WindowsGLContext) dummyDrawable.createContext(null);
- GLContext lastContext = GLContext.getCurrent();
- if (lastContext != null) {
- lastContext.release();
- }
- dummyContext.makeCurrent();
- WGLExt dummyWGLExt = dummyContext.getWGLExt();
- try {
- WindowsPbufferGLDrawable pbufferDrawable = new WindowsPbufferGLDrawable(capabilities,
- initialWidth,
- initialHeight,
- dummyDrawable,
- dummyWGLExt);
- GLPbufferImpl pbuffer = new GLPbufferImpl(pbufferDrawable, shareWith);
- returnList.add(pbuffer);
- dummyContext.release();
- dummyContext.destroy();
- dummyDrawable.destroy();
- } finally {
- if (lastContext != null) {
- lastContext.makeCurrent();
- }
- }
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- return (GLPbuffer) returnList.get(0);
- }
-
- public GLContext createExternalGLContext() {
- return new WindowsExternalGLContext();
- }
-
- public boolean canCreateExternalGLDrawable() {
- return true;
- }
-
- public GLDrawable createExternalGLDrawable() {
- return new WindowsExternalGLDrawable();
- }
-
- public void loadGLULibrary() {
- if (hglu32 == 0) {
- hglu32 = WGL.LoadLibraryA("GLU32");
- if (hglu32 == 0) {
- throw new GLException("Error loading GLU32.DLL");
- }
- }
- }
-
- public long dynamicLookupFunction(String glFuncName) {
- long res = WGL.wglGetProcAddress(glFuncName);
- if (res == 0) {
- // GLU routines aren't known to the OpenGL function lookup
- if (hglu32 != 0) {
- res = WGL.GetProcAddress(hglu32, glFuncName);
- }
- }
- return res;
- }
-
- static String wglGetLastError() {
- long err = WGL.GetLastError();
- String detail = null;
- switch ((int) err) {
- case WGL.ERROR_INVALID_PIXEL_FORMAT: detail = "ERROR_INVALID_PIXEL_FORMAT"; break;
- case WGL.ERROR_NO_SYSTEM_RESOURCES: detail = "ERROR_NO_SYSTEM_RESOURCES"; break;
- case WGL.ERROR_INVALID_DATA: detail = "ERROR_INVALID_DATA"; break;
- case WGL.ERROR_PROC_NOT_FOUND: detail = "ERROR_PROC_NOT_FOUND"; break;
- case WGL.ERROR_INVALID_WINDOW_HANDLE:detail = "ERROR_INVALID_WINDOW_HANDLE"; break;
- default: detail = "(Unknown error code " + err + ")"; break;
- }
- return detail;
- }
-
- private void maybeDoSingleThreadedWorkaround(Runnable action) {
- if (Threading.isSingleThreaded() &&
- !Threading.isOpenGLThread()) {
- Threading.invokeOnOpenGLThread(action);
- } else {
- action.run();
- }
- }
-
- public void lockAWTForJava2D() {
- }
-
- public void unlockAWTForJava2D() {
- }
-
- public boolean canCreateContextOnJava2DSurface() {
- return false;
- }
-
- public GLContext createContextOnJava2DSurface(Graphics g, GLContext shareWith)
- throws GLException {
- throw new GLException("Unimplemented on this platform");
- }
-
- //------------------------------------------------------
- // Gamma-related functionality
- //
-
- private static final int GAMMA_RAMP_LENGTH = 256;
-
- protected int getGammaRampLength() {
- return GAMMA_RAMP_LENGTH;
- }
-
- protected boolean setGammaRamp(float[] ramp) {
- short[] rampData = new short[3 * GAMMA_RAMP_LENGTH];
- for (int i = 0; i < GAMMA_RAMP_LENGTH; i++) {
- short scaledValue = (short) (ramp[i] * 65535);
- rampData[i] = scaledValue;
- rampData[i + GAMMA_RAMP_LENGTH] = scaledValue;
- rampData[i + 2 * GAMMA_RAMP_LENGTH] = scaledValue;
- }
-
- long screenDC = WGL.GetDC(0);
- boolean res = WGL.SetDeviceGammaRamp(screenDC, ShortBuffer.wrap(rampData));
- WGL.ReleaseDC(0, screenDC);
- return res;
- }
-
- protected Buffer getGammaRamp() {
- ShortBuffer rampData = ShortBuffer.allocate(3 * GAMMA_RAMP_LENGTH);
- long screenDC = WGL.GetDC(0);
- boolean res = WGL.GetDeviceGammaRamp(screenDC, rampData);
- WGL.ReleaseDC(0, screenDC);
- if (!res) {
- return null;
- }
- return rampData;
- }
-
- protected void resetGammaRamp(Buffer originalGammaRamp) {
- if (originalGammaRamp == null) {
- // getGammaRamp failed earlier
- return;
- }
- long screenDC = WGL.GetDC(0);
- WGL.SetDeviceGammaRamp(screenDC, originalGammaRamp);
- WGL.ReleaseDC(0, screenDC);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLContext.java b/src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLContext.java
deleted file mode 100644
index d9430638c..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLContext.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsOffscreenGLContext extends WindowsGLContext {
- public WindowsOffscreenGLContext(WindowsOffscreenGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- }
-
- public int getOffscreenContextPixelDataType() {
- return GL.GL_UNSIGNED_BYTE;
- }
-
- public int getOffscreenContextReadBuffer() {
- // On Windows these contexts are always single-buffered
- return GL.GL_FRONT;
- }
-
- public boolean offscreenImageNeedsVerticalFlip() {
- // We can take care of this in the DIB creation (see below)
- return false;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLDrawable.java b/src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLDrawable.java
deleted file mode 100644
index 474c71598..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsOffscreenGLDrawable.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsOffscreenGLDrawable extends WindowsGLDrawable {
- private long origbitmap;
- private long hbitmap;
- // Width and height of the underlying bitmap
- private int width;
- private int height;
-
- public WindowsOffscreenGLDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- super(capabilities, chooser);
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new WindowsOffscreenGLContext(this, shareWith);
- }
-
- public void setSize(int newWidth, int newHeight) {
- width = newWidth;
- height = newHeight;
- if (hdc != 0) {
- destroy();
- }
- create();
- }
-
- public int getWidth() {
- return width;
- }
-
- public int getHeight() {
- return height;
- }
-
- private void create() {
- BITMAPINFO info = BITMAPINFO.create();
- BITMAPINFOHEADER header = info.bmiHeader();
- int bitsPerPixel = (capabilities.getRedBits() +
- capabilities.getGreenBits() +
- capabilities.getBlueBits());
- header.biSize(header.size());
- header.biWidth(width);
- // NOTE: negating the height causes the DIB to be in top-down row
- // order rather than bottom-up; ends up being correct during pixel
- // readback
- header.biHeight(-1 * height);
- header.biPlanes((short) 1);
- header.biBitCount((short) bitsPerPixel);
- header.biXPelsPerMeter(0);
- header.biYPelsPerMeter(0);
- header.biClrUsed(0);
- header.biClrImportant(0);
- header.biCompression(WGL.BI_RGB);
- header.biSizeImage(width * height * bitsPerPixel / 8);
-
- hdc = WGL.CreateCompatibleDC(0);
- if (hdc == 0) {
- System.out.println("LastError: " + WGL.GetLastError());
- throw new GLException("Error creating device context for offscreen OpenGL context");
- }
- hbitmap = WGL.CreateDIBSection(hdc, info, WGL.DIB_RGB_COLORS, 0, 0, 0);
- if (hbitmap == 0) {
- WGL.DeleteDC(hdc);
- hdc = 0;
- throw new GLException("Error creating offscreen bitmap of width " + width +
- ", height " + height);
- }
- if ((origbitmap = WGL.SelectObject(hdc, hbitmap)) == 0) {
- WGL.DeleteObject(hbitmap);
- hbitmap = 0;
- WGL.DeleteDC(hdc);
- hdc = 0;
- throw new GLException("Error selecting bitmap into new device context");
- }
-
- choosePixelFormat(false);
- }
-
- public void destroy() {
- if (hdc != 0) {
- // Must destroy bitmap and device context
- WGL.SelectObject(hdc, origbitmap);
- WGL.DeleteObject(hbitmap);
- WGL.DeleteDC(hdc);
- origbitmap = 0;
- hbitmap = 0;
- hdc = 0;
- setChosenGLCapabilities(null);
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java b/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java
deleted file mode 100644
index 066cb8fa6..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import java.util.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsOnscreenGLContext extends WindowsGLContext {
- protected WindowsOnscreenGLDrawable drawable;
-
- public WindowsOnscreenGLContext(WindowsOnscreenGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- this.drawable = drawable;
- }
-
- protected int makeCurrentImpl() throws GLException {
- int lockRes = drawable.lockSurface();
- boolean exceptionOccurred = false;
- try {
- if (lockRes == WindowsOnscreenGLDrawable.LOCK_SURFACE_NOT_READY) {
- return CONTEXT_NOT_CURRENT;
- }
- if (lockRes == WindowsOnscreenGLDrawable.LOCK_SURFACE_CHANGED) {
- destroyImpl();
- }
- int ret = super.makeCurrentImpl();
- return ret;
- } catch (RuntimeException e) {
- exceptionOccurred = true;
- throw e;
- } finally {
- if (exceptionOccurred ||
- (isOptimizable() && lockRes != WindowsOnscreenGLDrawable.LOCK_SURFACE_NOT_READY)) {
- drawable.unlockSurface();
- }
- }
- }
-
- protected void releaseImpl() throws GLException {
- try {
- super.releaseImpl();
- } finally {
- if (!isOptimizable()) {
- drawable.unlockSurface();
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java b/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java
deleted file mode 100644
index 5f74998e5..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import java.awt.Component;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsOnscreenGLDrawable extends WindowsGLDrawable {
- public static final int LOCK_SURFACE_NOT_READY = 1;
- public static final int LOCK_SURFACE_CHANGED = 2;
- public static final int LOCK_SUCCESS = 3;
-
- protected Component component;
-
- // Variables for lockSurface/unlockSurface
- private JAWT_DrawingSurface ds;
- private JAWT_DrawingSurfaceInfo dsi;
- private JAWT_Win32DrawingSurfaceInfo win32dsi;
-
- // Indicates whether the component (if an onscreen context) has been
- // realized. Plausibly, before the component is realized the JAWT
- // should return an error or NULL object from some of its
- // operations; this appears to be the case on Win32 but is not true
- // at least with Sun's current X11 implementation (1.4.x), which
- // crashes with no other error reported if the DrawingSurfaceInfo is
- // fetched from a locked DrawingSurface during the validation as a
- // result of calling show() on the main thread. To work around this
- // we prevent any JAWT or OpenGL operations from being done until
- // addNotify() is called on the component.
- protected boolean realized;
-
- private static final boolean PROFILING = Debug.debug("WindowsOnscreenGLDrawable.profiling");
- private static final int PROFILING_TICKS = 200;
- private int profilingLockSurfaceTicks;
- private long profilingLockSurfaceTime;
- private int profilingUnlockSurfaceTicks;
- private long profilingUnlockSurfaceTime;
- private int profilingSwapBuffersTicks;
- private long profilingSwapBuffersTime;
-
- // Workaround for problems on Intel 82855 cards
- private int setPixelFormatFailCount;
- private static final int MAX_SET_PIXEL_FORMAT_FAIL_COUNT = 5;
-
- public WindowsOnscreenGLDrawable(Component component,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- super(capabilities, chooser);
- this.component = component;
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new WindowsOnscreenGLContext(this, shareWith);
- }
-
- public void setRealized(boolean realized) {
- this.realized = realized;
- if (!realized) {
- // Assume heavyweight widget was destroyed
- setChosenGLCapabilities(null);
- pixelFormatChosen = false;
- }
- }
-
- public void setSize(int width, int height) {
- component.setSize(width, height);
- }
-
- public int getWidth() {
- return component.getWidth();
- }
-
- public int getHeight() {
- return component.getHeight();
- }
-
- public void swapBuffers() throws GLException {
- boolean didLock = false;
-
- if (hdc == 0) {
- if (lockSurface() == LOCK_SURFACE_NOT_READY) {
- return;
- }
- didLock = true;
- }
-
- long startTime = 0;
- if (PROFILING) {
- startTime = System.currentTimeMillis();
- }
-
- if (!WGL.SwapBuffers(hdc) && (WGL.GetLastError() != 0)) {
- throw new GLException("Error swapping buffers");
- }
-
- if (PROFILING) {
- long endTime = System.currentTimeMillis();
- profilingSwapBuffersTime += (endTime - startTime);
- int ticks = PROFILING_TICKS;
- if (++profilingSwapBuffersTicks == ticks) {
- System.err.println("SwapBuffers calls: " + profilingSwapBuffersTime + " ms / " + ticks + " calls (" +
- ((float) profilingSwapBuffersTime / (float) ticks) + " ms/call)");
- profilingSwapBuffersTime = 0;
- profilingSwapBuffersTicks = 0;
- }
- }
-
- if (didLock) {
- unlockSurface();
- }
- }
-
- public int lockSurface() throws GLException {
- if (!realized) {
- return LOCK_SURFACE_NOT_READY;
- }
- if (hdc != 0) {
- throw new GLException("Surface already locked");
- }
- long startTime = 0;
- if (PROFILING) {
- startTime = System.currentTimeMillis();
- }
- ds = JAWT.getJAWT().GetDrawingSurface(component);
- if (ds == null) {
- // Widget not yet realized
- return LOCK_SURFACE_NOT_READY;
- }
- int res = ds.Lock();
- if ((res & JAWTFactory.JAWT_LOCK_ERROR) != 0) {
- throw new GLException("Unable to lock surface");
- }
- // See whether the surface changed and if so destroy the old
- // OpenGL context so it will be recreated (NOTE: removeNotify
- // should handle this case, but it may be possible that race
- // conditions can cause this code to be triggered -- should test
- // more)
- int ret = LOCK_SUCCESS;
- if ((res & JAWTFactory.JAWT_LOCK_SURFACE_CHANGED) != 0) {
- ret = LOCK_SURFACE_CHANGED;
- }
- dsi = ds.GetDrawingSurfaceInfo();
- if (dsi == null) {
- // Widget not yet realized
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- return LOCK_SURFACE_NOT_READY;
- }
- win32dsi = (JAWT_Win32DrawingSurfaceInfo) dsi.platformInfo();
- hdc = win32dsi.hdc();
- if (hdc == 0) {
- // Widget not yet realized
- ds.FreeDrawingSurfaceInfo(dsi);
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- dsi = null;
- win32dsi = null;
- return LOCK_SURFACE_NOT_READY;
- }
- if (!pixelFormatChosen) {
- try {
- choosePixelFormat(true);
- setPixelFormatFailCount = 0;
- } catch (RuntimeException e) {
- // Workaround for problems seen on Intel 82855 cards in particular
- // Make it look like the lockSurface() call didn't succeed
- unlockSurface();
- if (e instanceof GLException) {
- if (++setPixelFormatFailCount == MAX_SET_PIXEL_FORMAT_FAIL_COUNT) {
- setPixelFormatFailCount = 0;
- throw e;
- }
- return LOCK_SURFACE_NOT_READY;
- } else {
- // Probably a user error in the GLCapabilitiesChooser or similar.
- // Don't propagate non-GLExceptions out because calling code
- // expects to catch only that exception type
- throw new GLException(e);
- }
- }
- }
- if (PROFILING) {
- long endTime = System.currentTimeMillis();
- profilingLockSurfaceTime += (endTime - startTime);
- int ticks = PROFILING_TICKS;
- if (++profilingLockSurfaceTicks == ticks) {
- System.err.println("LockSurface calls: " + profilingLockSurfaceTime + " ms / " + ticks + " calls (" +
- ((float) profilingLockSurfaceTime / (float) ticks) + " ms/call)");
- profilingLockSurfaceTime = 0;
- profilingLockSurfaceTicks = 0;
- }
- }
- return ret;
- }
-
- public void unlockSurface() {
- if (hdc == 0) {
- throw new GLException("Surface already unlocked");
- }
- long startTime = 0;
- if (PROFILING) {
- startTime = System.currentTimeMillis();
- }
- ds.FreeDrawingSurfaceInfo(dsi);
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- dsi = null;
- win32dsi = null;
- hdc = 0;
- if (PROFILING) {
- long endTime = System.currentTimeMillis();
- profilingUnlockSurfaceTime += (endTime - startTime);
- int ticks = PROFILING_TICKS;
- if (++profilingUnlockSurfaceTicks == ticks) {
- System.err.println("UnlockSurface calls: " + profilingUnlockSurfaceTime + " ms / " + ticks + " calls (" +
- ((float) profilingUnlockSurfaceTime / (float) ticks) + " ms/call)");
- profilingUnlockSurfaceTime = 0;
- profilingUnlockSurfaceTicks = 0;
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLContext.java b/src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLContext.java
deleted file mode 100644
index 390c14054..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLContext.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsPbufferGLContext extends WindowsGLContext {
- private static final boolean DEBUG = Debug.debug("WindowsPbufferGLContext");
-
- // State for render-to-texture and render-to-texture-rectangle support
- private WindowsPbufferGLDrawable drawable;
- private boolean rtt; // render-to-texture?
- private boolean hasRTT; // render-to-texture extension available?
- private boolean rect; // render-to-texture-rectangle?
- private int textureTarget; // e.g. GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE_NV
- private int texture; // actual texture object
-
- public WindowsPbufferGLContext(WindowsPbufferGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- this.drawable = drawable;
- }
-
- public void bindPbufferToTexture() {
- if (!rtt) {
- throw new GLException("Shouldn't try to bind a pbuffer to a texture if render-to-texture hasn't been " +
- "specified in its GLCapabilities");
- }
- GL gl = getGL();
- WGLExt wglExt = getWGLExt();
- gl.glBindTexture(textureTarget, texture);
- if (rtt && hasRTT) {
- if (!wglExt.wglBindTexImageARB(drawable.getPbuffer(), WGLExt.WGL_FRONT_LEFT_ARB)) {
- throw new GLException("Binding of pbuffer to texture failed: " + wglGetLastError());
- }
- }
- // FIXME: comment is wrong now
- // Note that if the render-to-texture extension is not supported,
- // we perform a glCopyTexImage2D in swapBuffers().
- }
-
- public void releasePbufferFromTexture() {
- if (!rtt) {
- throw new GLException("Shouldn't try to bind a pbuffer to a texture if render-to-texture hasn't been " +
- "specified in its GLCapabilities");
- }
- if (rtt && hasRTT) {
- WGLExt wglExt = getWGLExt();
- if (!wglExt.wglReleaseTexImageARB(drawable.getPbuffer(), WGLExt.WGL_FRONT_LEFT_ARB)) {
- throw new GLException("Releasing of pbuffer from texture failed: " + wglGetLastError());
- }
- }
- }
-
- protected int makeCurrentImpl() throws GLException {
- if (drawable.getHDC() == 0) {
- // pbuffer not instantiated (yet?)
- if (DEBUG) {
- System.err.println("pbuffer not instantiated");
- }
- return CONTEXT_NOT_CURRENT;
- }
-
- int res = super.makeCurrentImpl();
- if (DEBUG && VERBOSE) {
- System.err.println("WindowsPbufferGLContext: super.makeCurrentImpl() = " + res);
- }
- if (res == CONTEXT_CURRENT_NEW) {
- GLCapabilities capabilities = drawable.getCapabilities();
-
- // Initialize render-to-texture support if requested
- rtt = capabilities.getPbufferRenderToTexture();
- rect = capabilities.getPbufferRenderToTextureRectangle();
- GL gl = getGL();
-
- if (rtt) {
- if (DEBUG) {
- System.err.println("Initializing render-to-texture support");
- }
-
- if (!gl.isExtensionAvailable("WGL_ARB_render_texture")) {
- System.err.println("WindowsPbufferGLContext: WARNING: WGL_ARB_render_texture extension not " +
- "supported; implementing render_to_texture support using slow texture readback");
- } else {
- hasRTT = true;
-
- if (rect && !gl.isExtensionAvailable("GL_NV_texture_rectangle")) {
- System.err.println("WindowsPbufferGLContext: WARNING: GL_NV_texture_rectangle extension not " +
- "supported; skipping requested render_to_texture_rectangle support for pbuffer");
- rect = false;
- }
- if (rect) {
- if (DEBUG) {
- System.err.println(" Using render-to-texture-rectangle");
- }
- textureTarget = GL.GL_TEXTURE_RECTANGLE_NV;
- } else {
- if (DEBUG) {
- System.err.println(" Using vanilla render-to-texture");
- }
- textureTarget = GL.GL_TEXTURE_2D;
- }
- int[] tmp = new int[1];
- gl.glGenTextures(1, tmp, 0);
- texture = tmp[0];
- gl.glBindTexture(textureTarget, texture);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP_TO_EDGE);
- gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP_TO_EDGE);
- gl.glCopyTexImage2D(textureTarget, 0, GL.GL_RGB, 0, 0, drawable.getWidth(), drawable.getHeight(), 0);
- }
- }
- }
- return res;
- }
-
- public int getFloatingPointMode() {
- return drawable.getFloatingPointMode();
- }
-
- private static String wglGetLastError() {
- return WindowsGLDrawableFactory.wglGetLastError();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLDrawable.java b/src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLDrawable.java
deleted file mode 100644
index db8d110be..000000000
--- a/src/classes/com/sun/opengl/impl/windows/WindowsPbufferGLDrawable.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.windows;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class WindowsPbufferGLDrawable extends WindowsGLDrawable {
- private int initWidth;
- private int initHeight;
-
- private WGLExt cachedWGLExt; // cached WGLExt instance from parent GLCanvas,
- // needed to destroy pbuffer
- private long buffer; // pbuffer handle
- private int width;
- private int height;
-
- private int floatMode;
-
- public WindowsPbufferGLDrawable(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight,
- WindowsGLDrawable dummyDrawable,
- WGLExt wglExt) {
- super(capabilities, null);
- this.initWidth = initialWidth;
- this.initHeight = initialHeight;
- if (initWidth <= 0 || initHeight <= 0) {
- throw new GLException("Initial width and height of pbuffer must be positive (were (" +
- initWidth + ", " + initHeight + "))");
- }
-
- if (DEBUG) {
- System.out.println("Pbuffer caps on init: " + capabilities +
- (capabilities.getPbufferRenderToTexture() ? " [rtt]" : "") +
- (capabilities.getPbufferRenderToTextureRectangle() ? " [rect]" : "") +
- (capabilities.getPbufferFloatingPointBuffers() ? " [float]" : ""));
- }
-
- createPbuffer(dummyDrawable.getHDC(), wglExt);
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new WindowsPbufferGLContext(this, shareWith);
- }
-
- public void destroy() {
- if (hdc != 0) {
- // Must release DC and pbuffer
- // NOTE that since the context is not current, glGetError() can
- // not be called here, so we skip the use of any composable
- // pipelines (see WindowsOnscreenGLContext.makeCurrentImpl)
- WGLExt wglExt = cachedWGLExt;
- if (wglExt.wglReleasePbufferDCARB(buffer, hdc) == 0) {
- throw new GLException("Error releasing pbuffer device context: error code " + WGL.GetLastError());
- }
- hdc = 0;
- if (!wglExt.wglDestroyPbufferARB(buffer)) {
- throw new GLException("Error destroying pbuffer: error code " + WGL.GetLastError());
- }
- buffer = 0;
- setChosenGLCapabilities(null);
- }
- }
-
- public void setSize(int width, int height) {
- // FIXME
- throw new GLException("Not yet implemented");
- }
-
- public int getWidth() {
- return width;
- }
-
- public int getHeight() {
- return height;
- }
-
- public GLCapabilities getCapabilities() {
- return capabilities;
- }
-
- public long getPbuffer() {
- return buffer;
- }
-
- public int getFloatingPointMode() {
- return floatMode;
- }
-
- public void swapBuffers() throws GLException {
- // FIXME: this doesn't make sense any more because we don't have
- // access to our OpenGL context here
- /*
- // FIXME: do we need to do anything if the pbuffer is double-buffered?
- // For now, just grab the pixels for the render-to-texture support.
- if (rtt && !hasRTT) {
- if (DEBUG) {
- System.err.println("Copying pbuffer data to GL_TEXTURE_2D state");
- }
-
- GL gl = getGL();
- gl.glCopyTexSubImage2D(textureTarget, 0, 0, 0, 0, 0, width, height);
- }
- */
- }
-
- private void createPbuffer(long parentHdc, WGLExt wglExt) {
- int[] iattributes = new int [2*MAX_ATTRIBS];
- float[] fattributes = new float[1];
- int[] floatModeTmp = new int[1];
- int niattribs = 0;
-
- if (DEBUG) {
- System.out.println("Pbuffer parentHdc = " + toHexString(parentHdc));
- System.out.println("Pbuffer caps: " + capabilities +
- (capabilities.getPbufferRenderToTexture() ? " [rtt]" : "") +
- (capabilities.getPbufferRenderToTextureRectangle() ? " [rect]" : "") +
- (capabilities.getPbufferFloatingPointBuffers() ? " [float]" : ""));
- }
-
- if (!glCapabilities2iattributes(capabilities,
- iattributes,
- wglExt,
- true,
- floatModeTmp)) {
- throw new GLException("Pbuffer-related extensions not supported");
- }
-
- floatMode = floatModeTmp[0];
- boolean rtt = capabilities.getPbufferRenderToTexture();
- boolean rect = capabilities.getPbufferRenderToTextureRectangle();
- boolean useFloat = capabilities.getPbufferFloatingPointBuffers();
- boolean ati = false;
-
- if (useFloat) {
- ati = (floatMode == GLPbuffer.ATI_FLOAT);
- }
-
- int[] pformats = new int[MAX_PFORMATS];
- int nformats;
- int[] nformatsTmp = new int[1];
- if (!wglExt.wglChoosePixelFormatARB(parentHdc,
- iattributes, 0,
- fattributes, 0,
- MAX_PFORMATS,
- pformats, 0,
- nformatsTmp, 0)) {
- throw new GLException("pbuffer creation error: wglChoosePixelFormatARB() failed");
- }
- nformats = nformatsTmp[0];
- if (nformats <= 0) {
- throw new GLException("pbuffer creation error: Couldn't find a suitable pixel format");
- }
-
- boolean haveMultisample = wglExt.isExtensionAvailable("WGL_ARB_multisample");
-
- if (DEBUG) {
- System.err.println("" + nformats + " suitable pixel formats found");
- // query pixel format
- iattributes[0] = WGLExt.WGL_RED_BITS_ARB;
- iattributes[1] = WGLExt.WGL_GREEN_BITS_ARB;
- iattributes[2] = WGLExt.WGL_BLUE_BITS_ARB;
- iattributes[3] = WGLExt.WGL_ALPHA_BITS_ARB;
- iattributes[4] = WGLExt.WGL_DEPTH_BITS_ARB;
- iattributes[5] = (useFloat ? (ati ? WGLExt.WGL_PIXEL_TYPE_ARB : WGLExt.WGL_FLOAT_COMPONENTS_NV) : WGLExt.WGL_RED_BITS_ARB);
- iattributes[6] = (haveMultisample ? WGLExt.WGL_SAMPLE_BUFFERS_ARB : WGLExt.WGL_RED_BITS_ARB);
- iattributes[7] = (haveMultisample ? WGLExt.WGL_SAMPLES_ARB : WGLExt.WGL_RED_BITS_ARB);
- iattributes[8] = WGLExt.WGL_DRAW_TO_PBUFFER_ARB;
- int[] ivalues = new int[9];
- for (int i = 0; i < nformats; i++) {
- if (!wglExt.wglGetPixelFormatAttribivARB(parentHdc, pformats[i], 0, 9, iattributes, 0, ivalues, 0)) {
- throw new GLException("Error while querying pixel format " + pformats[i] +
- "'s (index " + i + "'s) capabilities for debugging");
- }
- System.err.print("pixel format " + pformats[i] + " (index " + i + "): ");
- System.err.print( "r: " + ivalues[0]);
- System.err.print(" g: " + ivalues[1]);
- System.err.print(" b: " + ivalues[2]);
- System.err.print(" a: " + ivalues[3]);
- System.err.print(" depth: " + ivalues[4]);
- if (haveMultisample) {
- System.err.print(" multisample: " + ivalues[6]);
- }
- System.err.print(" samples: " + ivalues[7]);
- if (useFloat) {
- if (ati) {
- if (ivalues[5] == WGLExt.WGL_TYPE_RGBA_FLOAT_ATI) {
- System.err.print(" [ati float]");
- } else if (ivalues[5] != WGLExt.WGL_TYPE_RGBA_ARB) {
- System.err.print(" [unknown pixel type " + ivalues[5] + "]");
- }
- } else {
- if (ivalues[5] != 0) {
- System.err.print(" [float]");
- }
- }
- }
-
- if (ivalues[8] != 0) {
- System.err.print(" [pbuffer]");
- }
- System.err.println();
- }
- }
-
- long tmpBuffer = 0;
- int whichFormat = -1;
- // Loop is a workaround for bugs in NVidia's recent drivers
- for (whichFormat = 0; whichFormat < nformats; whichFormat++) {
- int format = pformats[whichFormat];
-
- // Create the p-buffer.
- niattribs = 0;
-
- if (rtt) {
- iattributes[niattribs++] = WGLExt.WGL_TEXTURE_FORMAT_ARB;
- if (useFloat) {
- iattributes[niattribs++] = WGLExt.WGL_TEXTURE_FLOAT_RGB_NV;
- } else {
- iattributes[niattribs++] = WGLExt.WGL_TEXTURE_RGBA_ARB;
- }
-
- iattributes[niattribs++] = WGLExt.WGL_TEXTURE_TARGET_ARB;
- iattributes[niattribs++] = rect ? WGLExt.WGL_TEXTURE_RECTANGLE_NV : WGLExt.WGL_TEXTURE_2D_ARB;
-
- iattributes[niattribs++] = WGLExt.WGL_MIPMAP_TEXTURE_ARB;
- iattributes[niattribs++] = GL.GL_FALSE;
-
- iattributes[niattribs++] = WGLExt.WGL_PBUFFER_LARGEST_ARB;
- iattributes[niattribs++] = GL.GL_FALSE;
- }
-
- iattributes[niattribs++] = 0;
-
- tmpBuffer = wglExt.wglCreatePbufferARB(parentHdc, format, initWidth, initHeight, iattributes, 0);
- if (tmpBuffer != 0) {
- // Done
- break;
- }
- }
-
- if (tmpBuffer == 0) {
- throw new GLException("pbuffer creation error: wglCreatePbufferARB() failed: tried " + nformats +
- " pixel formats, last error was: " + wglGetLastError());
- }
-
- // Get the device context.
- long tmpHdc = wglExt.wglGetPbufferDCARB(tmpBuffer);
- if (tmpHdc == 0) {
- throw new GLException("pbuffer creation error: wglGetPbufferDCARB() failed");
- }
-
- // Set up instance variables
- buffer = tmpBuffer;
- hdc = tmpHdc;
- cachedWGLExt = wglExt;
-
- // Re-query chosen pixel format
- {
- niattribs = 0;
- iattributes[niattribs++] = WGLExt.WGL_ACCELERATION_ARB;
- iattributes[niattribs++] = WGLExt.WGL_RED_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_GREEN_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_BLUE_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ALPHA_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_DEPTH_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_STENCIL_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_DOUBLE_BUFFER_ARB;
- iattributes[niattribs++] = WGLExt.WGL_STEREO_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_RED_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_GREEN_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_BLUE_BITS_ARB;
- iattributes[niattribs++] = WGLExt.WGL_ACCUM_ALPHA_BITS_ARB;
- iattributes[niattribs++] = (useFloat ? (ati ? WGLExt.WGL_PIXEL_TYPE_ARB : WGLExt.WGL_FLOAT_COMPONENTS_NV) : WGLExt.WGL_RED_BITS_ARB);
- iattributes[niattribs++] = (haveMultisample ? WGLExt.WGL_SAMPLE_BUFFERS_ARB : WGLExt.WGL_RED_BITS_ARB);
- iattributes[niattribs++] = (haveMultisample ? WGLExt.WGL_SAMPLES_ARB : WGLExt.WGL_RED_BITS_ARB);
- iattributes[niattribs++] = WGLExt.WGL_DRAW_TO_PBUFFER_ARB;
- int[] ivalues = new int[niattribs];
- // FIXME: usually prefer to throw exceptions, but failure here is not critical
- if (wglExt.wglGetPixelFormatAttribivARB(parentHdc, pformats[whichFormat], 0, niattribs, iattributes, 0, ivalues, 0)) {
- setChosenGLCapabilities(iattributes2GLCapabilities(iattributes, niattribs, ivalues, false));
- }
- }
-
- // Determine the actual width and height we were able to create.
- int[] tmp = new int[1];
- wglExt.wglQueryPbufferARB( buffer, WGLExt.WGL_PBUFFER_WIDTH_ARB, tmp, 0 );
- width = tmp[0];
- wglExt.wglQueryPbufferARB( buffer, WGLExt.WGL_PBUFFER_HEIGHT_ARB, tmp, 0 );
- height = tmp[0];
-
- if (DEBUG) {
- System.err.println("Created pbuffer " + width + " x " + height);
- }
- }
-
- private static String wglGetLastError() {
- return WindowsGLDrawableFactory.wglGetLastError();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/DRIHack.java b/src/classes/com/sun/opengl/impl/x11/DRIHack.java
deleted file mode 100644
index 35a1c8fc7..000000000
--- a/src/classes/com/sun/opengl/impl/x11/DRIHack.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import java.io.*;
-import java.security.*;
-import com.sun.gluegen.runtime.*;
-import com.sun.opengl.impl.*;
-
-/**
- * Helper class for working around problems with open-source DRI
- * drivers. In the current DRI implementation it is required that the
- * symbols in libGL.so.1.2 be globally visible to be accessible from
- * other libraries that are dynamically loaded by the implementation.
- * Applications may typically satisfy this need either by linking
- * against libGL.so on the command line (-lGL) or by dlopen'ing
- * libGL.so.1.2 with the RTLD_GLOBAL flag. The JOGL implementation
- * links against libGL on all platforms rather than forcing all OpenGL
- * entry points to be called through a function pointer. This allows
- * the JOGL library to link directly to core 1.1 OpenGL entry points
- * like glVertex3f, while calling through function pointers for entry
- * points from later OpenGL versions as well as from
- * extensions. However, because libjogl.so (which links against
- * libGL.so) is loaded by the JVM, and because the JVM implicitly uses
- * RTLD_LOCAL in the implementation of System.loadLibrary(), this
- * means via transitivity that the symbols for libGL.so have only
- * RTLD_LOCAL visibility to the rest of the application, so the DRI
- * drivers can not find the symbols required. <P>
- *
- * There are at least two possible solutions. One would be to change
- * the JOGL implementation to call through function pointers uniformly
- * so that it does not need to link against libGL.so. This is
- * possible, but requires changes to GlueGen and also is not really
- * necessary in any other situation than with the DRI drivers. Another
- * solution is to force the first load of libGL.so.1.2 to be done
- * dynamically with RTLD_GLOBAL before libjogl.so is loaded and causes
- * libGL.so.1.2 to be loaded again. The NativeLibrary class in the
- * GlueGen runtime has this property, and we use it to implement this
- * workaround.
- */
-
-public class DRIHack {
- private static final boolean DEBUG = Debug.debug("DRIHack");
- private static boolean driHackNeeded;
- private static NativeLibrary oglLib;
-
- public static void begin() {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- String os = System.getProperty("os.name").toLowerCase();
- // Do DRI hack on all Linux distributions for best robustness
- driHackNeeded =
- (os.startsWith("linux") ||
- new File("/usr/lib/dri").exists() ||
- new File("/usr/X11R6/lib/modules/dri").exists());
- // Allow manual overriding for now as a workaround for
- // problems seen in some situations -- needs more investigation
- if (System.getProperty("jogl.drihack.disable") != null) {
- driHackNeeded = false;
- }
- return null;
- }
- });
-
- if (driHackNeeded) {
- if (DEBUG) {
- System.err.println("Beginning DRI hack");
- }
-
- // Try a few different variants for best robustness
- // In theory probably only the first is necessary
- oglLib = NativeLibrary.open("libGL.so.1", null);
- if (DEBUG && oglLib != null) System.err.println(" Found libGL.so.1");
- if (oglLib == null) {
- oglLib = NativeLibrary.open("/usr/lib/libGL.so.1", null);
- if (DEBUG && oglLib != null) System.err.println(" Found /usr/lib/libGL.so.1");
- }
- }
- }
-
- public static void end() {
- if (oglLib != null) {
- if (DEBUG) {
- System.err.println("Ending DRI hack");
- }
-
- oglLib.close();
- oglLib = null;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java b/src/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java
deleted file mode 100755
index 89b769eee..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11ExternalGLContext extends X11GLContext {
- private boolean firstMakeCurrent = true;
- private boolean created = true;
- private GLContext lastContext;
-
- public X11ExternalGLContext() {
- super(null, null);
- lockToolkit();
- try {
- context = GLX.glXGetCurrentContext();
- if (context == 0) {
- throw new GLException("Error: attempted to make an external GLContext without a drawable/context current");
- }
- drawable = new Drawable(GLX.glXGetCurrentDisplay());
- } finally {
- unlockToolkit();
- }
- GLContextShareSet.contextCreated(this);
- resetGLFunctionAvailability();
- }
-
- protected void create() {
- }
-
- public int makeCurrent() throws GLException {
- // Save last context if necessary to allow external GLContexts to
- // talk to other GLContexts created by this library
- GLContext cur = getCurrent();
- if (cur != null && cur != this) {
- lastContext = cur;
- setCurrent(null);
- }
- return super.makeCurrent();
- }
-
- public void release() throws GLException {
- super.release();
- setCurrent(lastContext);
- lastContext = null;
- }
-
- protected int makeCurrentImpl() throws GLException {
- mostRecentDisplay = drawable.getDisplay();
- if (firstMakeCurrent) {
- firstMakeCurrent = false;
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected void releaseImpl() throws GLException {
- }
-
- protected void destroyImpl() throws GLException {
- created = false;
- GLContextShareSet.contextDestroyed(this);
- }
-
- public boolean isCreated() {
- return created;
- }
-
- // Need to provide the display connection to extension querying APIs
- class Drawable extends X11GLDrawable {
- Drawable(long display) {
- super(null, null);
- this.display = display;
- }
-
- public GLContext createContext(GLContext shareWith) {
- throw new GLException("Should not call this");
- }
-
- public int getWidth() {
- throw new GLException("Should not call this");
- }
-
- public int getHeight() {
- throw new GLException("Should not call this");
- }
-
- public void setSize(int width, int height) {
- throw new GLException("Should not call this");
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11ExternalGLDrawable.java b/src/classes/com/sun/opengl/impl/x11/X11ExternalGLDrawable.java
deleted file mode 100755
index 10e58d3a0..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11ExternalGLDrawable.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11ExternalGLDrawable extends X11GLDrawable {
- private int fbConfigID;
- private int renderType;
- private int screen;
- private long readDrawable;
-
- public X11ExternalGLDrawable() {
- super(null, null);
- lockToolkit();
- try {
- display = GLX.glXGetCurrentDisplay();
- drawable = GLX.glXGetCurrentDrawable();
- readDrawable = GLX.glXGetCurrentReadDrawable();
- if (drawable == 0) {
- throw new GLException("Error: attempted to make an external GLDrawable without a drawable/context current");
- }
-
- // Need GLXFBConfig ID in order to properly create new contexts
- // on this drawable
- long context = GLX.glXGetCurrentContext();
- int[] val = new int[1];
- GLX.glXQueryContext(display, context, GLX.GLX_FBCONFIG_ID, val, 0);
- fbConfigID = val[0];
- renderType = GLX.GLX_RGBA_TYPE;
- GLX.glXQueryContext(display, context, GLX.GLX_RENDER_TYPE, val, 0);
- if ((val[0] & GLX.GLX_RGBA_BIT) == 0) {
- if (DEBUG) {
- System.err.println("X11ExternalGLDrawable: WARNING: forcing GLX_RGBA_TYPE for newly created contexts");
- }
- }
- GLX.glXQueryContext(display, context, GLX.GLX_SCREEN, val, 0);
- screen = val[0];
- } finally {
- unlockToolkit();
- }
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new Context(shareWith);
- }
-
- public void setSize(int newWidth, int newHeight) {
- throw new GLException("Should not call this");
- }
-
- public int getWidth() {
- throw new GLException("Should not call this");
- }
-
- public int getHeight() {
- throw new GLException("Should not call this");
- }
-
- public void destroy() {
- }
-
- class Context extends X11GLContext {
- Context(GLContext shareWith) {
- super(X11ExternalGLDrawable.this, shareWith);
- this.drawable = drawable;
- }
-
- protected int makeCurrentImpl() throws GLException {
- if (drawable.getDrawable() == 0) {
- // parent drawable not properly initialized
- // FIXME: signal error?
- if (DEBUG) {
- System.err.println("parent drawable not properly initialized");
- }
- return CONTEXT_NOT_CURRENT;
- }
-
- // Note that we have to completely override makeCurrentImpl
- // because the underlying makeCurrent call differs from the norm
- lockToolkit();
- try {
- boolean created = false;
- if (context == 0) {
- create();
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Created GL context for " + getClass().getName());
- }
- created = true;
- }
-
- if (!GLX.glXMakeContextCurrent(drawable.getDisplay(),
- drawable.getDrawable(),
- readDrawable,
- context)) {
- throw new GLException("Error making context current");
- } else {
- mostRecentDisplay = drawable.getDisplay();
- if (DEBUG && VERBOSE) {
- System.err.println(getThreadName() + ": glXMakeCurrent(display " + toHexString(drawable.getDisplay()) +
- ", drawable " + toHexString(drawable.getDrawable()) +
- ", context " + toHexString(context) + ") succeeded");
- }
- }
-
- if (created) {
- resetGLFunctionAvailability();
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- } finally {
- unlockToolkit();
- }
- }
-
- protected void releaseImpl() throws GLException {
- lockToolkit();
- try {
- if (!GLX.glXMakeContextCurrent(drawable.getDisplay(), 0, 0, 0)) {
- throw new GLException("Error freeing OpenGL context");
- }
- } finally {
- unlockToolkit();
- }
- }
-
- protected void create() {
- // We already have the GLXFBConfig ID for the context. All we
- // need to do is use it to choose the GLXFBConfig and then
- // create a context with it.
- int[] iattributes = new int[] {
- GLX.GLX_FBCONFIG_ID,
- fbConfigID,
- 0,
- 0
- };
- float[] fattributes = new float[0];
- int[] nelementsTmp = new int[1];
- GLXFBConfig[] fbConfigs = GLX.glXChooseFBConfig(display, screen, iattributes, 0, nelementsTmp, 0);
- int nelements = nelementsTmp[0];
- if (nelements <= 0) {
- throw new GLException("context creation error: couldn't find a suitable frame buffer configuration");
- }
- if (nelements != 1) {
- throw new GLException("context creation error: shouldn't get more than one GLXFBConfig");
- }
- // Note that we currently don't allow selection of anything but
- // the first GLXFBConfig in the returned list (there should be only one)
- GLXFBConfig fbConfig = fbConfigs[0];
- // Create a gl context for the drawable
- X11GLContext other = (X11GLContext) GLContextShareSet.getShareContext(this);
- long share = 0;
- if (other != null) {
- share = other.getContext();
- if (share == 0) {
- throw new GLException("GLContextShareSet returned an invalid OpenGL context");
- }
- }
- // FIXME: how to determine "direct" bit?
- context = GLX.glXCreateNewContext(display, fbConfig, renderType, share, true);
- if (context == 0) {
- String detail = " display=" + toHexString(display) +
- " fbconfig=" + fbConfig +
- " fbconfigID=" + toHexString(fbConfigID) +
- " renderType=" + toHexString(renderType) +
- " share=" + toHexString(share);
- throw new GLException("context creation error: glXCreateNewContext() failed: " + detail);
- }
- GLContextShareSet.contextCreated(this);
-
- if (DEBUG) {
- System.err.println("Created context " + toHexString(context) +
- " for GLXDrawable " + toHexString(drawable.getDrawable()));
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11GLContext.java b/src/classes/com/sun/opengl/impl/x11/X11GLContext.java
deleted file mode 100644
index 17b2cca40..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11GLContext.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import java.nio.*;
-import java.util.*;
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public abstract class X11GLContext extends GLContextImpl {
- protected X11GLDrawable drawable;
- protected long context;
- private boolean glXQueryExtensionsStringInitialized;
- private boolean glXQueryExtensionsStringAvailable;
- private static final Map/*<String, String>*/ functionNameMap;
- private GLXExt glXExt;
- // Table that holds the addresses of the native C-language entry points for
- // GLX extension functions.
- private GLXExtProcAddressTable glXExtProcAddressTable;
- // Cache the most recent value of the "display" variable (which we
- // only guarantee to be valid in between makeCurrent / free pairs)
- // so that we can implement displayImpl() (which must be done when
- // the context is not current)
- protected long mostRecentDisplay;
-
- static {
- functionNameMap = new HashMap();
- functionNameMap.put("glAllocateMemoryNV", "glXAllocateMemoryNV");
- functionNameMap.put("glFreeMemoryNV", "glXFreeMemoryNV");
- }
-
- public X11GLContext(X11GLDrawable drawable,
- GLContext shareWith) {
- super(shareWith);
- this.drawable = drawable;
- }
-
- public Object getPlatformGLExtensions() {
- return getGLXExt();
- }
-
- public GLXExt getGLXExt() {
- if (glXExt == null) {
- glXExt = new GLXExtImpl(this);
- }
- return glXExt;
- }
-
- public GLDrawable getGLDrawable() {
- return drawable;
- }
-
- protected String mapToRealGLFunctionName(String glFunctionName) {
- String lookup = (String) functionNameMap.get(glFunctionName);
- if (lookup != null) {
- return lookup;
- }
- return glFunctionName;
- }
-
- protected String mapToRealGLExtensionName(String glExtensionName) {
- return glExtensionName;
- }
-
- /** Helper routine which usually just turns around and calls
- * createContext (except for pbuffers, which use a different context
- * creation mechanism). Should only be called by {@link
- * makeCurrentImpl()}.
- */
- protected abstract void create();
-
- /**
- * Creates and initializes an appropriate OpenGL context. Should only be
- * called by {@link create()}.
- */
- protected void createContext(boolean onscreen) {
- XVisualInfo vis = drawable.chooseVisual(onscreen);
- X11GLContext other = (X11GLContext) GLContextShareSet.getShareContext(this);
- long share = 0;
- if (other != null) {
- share = other.getContext();
- if (share == 0) {
- throw new GLException("GLContextShareSet returned an invalid OpenGL context");
- }
- }
- context = GLX.glXCreateContext(drawable.getDisplay(), vis, share, onscreen);
- if (context == 0) {
- throw new GLException("Unable to create OpenGL context");
- }
- GLContextShareSet.contextCreated(this);
- }
-
- protected int makeCurrentImpl() throws GLException {
- boolean created = false;
- if (context == 0) {
- create();
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Created GL context for " + getClass().getName());
- }
- created = true;
- }
-
- if (!GLX.glXMakeCurrent(drawable.getDisplay(), drawable.getDrawable(), context)) {
- throw new GLException("Error making context current");
- } else {
- mostRecentDisplay = drawable.getDisplay();
- if (DEBUG && (VERBOSE || created)) {
- System.err.println(getThreadName() + ": glXMakeCurrent(display " + toHexString(drawable.getDisplay()) +
- ", drawable " + toHexString(drawable.getDrawable()) +
- ", context " + toHexString(context) + ") succeeded");
- }
- }
-
- if (created) {
- resetGLFunctionAvailability();
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- }
-
- protected void releaseImpl() throws GLException {
- lockToolkit();
- try {
- if (!GLX.glXMakeCurrent(mostRecentDisplay, 0, 0)) {
- throw new GLException("Error freeing OpenGL context");
- }
- } finally {
- unlockToolkit();
- }
- }
-
- protected void destroyImpl() throws GLException {
- lockToolkit();
- try {
- if (context != 0) {
- if (DEBUG) {
- System.err.println("glXDestroyContext(0x" +
- Long.toHexString(mostRecentDisplay) +
- ", 0x" +
- Long.toHexString(context) + ")");
- }
- GLX.glXDestroyContext(mostRecentDisplay, context);
- if (DEBUG) {
- System.err.println("!!! Destroyed OpenGL context " + context);
- }
- context = 0;
- mostRecentDisplay = 0;
- GLContextShareSet.contextDestroyed(this);
- }
- } finally {
- unlockToolkit();
- }
- }
-
- public boolean isCreated() {
- return (context != 0);
- }
-
- public void copy(GLContext source, int mask) throws GLException {
- long dst = getContext();
- long src = ((X11GLContext) source).getContext();
- if (src == 0) {
- throw new GLException("Source OpenGL context has not been created");
- }
- if (dst == 0) {
- throw new GLException("Destination OpenGL context has not been created");
- }
- if (mostRecentDisplay == 0) {
- throw new GLException("Connection to X display not yet set up");
- }
- lockToolkit();
- try {
- GLX.glXCopyContext(mostRecentDisplay, src, dst, mask);
- // Should check for X errors and raise GLException
- } finally {
- unlockToolkit();
- }
- }
-
- protected void resetGLFunctionAvailability() {
- super.resetGLFunctionAvailability();
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Initializing GLX extension address table");
- }
- resetProcAddressTable(getGLXExtProcAddressTable());
- }
-
- public GLXExtProcAddressTable getGLXExtProcAddressTable() {
- if (glXExtProcAddressTable == null) {
- // FIXME: cache ProcAddressTables by capability bits so we can
- // share them among contexts with the same capabilities
- glXExtProcAddressTable = new GLXExtProcAddressTable();
- }
- return glXExtProcAddressTable;
- }
-
- public synchronized String getPlatformExtensionsString() {
- if (mostRecentDisplay == 0) {
- throw new GLException("Context not current");
- }
- if (!glXQueryExtensionsStringInitialized) {
- glXQueryExtensionsStringAvailable =
- (GLDrawableFactoryImpl.getFactoryImpl().dynamicLookupFunction("glXQueryExtensionsString") != 0);
- glXQueryExtensionsStringInitialized = true;
- }
- if (glXQueryExtensionsStringAvailable) {
- lockToolkit();
- try {
- String ret = GLX.glXQueryExtensionsString(mostRecentDisplay, GLX.DefaultScreen(mostRecentDisplay));
- if (DEBUG) {
- System.err.println("!!! GLX extensions: " + ret);
- }
- return ret;
- } finally {
- unlockToolkit();
- }
- } else {
- return "";
- }
- }
-
- protected boolean isFunctionAvailable(String glFunctionName)
- {
- boolean available = super.isFunctionAvailable(glFunctionName);
-
- // Sanity check for implementations that use proc addresses for run-time
- // linking: if the function IS available, then make sure there's a proc
- // address for it if it's an extension or not part of the OpenGL 1.1 core
- // (post GL 1.1 functions are run-time linked on windows).
- assert(!available ||
- (getGLProcAddressTable().getAddressFor(mapToRealGLFunctionName(glFunctionName)) != 0 ||
- FunctionAvailabilityCache.isPartOfGLCore("1.1", mapToRealGLFunctionName(glFunctionName)))
- );
-
- return available;
- }
-
- public boolean isExtensionAvailable(String glExtensionName) {
- if (glExtensionName.equals("GL_ARB_pbuffer") ||
- glExtensionName.equals("GL_ARB_pixel_format")) {
- return GLDrawableFactory.getFactory().canCreateGLPbuffer();
- }
- return super.isExtensionAvailable(glExtensionName);
- }
-
-
- public void setSwapInterval(int interval) {
- lockToolkit();
- try {
- // FIXME: make the context current first? Currently assumes that
- // will not be necessary. Make the caller do this?
- GLXExt glXExt = getGLXExt();
- if (glXExt.isExtensionAvailable("GLX_SGI_swap_control")) {
- glXExt.glXSwapIntervalSGI(interval);
- }
- } finally {
- unlockToolkit();
- }
- }
-
- public ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
- return getGLXExt().glXAllocateMemoryNV(arg0, arg1, arg2, arg3);
- }
-
- public int getOffscreenContextPixelDataType() {
- throw new GLException("Should not call this");
- }
-
- public int getOffscreenContextReadBuffer() {
- throw new GLException("Should not call this");
- }
-
- public boolean offscreenImageNeedsVerticalFlip() {
- throw new GLException("Should not call this");
- }
-
- public void bindPbufferToTexture() {
- throw new GLException("Should not call this");
- }
-
- public void releasePbufferFromTexture() {
- throw new GLException("Should not call this");
- }
-
- public boolean isOptimizable() {
- return (super.isOptimizable() &&
- !X11GLDrawableFactory.getX11Factory().isVendorATI());
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- public long getContext() {
- return context;
- }
-
- // These synchronization primitives prevent the AWT from making
- // requests from the X server asynchronously to this code.
- protected void lockToolkit() {
- X11GLDrawableFactory.getX11Factory().lockToolkit();
- }
-
- protected void unlockToolkit() {
- X11GLDrawableFactory.getX11Factory().unlockToolkit();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11GLDrawable.java b/src/classes/com/sun/opengl/impl/x11/X11GLDrawable.java
deleted file mode 100644
index c11404b9f..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11GLDrawable.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public abstract class X11GLDrawable extends GLDrawableImpl {
- protected static final boolean DEBUG = Debug.debug("X11GLDrawable");
-
- protected long display;
- protected long drawable;
- protected long visualID;
- protected GLCapabilities capabilities;
- protected GLCapabilitiesChooser chooser;
-
- public X11GLDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- this.capabilities = (capabilities == null) ? null :
- ((GLCapabilities) capabilities.clone());
- this.chooser = chooser;
- }
-
- public void setRealized(boolean val) {
- throw new GLException("Should not call this (should only be called for onscreen GLDrawables)");
- }
-
- public void destroy() {
- throw new GLException("Should not call this (should only be called for offscreen GLDrawables)");
- }
-
- public void swapBuffers() throws GLException {
- }
-
- public long getDisplay() {
- return display;
- }
-
- public long getDrawable() {
- return drawable;
- }
-
- //---------------------------------------------------------------------------
- // Internals only below this point
- //
-
- protected XVisualInfo chooseVisual(boolean onscreen) {
- if (display == 0) {
- throw new GLException("null display");
- }
-
- // FIXME
- if (onscreen) {
- // The visual has already been chosen by the time we get here;
- // it's specified by the GraphicsConfiguration of the
- // GLCanvas. Fortunately, the JAWT supplies the visual ID for
- // the component in a portable fashion, so all we have to do is
- // use XGetVisualInfo with a VisualIDMask to get the
- // corresponding XVisualInfo to pass into glXChooseVisual.
- int[] count = new int[1];
- XVisualInfo template = XVisualInfo.create();
- // FIXME: probably not 64-bit clean
- template.visualid((int) visualID);
- lockToolkit();
- XVisualInfo[] infos = GLX.XGetVisualInfo(display, GLX.VisualIDMask, template, count, 0);
- unlockToolkit();
- if (infos == null || infos.length == 0) {
- throw new GLException("Error while getting XVisualInfo for visual ID " + visualID);
- }
- if (DEBUG) {
- System.err.println("!!! Fetched XVisualInfo for visual ID 0x" + Long.toHexString(visualID));
- System.err.println("!!! Resulting XVisualInfo: visualid = 0x" + Long.toHexString(infos[0].visualid()));
- }
-
- // FIXME: the storage for the infos array is leaked (should
- // clean it up somehow when we're done with the visual we're
- // returning)
- return infos[0];
- } else {
- // It isn't clear to me whether we need this much code to handle
- // the offscreen case, where we're creating a pixmap into which
- // to render...this is what we (incorrectly) used to do for the
- // onscreen case
-
- int screen = 0; // FIXME: provide way to specify this?
- XVisualInfo vis = null;
- int[] count = new int[1];
- XVisualInfo template = XVisualInfo.create();
- template.screen(screen);
- XVisualInfo[] infos = null;
- GLCapabilities[] caps = null;
- lockToolkit();
- try {
- infos = GLX.XGetVisualInfo(display, GLX.VisualScreenMask, template, count, 0);
- if (infos == null) {
- throw new GLException("Error while enumerating available XVisualInfos");
- }
- caps = new GLCapabilities[infos.length];
- for (int i = 0; i < infos.length; i++) {
- caps[i] = X11GLDrawableFactory.xvi2GLCapabilities(display, infos[i]);
- }
- } finally {
- unlockToolkit();
- }
- int chosen = chooser.chooseCapabilities(capabilities, caps, -1);
- if (chosen < 0 || chosen >= caps.length) {
- throw new GLException("GLCapabilitiesChooser specified invalid index (expected 0.." + (caps.length - 1) + ")");
- }
- if (DEBUG) {
- System.err.println("Chosen visual (" + chosen + "):");
- System.err.println(caps[chosen]);
- }
- vis = infos[chosen];
- if (vis == null) {
- throw new GLException("GLCapabilitiesChooser chose an invalid visual");
- }
- // FIXME: the storage for the infos array is leaked (should
- // clean it up somehow when we're done with the visual we're
- // returning)
-
- return vis;
- }
- }
-
-
- // These synchronization primitives prevent the AWT from making
- // requests from the X server asynchronously to this code.
- protected void lockToolkit() {
- X11GLDrawableFactory.getX11Factory().lockToolkit();
- }
-
- protected void unlockToolkit() {
- X11GLDrawableFactory.getX11Factory().unlockToolkit();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11GLDrawableFactory.java b/src/classes/com/sun/opengl/impl/x11/X11GLDrawableFactory.java
deleted file mode 100644
index 6ff112348..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11GLDrawableFactory.java
+++ /dev/null
@@ -1,799 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsEnvironment;
-import java.nio.*;
-import java.security.*;
-import java.util.*;
-import javax.media.opengl.*;
-import com.sun.gluegen.runtime.*;
-import com.sun.opengl.impl.*;
-
-public class X11GLDrawableFactory extends GLDrawableFactoryImpl {
- private static final boolean DEBUG = Debug.debug("X11GLDrawableFactory");
-
- // ATI's proprietary drivers apparently send GLX tokens even for
- // direct contexts, so we need to disable the context optimizations
- // in this case
- private static boolean isVendorATI;
-
- // See whether we're running in headless mode
- private static boolean isHeadless;
-
- // Map for rediscovering the GLCapabilities associated with a
- // particular screen and visualID after the fact
- private static Map visualToGLCapsMap = Collections.synchronizedMap(new HashMap());
-
- static class ScreenAndVisualIDKey {
- private int screen;
- private long visualID;
-
- ScreenAndVisualIDKey(int screen,
- long visualID) {
- this.screen = screen;
- this.visualID = visualID;
- }
-
- public int hashCode() {
- return (int) (screen + 13 * visualID);
- }
-
- public boolean equals(Object obj) {
- if ((obj == null) || (!(obj instanceof ScreenAndVisualIDKey))) {
- return false;
- }
-
- ScreenAndVisualIDKey key = (ScreenAndVisualIDKey) obj;
- return (screen == key.screen &&
- visualID == key.visualID);
- }
-
- int screen() { return screen; }
- long visualID() { return visualID; }
- }
-
- static {
- // See DRIHack.java for an explanation of why this is necessary
- DRIHack.begin();
-
- com.sun.opengl.impl.NativeLibLoader.loadCore();
-
- DRIHack.end();
-
- isHeadless = GraphicsEnvironment.isHeadless();
- }
-
- public X11GLDrawableFactory() {
- // Must initialize GLX support eagerly in case a pbuffer is the
- // first thing instantiated
- ProcAddressHelper.resetProcAddressTable(GLX.getGLXProcAddressTable(), this);
- }
-
- private static final int MAX_ATTRIBS = 128;
-
- public AbstractGraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- AbstractGraphicsDevice absDevice) {
- if (capabilities == null) {
- capabilities = new GLCapabilities();
- }
- if (chooser == null) {
- chooser = new DefaultGLCapabilitiesChooser();
- }
- GraphicsDevice device = null;
- if (absDevice != null &&
- !(absDevice instanceof AWTGraphicsDevice)) {
- throw new IllegalArgumentException("This GLDrawableFactory accepts only AWTGraphicsDevice objects");
- }
-
- if ((absDevice == null) ||
- (((AWTGraphicsDevice) absDevice).getGraphicsDevice() == null)) {
- device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
- } else {
- device = ((AWTGraphicsDevice) absDevice).getGraphicsDevice();
- }
-
- int screen;
- if (isXineramaEnabled()) {
- screen = 0;
- } else {
- screen = X11SunJDKReflection.graphicsDeviceGetScreen(device);
- }
-
- // Until we have a rock-solid visual selection algorithm written
- // in pure Java, we're going to provide the underlying window
- // system's selection to the chooser as a hint
-
- int[] attribs = glCapabilities2AttribList(capabilities, isMultisampleAvailable(), false, 0, 0);
- XVisualInfo[] infos = null;
- GLCapabilities[] caps = null;
- int recommendedIndex = -1;
- lockToolkit();
- try {
- long display = getDisplayConnection();
- XVisualInfo recommendedVis = GLX.glXChooseVisual(display, screen, attribs, 0);
- if (DEBUG) {
- System.err.print("!!! glXChooseVisual recommended ");
- if (recommendedVis == null) {
- System.err.println("null visual");
- } else {
- System.err.println("visual id 0x" + Long.toHexString(recommendedVis.visualid()));
- }
- }
- int[] count = new int[1];
- XVisualInfo template = XVisualInfo.create();
- template.screen(screen);
- infos = GLX.XGetVisualInfo(display, GLX.VisualScreenMask, template, count, 0);
- if (infos == null) {
- throw new GLException("Error while enumerating available XVisualInfos");
- }
- caps = new GLCapabilities[infos.length];
- for (int i = 0; i < infos.length; i++) {
- caps[i] = xvi2GLCapabilities(display, infos[i]);
- // Attempt to find the visual chosen by glXChooseVisual
- if (recommendedVis != null && recommendedVis.visualid() == infos[i].visualid()) {
- recommendedIndex = i;
- }
- }
- } finally {
- unlockToolkit();
- }
- // Store these away for later
- for (int i = 0; i < infos.length; i++) {
- if (caps[i] != null) {
- visualToGLCapsMap.put(new ScreenAndVisualIDKey(screen, infos[i].visualid()),
- caps[i].clone());
- }
- }
- int chosen = chooser.chooseCapabilities(capabilities, caps, recommendedIndex);
- if (chosen < 0 || chosen >= caps.length) {
- throw new GLException("GLCapabilitiesChooser specified invalid index (expected 0.." + (caps.length - 1) + ")");
- }
- XVisualInfo vis = infos[chosen];
- if (vis == null) {
- throw new GLException("GLCapabilitiesChooser chose an invalid visual");
- }
- // FIXME: need to look at glue code and see type of this field
- long visualID = vis.visualid();
- // FIXME: the storage for the infos array, as well as that for the
- // recommended visual, is leaked; should free them here with XFree()
-
- // Now figure out which GraphicsConfiguration corresponds to this
- // visual by matching the visual ID
- GraphicsConfiguration[] configs = device.getConfigurations();
- for (int i = 0; i < configs.length; i++) {
- GraphicsConfiguration config = configs[i];
- if (config != null) {
- if (X11SunJDKReflection.graphicsConfigurationGetVisualID(config) == visualID) {
- return new AWTGraphicsConfiguration(config);
- }
- }
- }
-
- // Either we weren't able to reflectively introspect on the
- // X11GraphicsConfig or something went wrong in the steps above;
- // we're going to return null without signaling an error condition
- // in this case (although we should distinguish between the two
- // and possibly report more of an error in the latter case)
- return null;
- }
-
- public GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- if (target == null) {
- throw new IllegalArgumentException("Null target");
- }
- if (!(target instanceof Component)) {
- throw new IllegalArgumentException("GLDrawables not supported for objects of type " +
- target.getClass().getName() + " (only Components are supported in this implementation)");
- }
- Component comp = (Component) target;
- X11OnscreenGLDrawable drawable = new X11OnscreenGLDrawable(comp);
- // Figure out the GLCapabilities of this component
- GraphicsConfiguration config = comp.getGraphicsConfiguration();
- if (config == null) {
- throw new IllegalArgumentException("GLDrawableFactory.chooseGraphicsConfiguration() was not used when creating this Component");
- }
- int visualID = X11SunJDKReflection.graphicsConfigurationGetVisualID(config);
- int screen;
- if (isXineramaEnabled()) {
- screen = 0;
- } else {
- screen = X11SunJDKReflection.graphicsDeviceGetScreen(config.getDevice());
- }
- drawable.setChosenGLCapabilities((GLCapabilities) visualToGLCapsMap.get(new ScreenAndVisualIDKey(screen, visualID)));
- return drawable;
- }
-
- public GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- return new X11OffscreenGLDrawable(capabilities, chooser);
- }
-
- private boolean pbufferSupportInitialized = false;
- private boolean canCreateGLPbuffer = false;
- public boolean canCreateGLPbuffer() {
- if (!pbufferSupportInitialized) {
- Runnable r = new Runnable() {
- public void run() {
- long display = getDisplayConnection();
- lockToolkit();
- try {
- int[] major = new int[1];
- int[] minor = new int[1];
- int screen = 0; // FIXME: provide way to specify this?
-
- if (!GLX.glXQueryVersion(display, major, 0, minor, 0)) {
- throw new GLException("glXQueryVersion failed");
- }
- if (DEBUG) {
- System.err.println("!!! GLX version: major " + major[0] +
- ", minor " + minor[0]);
- }
-
- // Work around bugs in ATI's Linux drivers where they report they
- // only implement GLX version 1.2 on the server side
- if (major[0] == 1 && minor[0] == 2) {
- String str = GLX.glXGetClientString(display, GLX.GLX_VERSION);
- if (str != null && str.startsWith("1.") &&
- (str.charAt(2) >= '3')) {
- canCreateGLPbuffer = true;
- }
- } else {
- canCreateGLPbuffer = ((major[0] > 1) || (minor[0] > 2));
- }
-
- pbufferSupportInitialized = true;
- } finally {
- unlockToolkit();
- }
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- }
- return canCreateGLPbuffer;
- }
-
- public GLPbuffer createGLPbuffer(final GLCapabilities capabilities,
- final GLCapabilitiesChooser chooser,
- final int initialWidth,
- final int initialHeight,
- final GLContext shareWith) {
- if (!canCreateGLPbuffer()) {
- throw new GLException("Pbuffer support not available with current graphics card");
- }
- final List returnList = new ArrayList();
- Runnable r = new Runnable() {
- public void run() {
- X11PbufferGLDrawable pbufferDrawable = new X11PbufferGLDrawable(capabilities,
- initialWidth,
- initialHeight);
- GLPbufferImpl pbuffer = new GLPbufferImpl(pbufferDrawable, shareWith);
- returnList.add(pbuffer);
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- return (GLPbuffer) returnList.get(0);
- }
-
- public GLContext createExternalGLContext() {
- return new X11ExternalGLContext();
- }
-
- public boolean canCreateExternalGLDrawable() {
- return canCreateGLPbuffer();
- }
-
- public GLDrawable createExternalGLDrawable() {
- return new X11ExternalGLDrawable();
- }
-
- public void loadGLULibrary() {
- GLX.dlopen("/usr/lib/libGLU.so");
- }
-
- public long dynamicLookupFunction(String glFuncName) {
- long res = 0;
- res = GLX.glXGetProcAddressARB(glFuncName);
- if (res == 0) {
- // GLU routines aren't known to the OpenGL function lookup
- res = GLX.dlsym(glFuncName);
- }
- return res;
- }
-
- public static GLCapabilities xvi2GLCapabilities(long display, XVisualInfo info) {
- int[] tmp = new int[1];
- int val = glXGetConfig(display, info, GLX.GLX_USE_GL, tmp, 0);
- if (val == 0) {
- // Visual does not support OpenGL
- return null;
- }
- val = glXGetConfig(display, info, GLX.GLX_RGBA, tmp, 0);
- if (val == 0) {
- // Visual does not support RGBA
- return null;
- }
- GLCapabilities res = new GLCapabilities();
- res.setDoubleBuffered(glXGetConfig(display, info, GLX.GLX_DOUBLEBUFFER, tmp, 0) != 0);
- res.setStereo (glXGetConfig(display, info, GLX.GLX_STEREO, tmp, 0) != 0);
- // Note: use of hardware acceleration is determined by
- // glXCreateContext, not by the XVisualInfo. Optimistically claim
- // that all GLCapabilities have the capability to be hardware
- // accelerated.
- res.setHardwareAccelerated(true);
- res.setDepthBits (glXGetConfig(display, info, GLX.GLX_DEPTH_SIZE, tmp, 0));
- res.setStencilBits (glXGetConfig(display, info, GLX.GLX_STENCIL_SIZE, tmp, 0));
- res.setRedBits (glXGetConfig(display, info, GLX.GLX_RED_SIZE, tmp, 0));
- res.setGreenBits (glXGetConfig(display, info, GLX.GLX_GREEN_SIZE, tmp, 0));
- res.setBlueBits (glXGetConfig(display, info, GLX.GLX_BLUE_SIZE, tmp, 0));
- res.setAlphaBits (glXGetConfig(display, info, GLX.GLX_ALPHA_SIZE, tmp, 0));
- res.setAccumRedBits (glXGetConfig(display, info, GLX.GLX_ACCUM_RED_SIZE, tmp, 0));
- res.setAccumGreenBits(glXGetConfig(display, info, GLX.GLX_ACCUM_GREEN_SIZE, tmp, 0));
- res.setAccumBlueBits (glXGetConfig(display, info, GLX.GLX_ACCUM_BLUE_SIZE, tmp, 0));
- res.setAccumAlphaBits(glXGetConfig(display, info, GLX.GLX_ACCUM_ALPHA_SIZE, tmp, 0));
- if (isMultisampleAvailable()) {
- res.setSampleBuffers(glXGetConfig(display, info, GLX.GLX_SAMPLE_BUFFERS_ARB, tmp, 0) != 0);
- res.setNumSamples (glXGetConfig(display, info, GLX.GLX_SAMPLES_ARB, tmp, 0));
- }
- return res;
- }
-
- public static int[] glCapabilities2AttribList(GLCapabilities caps,
- boolean isMultisampleAvailable,
- boolean pbuffer,
- long display,
- int screen) {
- int colorDepth = (caps.getRedBits() +
- caps.getGreenBits() +
- caps.getBlueBits());
- if (colorDepth < 15) {
- throw new GLException("Bit depths < 15 (i.e., non-true-color) not supported");
- }
- int[] res = new int[MAX_ATTRIBS];
- int idx = 0;
- if (pbuffer) {
- res[idx++] = GLXExt.GLX_DRAWABLE_TYPE;
- res[idx++] = GLXExt.GLX_PBUFFER_BIT;
-
- res[idx++] = GLXExt.GLX_RENDER_TYPE;
- res[idx++] = GLXExt.GLX_RGBA_BIT;
- } else {
- res[idx++] = GLX.GLX_RGBA;
- }
- if (caps.getDoubleBuffered()) {
- res[idx++] = GLX.GLX_DOUBLEBUFFER;
- if (pbuffer) {
- res[idx++] = GL.GL_TRUE;
- }
- } else {
- if (pbuffer) {
- res[idx++] = GLX.GLX_DOUBLEBUFFER;
- res[idx++] = GL.GL_FALSE;
- }
- }
- if (caps.getStereo()) {
- res[idx++] = GLX.GLX_STEREO;
- if (pbuffer) {
- res[idx++] = GL.GL_TRUE;
- }
- }
- // NOTE: don't set (GLX_STEREO, GL_FALSE) in "else" branch for
- // pbuffer case to work around Mesa bug
-
- res[idx++] = GLX.GLX_RED_SIZE;
- res[idx++] = caps.getRedBits();
- res[idx++] = GLX.GLX_GREEN_SIZE;
- res[idx++] = caps.getGreenBits();
- res[idx++] = GLX.GLX_BLUE_SIZE;
- res[idx++] = caps.getBlueBits();
- res[idx++] = GLX.GLX_ALPHA_SIZE;
- res[idx++] = caps.getAlphaBits();
- res[idx++] = GLX.GLX_DEPTH_SIZE;
- res[idx++] = caps.getDepthBits();
- if (caps.getStencilBits() > 0) {
- res[idx++] = GLX.GLX_STENCIL_SIZE;
- res[idx++] = caps.getStencilBits();
- }
- if (caps.getAccumRedBits() > 0 ||
- caps.getAccumGreenBits() > 0 ||
- caps.getAccumBlueBits() > 0 ||
- caps.getAccumAlphaBits() > 0) {
- res[idx++] = GLX.GLX_ACCUM_RED_SIZE;
- res[idx++] = caps.getAccumRedBits();
- res[idx++] = GLX.GLX_ACCUM_GREEN_SIZE;
- res[idx++] = caps.getAccumGreenBits();
- res[idx++] = GLX.GLX_ACCUM_BLUE_SIZE;
- res[idx++] = caps.getAccumBlueBits();
- res[idx++] = GLX.GLX_ACCUM_ALPHA_SIZE;
- res[idx++] = caps.getAccumAlphaBits();
- }
- if (isMultisampleAvailable && caps.getSampleBuffers()) {
- res[idx++] = GLXExt.GLX_SAMPLE_BUFFERS_ARB;
- res[idx++] = GL.GL_TRUE;
- res[idx++] = GLXExt.GLX_SAMPLES_ARB;
- res[idx++] = caps.getNumSamples();
- }
- if (pbuffer) {
- if (caps.getPbufferFloatingPointBuffers()) {
- String glXExtensions = GLX.glXQueryExtensionsString(display, screen);
- if (glXExtensions == null ||
- glXExtensions.indexOf("GLX_NV_float_buffer") < 0) {
- throw new GLException("Floating-point pbuffers on X11 currently require NVidia hardware");
- }
- res[idx++] = GLX.GLX_FLOAT_COMPONENTS_NV;
- res[idx++] = GL.GL_TRUE;
- }
- }
- res[idx++] = 0;
- return res;
- }
-
- public static GLCapabilities attribList2GLCapabilities(int[] iattribs,
- int niattribs,
- int[] ivalues,
- boolean pbuffer) {
- GLCapabilities caps = new GLCapabilities();
-
- for (int i = 0; i < niattribs; i++) {
- int attr = iattribs[i];
- switch (attr) {
- case GLX.GLX_DOUBLEBUFFER:
- caps.setDoubleBuffered(ivalues[i] != GL.GL_FALSE);
- break;
-
- case GLX.GLX_STEREO:
- caps.setStereo(ivalues[i] != GL.GL_FALSE);
- break;
-
- case GLX.GLX_RED_SIZE:
- caps.setRedBits(ivalues[i]);
- break;
-
- case GLX.GLX_GREEN_SIZE:
- caps.setGreenBits(ivalues[i]);
- break;
-
- case GLX.GLX_BLUE_SIZE:
- caps.setBlueBits(ivalues[i]);
- break;
-
- case GLX.GLX_ALPHA_SIZE:
- caps.setAlphaBits(ivalues[i]);
- break;
-
- case GLX.GLX_DEPTH_SIZE:
- caps.setDepthBits(ivalues[i]);
- break;
-
- case GLX.GLX_STENCIL_SIZE:
- caps.setStencilBits(ivalues[i]);
- break;
-
- case GLX.GLX_ACCUM_RED_SIZE:
- caps.setAccumRedBits(ivalues[i]);
- break;
-
- case GLX.GLX_ACCUM_GREEN_SIZE:
- caps.setAccumGreenBits(ivalues[i]);
- break;
-
- case GLX.GLX_ACCUM_BLUE_SIZE:
- caps.setAccumBlueBits(ivalues[i]);
- break;
-
- case GLX.GLX_ACCUM_ALPHA_SIZE:
- caps.setAccumAlphaBits(ivalues[i]);
- break;
-
- case GLXExt.GLX_SAMPLE_BUFFERS_ARB:
- caps.setSampleBuffers(ivalues[i] != GL.GL_FALSE);
- break;
-
- case GLXExt.GLX_SAMPLES_ARB:
- caps.setNumSamples(ivalues[i]);
- break;
-
- case GLX.GLX_FLOAT_COMPONENTS_NV:
- caps.setPbufferFloatingPointBuffers(ivalues[i] != GL.GL_FALSE);
- break;
-
- default:
- break;
- }
- }
-
- return caps;
- }
-
- public void lockToolkit() {
- if (isHeadless) {
- // Workaround for running (to some degree) in headless
- // environments but still supporting rendering via pbuffers
- // For full correctness, would need to implement a Lock class
- return;
- }
-
- if (!Java2D.isOGLPipelineActive() || !Java2D.isQueueFlusherThread()) {
- JAWT.getJAWT().Lock();
- }
- }
-
- public void unlockToolkit() {
- if (isHeadless) {
- // Workaround for running (to some degree) in headless
- // environments but still supporting rendering via pbuffers
- // For full correctness, would need to implement a Lock class
- return;
- }
-
- if (!Java2D.isOGLPipelineActive() || !Java2D.isQueueFlusherThread()) {
- JAWT.getJAWT().Unlock();
- }
- }
-
- public void lockAWTForJava2D() {
- lockToolkit();
- }
- public void unlockAWTForJava2D() {
- unlockToolkit();
- }
-
- // Display connection for use by visual selection algorithm and by all offscreen surfaces
- private static long staticDisplay;
- public static long getDisplayConnection() {
- if (staticDisplay == 0) {
- getX11Factory().lockToolkit();
- try {
- staticDisplay = GLX.XOpenDisplay(null);
- if (DEBUG && (staticDisplay != 0)) {
- long display = staticDisplay;
- int screen = 0; // FIXME
- System.err.println("!!! GLX server vendor : " +
- GLX.glXQueryServerString(display, screen, GLX.GLX_VENDOR));
- System.err.println("!!! GLX server version: " +
- GLX.glXQueryServerString(display, screen, GLX.GLX_VERSION));
- System.err.println("!!! GLX client vendor : " +
- GLX.glXGetClientString(display, GLX.GLX_VENDOR));
- System.err.println("!!! GLX client version: " +
- GLX.glXGetClientString(display, GLX.GLX_VERSION));
- }
-
- if (staticDisplay != 0) {
- String vendor = GLX.glXGetClientString(staticDisplay, GLX.GLX_VENDOR);
- if (vendor != null && vendor.startsWith("ATI")) {
- isVendorATI = true;
- }
- }
- } finally {
- getX11Factory().unlockToolkit();
- }
- if (staticDisplay == 0) {
- throw new GLException("Unable to open default display, needed for visual selection and offscreen surface handling");
- }
- }
- return staticDisplay;
- }
-
- private static boolean checkedMultisample;
- private static boolean multisampleAvailable;
- public static boolean isMultisampleAvailable() {
- if (!checkedMultisample) {
- long display = getDisplayConnection();
- String exts = GLX.glXGetClientString(display, GLX.GLX_EXTENSIONS);
- if (exts != null) {
- multisampleAvailable = (exts.indexOf("GLX_ARB_multisample") >= 0);
- }
- checkedMultisample = true;
- }
- return multisampleAvailable;
- }
-
- private static String glXGetConfigErrorCode(int err) {
- switch (err) {
- case GLX.GLX_NO_EXTENSION: return "GLX_NO_EXTENSION";
- case GLX.GLX_BAD_SCREEN: return "GLX_BAD_SCREEN";
- case GLX.GLX_BAD_ATTRIBUTE: return "GLX_BAD_ATTRIBUTE";
- case GLX.GLX_BAD_VISUAL: return "GLX_BAD_VISUAL";
- default: return "Unknown error code " + err;
- }
- }
-
- public static int glXGetConfig(long display, XVisualInfo info, int attrib, int[] tmp, int tmp_offset) {
- if (display == 0) {
- throw new GLException("No display connection");
- }
- int res = GLX.glXGetConfig(display, info, attrib, tmp, tmp_offset);
- if (res != 0) {
- throw new GLException("glXGetConfig failed: error code " + glXGetConfigErrorCode(res));
- }
- return tmp[tmp_offset];
- }
-
- public static X11GLDrawableFactory getX11Factory() {
- return (X11GLDrawableFactory) getFactory();
- }
-
- /** Workaround for apparent issue with ATI's proprietary drivers
- where direct contexts still send GLX tokens for GL calls */
- public static boolean isVendorATI() {
- return isVendorATI;
- }
-
- private void maybeDoSingleThreadedWorkaround(Runnable action) {
- if (Threading.isSingleThreaded() &&
- !Threading.isOpenGLThread()) {
- Threading.invokeOnOpenGLThread(action);
- } else {
- action.run();
- }
- }
-
- public boolean canCreateContextOnJava2DSurface() {
- return false;
- }
-
- public GLContext createContextOnJava2DSurface(Graphics g, GLContext shareWith)
- throws GLException {
- throw new GLException("Unimplemented on this platform");
- }
-
- //---------------------------------------------------------------------------
- // Xinerama-related functionality
- //
-
- private boolean checkedXinerama;
- private boolean xineramaEnabled;
- protected synchronized boolean isXineramaEnabled() {
- if (!checkedXinerama) {
- checkedXinerama = true;
- lockToolkit();
- long display = getDisplayConnection();
- xineramaEnabled = GLX.XineramaEnabled(display);
- unlockToolkit();
- }
- return xineramaEnabled;
- }
-
- //----------------------------------------------------------------------
- // Gamma-related functionality
- //
-
- private boolean gotGammaRampLength;
- private int gammaRampLength;
- protected synchronized int getGammaRampLength() {
- if (gotGammaRampLength) {
- return gammaRampLength;
- }
-
- int[] size = new int[1];
- lockToolkit();
- long display = getDisplayConnection();
- boolean res = GLX.XF86VidModeGetGammaRampSize(display,
- GLX.DefaultScreen(display),
- size, 0);
- unlockToolkit();
- if (!res)
- return 0;
- gotGammaRampLength = true;
- gammaRampLength = size[0];
- return gammaRampLength;
- }
-
- protected boolean setGammaRamp(float[] ramp) {
- int len = ramp.length;
- short[] rampData = new short[len];
- for (int i = 0; i < len; i++) {
- rampData[i] = (short) (ramp[i] * 65535);
- }
-
- lockToolkit();
- long display = getDisplayConnection();
- boolean res = GLX.XF86VidModeSetGammaRamp(display,
- GLX.DefaultScreen(display),
- rampData.length,
- rampData, 0,
- rampData, 0,
- rampData, 0);
- unlockToolkit();
- return res;
- }
-
- protected Buffer getGammaRamp() {
- int size = getGammaRampLength();
- ShortBuffer rampData = ShortBuffer.allocate(3 * size);
- rampData.position(0);
- rampData.limit(size);
- ShortBuffer redRampData = rampData.slice();
- rampData.position(size);
- rampData.limit(2 * size);
- ShortBuffer greenRampData = rampData.slice();
- rampData.position(2 * size);
- rampData.limit(3 * size);
- ShortBuffer blueRampData = rampData.slice();
- lockToolkit();
- long display = getDisplayConnection();
- boolean res = GLX.XF86VidModeGetGammaRamp(display,
- GLX.DefaultScreen(display),
- size,
- redRampData,
- greenRampData,
- blueRampData);
- unlockToolkit();
- if (!res)
- return null;
- return rampData;
- }
-
- protected void resetGammaRamp(Buffer originalGammaRamp) {
- if (originalGammaRamp == null)
- return; // getGammaRamp failed originally
- ShortBuffer rampData = (ShortBuffer) originalGammaRamp;
- int capacity = rampData.capacity();
- if ((capacity % 3) != 0) {
- throw new IllegalArgumentException("Must not be the original gamma ramp");
- }
- int size = capacity / 3;
- rampData.position(0);
- rampData.limit(size);
- ShortBuffer redRampData = rampData.slice();
- rampData.position(size);
- rampData.limit(2 * size);
- ShortBuffer greenRampData = rampData.slice();
- rampData.position(2 * size);
- rampData.limit(3 * size);
- ShortBuffer blueRampData = rampData.slice();
- lockToolkit();
- long display = getDisplayConnection();
- GLX.XF86VidModeSetGammaRamp(display,
- GLX.DefaultScreen(display),
- size,
- redRampData,
- greenRampData,
- blueRampData);
- unlockToolkit();
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11OffscreenGLContext.java b/src/classes/com/sun/opengl/impl/x11/X11OffscreenGLContext.java
deleted file mode 100644
index 132573f7b..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11OffscreenGLContext.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11OffscreenGLContext extends X11GLContext {
- private X11OffscreenGLDrawable drawable;
-
- public X11OffscreenGLContext(X11OffscreenGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- this.drawable = drawable;
- }
-
- public int getOffscreenContextPixelDataType() {
- return GL.GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- public int getOffscreenContextReadBuffer() {
- if (drawable.isDoubleBuffered()) {
- return GL.GL_BACK;
- }
- return GL.GL_FRONT;
- }
-
- public boolean offscreenImageNeedsVerticalFlip() {
- // There doesn't seem to be a way to do this in the construction
- // of the Pixmap or GLXPixmap
- return true;
- }
-
- protected int makeCurrentImpl() throws GLException {
- lockToolkit();
- try {
- return super.makeCurrentImpl();
- } finally {
- unlockToolkit();
- }
- }
-
- protected void create() {
- createContext(false);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11OffscreenGLDrawable.java b/src/classes/com/sun/opengl/impl/x11/X11OffscreenGLDrawable.java
deleted file mode 100644
index d70c79334..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11OffscreenGLDrawable.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11OffscreenGLDrawable extends X11GLDrawable {
- private long pixmap;
- private boolean isDoubleBuffered;
- // Width and height of the underlying bitmap
- private int width;
- private int height;
-
- public X11OffscreenGLDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- super(capabilities, chooser);
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new X11OffscreenGLContext(this, shareWith);
- }
-
- public void setSize(int newWidth, int newHeight) {
- width = newWidth;
- height = newHeight;
- if (pixmap != 0) {
- destroy();
- }
- create();
- }
-
- public int getWidth() {
- return width;
- }
-
- public int getHeight() {
- return height;
- }
-
- private void create() {
- display = X11GLDrawableFactory.getDisplayConnection();
- XVisualInfo vis = chooseVisual(false);
- int bitsPerPixel = vis.depth();
-
- lockToolkit();
- try {
- int screen = GLX.DefaultScreen(display);
- pixmap = GLX.XCreatePixmap(display, (int) GLX.RootWindow(display, screen), width, height, bitsPerPixel);
- if (pixmap == 0) {
- throw new GLException("XCreatePixmap failed");
- }
- drawable = GLX.glXCreateGLXPixmap(display, vis, pixmap);
- if (drawable == 0) {
- GLX.XFreePixmap(display, pixmap);
- pixmap = 0;
- throw new GLException("glXCreateGLXPixmap failed");
- }
- isDoubleBuffered = (X11GLDrawableFactory.glXGetConfig(display, vis, GLX.GLX_DOUBLEBUFFER, new int[1], 0) != 0);
- if (DEBUG) {
- System.err.println("Created pixmap " + toHexString(pixmap) +
- ", GLXPixmap " + toHexString(drawable) +
- ", display " + toHexString(display));
- }
- setChosenGLCapabilities(X11GLDrawableFactory.xvi2GLCapabilities(display, vis));
- } finally {
- unlockToolkit();
- }
- }
-
- public void destroy() {
- if (pixmap != 0) {
- if (DEBUG) {
- System.err.println("Destroying pixmap " + toHexString(pixmap) +
- ", GLXPixmap " + toHexString(drawable) +
- ", display " + toHexString(display));
- }
-
- // Must destroy pixmap and GLXPixmap
- lockToolkit();
-
- if (DEBUG) {
- long cur = GLX.glXGetCurrentContext();
- if (cur != 0) {
- System.err.println("WARNING: found context " + toHexString(cur) + " current during pixmap destruction");
- }
- }
-
- // FIXME: workaround for crashes on NVidia hardware when
- // destroying pixmap (no context is current at the point of the
- // crash, at least from the point of view of
- // glXGetCurrentContext)
- GLX.glXMakeCurrent(display, 0, 0);
-
- GLX.glXDestroyGLXPixmap(display, drawable);
- GLX.XFreePixmap(display, pixmap);
- unlockToolkit();
- drawable = 0;
- pixmap = 0;
- display = 0;
- setChosenGLCapabilities(null);
- }
- }
-
- public boolean isDoubleBuffered() {
- return isDoubleBuffered;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11OnscreenGLContext.java b/src/classes/com/sun/opengl/impl/x11/X11OnscreenGLContext.java
deleted file mode 100644
index bab780219..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11OnscreenGLContext.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import java.util.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11OnscreenGLContext extends X11GLContext {
- protected X11OnscreenGLDrawable drawable;
- // This indicates whether the context we have created is indirect
- // and therefore requires the toolkit to be locked around all GL
- // calls rather than just all GLX calls
- protected boolean isIndirect;
-
- public X11OnscreenGLContext(X11OnscreenGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- this.drawable = drawable;
- }
-
- protected int makeCurrentImpl() throws GLException {
- int lockRes = drawable.lockSurface();
- boolean exceptionOccurred = false;
- try {
- if (lockRes == X11OnscreenGLDrawable.LOCK_SURFACE_NOT_READY) {
- return CONTEXT_NOT_CURRENT;
- }
- if (lockRes == X11OnscreenGLDrawable.LOCK_SURFACE_CHANGED) {
- destroyImpl();
- }
- return super.makeCurrentImpl();
- } catch (RuntimeException e) {
- exceptionOccurred = true;
- throw e;
- } finally {
- if (exceptionOccurred ||
- (isOptimizable() && lockRes != X11OnscreenGLDrawable.LOCK_SURFACE_NOT_READY)) {
- drawable.unlockSurface();
- }
- }
- }
-
- protected void releaseImpl() throws GLException {
- try {
- super.releaseImpl();
- } finally {
- if (!isOptimizable()) {
- drawable.unlockSurface();
- }
- }
- }
-
- public boolean isOptimizable() {
- return super.isOptimizable() && !isIndirect;
- }
-
- protected void create() {
- createContext(true);
- isIndirect = !GLX.glXIsDirect(drawable.getDisplay(), context);
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11OnscreenGLDrawable.java b/src/classes/com/sun/opengl/impl/x11/X11OnscreenGLDrawable.java
deleted file mode 100644
index b1a3ebac7..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11OnscreenGLDrawable.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import java.awt.Component;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11OnscreenGLDrawable extends X11GLDrawable {
- public static final int LOCK_SURFACE_NOT_READY = 1;
- public static final int LOCK_SURFACE_CHANGED = 2;
- public static final int LOCK_SUCCESS = 3;
-
- protected Component component;
-
- // Variables for lockSurface/unlockSurface
- private JAWT_DrawingSurface ds;
- private JAWT_DrawingSurfaceInfo dsi;
- private JAWT_X11DrawingSurfaceInfo x11dsi;
-
- // Indicates whether the component (if an onscreen context) has been
- // realized. Plausibly, before the component is realized the JAWT
- // should return an error or NULL object from some of its
- // operations; this appears to be the case on Win32 but is not true
- // at least with Sun's current X11 implementation (1.4.x), which
- // crashes with no other error reported if the DrawingSurfaceInfo is
- // fetched from a locked DrawingSurface during the validation as a
- // result of calling show() on the main thread. To work around this
- // we prevent any JAWT or OpenGL operations from being done until
- // addNotify() is called on the component.
- protected boolean realized;
-
- public X11OnscreenGLDrawable(Component component) {
- super(null, null);
- this.component = component;
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new X11OnscreenGLContext(this, shareWith);
- }
-
- public void setRealized(boolean realized) {
- this.realized = realized;
- }
-
- public void setSize(int width, int height) {
- component.setSize(width, height);
- }
-
- public int getWidth() {
- return component.getWidth();
- }
-
- public int getHeight() {
- return component.getHeight();
- }
-
- public void swapBuffers() throws GLException {
- lockToolkit();
- try {
- boolean didLock = false;
-
- if (drawable == 0) {
- if (lockSurface() == LOCK_SURFACE_NOT_READY) {
- return;
- }
-
- didLock = true;
- }
-
- GLX.glXSwapBuffers(display, drawable);
-
- if (didLock) {
- unlockSurface();
- }
- } finally {
- unlockToolkit();
- }
- }
-
- public int lockSurface() throws GLException {
- if (!realized) {
- return LOCK_SURFACE_NOT_READY;
- }
- if (drawable != 0) {
- throw new GLException("Surface already locked");
- }
- ds = JAWT.getJAWT().GetDrawingSurface(component);
- if (ds == null) {
- // Widget not yet realized
- return LOCK_SURFACE_NOT_READY;
- }
- int res = ds.Lock();
- if ((res & JAWTFactory.JAWT_LOCK_ERROR) != 0) {
- throw new GLException("Unable to lock surface");
- }
- // See whether the surface changed and if so destroy the old
- // OpenGL context so it will be recreated (NOTE: removeNotify
- // should handle this case, but it may be possible that race
- // conditions can cause this code to be triggered -- should test
- // more)
- int ret = LOCK_SUCCESS;
- if ((res & JAWTFactory.JAWT_LOCK_SURFACE_CHANGED) != 0) {
- ret = LOCK_SURFACE_CHANGED;
- }
- dsi = ds.GetDrawingSurfaceInfo();
- if (dsi == null) {
- // Widget not yet realized
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- return LOCK_SURFACE_NOT_READY;
- }
- x11dsi = (JAWT_X11DrawingSurfaceInfo) dsi.platformInfo();
- display = x11dsi.display();
- drawable = x11dsi.drawable();
- visualID = x11dsi.visualID();
- if (display == 0 || drawable == 0) {
- // Widget not yet realized
- ds.FreeDrawingSurfaceInfo(dsi);
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- dsi = null;
- x11dsi = null;
- display = 0;
- drawable = 0;
- visualID = 0;
- return LOCK_SURFACE_NOT_READY;
- }
- return ret;
- }
-
- public void unlockSurface() {
- if (drawable == 0) {
- throw new GLException("Surface already unlocked");
- }
- ds.FreeDrawingSurfaceInfo(dsi);
- ds.Unlock();
- JAWT.getJAWT().FreeDrawingSurface(ds);
- ds = null;
- dsi = null;
- x11dsi = null;
- display = 0;
- drawable = 0;
- visualID = 0;
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11PbufferGLContext.java b/src/classes/com/sun/opengl/impl/x11/X11PbufferGLContext.java
deleted file mode 100644
index 4207c7d99..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11PbufferGLContext.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11PbufferGLContext extends X11GLContext {
- private X11PbufferGLDrawable drawable;
-
- public X11PbufferGLContext(X11PbufferGLDrawable drawable,
- GLContext shareWith) {
- super(drawable, shareWith);
- this.drawable = drawable;
- }
-
- public void bindPbufferToTexture() {
- // FIXME: figure out how to implement this
- throw new GLException("Not yet implemented");
- }
-
- public void releasePbufferFromTexture() {
- // FIXME: figure out how to implement this
- throw new GLException("Not yet implemented");
- }
-
- protected int makeCurrentImpl() throws GLException {
- if (drawable.getDrawable() == 0) {
- // pbuffer not instantiated (yet?)
- if (DEBUG) {
- System.err.println("pbuffer not instantiated");
- }
- return CONTEXT_NOT_CURRENT;
- }
-
- // Note that we have to completely override makeCurrentImpl
- // because the underlying makeCurrent call differs for pbuffers
- lockToolkit();
- try {
- boolean created = false;
- if (context == 0) {
- create();
- if (DEBUG) {
- System.err.println(getThreadName() + ": !!! Created GL context for " + getClass().getName());
- }
- created = true;
- }
-
- if (!GLX.glXMakeContextCurrent(drawable.getDisplay(),
- drawable.getDrawable(),
- drawable.getDrawable(),
- context)) {
- throw new GLException("Error making context current");
- } else {
- mostRecentDisplay = drawable.getDisplay();
- if (DEBUG && (VERBOSE || created)) {
- System.err.println(getThreadName() + ": glXMakeCurrent(display " + toHexString(drawable.getDisplay()) +
- ", drawable " + toHexString(drawable.getDrawable()) +
- ", context " + toHexString(context) + ") succeeded");
- }
- }
-
- if (created) {
- resetGLFunctionAvailability();
- return CONTEXT_CURRENT_NEW;
- }
- return CONTEXT_CURRENT;
- } finally {
- unlockToolkit();
- }
- }
-
- protected void releaseImpl() throws GLException {
- lockToolkit();
- try {
- if (drawable.getDisplay() == 0) {
- throw new GLException("Pbuffer destroyed out from under application-created context");
- }
-
- if (!GLX.glXMakeContextCurrent(drawable.getDisplay(), 0, 0, 0)) {
- throw new GLException("Error freeing OpenGL context");
- }
- } finally {
- unlockToolkit();
- }
- }
-
- public int getFloatingPointMode() {
- return drawable.getFloatingPointMode();
- }
-
- protected void create() {
- if (DEBUG) {
- System.err.println("Creating context for pbuffer " + drawable.getWidth() +
- " x " + drawable.getHeight());
- }
-
- // Create a gl context for the p-buffer.
- X11GLContext other = (X11GLContext) GLContextShareSet.getShareContext(this);
- long share = 0;
- if (other != null) {
- share = other.getContext();
- if (share == 0) {
- throw new GLException("GLContextShareSet returned an invalid OpenGL context");
- }
- }
- context = GLX.glXCreateNewContext(drawable.getDisplay(), drawable.getFBConfig(), GLXExt.GLX_RGBA_TYPE, share, true);
- if (context == 0) {
- throw new GLException("pbuffer creation error: glXCreateNewContext() failed");
- }
- GLContextShareSet.contextCreated(this);
-
- if (DEBUG) {
- System.err.println("Created context for pbuffer " + drawable.getWidth() +
- " x " + drawable.getHeight());
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11PbufferGLDrawable.java b/src/classes/com/sun/opengl/impl/x11/X11PbufferGLDrawable.java
deleted file mode 100644
index 4fdc0f80a..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11PbufferGLDrawable.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import javax.media.opengl.*;
-import com.sun.opengl.impl.*;
-
-public class X11PbufferGLDrawable extends X11GLDrawable {
- private int initWidth;
- private int initHeight;
-
- // drawable in superclass is a GLXPbuffer
- private GLXFBConfig fbConfig;
- private int width;
- private int height;
-
- protected static final int MAX_PFORMATS = 256;
- protected static final int MAX_ATTRIBS = 256;
-
- public X11PbufferGLDrawable(GLCapabilities capabilities, int initialWidth, int initialHeight) {
- super(capabilities, null);
- this.initWidth = initialWidth;
- this.initHeight = initialHeight;
- if (initWidth <= 0 || initHeight <= 0) {
- throw new GLException("Initial width and height of pbuffer must be positive (were (" +
- initWidth + ", " + initHeight + "))");
- }
-
- if (DEBUG) {
- System.out.println("Pbuffer caps on init: " + capabilities +
- (capabilities.getPbufferRenderToTexture() ? " [rtt]" : "") +
- (capabilities.getPbufferRenderToTextureRectangle() ? " [rect]" : "") +
- (capabilities.getPbufferFloatingPointBuffers() ? " [float]" : ""));
- }
-
- createPbuffer(X11GLDrawableFactory.getDisplayConnection());
- }
-
- public GLContext createContext(GLContext shareWith) {
- return new X11PbufferGLContext(this, shareWith);
- }
-
- public void destroy() {
- lockToolkit();
- if (drawable != 0) {
- GLX.glXDestroyPbuffer(display, drawable);
- drawable = 0;
- }
- unlockToolkit();
- display = 0;
- }
-
- public void setSize(int width, int height) {
- // FIXME
- throw new GLException("Not yet implemented");
- }
-
- public int getWidth() {
- return width;
- }
-
- public int getHeight() {
- return height;
- }
-
- public void createPbuffer(long display) {
- lockToolkit();
- try {
- if (display == 0) {
- throw new GLException("Null display");
- }
-
- if (capabilities.getPbufferRenderToTexture()) {
- throw new GLException("Render-to-texture pbuffers not supported yet on X11");
- }
-
- if (capabilities.getPbufferRenderToTextureRectangle()) {
- throw new GLException("Render-to-texture-rectangle pbuffers not supported yet on X11");
- }
-
- int screen = GLX.DefaultScreen(display);
- int[] iattributes = X11GLDrawableFactory.glCapabilities2AttribList(capabilities,
- X11GLDrawableFactory.isMultisampleAvailable(),
- true, display, screen);
-
- int[] nelementsTmp = new int[1];
- GLXFBConfig[] fbConfigs = GLX.glXChooseFBConfig(display, screen, iattributes, 0, nelementsTmp, 0);
- if (fbConfigs == null || fbConfigs.length == 0 || fbConfigs[0] == null) {
- throw new GLException("pbuffer creation error: glXChooseFBConfig() failed");
- }
- int nelements = nelementsTmp[0];
- if (nelements <= 0) {
- throw new GLException("pbuffer creation error: couldn't find a suitable frame buffer configuration");
- }
- // Note that we currently don't allow selection of anything but
- // the first GLXFBConfig in the returned list
- GLXFBConfig fbConfig = fbConfigs[0];
-
- if (DEBUG) {
- System.err.println("Found " + fbConfigs.length + " matching GLXFBConfigs");
- System.err.println("Parameters of default one:");
- System.err.println("render type: 0x" + Integer.toHexString(queryFBConfig(display, fbConfig, GLX.GLX_RENDER_TYPE)));
- System.err.println("rgba: " + ((queryFBConfig(display, fbConfig, GLX.GLX_RENDER_TYPE) & GLX.GLX_RGBA_BIT) != 0));
- System.err.println("r: " + queryFBConfig(display, fbConfig, GLX.GLX_RED_SIZE));
- System.err.println("g: " + queryFBConfig(display, fbConfig, GLX.GLX_GREEN_SIZE));
- System.err.println("b: " + queryFBConfig(display, fbConfig, GLX.GLX_BLUE_SIZE));
- System.err.println("a: " + queryFBConfig(display, fbConfig, GLX.GLX_ALPHA_SIZE));
- System.err.println("depth: " + queryFBConfig(display, fbConfig, GLX.GLX_DEPTH_SIZE));
- System.err.println("double buffered: " + queryFBConfig(display, fbConfig, GLX.GLX_DOUBLEBUFFER));
- }
-
- // Create the p-buffer.
- int niattribs = 0;
-
- iattributes[niattribs++] = GLXExt.GLX_PBUFFER_WIDTH;
- iattributes[niattribs++] = initWidth;
- iattributes[niattribs++] = GLXExt.GLX_PBUFFER_HEIGHT;
- iattributes[niattribs++] = initHeight;
-
- iattributes[niattribs++] = 0;
-
- long tmpBuffer = GLX.glXCreatePbuffer(display, fbConfig, iattributes, 0);
- if (tmpBuffer == 0) {
- // FIXME: query X error code for detail error message
- throw new GLException("pbuffer creation error: glXCreatePbuffer() failed");
- }
-
- // Set up instance variables
- this.display = display;
- drawable = tmpBuffer;
- this.fbConfig = fbConfig;
-
- // Pick innocent query values if multisampling or floating point buffers not available
- int sbAttrib = X11GLDrawableFactory.isMultisampleAvailable() ? GLXExt.GLX_SAMPLE_BUFFERS_ARB : GLX.GLX_RED_SIZE;
- int samplesAttrib = X11GLDrawableFactory.isMultisampleAvailable() ? GLXExt.GLX_SAMPLES_ARB : GLX.GLX_RED_SIZE;
- int floatNV = capabilities.getPbufferFloatingPointBuffers() ? GLX.GLX_FLOAT_COMPONENTS_NV : GLX.GLX_RED_SIZE;
-
- // Query the fbconfig to determine its GLCapabilities
- int[] iattribs = {
- GLX.GLX_DOUBLEBUFFER,
- GLX.GLX_STEREO,
- GLX.GLX_RED_SIZE,
- GLX.GLX_GREEN_SIZE,
- GLX.GLX_BLUE_SIZE,
- GLX.GLX_ALPHA_SIZE,
- GLX.GLX_DEPTH_SIZE,
- GLX.GLX_STENCIL_SIZE,
- GLX.GLX_ACCUM_RED_SIZE,
- GLX.GLX_ACCUM_GREEN_SIZE,
- GLX.GLX_ACCUM_BLUE_SIZE,
- GLX.GLX_ACCUM_ALPHA_SIZE,
- sbAttrib,
- samplesAttrib,
- floatNV
- };
-
- int[] ivalues = new int[iattribs.length];
- queryFBConfig(display, fbConfig, iattribs, iattribs.length, ivalues);
- setChosenGLCapabilities(X11GLDrawableFactory.attribList2GLCapabilities(iattribs, iattribs.length, ivalues, true));
-
- // Determine the actual width and height we were able to create.
- int[] tmp = new int[1];
- GLX.glXQueryDrawable(display, drawable, GLXExt.GLX_WIDTH, tmp, 0);
- width = tmp[0];
- GLX.glXQueryDrawable(display, drawable, GLXExt.GLX_HEIGHT, tmp, 0);
- height = tmp[0];
-
- if (DEBUG) {
- System.err.println("Created pbuffer " + width + " x " + height);
- }
- } finally {
- unlockToolkit();
- }
- }
-
- public int getFloatingPointMode() {
- // Floating-point pbuffers currently require NVidia hardware on X11
- return GLPbuffer.NV_FLOAT;
- }
-
- public GLXFBConfig getFBConfig() {
- return fbConfig;
- }
-
- private int queryFBConfig(long display, GLXFBConfig fbConfig, int attrib) {
- int[] tmp = new int[1];
- if (GLX.glXGetFBConfigAttrib(display, fbConfig, attrib, tmp, 0) != 0) {
- throw new GLException("glXGetFBConfigAttrib failed");
- }
- return tmp[0];
- }
-
- private void queryFBConfig(long display, GLXFBConfig fbConfig, int[] attribs, int nattribs, int[] values) {
- int[] tmp = new int[1];
- for (int i = 0; i < nattribs; i++) {
- if (GLX.glXGetFBConfigAttrib(display, fbConfig, attribs[i], tmp, 0) != 0) {
- throw new GLException("glXGetFBConfigAttrib failed");
- }
- values[i] = tmp[0];
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/impl/x11/X11SunJDKReflection.java b/src/classes/com/sun/opengl/impl/x11/X11SunJDKReflection.java
deleted file mode 100644
index 0760399ab..000000000
--- a/src/classes/com/sun/opengl/impl/x11/X11SunJDKReflection.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.impl.x11;
-
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.lang.reflect.*;
-import java.security.*;
-
-/** This class encapsulates the reflection routines necessary to peek
- inside a few data structures in the AWT implementation on X11 for
- the purposes of correctly enumerating the available visuals. */
-
-public class X11SunJDKReflection {
- private static Class x11GraphicsDeviceClass;
- private static Method x11GraphicsDeviceGetScreenMethod;
- private static Class x11GraphicsConfigClass;
- private static Method x11GraphicsConfigGetVisualMethod;
- private static boolean initted;
-
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- try {
- x11GraphicsDeviceClass = Class.forName("sun.awt.X11GraphicsDevice");
- x11GraphicsDeviceGetScreenMethod = x11GraphicsDeviceClass.getDeclaredMethod("getScreen", new Class[] {});
- x11GraphicsDeviceGetScreenMethod.setAccessible(true);
-
- x11GraphicsConfigClass = Class.forName("sun.awt.X11GraphicsConfig");
- x11GraphicsConfigGetVisualMethod = x11GraphicsConfigClass.getDeclaredMethod("getVisual", new Class[] {});
- x11GraphicsConfigGetVisualMethod.setAccessible(true);
- initted = true;
- } catch (Exception e) {
- // Either not a Sun JDK or the interfaces have changed since 1.4.2 / 1.5
- }
- return null;
- }
- });
- }
-
- public static int graphicsDeviceGetScreen(GraphicsDevice device) {
- if (!initted) {
- return 0;
- }
-
- try {
- return ((Integer) x11GraphicsDeviceGetScreenMethod.invoke(device, new Object[] {})).intValue();
- } catch (Exception e) {
- return 0;
- }
- }
-
- public static int graphicsConfigurationGetVisualID(GraphicsConfiguration config) {
- if (!initted) {
- return 0;
- }
-
- try {
- return ((Integer) x11GraphicsConfigGetVisualMethod.invoke(config, new Object[] {})).intValue();
- } catch (Exception e) {
- return 0;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/util/Animator.java b/src/classes/com/sun/opengl/util/Animator.java
deleted file mode 100755
index 417fc776d..000000000
--- a/src/classes/com/sun/opengl/util/Animator.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.Rectangle;
-import java.util.*;
-import javax.swing.*;
-
-import javax.media.opengl.*;
-
-/** <P> An Animator can be attached to one or more {@link
- GLAutoDrawable}s to drive their display() methods in a loop. </P>
-
- <P> The Animator class creates a background thread in which the
- calls to <code>display()</code> are performed. After each drawable
- has been redrawn, a brief pause is performed to avoid swamping the
- CPU, unless {@link #setRunAsFastAsPossible} has been called. </P>
-*/
-
-public class Animator {
- private volatile ArrayList/*<GLAutoDrawable>*/ drawables = new ArrayList();
- private Runnable runnable;
- private Thread thread;
- private volatile boolean shouldStop;
- protected boolean ignoreExceptions;
- protected boolean printExceptions;
- private boolean runAsFastAsPossible;
-
- // For efficient rendering of Swing components, in particular when
- // they overlap one another
- private List lightweights = new ArrayList();
- private Map repaintManagers = new IdentityHashMap();
- private Map dirtyRegions = new IdentityHashMap();
-
- /** Creates a new, empty Animator. */
- public Animator() {
- }
-
- /** Creates a new Animator for a particular drawable. */
- public Animator(GLAutoDrawable drawable) {
- add(drawable);
- }
-
- /** Adds a drawable to the list managed by this Animator. */
- public synchronized void add(GLAutoDrawable drawable) {
- ArrayList newList = (ArrayList) drawables.clone();
- newList.add(drawable);
- drawables = newList;
- notifyAll();
- }
-
- /** Removes a drawable from the list managed by this Animator. */
- public synchronized void remove(GLAutoDrawable drawable) {
- ArrayList newList = (ArrayList) drawables.clone();
- newList.remove(drawable);
- drawables = newList;
- }
-
- /** Returns an iterator over the drawables managed by this
- Animator. */
- public Iterator/*<GLAutoDrawable>*/ drawableIterator() {
- return drawables.iterator();
- }
-
- /** Sets a flag causing this Animator to ignore exceptions produced
- while redrawing the drawables. By default this flag is set to
- false, causing any exception thrown to halt the Animator. */
- public void setIgnoreExceptions(boolean ignoreExceptions) {
- this.ignoreExceptions = ignoreExceptions;
- }
-
- /** Sets a flag indicating that when exceptions are being ignored by
- this Animator (see {@link #setIgnoreExceptions}), to print the
- exceptions' stack traces for diagnostic information. Defaults to
- false. */
- public void setPrintExceptions(boolean printExceptions) {
- this.printExceptions = printExceptions;
- }
-
- /** Sets a flag in this Animator indicating that it is to run as
- fast as possible. By default there is a brief pause in the
- animation loop which prevents the CPU from getting swamped.
- This method may not have an effect on subclasses. */
- public final void setRunAsFastAsPossible(boolean runFast) {
- runAsFastAsPossible = runFast;
- }
-
- /** Called every frame to cause redrawing of all of the
- GLAutoDrawables this Animator manages. Subclasses should call
- this to get the most optimized painting behavior for the set of
- components this Animator manages, in particular when multiple
- lightweight widgets are continually being redrawn. */
- protected void display() {
- Iterator iter = drawableIterator();
- while (iter.hasNext()) {
- GLAutoDrawable drawable = (GLAutoDrawable) iter.next();
- if (drawable instanceof JComponent) {
- // Lightweight components need a more efficient drawing
- // scheme than simply forcing repainting of each one in
- // turn since drawing one can force another one to be
- // drawn in turn
- lightweights.add(drawable);
- } else {
- try {
- drawable.display();
- } catch (RuntimeException e) {
- if (ignoreExceptions) {
- if (printExceptions) {
- e.printStackTrace();
- }
- } else {
- throw(e);
- }
- }
- }
- }
- if (lightweights.size() > 0) {
- try {
- SwingUtilities.invokeAndWait(drawWithRepaintManagerRunnable);
- } catch (Exception e) {
- e.printStackTrace();
- }
- lightweights.clear();
- }
- }
-
- class MainLoop implements Runnable {
- public void run() {
- try {
- while (!shouldStop) {
- // Don't consume CPU unless there is work to be done
- if (drawables.size() == 0) {
- synchronized (Animator.this) {
- while (drawables.size() == 0 && !shouldStop) {
- try {
- Animator.this.wait();
- } catch (InterruptedException e) {
- }
- }
- }
- }
- display();
- if (!runAsFastAsPossible) {
- // Avoid swamping the CPU
- Thread.yield();
- }
- }
- } finally {
- shouldStop = false;
- synchronized (Animator.this) {
- thread = null;
- Animator.this.notify();
- }
- }
- }
- }
-
- /** Starts this animator. */
- public synchronized void start() {
- if (thread != null) {
- throw new GLException("Already started");
- }
- if (runnable == null) {
- runnable = new MainLoop();
- }
- thread = new Thread(runnable);
- thread.start();
- }
-
- /** Indicates whether this animator is currently running. This
- should only be used as a heuristic to applications because in
- some circumstances the Animator may be in the process of
- shutting down and this method will still return true. */
- public synchronized boolean isAnimating() {
- return (thread != null);
- }
-
- /** Stops this animator. In most situations this method blocks until
- completion, except when called from the animation thread itself
- or in some cases from an implementation-internal thread like the
- AWT event queue thread. */
- public synchronized void stop() {
- shouldStop = true;
- notifyAll();
- // It's hard to tell whether the thread which calls stop() has
- // dependencies on the Animator's internal thread. Currently we
- // use a couple of heuristics to determine whether we should do
- // the blocking wait().
- if ((Thread.currentThread() == thread) || EventQueue.isDispatchThread()) {
- return;
- }
- while (shouldStop && thread != null) {
- try {
- wait();
- } catch (InterruptedException ie) {
- }
- }
- }
-
- // Uses RepaintManager APIs to implement more efficient redrawing of
- // the Swing widgets we're animating
- private Runnable drawWithRepaintManagerRunnable = new Runnable() {
- public void run() {
- for (Iterator iter = lightweights.iterator(); iter.hasNext(); ) {
- JComponent comp = (JComponent) iter.next();
- RepaintManager rm = RepaintManager.currentManager(comp);
- rm.markCompletelyDirty(comp);
- repaintManagers.put(rm, rm);
-
- // RepaintManagers don't currently optimize the case of
- // overlapping sibling components. If we have two
- // JInternalFrames in a JDesktopPane, the redraw of the
- // bottom one will cause the top one to be redrawn as
- // well. The top one will then be redrawn separately. In
- // order to optimize this case we need to compute the union
- // of all of the dirty regions on a particular JComponent if
- // optimized drawing isn't enabled for it.
-
- // Walk up the hierarchy trying to find a non-optimizable
- // ancestor
- Rectangle visible = comp.getVisibleRect();
- int x = visible.x;
- int y = visible.y;
- while (comp != null) {
- x += comp.getX();
- y += comp.getY();
- Component c = comp.getParent();
- if ((c == null) || (!(c instanceof JComponent))) {
- comp = null;
- } else {
- comp = (JComponent) c;
- if (!comp.isOptimizedDrawingEnabled()) {
- rm = RepaintManager.currentManager(comp);
- repaintManagers.put(rm, rm);
- // Need to dirty this region
- Rectangle dirty = (Rectangle) dirtyRegions.get(comp);
- if (dirty == null) {
- dirty = new Rectangle(x, y, visible.width, visible.height);
- dirtyRegions.put(comp, dirty);
- } else {
- // Compute union with already dirty region
- // Note we could compute multiple non-overlapping
- // regions: might want to do that in the future
- // (prob. need more complex algorithm -- dynamic
- // programming?)
- dirty.add(new Rectangle(x, y, visible.width, visible.height));
- }
- }
- }
- }
- }
-
- // Dirty any needed regions on non-optimizable components
- for (Iterator iter = dirtyRegions.keySet().iterator(); iter.hasNext(); ) {
- JComponent comp = (JComponent) iter.next();
- Rectangle rect = (Rectangle) dirtyRegions.get(comp);
- RepaintManager rm = RepaintManager.currentManager(comp);
- rm.addDirtyRegion(comp, rect.x, rect.y, rect.width, rect.height);
- }
-
- // Draw all dirty regions
- for (Iterator iter = repaintManagers.keySet().iterator(); iter.hasNext(); ) {
- ((RepaintManager) iter.next()).paintDirtyRegions();
- }
- dirtyRegions.clear();
- repaintManagers.clear();
- }
- };
-}
diff --git a/src/classes/com/sun/opengl/util/BitmapCharRec.java b/src/classes/com/sun/opengl/util/BitmapCharRec.java
deleted file mode 100644
index b20781ba1..000000000
--- a/src/classes/com/sun/opengl/util/BitmapCharRec.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
-
-/* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
-
-class BitmapCharRec {
- int width;
- int height;
- float xorig;
- float yorig;
- float advance;
- byte[] bitmap;
-
- BitmapCharRec(int width,
- int height,
- float xorig,
- float yorig,
- float advance,
- byte[] bitmap) {
- this.width = width;
- this.height = height;
- this.xorig = xorig;
- this.yorig = yorig;
- this.advance = advance;
- this.bitmap = bitmap;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/BitmapFontRec.java b/src/classes/com/sun/opengl/util/BitmapFontRec.java
deleted file mode 100644
index 95b7a7346..000000000
--- a/src/classes/com/sun/opengl/util/BitmapFontRec.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
-
-/* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
-
-class BitmapFontRec {
- String name;
- int num_chars;
- int first;
- BitmapCharRec[] ch;
-
- BitmapFontRec(String name,
- int num_chars,
- int first,
- BitmapCharRec[] ch) {
- this.name = name;
- this.num_chars = num_chars;
- this.first = first;
- this.ch = ch;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/BufferUtil.java b/src/classes/com/sun/opengl/util/BufferUtil.java
deleted file mode 100755
index e16c5685d..000000000
--- a/src/classes/com/sun/opengl/util/BufferUtil.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import java.nio.*;
-import java.util.*;
-
-/** Utility routines for dealing with direct buffers. */
-
-public class BufferUtil {
- public static final int SIZEOF_BYTE = 1;
- public static final int SIZEOF_SHORT = 2;
- public static final int SIZEOF_INT = 4;
- public static final int SIZEOF_FLOAT = 4;
- public static final int SIZEOF_LONG = 8;
- public static final int SIZEOF_DOUBLE = 8;
-
- private BufferUtil() {}
-
- //----------------------------------------------------------------------
- // Allocation routines
- //
-
- /** Allocates a new direct ByteBuffer with the specified number of
- elements. The returned buffer will have its byte order set to
- the host platform's native byte order. */
- public static ByteBuffer newByteBuffer(int numElements) {
- ByteBuffer bb = ByteBuffer.allocateDirect(numElements);
- bb.order(ByteOrder.nativeOrder());
- return bb;
- }
-
- /** Allocates a new direct DoubleBuffer with the specified number of
- elements. The returned buffer will have its byte order set to
- the host platform's native byte order. */
- public static DoubleBuffer newDoubleBuffer(int numElements) {
- ByteBuffer bb = newByteBuffer(numElements * SIZEOF_DOUBLE);
- return bb.asDoubleBuffer();
- }
-
- /** Allocates a new direct FloatBuffer with the specified number of
- elements. The returned buffer will have its byte order set to
- the host platform's native byte order. */
- public static FloatBuffer newFloatBuffer(int numElements) {
- ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT);
- return bb.asFloatBuffer();
- }
-
- /** Allocates a new direct IntBuffer with the specified number of
- elements. The returned buffer will have its byte order set to
- the host platform's native byte order. */
- public static IntBuffer newIntBuffer(int numElements) {
- ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT);
- return bb.asIntBuffer();
- }
-
- /** Allocates a new direct LongBuffer with the specified number of
- elements. The returned buffer will have its byte order set to
- the host platform's native byte order. */
- public static LongBuffer newLongBuffer(int numElements) {
- ByteBuffer bb = newByteBuffer(numElements * SIZEOF_LONG);
- return bb.asLongBuffer();
- }
-
- /** Allocates a new direct ShortBuffer with the specified number of
- elements. The returned buffer will have its byte order set to
- the host platform's native byte order. */
- public static ShortBuffer newShortBuffer(int numElements) {
- ByteBuffer bb = newByteBuffer(numElements * SIZEOF_SHORT);
- return bb.asShortBuffer();
- }
-
- //----------------------------------------------------------------------
- // Copy routines (type-to-type)
- //
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed ByteBuffer into
- a newly-allocated direct ByteBuffer. The returned buffer will
- have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static ByteBuffer copyByteBuffer(ByteBuffer orig) {
- ByteBuffer dest = newByteBuffer(orig.remaining());
- orig.mark();
- dest.put(orig);
- orig.reset();
- dest.rewind();
- return dest;
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed DoubleBuffer
- into a newly-allocated direct DoubleBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static DoubleBuffer copyDoubleBuffer(DoubleBuffer orig) {
- return copyDoubleBufferAsByteBuffer(orig).asDoubleBuffer();
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed FloatBuffer
- into a newly-allocated direct FloatBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static FloatBuffer copyFloatBuffer(FloatBuffer orig) {
- return copyFloatBufferAsByteBuffer(orig).asFloatBuffer();
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed IntBuffer
- into a newly-allocated direct IntBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static IntBuffer copyIntBuffer(IntBuffer orig) {
- return copyIntBufferAsByteBuffer(orig).asIntBuffer();
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed LongBuffer
- into a newly-allocated direct LongBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static LongBuffer copyLongBuffer(LongBuffer orig) {
- return copyLongBufferAsByteBuffer(orig).asLongBuffer();
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed ShortBuffer
- into a newly-allocated direct ShortBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static ShortBuffer copyShortBuffer(ShortBuffer orig) {
- return copyShortBufferAsByteBuffer(orig).asShortBuffer();
- }
-
- //----------------------------------------------------------------------
- // Copy routines (type-to-ByteBuffer)
- //
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed DoubleBuffer
- into a newly-allocated direct ByteBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static ByteBuffer copyDoubleBufferAsByteBuffer(DoubleBuffer orig) {
- ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_DOUBLE);
- orig.mark();
- dest.asDoubleBuffer().put(orig);
- orig.reset();
- dest.rewind();
- return dest;
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed FloatBuffer
- into a newly-allocated direct ByteBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static ByteBuffer copyFloatBufferAsByteBuffer(FloatBuffer orig) {
- ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_FLOAT);
- orig.mark();
- dest.asFloatBuffer().put(orig);
- orig.reset();
- dest.rewind();
- return dest;
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed IntBuffer into
- a newly-allocated direct ByteBuffer. The returned buffer will
- have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static ByteBuffer copyIntBufferAsByteBuffer(IntBuffer orig) {
- ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_INT);
- orig.mark();
- dest.asIntBuffer().put(orig);
- orig.reset();
- dest.rewind();
- return dest;
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed LongBuffer into
- a newly-allocated direct ByteBuffer. The returned buffer will
- have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static ByteBuffer copyLongBufferAsByteBuffer(LongBuffer orig) {
- ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_LONG);
- orig.mark();
- dest.asLongBuffer().put(orig);
- orig.reset();
- dest.rewind();
- return dest;
- }
-
- /** Copies the <i>remaining</i> elements (as defined by
- <code>limit() - position()</code>) in the passed ShortBuffer
- into a newly-allocated direct ByteBuffer. The returned buffer
- will have its byte order set to the host platform's native byte
- order. The position of the newly-allocated buffer will be zero,
- and the position of the passed buffer is unchanged (though its
- mark is changed). */
- public static ByteBuffer copyShortBufferAsByteBuffer(ShortBuffer orig) {
- ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_SHORT);
- orig.mark();
- dest.asShortBuffer().put(orig);
- orig.reset();
- dest.rewind();
- return dest;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/CoordRec.java b/src/classes/com/sun/opengl/util/CoordRec.java
deleted file mode 100644
index 6a1cba8fb..000000000
--- a/src/classes/com/sun/opengl/util/CoordRec.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
-
-/* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
-
-class CoordRec {
- float x;
- float y;
-
- CoordRec(float x, float y) {
- this.x = x;
- this.y = y;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/FPSAnimator.java b/src/classes/com/sun/opengl/util/FPSAnimator.java
deleted file mode 100755
index 290de89d6..000000000
--- a/src/classes/com/sun/opengl/util/FPSAnimator.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import java.util.*;
-import javax.media.opengl.*;
-
-/** An Animator subclass which attempts to achieve a target
- frames-per-second rate to avoid using all CPU time. The target FPS
- is only an estimate and is not guaranteed. */
-
-public class FPSAnimator extends Animator {
- private Timer timer;
- private int fps;
- private boolean scheduleAtFixedRate;
-
- /** Creates an FPSAnimator with a given target frames-per-second
- value. Equivalent to <code>FPSAnimator(null, fps)</code>. */
- public FPSAnimator(int fps) {
- this(null, fps);
- }
-
- /** Creates an FPSAnimator with a given target frames-per-second
- value and a flag indicating whether to use fixed-rate
- scheduling. Equivalent to <code>FPSAnimator(null, fps,
- scheduleAtFixedRate)</code>. */
- public FPSAnimator(int fps, boolean scheduleAtFixedRate) {
- this(null, fps, scheduleAtFixedRate);
- }
-
- /** Creates an FPSAnimator with a given target frames-per-second
- value and an initial drawable to animate. Equivalent to
- <code>FPSAnimator(null, fps, false)</code>. */
- public FPSAnimator(GLAutoDrawable drawable, int fps) {
- this(drawable, fps, false);
- }
-
- /** Creates an FPSAnimator with a given target frames-per-second
- value, an initial drawable to animate, and a flag indicating
- whether to use fixed-rate scheduling. */
- public FPSAnimator(GLAutoDrawable drawable, int fps, boolean scheduleAtFixedRate) {
- this.fps = fps;
- if (drawable != null) {
- add(drawable);
- }
- this.scheduleAtFixedRate = scheduleAtFixedRate;
- }
-
- /** Starts this FPSAnimator. */
- public synchronized void start() {
- if (timer != null) {
- throw new GLException("Already started");
- }
- timer = new Timer();
- long delay = (long) (1000.0f / (float) fps);
- TimerTask task = new TimerTask() {
- public void run() {
- display();
- }
- };
- if (scheduleAtFixedRate) {
- timer.scheduleAtFixedRate(task, 0, delay);
- } else {
- timer.schedule(task, 0, delay);
- }
- }
-
- /** Indicates whether this FPSAnimator is currently running. This
- should only be used as a heuristic to applications because in
- some circumstances the FPSAnimator may be in the process of
- shutting down and this method will still return true. */
- public synchronized boolean isAnimating() {
- return (timer != null);
- }
-
- /** Stops this FPSAnimator. Due to the implementation of the
- FPSAnimator it is not guaranteed that the FPSAnimator will be
- completely stopped by the time this method returns. */
- public synchronized void stop() {
- if (timer == null) {
- throw new GLException("Already stopped");
- }
- timer.cancel();
- timer = null;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/FileUtil.java b/src/classes/com/sun/opengl/util/FileUtil.java
deleted file mode 100755
index 2971de636..000000000
--- a/src/classes/com/sun/opengl/util/FileUtil.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import java.io.*;
-
-/** Utilities for dealing with files. */
-
-public class FileUtil {
- private FileUtil() {}
-
- /**
- * Returns the lowercase suffix of the given file name (the text
- * after the last '.' in the file name). Returns null if the file
- * name has no suffix. Only operates on the given file name;
- * performs no I/O operations.
- *
- * @param file name of the file
- * @return lowercase suffix of the file name
- * @throws NullPointerException if file is null
- */
-
- public static String getFileSuffix(File file) {
- return getFileSuffix(file.getName());
- }
-
- /**
- * Returns the lowercase suffix of the given file name (the text
- * after the last '.' in the file name). Returns null if the file
- * name has no suffix. Only operates on the given file name;
- * performs no I/O operations.
- *
- * @param filename name of the file
- * @return lowercase suffix of the file name
- * @throws NullPointerException if filename is null
- */
- public static String getFileSuffix(String filename) {
- int lastDot = filename.lastIndexOf('.');
- if (lastDot < 0) {
- return null;
- }
- return toLowerCase(filename.substring(lastDot + 1));
- }
-
- private static String toLowerCase(String arg) {
- if (arg == null) {
- return null;
- }
-
- return arg.toLowerCase();
- }
-}
diff --git a/src/classes/com/sun/opengl/util/GLUT.java b/src/classes/com/sun/opengl/util/GLUT.java
deleted file mode 100644
index 9ab90fb1e..000000000
--- a/src/classes/com/sun/opengl/util/GLUT.java
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-/** Subset of the routines provided by the GLUT interface. Note the
- signatures of many of the methods are necessarily different than
- the corresponding C version. A GLUT object must only be used from
- one particular thread at a time. <P>
-
- Copyright (c) Mark J. Kilgard, 1994, 1997. <P>
-
- (c) Copyright 1993, Silicon Graphics, Inc. <P>
-
- ALL RIGHTS RESERVED <P>
-
- Permission to use, copy, modify, and distribute this software
- for any purpose and without fee is hereby granted, provided
- that the above copyright notice appear in all copies and that
- both the copyright notice and this permission notice appear in
- supporting documentation, and that the name of Silicon
- Graphics, Inc. not be used in advertising or publicity
- pertaining to distribution of the software without specific,
- written prior permission. <P>
-
- THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
- "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
- OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO
- EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE
- ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
- INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
- SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
- NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY
- OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
- PERFORMANCE OF THIS SOFTWARE. <P>
-
- US Government Users Restricted Rights <P>
-
- Use, duplication, or disclosure by the Government is subject to
- restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- (c)(1)(ii) of the Rights in Technical Data and Computer
- Software clause at DFARS 252.227-7013 and/or in similar or
- successor clauses in the FAR or the DOD or NASA FAR
- Supplement. Unpublished-- rights reserved under the copyright
- laws of the United States. Contractor/manufacturer is Silicon
- Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA
- 94039-7311. <P>
-
- OpenGL(TM) is a trademark of Silicon Graphics, Inc. <P>
-*/
-
-public class GLUT {
- public static final int STROKE_ROMAN = 0;
- public static final int STROKE_MONO_ROMAN = 1;
- public static final int BITMAP_9_BY_15 = 2;
- public static final int BITMAP_8_BY_13 = 3;
- public static final int BITMAP_TIMES_ROMAN_10 = 4;
- public static final int BITMAP_TIMES_ROMAN_24 = 5;
- public static final int BITMAP_HELVETICA_10 = 6;
- public static final int BITMAP_HELVETICA_12 = 7;
- public static final int BITMAP_HELVETICA_18 = 8;
-
- private GLU glu = new GLU();
-
- //----------------------------------------------------------------------
- // Shapes
- //
-
- public void glutWireSphere(double radius, int slices, int stacks) {
- quadObjInit(glu);
- glu.gluQuadricDrawStyle(quadObj, GLU.GLU_LINE);
- glu.gluQuadricNormals(quadObj, GLU.GLU_SMOOTH);
- /* If we ever changed/used the texture or orientation state
- of quadObj, we'd need to change it to the defaults here
- with gluQuadricTexture and/or gluQuadricOrientation. */
- glu.gluSphere(quadObj, radius, slices, stacks);
- }
-
- public void glutSolidSphere(double radius, int slices, int stacks) {
- quadObjInit(glu);
- glu.gluQuadricDrawStyle(quadObj, GLU.GLU_FILL);
- glu.gluQuadricNormals(quadObj, GLU.GLU_SMOOTH);
- /* If we ever changed/used the texture or orientation state
- of quadObj, we'd need to change it to the defaults here
- with gluQuadricTexture and/or gluQuadricOrientation. */
- glu.gluSphere(quadObj, radius, slices, stacks);
- }
-
- public void glutWireCone(double base, double height,
- int slices, int stacks) {
- quadObjInit(glu);
- glu.gluQuadricDrawStyle(quadObj, GLU.GLU_LINE);
- glu.gluQuadricNormals(quadObj, GLU.GLU_SMOOTH);
- /* If we ever changed/used the texture or orientation state
- of quadObj, we'd need to change it to the defaults here
- with gluQuadricTexture and/or gluQuadricOrientation. */
- glu.gluCylinder(quadObj, base, 0.0, height, slices, stacks);
- }
-
- public void glutSolidCone(double base, double height,
- int slices, int stacks) {
- quadObjInit(glu);
- glu.gluQuadricDrawStyle(quadObj, GLU.GLU_FILL);
- glu.gluQuadricNormals(quadObj, GLU.GLU_SMOOTH);
- /* If we ever changed/used the texture or orientation state
- of quadObj, we'd need to change it to the defaults here
- with gluQuadricTexture and/or gluQuadricOrientation. */
- glu.gluCylinder(quadObj, base, 0.0, height, slices, stacks);
- }
-
- public void glutWireCylinder(double radius, double height, int slices, int stacks) {
- quadObjInit(glu);
- glu.gluQuadricDrawStyle(quadObj, GLU.GLU_LINE);
- glu.gluQuadricNormals(quadObj, GLU.GLU_SMOOTH);
- /* If we ever changed/used the texture or orientation state
- of quadObj, we'd need to change it to the defaults here
- with gluQuadricTexture and/or gluQuadricOrientation. */
- glu.gluCylinder(quadObj, radius, radius, height, slices, stacks);
- }
-
- public void glutSolidCylinder(double radius, double height, int slices, int stacks) {
- GL gl = glu.getCurrentGL();
-
- // Prepare table of points for drawing end caps
- double [] x = new double[slices];
- double [] y = new double[slices];
- double angleDelta = Math.PI * 2 / slices;
- double angle = 0;
- for (int i = 0 ; i < slices ; i ++) {
- angle = i * angleDelta;
- x[i] = Math.cos(angle) * radius;
- y[i] = Math.sin(angle) * radius;
- }
-
- // Draw bottom cap
- gl.glBegin(GL.GL_TRIANGLE_FAN);
- gl.glNormal3d(0,0,-1);
- gl.glVertex3d(0,0,0);
- for (int i = 0 ; i < slices ; i ++) {
- gl.glVertex3d(x[i], y[i], 0);
- }
- gl.glVertex3d(x[0], y[0], 0);
- gl.glEnd();
-
- // Draw top cap
- gl.glBegin(GL.GL_TRIANGLE_FAN);
- gl.glNormal3d(0,0,1);
- gl.glVertex3d(0,0,height);
- for (int i = 0 ; i < slices ; i ++) {
- gl.glVertex3d(x[i], y[i], height);
- }
- gl.glVertex3d(x[0], y[0], height);
- gl.glEnd();
-
- // Draw walls
- quadObjInit(glu);
- glu.gluQuadricDrawStyle(quadObj, GLU.GLU_FILL);
- glu.gluQuadricNormals(quadObj, GLU.GLU_SMOOTH);
- /* If we ever changed/used the texture or orientation state
- of quadObj, we'd need to change it to the defaults here
- with gluQuadricTexture and/or gluQuadricOrientation. */
- glu.gluCylinder(quadObj, radius, radius, height, slices, stacks);
- }
-
- public void glutWireCube(float size) {
- drawBox(GLU.getCurrentGL(), size, GL.GL_LINE_LOOP);
- }
-
- public void glutSolidCube(float size) {
- drawBox(GLU.getCurrentGL(), size, GL.GL_QUADS);
- }
-
- public void glutWireTorus(double innerRadius, double outerRadius,
- int nsides, int rings) {
- GL gl = GLU.getCurrentGL();
- gl.glPushAttrib(GL.GL_POLYGON_BIT);
- gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE);
- doughnut(gl, innerRadius, outerRadius, nsides, rings);
- gl.glPopAttrib();
- }
-
- public void glutSolidTorus(double innerRadius, double outerRadius,
- int nsides, int rings) {
- doughnut(GLU.getCurrentGL(), innerRadius, outerRadius, nsides, rings);
- }
-
- public void glutWireDodecahedron() {
- dodecahedron(GLU.getCurrentGL(), GL.GL_LINE_LOOP);
- }
-
- public void glutSolidDodecahedron() {
- dodecahedron(GLU.getCurrentGL(), GL.GL_TRIANGLE_FAN);
- }
-
- public void glutWireOctahedron() {
- octahedron(GLU.getCurrentGL(), GL.GL_LINE_LOOP);
- }
-
- public void glutSolidOctahedron() {
- octahedron(GLU.getCurrentGL(), GL.GL_TRIANGLES);
- }
-
- public void glutWireIcosahedron() {
- icosahedron(GLU.getCurrentGL(), GL.GL_LINE_LOOP);
- }
-
- public void glutSolidIcosahedron() {
- icosahedron(GLU.getCurrentGL(), GL.GL_TRIANGLES);
- }
-
- public void glutWireTetrahedron() {
- tetrahedron(GLU.getCurrentGL(), GL.GL_LINE_LOOP);
- }
-
- public void glutSolidTetrahedron() {
- tetrahedron(GLU.getCurrentGL(), GL.GL_TRIANGLES);
- }
-
-/**
- * Renders the teapot as a solid shape of the specified size. The teapot is
- * created in a way that replicates the C GLUT implementation.
- *
- * @param scale
- * the factor by which to scale the teapot
- */
- public void glutSolidTeapot(double scale) {
- glutSolidTeapot(scale, true);
- }
-
- /**
- * Renders the teapot as a solid shape of the specified size. The teapot can
- * either be created in a way that is backward-compatible with the standard
- * C glut library (i.e. broken), or in a more pleasing way (i.e. with
- * surfaces whose front-faces point outwards and standing on the z=0 plane,
- * instead of the y=-1 plane). Both surface normals and texture coordinates
- * for the teapot are generated. The teapot is generated with OpenGL
- * evaluators.
- *
- * @param scale
- * the factor by which to scale the teapot
- * @param cStyle
- * whether to create the teapot in exactly the same way as in the C
- * implementation of GLUT
- */
- public void glutSolidTeapot(double scale, boolean cStyle) {
- teapot(GLU.getCurrentGL(), 14, scale, GL.GL_FILL, cStyle);
- }
-
- /**
- * Renders the teapot as a wireframe shape of the specified size. The teapot
- * is created in a way that replicates the C GLUT implementation.
- *
- * @param scale
- * the factor by which to scale the teapot
- */
- public void glutWireTeapot(double scale) {
- glutWireTeapot(scale, true);
- }
-
- /**
- * Renders the teapot as a wireframe shape of the specified size. The teapot
- * can either be created in a way that is backward-compatible with the
- * standard C glut library (i.e. broken), or in a more pleasing way (i.e.
- * with surfaces whose front-faces point outwards and standing on the z=0
- * plane, instead of the y=-1 plane). Both surface normals and texture
- * coordinates for the teapot are generated. The teapot is generated with
- * OpenGL evaluators.
- *
- * @param scale
- * the factor by which to scale the teapot
- * @param cStyle
- * whether to create the teapot in exactly the same way as in the C
- * implementation of GLUT
- */
- public void glutWireTeapot(double scale, boolean cStyle) {
- teapot(GLU.getCurrentGL(), 10, scale, GL.GL_LINE, cStyle);
- }
-
- //----------------------------------------------------------------------
- // Fonts
- //
-
- public void glutBitmapCharacter(int font, char character) {
- GL gl = GLU.getCurrentGL();
- int[] swapbytes = new int[1];
- int[] lsbfirst = new int[1];
- int[] rowlength = new int[1];
- int[] skiprows = new int[1];
- int[] skippixels = new int[1];
- int[] alignment = new int[1];
- beginBitmap(gl,
- swapbytes,
- lsbfirst,
- rowlength,
- skiprows,
- skippixels,
- alignment);
- bitmapCharacterImpl(gl, font, character);
- endBitmap(gl,
- swapbytes,
- lsbfirst,
- rowlength,
- skiprows,
- skippixels,
- alignment);
- }
-
- public void glutBitmapString (int font, String string) {
- GL gl = GLU.getCurrentGL();
- int[] swapbytes = new int[1];
- int[] lsbfirst = new int[1];
- int[] rowlength = new int[1];
- int[] skiprows = new int[1];
- int[] skippixels = new int[1];
- int[] alignment = new int[1];
- beginBitmap(gl,
- swapbytes,
- lsbfirst,
- rowlength,
- skiprows,
- skippixels,
- alignment);
- int len = string.length();
- for (int i = 0; i < len; i++) {
- bitmapCharacterImpl(gl, font, string.charAt(i));
- }
- endBitmap(gl,
- swapbytes,
- lsbfirst,
- rowlength,
- skiprows,
- skippixels,
- alignment);
- }
-
- public int glutBitmapWidth (int font, char character) {
- BitmapFontRec fontinfo = getBitmapFont(font);
- int c = character & 0xFFFF;
- if (c < fontinfo.first || c >= fontinfo.first + fontinfo.num_chars)
- return 0;
- BitmapCharRec ch = fontinfo.ch[c - fontinfo.first];
- if (ch != null)
- return (int) ch.advance;
- else
- return 0;
- }
-
- public void glutStrokeCharacter(int font, char character) {
- GL gl = GLU.getCurrentGL();
- StrokeFontRec fontinfo = getStrokeFont(font);
- int c = character & 0xFFFF;
- if (c < 0 || c >= fontinfo.num_chars)
- return;
- StrokeCharRec ch = fontinfo.ch[c];
- if (ch != null) {
- for (int i = 0; i < ch.num_strokes; i++) {
- StrokeRec stroke = ch.stroke[i];
- gl.glBegin(GL.GL_LINE_STRIP);
- for (int j = 0; j < stroke.num_coords; j++) {
- CoordRec coord = stroke.coord[j];
- gl.glVertex2f(coord.x, coord.y);
- }
- gl.glEnd();
- }
- gl.glTranslatef(ch.right, 0.0f, 0.0f);
- }
- }
-
- public void glutStrokeString(int font, String string) {
- GL gl = GLU.getCurrentGL();
- StrokeFontRec fontinfo = getStrokeFont(font);
- int len = string.length();
- for (int pos = 0; pos < len; pos++) {
- int c = string.charAt(pos) & 0xFFFF;
- if (c < 0 || c >= fontinfo.num_chars)
- continue;
- StrokeCharRec ch = fontinfo.ch[c];
- if (ch != null) {
- for (int i = 0; i < ch.num_strokes; i++) {
- StrokeRec stroke = ch.stroke[i];
- gl.glBegin(GL.GL_LINE_STRIP);
- for (int j = 0; j < stroke.num_coords; j++) {
- CoordRec coord = stroke.coord[j];
- gl.glVertex2f(coord.x, coord.y);
- }
- gl.glEnd();
- }
- gl.glTranslatef(ch.right, 0.0f, 0.0f);
- }
- }
- }
-
- public int glutStrokeWidth (int font, char character) {
- return (int) glutStrokeWidthf(font, character);
- }
-
- public float glutStrokeWidthf (int font, char character) {
- StrokeFontRec fontinfo = getStrokeFont(font);
- int c = character & 0xFFFF;
- if (c < 0 || c >= fontinfo.num_chars)
- return 0;
- StrokeCharRec ch = fontinfo.ch[c];
- if (ch != null)
- return ch.right;
- else
- return 0;
- }
-
- public int glutBitmapLength (int font, String string) {
- BitmapFontRec fontinfo = getBitmapFont(font);
- int length = 0;
- int len = string.length();
- for (int pos = 0; pos < len; pos++) {
- int c = string.charAt(pos) & 0xFFFF;
- if (c >= fontinfo.first && c < fontinfo.first + fontinfo.num_chars) {
- BitmapCharRec ch = fontinfo.ch[c - fontinfo.first];
- if (ch != null)
- length += ch.advance;
- }
- }
- return length;
- }
-
- public int glutStrokeLength (int font, String string) {
- return (int) glutStrokeLengthf(font, string);
- }
-
- public float glutStrokeLengthf (int font, String string) {
- StrokeFontRec fontinfo = getStrokeFont(font);
- float length = 0;
- int len = string.length();
- for (int i = 0; i < len; i++) {
- char c = string.charAt(i);
- if (c >= 0 && c < fontinfo.num_chars) {
- StrokeCharRec ch = fontinfo.ch[c];
- if (ch != null)
- length += ch.right;
- }
- }
- return length;
- }
-
- /**
- This function draws a wireframe dodecahedron whose
- facets are rhombic and
- whose vertices are at unit radius.
- No facet lies normal to any coordinate axes.
- The polyhedron is centered at the origin.
- */
- public void glutWireRhombicDodecahedron() {
- GL gl = glu.getCurrentGL();
- for( int i = 0; i < 12; i++ ) {
- gl.glBegin( GL.GL_LINE_LOOP );
- gl.glNormal3dv( rdod_n[ i ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 0 ] ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 1 ] ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 2 ] ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 3 ] ],0 );
- gl.glEnd( );
- }
- }
-
- /**
- This function draws a solid-shaded dodecahedron
- whose facets are rhombic and
- whose vertices are at unit radius.
- No facet lies normal to any coordinate axes.
- The polyhedron is centered at the origin.
- */
- public void glutSolidRhombicDodecahedron() {
- GL gl = glu.getCurrentGL();
- gl.glBegin( GL.GL_QUADS );
- for( int i = 0; i < 12; i++ ) {
- gl.glNormal3dv( rdod_n[ i ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 0 ] ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 1 ] ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 2 ] ],0 );
- gl.glVertex3dv( rdod_r[ rdod_v[ i ][ 3 ] ],0 );
- }
- gl.glEnd( );
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- //----------------------------------------------------------------------
- // Shape implementation
- //
-
- private GLUquadric quadObj;
- private void quadObjInit(GLU glu) {
- if (quadObj == null) {
- quadObj = glu.gluNewQuadric();
- }
- if (quadObj == null) {
- throw new GLException("Out of memory");
- }
- }
-
- private static void doughnut(GL gl, double r, double R, int nsides, int rings) {
- int i, j;
- float theta, phi, theta1;
- float cosTheta, sinTheta;
- float cosTheta1, sinTheta1;
- float ringDelta, sideDelta;
-
- ringDelta = (float) (2.0 * Math.PI / rings);
- sideDelta = (float) (2.0 * Math.PI / nsides);
-
- theta = 0.0f;
- cosTheta = 1.0f;
- sinTheta = 0.0f;
- for (i = rings - 1; i >= 0; i--) {
- theta1 = theta + ringDelta;
- cosTheta1 = (float) Math.cos(theta1);
- sinTheta1 = (float) Math.sin(theta1);
- gl.glBegin(GL.GL_QUAD_STRIP);
- phi = 0.0f;
- for (j = nsides; j >= 0; j--) {
- float cosPhi, sinPhi, dist;
-
- phi += sideDelta;
- cosPhi = (float) Math.cos(phi);
- sinPhi = (float) Math.sin(phi);
- dist = (float) (R + r * cosPhi);
-
- gl.glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
- gl.glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, (float) r * sinPhi);
- gl.glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
- gl.glVertex3f(cosTheta * dist, -sinTheta * dist, (float) r * sinPhi);
- }
- gl.glEnd();
- theta = theta1;
- cosTheta = cosTheta1;
- sinTheta = sinTheta1;
- }
- }
-
- private static float[][] boxVertices;
- private static final float[][] boxNormals = {
- {-1.0f, 0.0f, 0.0f},
- {0.0f, 1.0f, 0.0f},
- {1.0f, 0.0f, 0.0f},
- {0.0f, -1.0f, 0.0f},
- {0.0f, 0.0f, 1.0f},
- {0.0f, 0.0f, -1.0f}
- };
- private static final int[][] boxFaces = {
- {0, 1, 2, 3},
- {3, 2, 6, 7},
- {7, 6, 5, 4},
- {4, 5, 1, 0},
- {5, 6, 2, 1},
- {7, 4, 0, 3}
- };
- private void drawBox(GL gl, float size, int type) {
- if (boxVertices == null) {
- float[][] v = new float[8][];
- for (int i = 0; i < 8; i++) {
- v[i] = new float[3];
- }
- v[0][0] = v[1][0] = v[2][0] = v[3][0] = -0.5f;
- v[4][0] = v[5][0] = v[6][0] = v[7][0] = 0.5f;
- v[0][1] = v[1][1] = v[4][1] = v[5][1] = -0.5f;
- v[2][1] = v[3][1] = v[6][1] = v[7][1] = 0.5f;
- v[0][2] = v[3][2] = v[4][2] = v[7][2] = -0.5f;
- v[1][2] = v[2][2] = v[5][2] = v[6][2] = 0.5f;
- boxVertices = v;
- }
- float[][] v = boxVertices;
- float[][] n = boxNormals;
- int[][] faces = boxFaces;
- for (int i = 5; i >= 0; i--) {
- gl.glBegin(type);
- gl.glNormal3fv(n[i], 0);
- float[] vt = v[faces[i][0]];
- gl.glVertex3f(vt[0] * size, vt[1] * size, vt[2] * size);
- vt = v[faces[i][1]];
- gl.glVertex3f(vt[0] * size, vt[1] * size, vt[2] * size);
- vt = v[faces[i][2]];
- gl.glVertex3f(vt[0] * size, vt[1] * size, vt[2] * size);
- vt = v[faces[i][3]];
- gl.glVertex3f(vt[0] * size, vt[1] * size, vt[2] * size);
- gl.glEnd();
- }
- }
-
- private float[][] dodec;
-
- private void initDodecahedron() {
- dodec = new float[20][];
- for (int i = 0; i < dodec.length; i++) {
- dodec[i] = new float[3];
- }
-
- float alpha, beta;
-
- alpha = (float) Math.sqrt(2.0f / (3.0f + Math.sqrt(5.0)));
- beta = 1.0f + (float) Math.sqrt(6.0 / (3.0 + Math.sqrt(5.0)) -
- 2.0 + 2.0 * Math.sqrt(2.0 / (3.0 + Math.sqrt(5.0))));
- dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;
- dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;
- dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;
- dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;
- dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;
- dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;
- dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;
- dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;
- dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;
- dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;
- dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;
- dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;
- dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;
- dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;
- dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;
- dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;
- dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;
- dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;
- dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;
- dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;
- }
-
- private static void diff3(float[] a, float[] b, float[] c) {
- c[0] = a[0] - b[0];
- c[1] = a[1] - b[1];
- c[2] = a[2] - b[2];
- }
-
- private static void crossprod(float[] v1, float[] v2, float[] prod) {
- float[] p = new float[3]; /* in case prod == v1 or v2 */
-
- p[0] = v1[1] * v2[2] - v2[1] * v1[2];
- p[1] = v1[2] * v2[0] - v2[2] * v1[0];
- p[2] = v1[0] * v2[1] - v2[0] * v1[1];
- prod[0] = p[0];
- prod[1] = p[1];
- prod[2] = p[2];
- }
-
- private static void normalize(float[] v) {
- float d;
-
- d = (float) Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
- if (d == 0.0) {
- v[0] = d = 1.0f;
- }
- d = 1 / d;
- v[0] *= d;
- v[1] *= d;
- v[2] *= d;
- }
-
- private void pentagon(GL gl, int a, int b, int c, int d, int e, int shadeType) {
- float[] n0 = new float[3];
- float[] d1 = new float[3];
- float[] d2 = new float[3];
-
- diff3(dodec[a], dodec[b], d1);
- diff3(dodec[b], dodec[c], d2);
- crossprod(d1, d2, n0);
- normalize(n0);
-
- gl.glBegin(shadeType);
- gl.glNormal3fv(n0, 0);
- gl.glVertex3fv(dodec[a], 0);
- gl.glVertex3fv(dodec[b], 0);
- gl.glVertex3fv(dodec[c], 0);
- gl.glVertex3fv(dodec[d], 0);
- gl.glVertex3fv(dodec[e], 0);
- gl.glEnd();
- }
-
- private void dodecahedron(GL gl, int type) {
- if (dodec == null) {
- initDodecahedron();
- }
- pentagon(gl, 0, 1, 9, 16, 5, type);
- pentagon(gl, 1, 0, 3, 18, 7, type);
- pentagon(gl, 1, 7, 11, 10, 9, type);
- pentagon(gl, 11, 7, 18, 19, 6, type);
- pentagon(gl, 8, 17, 16, 9, 10, type);
- pentagon(gl, 2, 14, 15, 6, 19, type);
- pentagon(gl, 2, 13, 12, 4, 14, type);
- pentagon(gl, 2, 19, 18, 3, 13, type);
- pentagon(gl, 3, 0, 5, 12, 13, type);
- pentagon(gl, 6, 15, 8, 10, 11, type);
- pentagon(gl, 4, 17, 8, 15, 14, type);
- pentagon(gl, 4, 12, 5, 16, 17, type);
- }
-
- private static void recorditem(GL gl, float[] n1, float[] n2, float[] n3, int shadeType) {
- float[] q0 = new float[3];
- float[] q1 = new float[3];
-
- diff3(n1, n2, q0);
- diff3(n2, n3, q1);
- crossprod(q0, q1, q1);
- normalize(q1);
-
- gl.glBegin(shadeType);
- gl.glNormal3fv(q1, 0);
- gl.glVertex3fv(n1, 0);
- gl.glVertex3fv(n2, 0);
- gl.glVertex3fv(n3, 0);
- gl.glEnd();
- }
-
- private static void subdivide(GL gl, float[] v0, float[] v1, float[] v2, int shadeType) {
- int depth;
- float[] w0 = new float[3];
- float[] w1 = new float[3];
- float[] w2 = new float[3];
- float l;
- int i, j, k, n;
-
- depth = 1;
- for (i = 0; i < depth; i++) {
- for (j = 0; i + j < depth; j++) {
- k = depth - i - j;
- for (n = 0; n < 3; n++) {
- w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;
- w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])
- / depth;
- w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])
- / depth;
- }
- l = (float) Math.sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);
- w0[0] /= l;
- w0[1] /= l;
- w0[2] /= l;
- l = (float) Math.sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);
- w1[0] /= l;
- w1[1] /= l;
- w1[2] /= l;
- l = (float) Math.sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);
- w2[0] /= l;
- w2[1] /= l;
- w2[2] /= l;
- recorditem(gl, w1, w0, w2, shadeType);
- }
- }
- }
-
- private static void drawtriangle(GL gl, int i, float[][] data, int[][] ndx, int shadeType) {
- float[] x0 = data[ndx[i][0]];
- float[] x1 = data[ndx[i][1]];
- float[] x2 = data[ndx[i][2]];
- subdivide(gl, x0, x1, x2, shadeType);
- }
-
- /* octahedron data: The octahedron produced is centered at the
- origin and has radius 1.0 */
- private static final float[][] odata =
- {
- {1.0f, 0.0f, 0.0f},
- {-1.0f, 0.0f, 0.0f},
- {0.0f, 1.0f, 0.0f},
- {0.0f, -1.0f, 0.0f},
- {0.0f, 0.0f, 1.0f},
- {0.0f, 0.0f, -1.0f}
- };
-
- private static final int[][] ondex =
- {
- {0, 4, 2},
- {1, 2, 4},
- {0, 3, 4},
- {1, 4, 3},
- {0, 2, 5},
- {1, 5, 2},
- {0, 5, 3},
- {1, 3, 5}
- };
-
- private static void octahedron(GL gl, int shadeType) {
- int i;
-
- for (i = 7; i >= 0; i--) {
- drawtriangle(gl, i, odata, ondex, shadeType);
- }
- }
-
- /* icosahedron data: These numbers are rigged to make an
- icosahedron of radius 1.0 */
-
- private static final float X = .525731112119133606f;
- private static final float Z = .850650808352039932f;
-
- private static final float[][] idata =
- {
- {-X, 0, Z},
- {X, 0, Z},
- {-X, 0, -Z},
- {X, 0, -Z},
- {0, Z, X},
- {0, Z, -X},
- {0, -Z, X},
- {0, -Z, -X},
- {Z, X, 0},
- {-Z, X, 0},
- {Z, -X, 0},
- {-Z, -X, 0}
- };
-
- private static final int[][] index =
- {
- {0, 4, 1},
- {0, 9, 4},
- {9, 5, 4},
- {4, 5, 8},
- {4, 8, 1},
- {8, 10, 1},
- {8, 3, 10},
- {5, 3, 8},
- {5, 2, 3},
- {2, 7, 3},
- {7, 10, 3},
- {7, 6, 10},
- {7, 11, 6},
- {11, 0, 6},
- {0, 1, 6},
- {6, 1, 10},
- {9, 0, 11},
- {9, 11, 2},
- {9, 2, 5},
- {7, 2, 11},
- };
-
- private static void icosahedron(GL gl, int shadeType) {
- int i;
-
- for (i = 19; i >= 0; i--) {
- drawtriangle(gl, i, idata, index, shadeType);
- }
- }
-
- /* rhombic dodecahedron data: */
-
- private static final double rdod_r[][] =
- {
- { 0.0, 0.0, 1.0 },
- { 0.707106781187, 0.000000000000, 0.5 },
- { 0.000000000000, 0.707106781187, 0.5 },
- { -0.707106781187, 0.000000000000, 0.5 },
- { 0.000000000000, -0.707106781187, 0.5 },
- { 0.707106781187, 0.707106781187, 0.0 },
- { -0.707106781187, 0.707106781187, 0.0 },
- { -0.707106781187, -0.707106781187, 0.0 },
- { 0.707106781187, -0.707106781187, 0.0 },
- { 0.707106781187, 0.000000000000, -0.5 },
- { 0.000000000000, 0.707106781187, -0.5 },
- { -0.707106781187, 0.000000000000, -0.5 },
- { 0.000000000000, -0.707106781187, -0.5 },
- { 0.0, 0.0, -1.0 }
- };
-
- private static final int rdod_v[][] =
- {
- { 0, 1, 5, 2 },
- { 0, 2, 6, 3 },
- { 0, 3, 7, 4 },
- { 0, 4, 8, 1 },
- { 5, 10, 6, 2 },
- { 6, 11, 7, 3 },
- { 7, 12, 8, 4 },
- { 8, 9, 5, 1 },
- { 5, 9, 13, 10 },
- { 6, 10, 13, 11 },
- { 7, 11, 13, 12 },
- { 8, 12, 13, 9 }
- };
-
- private static final double rdod_n[][] =
- {
- { 0.353553390594, 0.353553390594, 0.5 },
- { -0.353553390594, 0.353553390594, 0.5 },
- { -0.353553390594, -0.353553390594, 0.5 },
- { 0.353553390594, -0.353553390594, 0.5 },
- { 0.000000000000, 1.000000000000, 0.0 },
- { -1.000000000000, 0.000000000000, 0.0 },
- { 0.000000000000, -1.000000000000, 0.0 },
- { 1.000000000000, 0.000000000000, 0.0 },
- { 0.353553390594, 0.353553390594, -0.5 },
- { -0.353553390594, 0.353553390594, -0.5 },
- { -0.353553390594, -0.353553390594, -0.5 },
- { 0.353553390594, -0.353553390594, -0.5 }
- };
-
- /* tetrahedron data: */
-
- private static final float T = 1.73205080756887729f;
-
- private static final float[][] tdata =
- {
- {T, T, T},
- {T, -T, -T},
- {-T, T, -T},
- {-T, -T, T}
- };
-
- private static final int[][] tndex =
- {
- {0, 1, 3},
- {2, 1, 0},
- {3, 2, 0},
- {1, 2, 3}
- };
-
- private static final void tetrahedron(GL gl, int shadeType) {
- for (int i = 3; i >= 0; i--)
- drawtriangle(gl, i, tdata, tndex, shadeType);
- }
-
- // Teapot implementation (a modified port of glut_teapot.c)
- //
- // Rim, body, lid, and bottom data must be reflected in x and
- // y; handle and spout data across the y axis only.
- private static final int[][] teapotPatchData = {
- /* rim */
- {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
- /* body */
- {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27},
- {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40},
- /* lid */
- {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, 101, 0, 1, 2, 3,},
- {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117},
- /* bottom */
- {118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120, 40, 39, 38, 37},
- /* handle */
- {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56},
- {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 28, 65, 66, 67},
- /* spout */
- {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83},
- {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95}
- };
- private static final float[][] teapotCPData = {
- {0.2f, 0f, 2.7f},
- {0.2f, -0.112f, 2.7f},
- {0.112f, -0.2f, 2.7f},
- {0f, -0.2f, 2.7f},
- {1.3375f, 0f, 2.53125f},
- {1.3375f, -0.749f, 2.53125f},
- {0.749f, -1.3375f, 2.53125f},
- {0f, -1.3375f, 2.53125f},
- {1.4375f, 0f, 2.53125f},
- {1.4375f, -0.805f, 2.53125f},
- {0.805f, -1.4375f, 2.53125f},
- {0f, -1.4375f, 2.53125f},
- {1.5f, 0f, 2.4f},
- {1.5f, -0.84f, 2.4f},
- {0.84f, -1.5f, 2.4f},
- {0f, -1.5f, 2.4f},
- {1.75f, 0f, 1.875f},
- {1.75f, -0.98f, 1.875f},
- {0.98f, -1.75f, 1.875f},
- {0f, -1.75f, 1.875f},
- {2f, 0f, 1.35f},
- {2f, -1.12f, 1.35f},
- {1.12f, -2f, 1.35f},
- {0f, -2f, 1.35f},
- {2f, 0f, 0.9f},
- {2f, -1.12f, 0.9f},
- {1.12f, -2f, 0.9f},
- {0f, -2f, 0.9f},
- {-2f, 0f, 0.9f},
- {2f, 0f, 0.45f},
- {2f, -1.12f, 0.45f},
- {1.12f, -2f, 0.45f},
- {0f, -2f, 0.45f},
- {1.5f, 0f, 0.225f},
- {1.5f, -0.84f, 0.225f},
- {0.84f, -1.5f, 0.225f},
- {0f, -1.5f, 0.225f},
- {1.5f, 0f, 0.15f},
- {1.5f, -0.84f, 0.15f},
- {0.84f, -1.5f, 0.15f},
- {0f, -1.5f, 0.15f},
- {-1.6f, 0f, 2.025f},
- {-1.6f, -0.3f, 2.025f},
- {-1.5f, -0.3f, 2.25f},
- {-1.5f, 0f, 2.25f},
- {-2.3f, 0f, 2.025f},
- {-2.3f, -0.3f, 2.025f},
- {-2.5f, -0.3f, 2.25f},
- {-2.5f, 0f, 2.25f},
- {-2.7f, 0f, 2.025f},
- {-2.7f, -0.3f, 2.025f},
- {-3f, -0.3f, 2.25f},
- {-3f, 0f, 2.25f},
- {-2.7f, 0f, 1.8f},
- {-2.7f, -0.3f, 1.8f},
- {-3f, -0.3f, 1.8f},
- {-3f, 0f, 1.8f},
- {-2.7f, 0f, 1.575f},
- {-2.7f, -0.3f, 1.575f},
- {-3f, -0.3f, 1.35f},
- {-3f, 0f, 1.35f},
- {-2.5f, 0f, 1.125f},
- {-2.5f, -0.3f, 1.125f},
- {-2.65f, -0.3f, 0.9375f},
- {-2.65f, 0f, 0.9375f},
- {-2f, -0.3f, 0.9f},
- {-1.9f, -0.3f, 0.6f},
- {-1.9f, 0f, 0.6f},
- {1.7f, 0f, 1.425f},
- {1.7f, -0.66f, 1.425f},
- {1.7f, -0.66f, 0.6f},
- {1.7f, 0f, 0.6f},
- {2.6f, 0f, 1.425f},
- {2.6f, -0.66f, 1.425f},
- {3.1f, -0.66f, 0.825f},
- {3.1f, 0f, 0.825f},
- {2.3f, 0f, 2.1f},
- {2.3f, -0.25f, 2.1f},
- {2.4f, -0.25f, 2.025f},
- {2.4f, 0f, 2.025f},
- {2.7f, 0f, 2.4f},
- {2.7f, -0.25f, 2.4f},
- {3.3f, -0.25f, 2.4f},
- {3.3f, 0f, 2.4f},
- {2.8f, 0f, 2.475f},
- {2.8f, -0.25f, 2.475f},
- {3.525f, -0.25f, 2.49375f},
- {3.525f, 0f, 2.49375f},
- {2.9f, 0f, 2.475f},
- {2.9f, -0.15f, 2.475f},
- {3.45f, -0.15f, 2.5125f},
- {3.45f, 0f, 2.5125f},
- {2.8f, 0f, 2.4f},
- {2.8f, -0.15f, 2.4f},
- {3.2f, -0.15f, 2.4f},
- {3.2f, 0f, 2.4f},
- {0f, 0f, 3.15f},
- {0.8f, 0f, 3.15f},
- {0.8f, -0.45f, 3.15f},
- {0.45f, -0.8f, 3.15f},
- {0f, -0.8f, 3.15f},
- {0f, 0f, 2.85f},
- {1.4f, 0f, 2.4f},
- {1.4f, -0.784f, 2.4f},
- {0.784f, -1.4f, 2.4f},
- {0f, -1.4f, 2.4f},
- {0.4f, 0f, 2.55f},
- {0.4f, -0.224f, 2.55f},
- {0.224f, -0.4f, 2.55f},
- {0f, -0.4f, 2.55f},
- {1.3f, 0f, 2.55f},
- {1.3f, -0.728f, 2.55f},
- {0.728f, -1.3f, 2.55f},
- {0f, -1.3f, 2.55f},
- {1.3f, 0f, 2.4f},
- {1.3f, -0.728f, 2.4f},
- {0.728f, -1.3f, 2.4f},
- {0f, -1.3f, 2.4f},
- {0f, 0f, 0f},
- {1.425f, -0.798f, 0f},
- {1.5f, 0f, 0.075f},
- {1.425f, 0f, 0f},
- {0.798f, -1.425f, 0f},
- {0f, -1.5f, 0.075f},
- {0f, -1.425f, 0f},
- {1.5f, -0.84f, 0.075f},
- {0.84f, -1.5f, 0.075f}
- };
- // Since GL.glMap2f expects a packed array of floats, we must convert
- // from a 3-dimensional array to a 1-dimensional array
- private static final float[] teapotTex = {
- 0, 0, 1, 0, 0, 1, 1, 1
- };
-
- private static void teapot(GL gl,
- int grid,
- double scale,
- int type,
- boolean backCompatible)
- {
- // As mentioned above, GL.glMap2f expects a packed array of floats
- float[] p = new float[4*4*3];
- float[] q = new float[4*4*3];
- float[] r = new float[4*4*3];
- float[] s = new float[4*4*3];
- int i, j, k, l;
-
- gl.glPushAttrib(GL.GL_ENABLE_BIT | GL.GL_EVAL_BIT | GL.GL_POLYGON_BIT);
- gl.glEnable(GL.GL_AUTO_NORMAL);
- gl.glEnable(GL.GL_NORMALIZE);
- gl.glEnable(GL.GL_MAP2_VERTEX_3);
- gl.glEnable(GL.GL_MAP2_TEXTURE_COORD_2);
- gl.glPushMatrix();
- if (!backCompatible) {
- // The time has come to have the teapot no longer be inside out
- gl.glFrontFace(GL.GL_CW);
- gl.glScaled(0.5*scale, 0.5*scale, 0.5*scale);
- } else {
- // We want the teapot in it's backward compatible position and
- // orientation
- gl.glRotatef(270.0f, 1, 0, 0);
- gl.glScalef((float)(0.5 * scale),
- (float)(0.5 * scale),
- (float)(0.5 * scale));
- gl.glTranslatef(0.0f, 0.0f, -1.5f);
- }
- for (i = 0; i < 10; i++) {
- for (j = 0; j < 4; j++) {
- for (k = 0; k < 4; k++) {
- for (l = 0; l < 3; l++) {
- p[(j*4+k)*3+l] = teapotCPData[teapotPatchData[i][j * 4 + k]][l];
- q[(j*4+k)*3+l] =
- teapotCPData[teapotPatchData[i][j * 4 + (3 - k)]][l];
- if (l == 1)
- q[(j*4+k)*3+l] *= -1.0;
- if (i < 6) {
- r[(j*4+k)*3+l] =
- teapotCPData[teapotPatchData[i][j * 4 + (3 - k)]][l];
- if (l == 0)
- r[(j*4+k)*3+l] *= -1.0;
- s[(j*4+k)*3+l] = teapotCPData[teapotPatchData[i][j * 4 + k]][l];
- if (l == 0)
- s[(j*4+k)*3+l] *= -1.0;
- if (l == 1)
- s[(j*4+k)*3+l] *= -1.0;
- }
- }
- }
- }
- gl.glMap2f(GL.GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, teapotTex, 0);
- gl.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, p, 0);
- gl.glMapGrid2f(grid, 0.0f, 1.0f, grid, 0.0f, 1.0f);
- evaluateTeapotMesh(gl, grid, type, i, !backCompatible);
- gl.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, q, 0);
- evaluateTeapotMesh(gl, grid, type, i, !backCompatible);
- if (i < 6) {
- gl.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, r, 0);
- evaluateTeapotMesh(gl, grid, type, i, !backCompatible);
- gl.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, s, 0);
- evaluateTeapotMesh(gl, grid, type, i, !backCompatible);
- }
- }
- gl.glPopMatrix();
- gl.glPopAttrib();
- }
-
- private static void evaluateTeapotMesh(GL gl,
- int grid,
- int type,
- int partNum,
- boolean repairSingularities)
- {
- if (repairSingularities && (partNum == 5 || partNum == 3)) {
- // Instead of using evaluators that give bad results at singularities,
- // evaluate by hand
- gl.glPolygonMode(GL.GL_FRONT_AND_BACK, type);
- for (int nv = 0; nv < grid; nv++) {
- if (nv == 0) {
- // Draw a small triangle-fan to fill the hole
- gl.glDisable(GL.GL_AUTO_NORMAL);
- gl.glNormal3f(0, 0, partNum == 3 ? 1 : -1);
- gl.glBegin(GL.GL_TRIANGLE_FAN);
- {
- gl.glEvalCoord2f(0, 0);
- // Note that we draw in clock-wise order to match the evaluator
- // method
- for (int nu = 0; nu <= grid; nu++)
- {
- gl.glEvalCoord2f(nu / (float)grid, (1f / grid) / (float)grid);
- }
- }
- gl.glEnd();
- gl.glEnable(GL.GL_AUTO_NORMAL);
- }
- // Draw the rest of the piece as an evaluated quad-strip
- gl.glBegin(GL.GL_QUAD_STRIP);
- {
- // Note that we draw in clock-wise order to match the evaluator method
- for (int nu = grid; nu >= 0; nu--) {
- gl.glEvalCoord2f(nu / (float)grid, (nv + 1) / (float)grid);
- gl.glEvalCoord2f(nu / (float)grid, Math.max(nv, 1f / grid)
- / (float)grid);
- }
- }
- gl.glEnd();
- }
- } else {
- gl.glEvalMesh2(type, 0, grid, 0, grid);
- }
- }
-
- //----------------------------------------------------------------------
- // Font implementation
- //
-
- private static void bitmapCharacterImpl(GL gl, int font, char cin) {
- BitmapFontRec fontinfo = getBitmapFont(font);
- int c = cin & 0xFFFF;
- if (c < fontinfo.first ||
- c >= fontinfo.first + fontinfo.num_chars)
- return;
- BitmapCharRec ch = fontinfo.ch[c - fontinfo.first];
- if (ch != null) {
- gl.glBitmap(ch.width, ch.height, ch.xorig, ch.yorig,
- ch.advance, 0, ch.bitmap, 0);
- }
- }
-
- private static final BitmapFontRec[] bitmapFonts = new BitmapFontRec[9];
- private static final StrokeFontRec[] strokeFonts = new StrokeFontRec[9];
-
- private static BitmapFontRec getBitmapFont(int font) {
- BitmapFontRec rec = bitmapFonts[font];
- if (rec == null) {
- switch (font) {
- case BITMAP_9_BY_15:
- rec = GLUTBitmap9x15.glutBitmap9By15;
- break;
- case BITMAP_8_BY_13:
- rec = GLUTBitmap8x13.glutBitmap8By13;
- break;
- case BITMAP_TIMES_ROMAN_10:
- rec = GLUTBitmapTimesRoman10.glutBitmapTimesRoman10;
- break;
- case BITMAP_TIMES_ROMAN_24:
- rec = GLUTBitmapTimesRoman24.glutBitmapTimesRoman24;
- break;
- case BITMAP_HELVETICA_10:
- rec = GLUTBitmapHelvetica10.glutBitmapHelvetica10;
- break;
- case BITMAP_HELVETICA_12:
- rec = GLUTBitmapHelvetica12.glutBitmapHelvetica12;
- break;
- case BITMAP_HELVETICA_18:
- rec = GLUTBitmapHelvetica18.glutBitmapHelvetica18;
- break;
- default:
- throw new GLException("Unknown bitmap font number " + font);
- }
- bitmapFonts[font] = rec;
- }
- return rec;
- }
-
- private static StrokeFontRec getStrokeFont(int font) {
- StrokeFontRec rec = strokeFonts[font];
- if (rec == null) {
- switch (font) {
- case STROKE_ROMAN:
- rec = GLUTStrokeRoman.glutStrokeRoman;
- break;
- case STROKE_MONO_ROMAN:
- rec = GLUTStrokeMonoRoman.glutStrokeMonoRoman;
- break;
- default:
- throw new GLException("Unknown stroke font number " + font);
- }
- }
- return rec;
- }
-
- private static void beginBitmap(GL gl,
- int[] swapbytes,
- int[] lsbfirst,
- int[] rowlength,
- int[] skiprows,
- int[] skippixels,
- int[] alignment) {
- gl.glGetIntegerv(GL.GL_UNPACK_SWAP_BYTES, swapbytes, 0);
- gl.glGetIntegerv(GL.GL_UNPACK_LSB_FIRST, lsbfirst, 0);
- gl.glGetIntegerv(GL.GL_UNPACK_ROW_LENGTH, rowlength, 0);
- gl.glGetIntegerv(GL.GL_UNPACK_SKIP_ROWS, skiprows, 0);
- gl.glGetIntegerv(GL.GL_UNPACK_SKIP_PIXELS, skippixels, 0);
- gl.glGetIntegerv(GL.GL_UNPACK_ALIGNMENT, alignment, 0);
- /* Little endian machines (DEC Alpha for example) could
- benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
- instead of GL_FALSE, but this would require changing the
- generated bitmaps too. */
- gl.glPixelStorei(GL.GL_UNPACK_SWAP_BYTES, GL.GL_FALSE);
- gl.glPixelStorei(GL.GL_UNPACK_LSB_FIRST, GL.GL_FALSE);
- gl.glPixelStorei(GL.GL_UNPACK_ROW_LENGTH, 0);
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_ROWS, 0);
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_PIXELS, 0);
- gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
- }
-
- private static void endBitmap(GL gl,
- int[] swapbytes,
- int[] lsbfirst,
- int[] rowlength,
- int[] skiprows,
- int[] skippixels,
- int[] alignment) {
- /* Restore saved modes. */
- gl.glPixelStorei(GL.GL_UNPACK_SWAP_BYTES, swapbytes[0]);
- gl.glPixelStorei(GL.GL_UNPACK_LSB_FIRST, lsbfirst[0]);
- gl.glPixelStorei(GL.GL_UNPACK_ROW_LENGTH, rowlength[0]);
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_ROWS, skiprows[0]);
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_PIXELS, skippixels[0]);
- gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, alignment[0]);
- }
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTBitmap8x13.java b/src/classes/com/sun/opengl/util/GLUTBitmap8x13.java
deleted file mode 100644
index 55a213c02..000000000
--- a/src/classes/com/sun/opengl/util/GLUTBitmap8x13.java
+++ /dev/null
@@ -1,2078 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTBitmap8x13 {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-
-static final BitmapCharRec ch0 = new BitmapCharRec(0,0,0,0,8,null);
-
-static final BitmapCharRec ch32 = new BitmapCharRec(0,0,0,0,8,null);
-
-static final BitmapCharRec ch127 = new BitmapCharRec(0,0,0,0,8,null);
-
-static final BitmapCharRec ch160 = new BitmapCharRec(0,0,0,0,8,null);
-
-/* char: 0xff */
-
-static final byte[] ch255data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch255 = new BitmapCharRec(6,12,-1,2,8,ch255data);
-
-/* char: 0xfe */
-
-static final byte[] ch254data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xb8,(byte) 0xc4,(byte) 0x84,(byte) 0x84,(byte) 0xc4,(byte) 0xb8,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch254 = new BitmapCharRec(6,10,-1,2,8,ch254data);
-
-/* char: 0xfd */
-
-static final byte[] ch253data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch253 = new BitmapCharRec(6,12,-1,2,8,ch253data);
-
-/* char: 0xfc */
-
-static final byte[] ch252data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch252 = new BitmapCharRec(6,10,-1,0,8,ch252data);
-
-/* char: 0xfb */
-
-static final byte[] ch251data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch251 = new BitmapCharRec(6,10,-1,0,8,ch251data);
-
-/* char: 0xfa */
-
-static final byte[] ch250data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch250 = new BitmapCharRec(6,10,-1,0,8,ch250data);
-
-/* char: 0xf9 */
-
-static final byte[] ch249data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch249 = new BitmapCharRec(6,10,-1,0,8,ch249data);
-
-/* char: 0xf8 */
-
-static final byte[] ch248data = {
-(byte) 0x80,(byte) 0x78,(byte) 0xc4,(byte) 0xa4,(byte) 0x94,(byte) 0x8c,(byte) 0x78,(byte) 0x4,
-};
-
-static final BitmapCharRec ch248 = new BitmapCharRec(6,8,-1,1,8,ch248data);
-
-/* char: 0xf7 */
-
-static final byte[] ch247data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x0,(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch247 = new BitmapCharRec(5,7,-1,-1,8,ch247data);
-
-/* char: 0xf6 */
-
-static final byte[] ch246data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch246 = new BitmapCharRec(6,10,-1,0,8,ch246data);
-
-/* char: 0xf5 */
-
-static final byte[] ch245data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch245 = new BitmapCharRec(6,10,-1,0,8,ch245data);
-
-/* char: 0xf4 */
-
-static final byte[] ch244data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch244 = new BitmapCharRec(6,10,-1,0,8,ch244data);
-
-/* char: 0xf3 */
-
-static final byte[] ch243data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch243 = new BitmapCharRec(6,10,-1,0,8,ch243data);
-
-/* char: 0xf2 */
-
-static final byte[] ch242data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch242 = new BitmapCharRec(6,10,-1,0,8,ch242data);
-
-/* char: 0xf1 */
-
-static final byte[] ch241data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xc4,(byte) 0xb8,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch241 = new BitmapCharRec(6,10,-1,0,8,ch241data);
-
-/* char: 0xf0 */
-
-static final byte[] ch240data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x8,(byte) 0x50,(byte) 0x30,(byte) 0x48,
-};
-
-static final BitmapCharRec ch240 = new BitmapCharRec(6,10,-1,0,8,ch240data);
-
-/* char: 0xef */
-
-static final byte[] ch239data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x50,
-};
-
-static final BitmapCharRec ch239 = new BitmapCharRec(5,10,-1,0,8,ch239data);
-
-/* char: 0xee */
-
-static final byte[] ch238data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch238 = new BitmapCharRec(5,10,-1,0,8,ch238data);
-
-/* char: 0xed */
-
-static final byte[] ch237data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch237 = new BitmapCharRec(5,10,-1,0,8,ch237data);
-
-/* char: 0xec */
-
-static final byte[] ch236data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch236 = new BitmapCharRec(5,10,-1,0,8,ch236data);
-
-/* char: 0xeb */
-
-static final byte[] ch235data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0xfc,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch235 = new BitmapCharRec(6,10,-1,0,8,ch235data);
-
-/* char: 0xea */
-
-static final byte[] ch234data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0xfc,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch234 = new BitmapCharRec(6,10,-1,0,8,ch234data);
-
-/* char: 0xe9 */
-
-static final byte[] ch233data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0xfc,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch233 = new BitmapCharRec(6,10,-1,0,8,ch233data);
-
-/* char: 0xe8 */
-
-static final byte[] ch232data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0xfc,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch232 = new BitmapCharRec(6,10,-1,0,8,ch232data);
-
-/* char: 0xe7 */
-
-static final byte[] ch231data = {
-(byte) 0x20,(byte) 0x10,(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch231 = new BitmapCharRec(6,8,-1,2,8,ch231data);
-
-/* char: 0xe6 */
-
-static final byte[] ch230data = {
-(byte) 0x6c,(byte) 0x92,(byte) 0x90,(byte) 0x7c,(byte) 0x12,(byte) 0x6c,
-};
-
-static final BitmapCharRec ch230 = new BitmapCharRec(7,6,0,0,8,ch230data);
-
-/* char: 0xe5 */
-
-static final byte[] ch229data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x7c,(byte) 0x4,(byte) 0x78,(byte) 0x0,(byte) 0x30,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch229 = new BitmapCharRec(6,10,-1,0,8,ch229data);
-
-/* char: 0xe4 */
-
-static final byte[] ch228data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x7c,(byte) 0x4,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch228 = new BitmapCharRec(6,10,-1,0,8,ch228data);
-
-/* char: 0xe3 */
-
-static final byte[] ch227data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x7c,(byte) 0x4,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch227 = new BitmapCharRec(6,10,-1,0,8,ch227data);
-
-/* char: 0xe2 */
-
-static final byte[] ch226data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x7c,(byte) 0x4,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch226 = new BitmapCharRec(6,10,-1,0,8,ch226data);
-
-/* char: 0xe1 */
-
-static final byte[] ch225data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x7c,(byte) 0x4,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch225 = new BitmapCharRec(6,10,-1,0,8,ch225data);
-
-/* char: 0xe0 */
-
-static final byte[] ch224data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x7c,(byte) 0x4,(byte) 0x78,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch224 = new BitmapCharRec(6,10,-1,0,8,ch224data);
-
-/* char: 0xdf */
-
-static final byte[] ch223data = {
-(byte) 0x80,(byte) 0xb8,(byte) 0xc4,(byte) 0x84,(byte) 0x84,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch223 = new BitmapCharRec(6,9,-1,1,8,ch223data);
-
-/* char: 0xde */
-
-static final byte[] ch222data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,(byte) 0x80,
-};
-
-static final BitmapCharRec ch222 = new BitmapCharRec(6,9,-1,0,8,ch222data);
-
-/* char: 0xdd */
-
-static final byte[] ch221data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x50,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch221 = new BitmapCharRec(5,10,-1,0,8,ch221data);
-
-/* char: 0xdc */
-
-static final byte[] ch220data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch220 = new BitmapCharRec(6,10,-1,0,8,ch220data);
-
-/* char: 0xdb */
-
-static final byte[] ch219data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch219 = new BitmapCharRec(6,10,-1,0,8,ch219data);
-
-/* char: 0xda */
-
-static final byte[] ch218data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch218 = new BitmapCharRec(6,10,-1,0,8,ch218data);
-
-/* char: 0xd9 */
-
-static final byte[] ch217data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch217 = new BitmapCharRec(6,10,-1,0,8,ch217data);
-
-/* char: 0xd8 */
-
-static final byte[] ch216data = {
-(byte) 0x80,(byte) 0x78,(byte) 0xc4,(byte) 0xa4,(byte) 0xa4,(byte) 0xa4,(byte) 0x94,(byte) 0x94,(byte) 0x8c,(byte) 0x78,(byte) 0x4,
-};
-
-static final BitmapCharRec ch216 = new BitmapCharRec(6,11,-1,1,8,ch216data);
-
-/* char: 0xd7 */
-
-static final byte[] ch215data = {
-(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x30,(byte) 0x48,(byte) 0x84,
-};
-
-static final BitmapCharRec ch215 = new BitmapCharRec(6,6,-1,-1,8,ch215data);
-
-/* char: 0xd6 */
-
-static final byte[] ch214data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch214 = new BitmapCharRec(7,10,0,0,8,ch214data);
-
-/* char: 0xd5 */
-
-static final byte[] ch213data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x28,(byte) 0x14,
-};
-
-static final BitmapCharRec ch213 = new BitmapCharRec(7,10,0,0,8,ch213data);
-
-/* char: 0xd4 */
-
-static final byte[] ch212data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x24,(byte) 0x18,
-};
-
-static final BitmapCharRec ch212 = new BitmapCharRec(7,10,0,0,8,ch212data);
-
-/* char: 0xd3 */
-
-static final byte[] ch211data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch211 = new BitmapCharRec(7,10,0,0,8,ch211data);
-
-/* char: 0xd2 */
-
-static final byte[] ch210data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x8,(byte) 0x10,
-};
-
-static final BitmapCharRec ch210 = new BitmapCharRec(7,10,0,0,8,ch210data);
-
-/* char: 0xd1 */
-
-static final byte[] ch209data = {
-(byte) 0x82,(byte) 0x86,(byte) 0x8a,(byte) 0x92,(byte) 0xa2,(byte) 0xc2,(byte) 0x82,(byte) 0x0,(byte) 0x28,(byte) 0x14,
-};
-
-static final BitmapCharRec ch209 = new BitmapCharRec(7,10,0,0,8,ch209data);
-
-/* char: 0xd0 */
-
-static final byte[] ch208data = {
-(byte) 0xfc,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xe2,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch208 = new BitmapCharRec(7,9,0,0,8,ch208data);
-
-/* char: 0xcf */
-
-static final byte[] ch207data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x50,(byte) 0x50,
-};
-
-static final BitmapCharRec ch207 = new BitmapCharRec(5,10,-1,0,8,ch207data);
-
-/* char: 0xce */
-
-static final byte[] ch206data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch206 = new BitmapCharRec(5,10,-1,0,8,ch206data);
-
-/* char: 0xcd */
-
-static final byte[] ch205data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch205 = new BitmapCharRec(5,10,-1,0,8,ch205data);
-
-/* char: 0xcc */
-
-static final byte[] ch204data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch204 = new BitmapCharRec(5,10,-1,0,8,ch204data);
-
-/* char: 0xcb */
-
-static final byte[] ch203data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch203 = new BitmapCharRec(6,10,-1,0,8,ch203data);
-
-/* char: 0xca */
-
-static final byte[] ch202data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch202 = new BitmapCharRec(6,10,-1,0,8,ch202data);
-
-/* char: 0xc9 */
-
-static final byte[] ch201data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch201 = new BitmapCharRec(6,10,-1,0,8,ch201data);
-
-/* char: 0xc8 */
-
-static final byte[] ch200data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch200 = new BitmapCharRec(6,10,-1,0,8,ch200data);
-
-/* char: 0xc7 */
-
-static final byte[] ch199data = {
-(byte) 0x20,(byte) 0x10,(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch199 = new BitmapCharRec(6,11,-1,2,8,ch199data);
-
-/* char: 0xc6 */
-
-static final byte[] ch198data = {
-(byte) 0x9e,(byte) 0x90,(byte) 0x90,(byte) 0xf0,(byte) 0x9c,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x6e,
-};
-
-static final BitmapCharRec ch198 = new BitmapCharRec(7,9,0,0,8,ch198data);
-
-/* char: 0xc5 */
-
-static final byte[] ch197data = {
-(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x30,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch197 = new BitmapCharRec(6,10,-1,0,8,ch197data);
-
-/* char: 0xc4 */
-
-static final byte[] ch196data = {
-(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x0,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch196 = new BitmapCharRec(6,10,-1,0,8,ch196data);
-
-/* char: 0xc3 */
-
-static final byte[] ch195data = {
-(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch195 = new BitmapCharRec(6,10,-1,0,8,ch195data);
-
-/* char: 0xc2 */
-
-static final byte[] ch194data = {
-(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x0,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch194 = new BitmapCharRec(6,10,-1,0,8,ch194data);
-
-/* char: 0xc1 */
-
-static final byte[] ch193data = {
-(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch193 = new BitmapCharRec(6,10,-1,0,8,ch193data);
-
-/* char: 0xc0 */
-
-static final byte[] ch192data = {
-(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch192 = new BitmapCharRec(6,10,-1,0,8,ch192data);
-
-/* char: 0xbf */
-
-static final byte[] ch191data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch191 = new BitmapCharRec(6,9,-1,0,8,ch191data);
-
-/* char: 0xbe */
-
-static final byte[] ch190data = {
-(byte) 0x6,(byte) 0x1a,(byte) 0x12,(byte) 0xa,(byte) 0x66,(byte) 0x92,(byte) 0x10,(byte) 0x20,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch190 = new BitmapCharRec(7,10,0,0,8,ch190data);
-
-/* char: 0xbd */
-
-static final byte[] ch189data = {
-(byte) 0x1e,(byte) 0x10,(byte) 0xc,(byte) 0x2,(byte) 0xf2,(byte) 0x4c,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch189 = new BitmapCharRec(7,10,0,0,8,ch189data);
-
-/* char: 0xbc */
-
-static final byte[] ch188data = {
-(byte) 0x6,(byte) 0x1a,(byte) 0x12,(byte) 0xa,(byte) 0xe6,(byte) 0x42,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch188 = new BitmapCharRec(7,10,0,0,8,ch188data);
-
-/* char: 0xbb */
-
-static final byte[] ch187data = {
-(byte) 0x90,(byte) 0x48,(byte) 0x24,(byte) 0x12,(byte) 0x24,(byte) 0x48,(byte) 0x90,
-};
-
-static final BitmapCharRec ch187 = new BitmapCharRec(7,7,0,-1,8,ch187data);
-
-/* char: 0xba */
-
-static final byte[] ch186data = {
-(byte) 0xf0,(byte) 0x0,(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch186 = new BitmapCharRec(4,6,-1,-3,8,ch186data);
-
-/* char: 0xb9 */
-
-static final byte[] ch185data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch185 = new BitmapCharRec(3,6,-1,-4,8,ch185data);
-
-/* char: 0xb8 */
-
-static final byte[] ch184data = {
-(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch184 = new BitmapCharRec(2,2,-3,2,8,ch184data);
-
-/* char: 0xb7 */
-
-static final byte[] ch183data = {
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch183 = new BitmapCharRec(2,1,-3,-4,8,ch183data);
-
-/* char: 0xb6 */
-
-static final byte[] ch182data = {
-(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x68,(byte) 0xe8,(byte) 0xe8,(byte) 0xe8,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch182 = new BitmapCharRec(6,9,-1,0,8,ch182data);
-
-/* char: 0xb5 */
-
-static final byte[] ch181data = {
-(byte) 0x80,(byte) 0xb4,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch181 = new BitmapCharRec(6,7,-1,1,8,ch181data);
-
-/* char: 0xb4 */
-
-static final byte[] ch180data = {
-(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch180 = new BitmapCharRec(2,2,-3,-8,8,ch180data);
-
-/* char: 0xb3 */
-
-static final byte[] ch179data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x10,(byte) 0x20,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch179 = new BitmapCharRec(4,6,-1,-4,8,ch179data);
-
-/* char: 0xb2 */
-
-static final byte[] ch178data = {
-(byte) 0xf0,(byte) 0x80,(byte) 0x60,(byte) 0x10,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch178 = new BitmapCharRec(4,6,-1,-4,8,ch178data);
-
-/* char: 0xb1 */
-
-static final byte[] ch177data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch177 = new BitmapCharRec(5,7,-1,-1,8,ch177data);
-
-/* char: 0xb0 */
-
-static final byte[] ch176data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch176 = new BitmapCharRec(4,4,-2,-5,8,ch176data);
-
-/* char: 0xaf */
-
-static final byte[] ch175data = {
-(byte) 0xfc,
-};
-
-static final BitmapCharRec ch175 = new BitmapCharRec(6,1,-1,-8,8,ch175data);
-
-/* char: 0xae */
-
-static final byte[] ch174data = {
-(byte) 0x38,(byte) 0x44,(byte) 0xaa,(byte) 0xb2,(byte) 0xaa,(byte) 0xaa,(byte) 0x92,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch174 = new BitmapCharRec(7,9,0,-1,8,ch174data);
-
-/* char: 0xad */
-
-static final byte[] ch173data = {
-(byte) 0xfc,
-};
-
-static final BitmapCharRec ch173 = new BitmapCharRec(6,1,-1,-4,8,ch173data);
-
-/* char: 0xac */
-
-static final byte[] ch172data = {
-(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch172 = new BitmapCharRec(6,4,-1,-1,8,ch172data);
-
-/* char: 0xab */
-
-static final byte[] ch171data = {
-(byte) 0x12,(byte) 0x24,(byte) 0x48,(byte) 0x90,(byte) 0x48,(byte) 0x24,(byte) 0x12,
-};
-
-static final BitmapCharRec ch171 = new BitmapCharRec(7,7,0,-1,8,ch171data);
-
-/* char: 0xaa */
-
-static final byte[] ch170data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x78,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x70,
-};
-
-static final BitmapCharRec ch170 = new BitmapCharRec(5,7,-1,-2,8,ch170data);
-
-/* char: 0xa9 */
-
-static final byte[] ch169data = {
-(byte) 0x38,(byte) 0x44,(byte) 0x92,(byte) 0xaa,(byte) 0xa2,(byte) 0xaa,(byte) 0x92,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch169 = new BitmapCharRec(7,9,0,-1,8,ch169data);
-
-/* char: 0xa8 */
-
-static final byte[] ch168data = {
-(byte) 0xd8,
-};
-
-static final BitmapCharRec ch168 = new BitmapCharRec(5,1,-1,-8,8,ch168data);
-
-/* char: 0xa7 */
-
-static final byte[] ch167data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x10,(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x80,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch167 = new BitmapCharRec(4,10,-2,0,8,ch167data);
-
-/* char: 0xa6 */
-
-static final byte[] ch166data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch166 = new BitmapCharRec(1,9,-3,0,8,ch166data);
-
-/* char: 0xa5 */
-
-static final byte[] ch165data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x7c,(byte) 0x10,(byte) 0x7c,(byte) 0x28,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch165 = new BitmapCharRec(7,9,0,0,8,ch165data);
-
-/* char: 0xa4 */
-
-static final byte[] ch164data = {
-(byte) 0x84,(byte) 0x78,(byte) 0x48,(byte) 0x48,(byte) 0x78,(byte) 0x84,
-};
-
-static final BitmapCharRec ch164 = new BitmapCharRec(6,6,-1,-1,8,ch164data);
-
-/* char: 0xa3 */
-
-static final byte[] ch163data = {
-(byte) 0xdc,(byte) 0x62,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x70,(byte) 0x20,(byte) 0x22,(byte) 0x1c,
-};
-
-static final BitmapCharRec ch163 = new BitmapCharRec(7,9,0,0,8,ch163data);
-
-/* char: 0xa2 */
-
-static final byte[] ch162data = {
-(byte) 0x20,(byte) 0x70,(byte) 0xa8,(byte) 0xa0,(byte) 0xa0,(byte) 0xa8,(byte) 0x70,(byte) 0x20,
-};
-
-static final BitmapCharRec ch162 = new BitmapCharRec(5,8,-1,-1,8,ch162data);
-
-/* char: 0xa1 */
-
-static final byte[] ch161data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch161 = new BitmapCharRec(1,9,-3,0,8,ch161data);
-
-/* char: 0x7e '~' */
-
-static final byte[] ch126data = {
-(byte) 0x90,(byte) 0xa8,(byte) 0x48,
-};
-
-static final BitmapCharRec ch126 = new BitmapCharRec(5,3,-1,-6,8,ch126data);
-
-/* char: 0x7d '}' */
-
-static final byte[] ch125data = {
-(byte) 0xe0,(byte) 0x10,(byte) 0x10,(byte) 0x20,(byte) 0x18,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch125 = new BitmapCharRec(5,9,-1,0,8,ch125data);
-
-/* char: 0x7c '|' */
-
-static final byte[] ch124data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch124 = new BitmapCharRec(1,9,-3,0,8,ch124data);
-
-/* char: 0x7b '{' */
-
-static final byte[] ch123data = {
-(byte) 0x38,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x38,
-};
-
-static final BitmapCharRec ch123 = new BitmapCharRec(5,9,-2,0,8,ch123data);
-
-/* char: 0x7a 'z' */
-
-static final byte[] ch122data = {
-(byte) 0xfc,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch122 = new BitmapCharRec(6,6,-1,0,8,ch122data);
-
-/* char: 0x79 'y' */
-
-static final byte[] ch121data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch121 = new BitmapCharRec(6,8,-1,2,8,ch121data);
-
-/* char: 0x78 'x' */
-
-static final byte[] ch120data = {
-(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x30,(byte) 0x48,(byte) 0x84,
-};
-
-static final BitmapCharRec ch120 = new BitmapCharRec(6,6,-1,0,8,ch120data);
-
-/* char: 0x77 'w' */
-
-static final byte[] ch119data = {
-(byte) 0x44,(byte) 0xaa,(byte) 0x92,(byte) 0x92,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch119 = new BitmapCharRec(7,6,0,0,8,ch119data);
-
-/* char: 0x76 'v' */
-
-static final byte[] ch118data = {
-(byte) 0x20,(byte) 0x50,(byte) 0x50,(byte) 0x88,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch118 = new BitmapCharRec(5,6,-1,0,8,ch118data);
-
-/* char: 0x75 'u' */
-
-static final byte[] ch117data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch117 = new BitmapCharRec(6,6,-1,0,8,ch117data);
-
-/* char: 0x74 't' */
-
-static final byte[] ch116data = {
-(byte) 0x38,(byte) 0x44,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xf8,(byte) 0x40,(byte) 0x40,
-};
-
-static final BitmapCharRec ch116 = new BitmapCharRec(6,8,-1,0,8,ch116data);
-
-/* char: 0x73 's' */
-
-static final byte[] ch115data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x18,(byte) 0x60,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch115 = new BitmapCharRec(6,6,-1,0,8,ch115data);
-
-/* char: 0x72 'r' */
-
-static final byte[] ch114data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x44,(byte) 0xb8,
-};
-
-static final BitmapCharRec ch114 = new BitmapCharRec(6,6,-1,0,8,ch114data);
-
-/* char: 0x71 'q' */
-
-static final byte[] ch113data = {
-(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x8c,(byte) 0x74,
-};
-
-static final BitmapCharRec ch113 = new BitmapCharRec(6,8,-1,2,8,ch113data);
-
-/* char: 0x70 'p' */
-
-static final byte[] ch112data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xb8,(byte) 0xc4,(byte) 0x84,(byte) 0xc4,(byte) 0xb8,
-};
-
-static final BitmapCharRec ch112 = new BitmapCharRec(6,8,-1,2,8,ch112data);
-
-/* char: 0x6f 'o' */
-
-static final byte[] ch111data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch111 = new BitmapCharRec(6,6,-1,0,8,ch111data);
-
-/* char: 0x6e 'n' */
-
-static final byte[] ch110data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xc4,(byte) 0xb8,
-};
-
-static final BitmapCharRec ch110 = new BitmapCharRec(6,6,-1,0,8,ch110data);
-
-/* char: 0x6d 'm' */
-
-static final byte[] ch109data = {
-(byte) 0x82,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0xec,
-};
-
-static final BitmapCharRec ch109 = new BitmapCharRec(7,6,0,0,8,ch109data);
-
-/* char: 0x6c 'l' */
-
-static final byte[] ch108data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x60,
-};
-
-static final BitmapCharRec ch108 = new BitmapCharRec(5,9,-1,0,8,ch108data);
-
-/* char: 0x6b 'k' */
-
-static final byte[] ch107data = {
-(byte) 0x84,(byte) 0x88,(byte) 0x90,(byte) 0xe0,(byte) 0x90,(byte) 0x88,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch107 = new BitmapCharRec(6,9,-1,0,8,ch107data);
-
-/* char: 0x6a 'j' */
-
-static final byte[] ch106data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x18,(byte) 0x0,(byte) 0x8,
-};
-
-static final BitmapCharRec ch106 = new BitmapCharRec(5,10,-1,2,8,ch106data);
-
-/* char: 0x69 'i' */
-
-static final byte[] ch105data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x60,(byte) 0x0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch105 = new BitmapCharRec(5,8,-1,0,8,ch105data);
-
-/* char: 0x68 'h' */
-
-static final byte[] ch104data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xc4,(byte) 0xb8,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch104 = new BitmapCharRec(6,9,-1,0,8,ch104data);
-
-/* char: 0x67 'g' */
-
-static final byte[] ch103data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x78,(byte) 0x80,(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x74,
-};
-
-static final BitmapCharRec ch103 = new BitmapCharRec(6,8,-1,2,8,ch103data);
-
-/* char: 0x66 'f' */
-
-static final byte[] ch102data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xf8,(byte) 0x40,(byte) 0x40,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch102 = new BitmapCharRec(6,9,-1,0,8,ch102data);
-
-/* char: 0x65 'e' */
-
-static final byte[] ch101data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0xfc,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch101 = new BitmapCharRec(6,6,-1,0,8,ch101data);
-
-/* char: 0x64 'd' */
-
-static final byte[] ch100data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x8c,(byte) 0x74,(byte) 0x4,(byte) 0x4,(byte) 0x4,
-};
-
-static final BitmapCharRec ch100 = new BitmapCharRec(6,9,-1,0,8,ch100data);
-
-/* char: 0x63 'c' */
-
-static final byte[] ch99data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch99 = new BitmapCharRec(6,6,-1,0,8,ch99data);
-
-/* char: 0x62 'b' */
-
-static final byte[] ch98data = {
-(byte) 0xb8,(byte) 0xc4,(byte) 0x84,(byte) 0x84,(byte) 0xc4,(byte) 0xb8,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch98 = new BitmapCharRec(6,9,-1,0,8,ch98data);
-
-/* char: 0x61 'a' */
-
-static final byte[] ch97data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x7c,(byte) 0x4,(byte) 0x78,
-};
-
-static final BitmapCharRec ch97 = new BitmapCharRec(6,6,-1,0,8,ch97data);
-
-/* char: 0x60 '`' */
-
-static final byte[] ch96data = {
-(byte) 0x10,(byte) 0x60,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch96 = new BitmapCharRec(4,3,-2,-6,8,ch96data);
-
-/* char: 0x5f '_' */
-
-static final byte[] ch95data = {
-(byte) 0xfe,
-};
-
-static final BitmapCharRec ch95 = new BitmapCharRec(7,1,0,1,8,ch95data);
-
-/* char: 0x5e '^' */
-
-static final byte[] ch94data = {
-(byte) 0x88,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch94 = new BitmapCharRec(5,3,-1,-6,8,ch94data);
-
-/* char: 0x5d ']' */
-
-static final byte[] ch93data = {
-(byte) 0xf0,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch93 = new BitmapCharRec(4,9,-1,0,8,ch93data);
-
-/* char: 0x5c '\' */
-
-static final byte[] ch92data = {
-(byte) 0x2,(byte) 0x2,(byte) 0x4,(byte) 0x8,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch92 = new BitmapCharRec(7,9,0,0,8,ch92data);
-
-/* char: 0x5b '[' */
-
-static final byte[] ch91data = {
-(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch91 = new BitmapCharRec(4,9,-2,0,8,ch91data);
-
-/* char: 0x5a 'Z' */
-
-static final byte[] ch90data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch90 = new BitmapCharRec(6,9,-1,0,8,ch90data);
-
-/* char: 0x59 'Y' */
-
-static final byte[] ch89data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch89 = new BitmapCharRec(7,9,0,0,8,ch89data);
-
-/* char: 0x58 'X' */
-
-static final byte[] ch88data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch88 = new BitmapCharRec(7,9,0,0,8,ch88data);
-
-/* char: 0x57 'W' */
-
-static final byte[] ch87data = {
-(byte) 0x44,(byte) 0xaa,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch87 = new BitmapCharRec(7,9,0,0,8,ch87data);
-
-/* char: 0x56 'V' */
-
-static final byte[] ch86data = {
-(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch86 = new BitmapCharRec(7,9,0,0,8,ch86data);
-
-/* char: 0x55 'U' */
-
-static final byte[] ch85data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch85 = new BitmapCharRec(6,9,-1,0,8,ch85data);
-
-/* char: 0x54 'T' */
-
-static final byte[] ch84data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch84 = new BitmapCharRec(7,9,0,0,8,ch84data);
-
-/* char: 0x53 'S' */
-
-static final byte[] ch83data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x4,(byte) 0x78,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch83 = new BitmapCharRec(6,9,-1,0,8,ch83data);
-
-/* char: 0x52 'R' */
-
-static final byte[] ch82data = {
-(byte) 0x84,(byte) 0x88,(byte) 0x90,(byte) 0xa0,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch82 = new BitmapCharRec(6,9,-1,0,8,ch82data);
-
-/* char: 0x51 'Q' */
-
-static final byte[] ch81data = {
-(byte) 0x4,(byte) 0x78,(byte) 0x94,(byte) 0xa4,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch81 = new BitmapCharRec(6,10,-1,1,8,ch81data);
-
-/* char: 0x50 'P' */
-
-static final byte[] ch80data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch80 = new BitmapCharRec(6,9,-1,0,8,ch80data);
-
-/* char: 0x4f 'O' */
-
-static final byte[] ch79data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch79 = new BitmapCharRec(6,9,-1,0,8,ch79data);
-
-/* char: 0x4e 'N' */
-
-static final byte[] ch78data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x8c,(byte) 0x94,(byte) 0xa4,(byte) 0xc4,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch78 = new BitmapCharRec(6,9,-1,0,8,ch78data);
-
-/* char: 0x4d 'M' */
-
-static final byte[] ch77data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x92,(byte) 0x92,(byte) 0xaa,(byte) 0xc6,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch77 = new BitmapCharRec(7,9,0,0,8,ch77data);
-
-/* char: 0x4c 'L' */
-
-static final byte[] ch76data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch76 = new BitmapCharRec(6,9,-1,0,8,ch76data);
-
-/* char: 0x4b 'K' */
-
-static final byte[] ch75data = {
-(byte) 0x84,(byte) 0x88,(byte) 0x90,(byte) 0xa0,(byte) 0xc0,(byte) 0xa0,(byte) 0x90,(byte) 0x88,(byte) 0x84,
-};
-
-static final BitmapCharRec ch75 = new BitmapCharRec(6,9,-1,0,8,ch75data);
-
-/* char: 0x4a 'J' */
-
-static final byte[] ch74data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch74 = new BitmapCharRec(6,9,-1,0,8,ch74data);
-
-/* char: 0x49 'I' */
-
-static final byte[] ch73data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch73 = new BitmapCharRec(5,9,-1,0,8,ch73data);
-
-/* char: 0x48 'H' */
-
-static final byte[] ch72data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch72 = new BitmapCharRec(6,9,-1,0,8,ch72data);
-
-/* char: 0x47 'G' */
-
-static final byte[] ch71data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x9c,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch71 = new BitmapCharRec(6,9,-1,0,8,ch71data);
-
-/* char: 0x46 'F' */
-
-static final byte[] ch70data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch70 = new BitmapCharRec(6,9,-1,0,8,ch70data);
-
-/* char: 0x45 'E' */
-
-static final byte[] ch69data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch69 = new BitmapCharRec(6,9,-1,0,8,ch69data);
-
-/* char: 0x44 'D' */
-
-static final byte[] ch68data = {
-(byte) 0xfc,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch68 = new BitmapCharRec(7,9,0,0,8,ch68data);
-
-/* char: 0x43 'C' */
-
-static final byte[] ch67data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch67 = new BitmapCharRec(6,9,-1,0,8,ch67data);
-
-/* char: 0x42 'B' */
-
-static final byte[] ch66data = {
-(byte) 0xfc,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x7c,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch66 = new BitmapCharRec(7,9,0,0,8,ch66data);
-
-/* char: 0x41 'A' */
-
-static final byte[] ch65data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch65 = new BitmapCharRec(6,9,-1,0,8,ch65data);
-
-/* char: 0x40 '@' */
-
-static final byte[] ch64data = {
-(byte) 0x78,(byte) 0x80,(byte) 0x94,(byte) 0xac,(byte) 0xa4,(byte) 0x9c,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch64 = new BitmapCharRec(6,9,-1,0,8,ch64data);
-
-/* char: 0x3f '?' */
-
-static final byte[] ch63data = {
-(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch63 = new BitmapCharRec(6,9,-1,0,8,ch63data);
-
-/* char: 0x3e '>' */
-
-static final byte[] ch62data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch62 = new BitmapCharRec(5,9,-1,0,8,ch62data);
-
-/* char: 0x3d '=' */
-
-static final byte[] ch61data = {
-(byte) 0xfc,(byte) 0x0,(byte) 0x0,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch61 = new BitmapCharRec(6,4,-1,-2,8,ch61data);
-
-/* char: 0x3c '<' */
-
-static final byte[] ch60data = {
-(byte) 0x8,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch60 = new BitmapCharRec(5,9,-2,0,8,ch60data);
-
-/* char: 0x3b ';' */
-
-static final byte[] ch59data = {
-(byte) 0x80,(byte) 0x60,(byte) 0x70,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x70,(byte) 0x20,
-};
-
-static final BitmapCharRec ch59 = new BitmapCharRec(4,8,-1,1,8,ch59data);
-
-/* char: 0x3a ':' */
-
-static final byte[] ch58data = {
-(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x0,(byte) 0x0,(byte) 0x40,(byte) 0xe0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch58 = new BitmapCharRec(3,8,-2,1,8,ch58data);
-
-/* char: 0x39 '9' */
-
-static final byte[] ch57data = {
-(byte) 0x70,(byte) 0x8,(byte) 0x4,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch57 = new BitmapCharRec(6,9,-1,0,8,ch57data);
-
-/* char: 0x38 '8' */
-
-static final byte[] ch56data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch56 = new BitmapCharRec(6,9,-1,0,8,ch56data);
-
-/* char: 0x37 '7' */
-
-static final byte[] ch55data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch55 = new BitmapCharRec(6,9,-1,0,8,ch55data);
-
-/* char: 0x36 '6' */
-
-static final byte[] ch54data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0xc4,(byte) 0xb8,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x38,
-};
-
-static final BitmapCharRec ch54 = new BitmapCharRec(6,9,-1,0,8,ch54data);
-
-/* char: 0x35 '5' */
-
-static final byte[] ch53data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x4,(byte) 0xc4,(byte) 0xb8,(byte) 0x80,(byte) 0x80,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch53 = new BitmapCharRec(6,9,-1,0,8,ch53data);
-
-/* char: 0x34 '4' */
-
-static final byte[] ch52data = {
-(byte) 0x8,(byte) 0x8,(byte) 0xfc,(byte) 0x88,(byte) 0x88,(byte) 0x48,(byte) 0x28,(byte) 0x18,(byte) 0x8,
-};
-
-static final BitmapCharRec ch52 = new BitmapCharRec(6,9,-1,0,8,ch52data);
-
-/* char: 0x33 '3' */
-
-static final byte[] ch51data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x4,(byte) 0x38,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch51 = new BitmapCharRec(6,9,-1,0,8,ch51data);
-
-/* char: 0x32 '2' */
-
-static final byte[] ch50data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x40,(byte) 0x30,(byte) 0x8,(byte) 0x4,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch50 = new BitmapCharRec(6,9,-1,0,8,ch50data);
-
-/* char: 0x31 '1' */
-
-static final byte[] ch49data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xa0,(byte) 0x60,(byte) 0x20,
-};
-
-static final BitmapCharRec ch49 = new BitmapCharRec(5,9,-1,0,8,ch49data);
-
-/* char: 0x30 '0' */
-
-static final byte[] ch48data = {
-(byte) 0x30,(byte) 0x48,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch48 = new BitmapCharRec(6,9,-1,0,8,ch48data);
-
-/* char: 0x2f '/' */
-
-static final byte[] ch47data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0x2,(byte) 0x2,
-};
-
-static final BitmapCharRec ch47 = new BitmapCharRec(7,9,0,0,8,ch47data);
-
-/* char: 0x2e '.' */
-
-static final byte[] ch46data = {
-(byte) 0x40,(byte) 0xe0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch46 = new BitmapCharRec(3,3,-2,1,8,ch46data);
-
-/* char: 0x2d '-' */
-
-static final byte[] ch45data = {
-(byte) 0xfc,
-};
-
-static final BitmapCharRec ch45 = new BitmapCharRec(6,1,-1,-4,8,ch45data);
-
-/* char: 0x2c ',' */
-
-static final byte[] ch44data = {
-(byte) 0x80,(byte) 0x60,(byte) 0x70,
-};
-
-static final BitmapCharRec ch44 = new BitmapCharRec(4,3,-1,1,8,ch44data);
-
-/* char: 0x2b '+' */
-
-static final byte[] ch43data = {
-(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch43 = new BitmapCharRec(5,5,-1,-2,8,ch43data);
-
-/* char: 0x2a '*' */
-
-static final byte[] ch42data = {
-(byte) 0x48,(byte) 0x30,(byte) 0xfc,(byte) 0x30,(byte) 0x48,
-};
-
-static final BitmapCharRec ch42 = new BitmapCharRec(6,5,-1,-2,8,ch42data);
-
-/* char: 0x29 ')' */
-
-static final byte[] ch41data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch41 = new BitmapCharRec(3,9,-2,0,8,ch41data);
-
-/* char: 0x28 '(' */
-
-static final byte[] ch40data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch40 = new BitmapCharRec(3,9,-3,0,8,ch40data);
-
-/* char: 0x27 ''' */
-
-static final byte[] ch39data = {
-(byte) 0x80,(byte) 0x60,(byte) 0x70,
-};
-
-static final BitmapCharRec ch39 = new BitmapCharRec(4,3,-1,-6,8,ch39data);
-
-/* char: 0x26 '&' */
-
-static final byte[] ch38data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x94,(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch38 = new BitmapCharRec(6,7,-1,0,8,ch38data);
-
-/* char: 0x25 '%' */
-
-static final byte[] ch37data = {
-(byte) 0x88,(byte) 0x54,(byte) 0x48,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x48,(byte) 0xa4,(byte) 0x44,
-};
-
-static final BitmapCharRec ch37 = new BitmapCharRec(6,9,-1,0,8,ch37data);
-
-/* char: 0x24 '$' */
-
-static final byte[] ch36data = {
-(byte) 0x20,(byte) 0xf0,(byte) 0x28,(byte) 0x70,(byte) 0xa0,(byte) 0x78,(byte) 0x20,
-};
-
-static final BitmapCharRec ch36 = new BitmapCharRec(5,7,-1,-1,8,ch36data);
-
-/* char: 0x23 '#' */
-
-static final byte[] ch35data = {
-(byte) 0x48,(byte) 0x48,(byte) 0xfc,(byte) 0x48,(byte) 0xfc,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch35 = new BitmapCharRec(6,7,-1,-1,8,ch35data);
-
-/* char: 0x22 '"' */
-
-static final byte[] ch34data = {
-(byte) 0x90,(byte) 0x90,(byte) 0x90,
-};
-
-static final BitmapCharRec ch34 = new BitmapCharRec(4,3,-2,-6,8,ch34data);
-
-/* char: 0x21 '!' */
-
-static final byte[] ch33data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch33 = new BitmapCharRec(1,9,-3,0,8,ch33data);
-
-/* char: 0x1f */
-
-static final byte[] ch31data = {
-(byte) 0x80,
-};
-
-static final BitmapCharRec ch31 = new BitmapCharRec(1,1,-3,-3,8,ch31data);
-
-/* char: 0x1e */
-
-static final byte[] ch30data = {
-(byte) 0xdc,(byte) 0x62,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x70,(byte) 0x20,(byte) 0x22,(byte) 0x1c,
-};
-
-static final BitmapCharRec ch30 = new BitmapCharRec(7,9,0,0,8,ch30data);
-
-/* char: 0x1d */
-
-static final byte[] ch29data = {
-(byte) 0x80,(byte) 0x40,(byte) 0xfe,(byte) 0x10,(byte) 0xfe,(byte) 0x4,(byte) 0x2,
-};
-
-static final BitmapCharRec ch29 = new BitmapCharRec(7,7,0,0,8,ch29data);
-
-/* char: 0x1c */
-
-static final byte[] ch28data = {
-(byte) 0x88,(byte) 0x48,(byte) 0x48,(byte) 0x48,(byte) 0x48,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch28 = new BitmapCharRec(6,6,-1,0,8,ch28data);
-
-/* char: 0x1b */
-
-static final byte[] ch27data = {
-(byte) 0xfe,(byte) 0x80,(byte) 0x20,(byte) 0x8,(byte) 0x2,(byte) 0x8,(byte) 0x20,(byte) 0x80,
-};
-
-static final BitmapCharRec ch27 = new BitmapCharRec(7,8,0,0,8,ch27data);
-
-/* char: 0x1a */
-
-static final byte[] ch26data = {
-(byte) 0xfe,(byte) 0x2,(byte) 0x8,(byte) 0x20,(byte) 0x80,(byte) 0x20,(byte) 0x8,(byte) 0x2,
-};
-
-static final BitmapCharRec ch26 = new BitmapCharRec(7,8,0,0,8,ch26data);
-
-/* char: 0x19 */
-
-static final byte[] ch25data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch25 = new BitmapCharRec(1,13,-3,2,8,ch25data);
-
-/* char: 0x18 */
-
-static final byte[] ch24data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xff,
-};
-
-static final BitmapCharRec ch24 = new BitmapCharRec(8,6,0,2,8,ch24data);
-
-/* char: 0x17 */
-
-static final byte[] ch23data = {
-(byte) 0xff,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch23 = new BitmapCharRec(8,8,0,-3,8,ch23data);
-
-/* char: 0x16 */
-
-static final byte[] ch22data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xf0,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch22 = new BitmapCharRec(4,13,0,2,8,ch22data);
-
-/* char: 0x15 */
-
-static final byte[] ch21data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch21 = new BitmapCharRec(5,13,-3,2,8,ch21data);
-
-/* char: 0x14 */
-
-static final byte[] ch20data = {
-(byte) 0xff,
-};
-
-static final BitmapCharRec ch20 = new BitmapCharRec(8,1,0,1,8,ch20data);
-
-/* char: 0x13 */
-
-static final byte[] ch19data = {
-(byte) 0xff,
-};
-
-static final BitmapCharRec ch19 = new BitmapCharRec(8,1,0,-1,8,ch19data);
-
-/* char: 0x12 */
-
-static final byte[] ch18data = {
-(byte) 0xff,
-};
-
-static final BitmapCharRec ch18 = new BitmapCharRec(8,1,0,-3,8,ch18data);
-
-/* char: 0x11 */
-
-static final byte[] ch17data = {
-(byte) 0xff,
-};
-
-static final BitmapCharRec ch17 = new BitmapCharRec(8,1,0,-5,8,ch17data);
-
-/* char: 0x10 */
-
-static final byte[] ch16data = {
-(byte) 0xff,
-};
-
-static final BitmapCharRec ch16 = new BitmapCharRec(8,1,0,-7,8,ch16data);
-
-/* char: 0xf */
-
-static final byte[] ch15data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xff,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch15 = new BitmapCharRec(8,13,0,2,8,ch15data);
-
-/* char: 0xe */
-
-static final byte[] ch14data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch14 = new BitmapCharRec(5,8,-3,-3,8,ch14data);
-
-/* char: 0xd */
-
-static final byte[] ch13data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch13 = new BitmapCharRec(5,6,-3,2,8,ch13data);
-
-/* char: 0xc */
-
-static final byte[] ch12data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch12 = new BitmapCharRec(4,6,0,2,8,ch12data);
-
-/* char: 0xb */
-
-static final byte[] ch11data = {
-(byte) 0xf0,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch11 = new BitmapCharRec(4,8,0,-3,8,ch11data);
-
-/* char: 0xa */
-
-static final byte[] ch10data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x3e,(byte) 0x20,(byte) 0x50,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch10 = new BitmapCharRec(7,9,0,2,8,ch10data);
-
-/* char: 0x9 */
-
-static final byte[] ch9data = {
-(byte) 0x3e,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x88,(byte) 0x98,(byte) 0xa8,(byte) 0xc8,(byte) 0x88,
-};
-
-static final BitmapCharRec ch9 = new BitmapCharRec(7,9,0,2,8,ch9data);
-
-/* char: 0x8 */
-
-static final byte[] ch8data = {
-(byte) 0xfe,(byte) 0x10,(byte) 0x10,(byte) 0xfe,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch8 = new BitmapCharRec(7,6,0,0,8,ch8data);
-
-/* char: 0x7 */
-
-static final byte[] ch7data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch7 = new BitmapCharRec(5,4,-1,-5,8,ch7data);
-
-/* char: 0x6 */
-
-static final byte[] ch6data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x3c,(byte) 0x20,(byte) 0x3e,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch6 = new BitmapCharRec(7,9,0,2,8,ch6data);
-
-/* char: 0x5 */
-
-static final byte[] ch5data = {
-(byte) 0x22,(byte) 0x22,(byte) 0x3c,(byte) 0x22,(byte) 0x3c,(byte) 0x78,(byte) 0x80,(byte) 0x80,(byte) 0x78,
-};
-
-static final BitmapCharRec ch5 = new BitmapCharRec(7,9,0,2,8,ch5data);
-
-/* char: 0x4 */
-
-static final byte[] ch4data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x1c,(byte) 0x10,(byte) 0x9e,(byte) 0x80,(byte) 0xe0,(byte) 0x80,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch4 = new BitmapCharRec(7,9,0,2,8,ch4data);
-
-/* char: 0x3 */
-
-static final byte[] ch3data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x3e,(byte) 0x88,(byte) 0x88,(byte) 0xf8,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch3 = new BitmapCharRec(7,9,0,2,8,ch3data);
-
-/* char: 0x2 */
-
-static final byte[] ch2data = {
-(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,
-};
-
-static final BitmapCharRec ch2 = new BitmapCharRec(8,12,0,2,8,ch2data);
-
-/* char: 0x1 */
-
-static final byte[] ch1data = {
-(byte) 0x10,(byte) 0x38,(byte) 0x7c,(byte) 0xfe,(byte) 0x7c,(byte) 0x38,(byte) 0x10,
-};
-
-static final BitmapCharRec ch1 = new BitmapCharRec(7,7,0,-1,8,ch1data);
-
-static final BitmapCharRec[] chars = {
-ch0,
-ch1,
-ch2,
-ch3,
-ch4,
-ch5,
-ch6,
-ch7,
-ch8,
-ch9,
-ch10,
-ch11,
-ch12,
-ch13,
-ch14,
-ch15,
-ch16,
-ch17,
-ch18,
-ch19,
-ch20,
-ch21,
-ch22,
-ch23,
-ch24,
-ch25,
-ch26,
-ch27,
-ch28,
-ch29,
-ch30,
-ch31,
-ch32,
-ch33,
-ch34,
-ch35,
-ch36,
-ch37,
-ch38,
-ch39,
-ch40,
-ch41,
-ch42,
-ch43,
-ch44,
-ch45,
-ch46,
-ch47,
-ch48,
-ch49,
-ch50,
-ch51,
-ch52,
-ch53,
-ch54,
-ch55,
-ch56,
-ch57,
-ch58,
-ch59,
-ch60,
-ch61,
-ch62,
-ch63,
-ch64,
-ch65,
-ch66,
-ch67,
-ch68,
-ch69,
-ch70,
-ch71,
-ch72,
-ch73,
-ch74,
-ch75,
-ch76,
-ch77,
-ch78,
-ch79,
-ch80,
-ch81,
-ch82,
-ch83,
-ch84,
-ch85,
-ch86,
-ch87,
-ch88,
-ch89,
-ch90,
-ch91,
-ch92,
-ch93,
-ch94,
-ch95,
-ch96,
-ch97,
-ch98,
-ch99,
-ch100,
-ch101,
-ch102,
-ch103,
-ch104,
-ch105,
-ch106,
-ch107,
-ch108,
-ch109,
-ch110,
-ch111,
-ch112,
-ch113,
-ch114,
-ch115,
-ch116,
-ch117,
-ch118,
-ch119,
-ch120,
-ch121,
-ch122,
-ch123,
-ch124,
-ch125,
-ch126,
-ch127,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-ch160,
-ch161,
-ch162,
-ch163,
-ch164,
-ch165,
-ch166,
-ch167,
-ch168,
-ch169,
-ch170,
-ch171,
-ch172,
-ch173,
-ch174,
-ch175,
-ch176,
-ch177,
-ch178,
-ch179,
-ch180,
-ch181,
-ch182,
-ch183,
-ch184,
-ch185,
-ch186,
-ch187,
-ch188,
-ch189,
-ch190,
-ch191,
-ch192,
-ch193,
-ch194,
-ch195,
-ch196,
-ch197,
-ch198,
-ch199,
-ch200,
-ch201,
-ch202,
-ch203,
-ch204,
-ch205,
-ch206,
-ch207,
-ch208,
-ch209,
-ch210,
-ch211,
-ch212,
-ch213,
-ch214,
-ch215,
-ch216,
-ch217,
-ch218,
-ch219,
-ch220,
-ch221,
-ch222,
-ch223,
-ch224,
-ch225,
-ch226,
-ch227,
-ch228,
-ch229,
-ch230,
-ch231,
-ch232,
-ch233,
-ch234,
-ch235,
-ch236,
-ch237,
-ch238,
-ch239,
-ch240,
-ch241,
-ch242,
-ch243,
-ch244,
-ch245,
-ch246,
-ch247,
-ch248,
-ch249,
-ch250,
-ch251,
-ch252,
-ch253,
-ch254,
-ch255,
-};
-
- static final BitmapFontRec glutBitmap8By13 = new BitmapFontRec("-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1",
- 256,
- 0,
- chars);
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTBitmap9x15.java b/src/classes/com/sun/opengl/util/GLUTBitmap9x15.java
deleted file mode 100644
index d6e0de05f..000000000
--- a/src/classes/com/sun/opengl/util/GLUTBitmap9x15.java
+++ /dev/null
@@ -1,2079 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTBitmap9x15 {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-static final BitmapCharRec ch0 = new BitmapCharRec(0,0,0,0,9,null);
-
-static final BitmapCharRec ch32 = new BitmapCharRec(0,0,0,0,9,null);
-
-static final BitmapCharRec ch127 = new BitmapCharRec(0,0,0,0,9,null);
-
-static final BitmapCharRec ch160 = new BitmapCharRec(0,0,0,0,9,null);
-
-/* char: 0xff */
-
-static final byte[] ch255data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch255 = new BitmapCharRec(6,14,-1,3,9,ch255data);
-
-/* char: 0xfe */
-
-static final byte[] ch254data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xbc,(byte) 0xc2,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xc2,(byte) 0xbc,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch254 = new BitmapCharRec(7,12,-1,3,9,ch254data);
-
-/* char: 0xfd */
-
-static final byte[] ch253data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch253 = new BitmapCharRec(6,14,-1,3,9,ch253data);
-
-/* char: 0xfc */
-
-static final byte[] ch252data = {
-(byte) 0x7a,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch252 = new BitmapCharRec(7,11,-1,0,9,ch252data);
-
-/* char: 0xfb */
-
-static final byte[] ch251data = {
-(byte) 0x7a,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch251 = new BitmapCharRec(7,11,-1,0,9,ch251data);
-
-/* char: 0xfa */
-
-static final byte[] ch250data = {
-(byte) 0x7a,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch250 = new BitmapCharRec(7,11,-1,0,9,ch250data);
-
-/* char: 0xf9 */
-
-static final byte[] ch249data = {
-(byte) 0x7a,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch249 = new BitmapCharRec(7,11,-1,0,9,ch249data);
-
-/* char: 0xf8 */
-
-static final byte[] ch248data = {
-(byte) 0x80,(byte) 0x7c,(byte) 0xa2,(byte) 0xa2,(byte) 0x92,(byte) 0x8a,(byte) 0x8a,(byte) 0x7c,(byte) 0x2,
-};
-
-static final BitmapCharRec ch248 = new BitmapCharRec(7,9,-1,1,9,ch248data);
-
-/* char: 0xf7 */
-
-static final byte[] ch247data = {
-(byte) 0x10,(byte) 0x38,(byte) 0x10,(byte) 0x0,(byte) 0xfe,(byte) 0x0,(byte) 0x10,(byte) 0x38,(byte) 0x10,
-};
-
-static final BitmapCharRec ch247 = new BitmapCharRec(7,9,-1,0,9,ch247data);
-
-/* char: 0xf6 */
-
-static final byte[] ch246data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch246 = new BitmapCharRec(7,11,-1,0,9,ch246data);
-
-/* char: 0xf5 */
-
-static final byte[] ch245data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch245 = new BitmapCharRec(7,11,-1,0,9,ch245data);
-
-/* char: 0xf4 */
-
-static final byte[] ch244data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch244 = new BitmapCharRec(7,11,-1,0,9,ch244data);
-
-/* char: 0xf3 */
-
-static final byte[] ch243data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch243 = new BitmapCharRec(7,11,-1,0,9,ch243data);
-
-/* char: 0xf2 */
-
-static final byte[] ch242data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch242 = new BitmapCharRec(7,11,-1,0,9,ch242data);
-
-/* char: 0xf1 */
-
-static final byte[] ch241data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xc2,(byte) 0xbc,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch241 = new BitmapCharRec(7,11,-1,0,9,ch241data);
-
-/* char: 0xf0 */
-
-static final byte[] ch240data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x8,(byte) 0x50,(byte) 0x30,(byte) 0x48,
-};
-
-static final BitmapCharRec ch240 = new BitmapCharRec(7,11,-1,0,9,ch240data);
-
-/* char: 0xef */
-
-static final byte[] ch239data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x50,
-};
-
-static final BitmapCharRec ch239 = new BitmapCharRec(5,11,-2,0,9,ch239data);
-
-/* char: 0xee */
-
-static final byte[] ch238data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch238 = new BitmapCharRec(5,11,-2,0,9,ch238data);
-
-/* char: 0xed */
-
-static final byte[] ch237data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x60,(byte) 0x10,
-};
-
-static final BitmapCharRec ch237 = new BitmapCharRec(5,11,-2,0,9,ch237data);
-
-/* char: 0xec */
-
-static final byte[] ch236data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x40,
-};
-
-static final BitmapCharRec ch236 = new BitmapCharRec(5,11,-2,0,9,ch236data);
-
-/* char: 0xeb */
-
-static final byte[] ch235data = {
-(byte) 0x7c,(byte) 0x80,(byte) 0x80,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch235 = new BitmapCharRec(7,11,-1,0,9,ch235data);
-
-/* char: 0xea */
-
-static final byte[] ch234data = {
-(byte) 0x7c,(byte) 0x80,(byte) 0x80,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch234 = new BitmapCharRec(7,11,-1,0,9,ch234data);
-
-/* char: 0xe9 */
-
-static final byte[] ch233data = {
-(byte) 0x7c,(byte) 0x80,(byte) 0x80,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch233 = new BitmapCharRec(7,11,-1,0,9,ch233data);
-
-/* char: 0xe8 */
-
-static final byte[] ch232data = {
-(byte) 0x7c,(byte) 0x80,(byte) 0x80,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch232 = new BitmapCharRec(7,11,-1,0,9,ch232data);
-
-/* char: 0xe7 */
-
-static final byte[] ch231data = {
-(byte) 0x30,(byte) 0x48,(byte) 0x18,(byte) 0x7c,(byte) 0x82,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch231 = new BitmapCharRec(7,10,-1,3,9,ch231data);
-
-/* char: 0xe6 */
-
-static final byte[] ch230data = {
-(byte) 0x6e,(byte) 0x92,(byte) 0x90,(byte) 0x7c,(byte) 0x12,(byte) 0x92,(byte) 0x6c,
-};
-
-static final BitmapCharRec ch230 = new BitmapCharRec(7,7,-1,0,9,ch230data);
-
-/* char: 0xe5 */
-
-static final byte[] ch229data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x7e,(byte) 0x2,(byte) 0x2,(byte) 0x7c,(byte) 0x0,(byte) 0x18,(byte) 0x24,(byte) 0x18,
-};
-
-static final BitmapCharRec ch229 = new BitmapCharRec(7,11,-1,0,9,ch229data);
-
-/* char: 0xe4 */
-
-static final byte[] ch228data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x7e,(byte) 0x2,(byte) 0x2,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch228 = new BitmapCharRec(7,11,-1,0,9,ch228data);
-
-/* char: 0xe3 */
-
-static final byte[] ch227data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x7e,(byte) 0x2,(byte) 0x2,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch227 = new BitmapCharRec(7,11,-1,0,9,ch227data);
-
-/* char: 0xe2 */
-
-static final byte[] ch226data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x7e,(byte) 0x2,(byte) 0x2,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch226 = new BitmapCharRec(7,11,-1,0,9,ch226data);
-
-/* char: 0xe1 */
-
-static final byte[] ch225data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x7e,(byte) 0x2,(byte) 0x2,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch225 = new BitmapCharRec(7,11,-1,0,9,ch225data);
-
-/* char: 0xe0 */
-
-static final byte[] ch224data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x7e,(byte) 0x2,(byte) 0x2,(byte) 0x7c,(byte) 0x0,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch224 = new BitmapCharRec(7,11,-1,0,9,ch224data);
-
-/* char: 0xdf */
-
-static final byte[] ch223data = {
-(byte) 0x80,(byte) 0xbc,(byte) 0xc2,(byte) 0x82,(byte) 0x82,(byte) 0xfc,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch223 = new BitmapCharRec(7,9,-1,1,9,ch223data);
-
-/* char: 0xde */
-
-static final byte[] ch222data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfc,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch222 = new BitmapCharRec(7,10,-1,0,9,ch222data);
-
-/* char: 0xdd */
-
-static final byte[] ch221data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x82,(byte) 0x82,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch221 = new BitmapCharRec(7,11,-1,0,9,ch221data);
-
-/* char: 0xdc */
-
-static final byte[] ch220data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch220 = new BitmapCharRec(7,11,-1,0,9,ch220data);
-
-/* char: 0xdb */
-
-static final byte[] ch219data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch219 = new BitmapCharRec(7,11,-1,0,9,ch219data);
-
-/* char: 0xda */
-
-static final byte[] ch218data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch218 = new BitmapCharRec(7,11,-1,0,9,ch218data);
-
-/* char: 0xd9 */
-
-static final byte[] ch217data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch217 = new BitmapCharRec(7,11,-1,0,9,ch217data);
-
-/* char: 0xd8 */
-
-static final byte[] ch216data = {
-(byte) 0x80,(byte) 0x7c,(byte) 0xc2,(byte) 0xa2,(byte) 0xa2,(byte) 0x92,(byte) 0x92,(byte) 0x8a,(byte) 0x8a,(byte) 0x86,(byte) 0x7c,(byte) 0x2,
-};
-
-static final BitmapCharRec ch216 = new BitmapCharRec(7,12,-1,1,9,ch216data);
-
-/* char: 0xd7 */
-
-static final byte[] ch215data = {
-(byte) 0x82,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x82,
-};
-
-static final BitmapCharRec ch215 = new BitmapCharRec(7,7,-1,-1,9,ch215data);
-
-/* char: 0xd6 */
-
-static final byte[] ch214data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch214 = new BitmapCharRec(7,11,-1,0,9,ch214data);
-
-/* char: 0xd5 */
-
-static final byte[] ch213data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch213 = new BitmapCharRec(7,11,-1,0,9,ch213data);
-
-/* char: 0xd4 */
-
-static final byte[] ch212data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch212 = new BitmapCharRec(7,11,-1,0,9,ch212data);
-
-/* char: 0xd3 */
-
-static final byte[] ch211data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch211 = new BitmapCharRec(7,11,-1,0,9,ch211data);
-
-/* char: 0xd2 */
-
-static final byte[] ch210data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch210 = new BitmapCharRec(7,11,-1,0,9,ch210data);
-
-/* char: 0xd1 */
-
-static final byte[] ch209data = {
-(byte) 0x82,(byte) 0x86,(byte) 0x8a,(byte) 0x92,(byte) 0x92,(byte) 0xa2,(byte) 0xc2,(byte) 0x82,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch209 = new BitmapCharRec(7,11,-1,0,9,ch209data);
-
-/* char: 0xd0 */
-
-static final byte[] ch208data = {
-(byte) 0xfc,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xf2,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch208 = new BitmapCharRec(7,10,-1,0,9,ch208data);
-
-/* char: 0xcf */
-
-static final byte[] ch207data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x50,(byte) 0x50,
-};
-
-static final BitmapCharRec ch207 = new BitmapCharRec(5,11,-2,0,9,ch207data);
-
-/* char: 0xce */
-
-static final byte[] ch206data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch206 = new BitmapCharRec(5,11,-2,0,9,ch206data);
-
-/* char: 0xcd */
-
-static final byte[] ch205data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x60,(byte) 0x10,
-};
-
-static final BitmapCharRec ch205 = new BitmapCharRec(5,11,-2,0,9,ch205data);
-
-/* char: 0xcc */
-
-static final byte[] ch204data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x0,(byte) 0x30,(byte) 0x40,
-};
-
-static final BitmapCharRec ch204 = new BitmapCharRec(5,11,-2,0,9,ch204data);
-
-/* char: 0xcb */
-
-static final byte[] ch203data = {
-(byte) 0xfe,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x78,(byte) 0x40,(byte) 0x40,(byte) 0xfe,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch203 = new BitmapCharRec(7,11,-1,0,9,ch203data);
-
-/* char: 0xca */
-
-static final byte[] ch202data = {
-(byte) 0xfe,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x78,(byte) 0x40,(byte) 0x40,(byte) 0xfe,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch202 = new BitmapCharRec(7,11,-1,0,9,ch202data);
-
-/* char: 0xc9 */
-
-static final byte[] ch201data = {
-(byte) 0xfe,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x78,(byte) 0x40,(byte) 0x40,(byte) 0xfe,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch201 = new BitmapCharRec(7,11,-1,0,9,ch201data);
-
-/* char: 0xc8 */
-
-static final byte[] ch200data = {
-(byte) 0xfe,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x78,(byte) 0x40,(byte) 0x40,(byte) 0xfe,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch200 = new BitmapCharRec(7,11,-1,0,9,ch200data);
-
-/* char: 0xc7 */
-
-static final byte[] ch199data = {
-(byte) 0x30,(byte) 0x48,(byte) 0x18,(byte) 0x7c,(byte) 0x82,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch199 = new BitmapCharRec(7,13,-1,3,9,ch199data);
-
-/* char: 0xc6 */
-
-static final byte[] ch198data = {
-(byte) 0x9e,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xfc,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x6e,
-};
-
-static final BitmapCharRec ch198 = new BitmapCharRec(7,10,-1,0,9,ch198data);
-
-/* char: 0xc5 */
-
-static final byte[] ch197data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,(byte) 0x10,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch197 = new BitmapCharRec(7,11,-1,0,9,ch197data);
-
-/* char: 0xc4 */
-
-static final byte[] ch196data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,(byte) 0x0,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch196 = new BitmapCharRec(7,11,-1,0,9,ch196data);
-
-/* char: 0xc3 */
-
-static final byte[] ch195data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch195 = new BitmapCharRec(7,11,-1,0,9,ch195data);
-
-/* char: 0xc2 */
-
-static final byte[] ch194data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,(byte) 0x0,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch194 = new BitmapCharRec(7,11,-1,0,9,ch194data);
-
-/* char: 0xc1 */
-
-static final byte[] ch193data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,(byte) 0x0,(byte) 0x30,(byte) 0x8,
-};
-
-static final BitmapCharRec ch193 = new BitmapCharRec(7,11,-1,0,9,ch193data);
-
-/* char: 0xc0 */
-
-static final byte[] ch192data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,(byte) 0x0,(byte) 0x18,(byte) 0x20,
-};
-
-static final BitmapCharRec ch192 = new BitmapCharRec(7,11,-1,0,9,ch192data);
-
-/* char: 0xbf */
-
-static final byte[] ch191data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x10,
-};
-
-static final BitmapCharRec ch191 = new BitmapCharRec(7,10,-1,0,9,ch191data);
-
-/* char: 0xbe */
-
-static final byte[] ch190data = {
-(byte) 0x6,(byte) 0x1a,(byte) 0x12,(byte) 0xa,(byte) 0x66,(byte) 0x92,(byte) 0x10,(byte) 0x20,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch190 = new BitmapCharRec(7,10,-1,0,9,ch190data);
-
-/* char: 0xbd */
-
-static final byte[] ch189data = {
-(byte) 0x1e,(byte) 0x10,(byte) 0xc,(byte) 0x2,(byte) 0xf2,(byte) 0x4c,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch189 = new BitmapCharRec(7,10,-1,0,9,ch189data);
-
-/* char: 0xbc */
-
-static final byte[] ch188data = {
-(byte) 0x6,(byte) 0x1a,(byte) 0x12,(byte) 0xa,(byte) 0xe6,(byte) 0x42,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch188 = new BitmapCharRec(7,10,-1,0,9,ch188data);
-
-/* char: 0xbb */
-
-static final byte[] ch187data = {
-(byte) 0x90,(byte) 0x48,(byte) 0x24,(byte) 0x12,(byte) 0x12,(byte) 0x24,(byte) 0x48,(byte) 0x90,
-};
-
-static final BitmapCharRec ch187 = new BitmapCharRec(7,8,-1,-1,9,ch187data);
-
-/* char: 0xba */
-
-static final byte[] ch186data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch186 = new BitmapCharRec(5,6,-1,-5,9,ch186data);
-
-/* char: 0xb9 */
-
-static final byte[] ch185data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch185 = new BitmapCharRec(3,6,-1,-4,9,ch185data);
-
-/* char: 0xb8 */
-
-static final byte[] ch184data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x30,
-};
-
-static final BitmapCharRec ch184 = new BitmapCharRec(4,3,-2,3,9,ch184data);
-
-/* char: 0xb7 */
-
-static final byte[] ch183data = {
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch183 = new BitmapCharRec(2,2,-4,-4,9,ch183data);
-
-/* char: 0xb6 */
-
-static final byte[] ch182data = {
-(byte) 0xa,(byte) 0xa,(byte) 0xa,(byte) 0xa,(byte) 0xa,(byte) 0x7a,(byte) 0x8a,(byte) 0x8a,(byte) 0x8a,(byte) 0x7e,
-};
-
-static final BitmapCharRec ch182 = new BitmapCharRec(7,10,-1,0,9,ch182data);
-
-/* char: 0xb5 */
-
-static final byte[] ch181data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xba,(byte) 0xc6,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch181 = new BitmapCharRec(7,9,-1,2,9,ch181data);
-
-/* char: 0xb4 */
-
-static final byte[] ch180data = {
-(byte) 0xc0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch180 = new BitmapCharRec(3,2,-3,-9,9,ch180data);
-
-/* char: 0xb3 */
-
-static final byte[] ch179data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x10,(byte) 0x20,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch179 = new BitmapCharRec(4,6,-1,-4,9,ch179data);
-
-/* char: 0xb2 */
-
-static final byte[] ch178data = {
-(byte) 0xf0,(byte) 0x80,(byte) 0x60,(byte) 0x10,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch178 = new BitmapCharRec(4,6,-1,-4,9,ch178data);
-
-/* char: 0xb1 */
-
-static final byte[] ch177data = {
-(byte) 0xfe,(byte) 0x0,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xfe,(byte) 0x10,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch177 = new BitmapCharRec(7,9,-1,-1,9,ch177data);
-
-/* char: 0xb0 */
-
-static final byte[] ch176data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch176 = new BitmapCharRec(4,4,-3,-6,9,ch176data);
-
-/* char: 0xaf */
-
-static final byte[] ch175data = {
-(byte) 0xfc,
-};
-
-static final BitmapCharRec ch175 = new BitmapCharRec(6,1,-1,-9,9,ch175data);
-
-/* char: 0xae */
-
-static final byte[] ch174data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0xa5,(byte) 0xa9,(byte) 0xbd,(byte) 0xa5,(byte) 0xb9,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch174 = new BitmapCharRec(8,9,0,-1,9,ch174data);
-
-/* char: 0xad */
-
-static final byte[] ch173data = {
-(byte) 0xfc,
-};
-
-static final BitmapCharRec ch173 = new BitmapCharRec(6,1,-1,-4,9,ch173data);
-
-/* char: 0xac */
-
-static final byte[] ch172data = {
-(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch172 = new BitmapCharRec(6,4,-1,-2,9,ch172data);
-
-/* char: 0xab */
-
-static final byte[] ch171data = {
-(byte) 0x12,(byte) 0x24,(byte) 0x48,(byte) 0x90,(byte) 0x90,(byte) 0x48,(byte) 0x24,(byte) 0x12,
-};
-
-static final BitmapCharRec ch171 = new BitmapCharRec(7,8,-1,-1,9,ch171data);
-
-/* char: 0xaa */
-
-static final byte[] ch170data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x78,(byte) 0x90,(byte) 0x70,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch170 = new BitmapCharRec(5,7,-3,-3,9,ch170data);
-
-/* char: 0xa9 */
-
-static final byte[] ch169data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x99,(byte) 0xa5,(byte) 0xa1,(byte) 0xa5,(byte) 0x99,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch169 = new BitmapCharRec(8,9,0,-1,9,ch169data);
-
-/* char: 0xa8 */
-
-static final byte[] ch168data = {
-(byte) 0xa0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch168 = new BitmapCharRec(3,2,-3,-9,9,ch168data);
-
-/* char: 0xa7 */
-
-static final byte[] ch167data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x80,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch167 = new BitmapCharRec(5,11,-2,1,9,ch167data);
-
-/* char: 0xa6 */
-
-static final byte[] ch166data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch166 = new BitmapCharRec(1,11,-4,1,9,ch166data);
-
-/* char: 0xa5 */
-
-static final byte[] ch165data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x7c,(byte) 0x10,(byte) 0x7c,(byte) 0x28,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch165 = new BitmapCharRec(7,10,-1,0,9,ch165data);
-
-/* char: 0xa4 */
-
-static final byte[] ch164data = {
-(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x7c,(byte) 0x82,
-};
-
-static final BitmapCharRec ch164 = new BitmapCharRec(7,6,-1,-3,9,ch164data);
-
-/* char: 0xa3 */
-
-static final byte[] ch163data = {
-(byte) 0x5c,(byte) 0xa2,(byte) 0x60,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x22,(byte) 0x1c,
-};
-
-static final BitmapCharRec ch163 = new BitmapCharRec(7,10,-1,0,9,ch163data);
-
-/* char: 0xa2 */
-
-static final byte[] ch162data = {
-(byte) 0x40,(byte) 0x78,(byte) 0xa4,(byte) 0xa0,(byte) 0x90,(byte) 0x94,(byte) 0x78,(byte) 0x8,
-};
-
-static final BitmapCharRec ch162 = new BitmapCharRec(6,8,-1,0,9,ch162data);
-
-/* char: 0xa1 */
-
-static final byte[] ch161data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch161 = new BitmapCharRec(1,11,-4,0,9,ch161data);
-
-/* char: 0x7e '~' */
-
-static final byte[] ch126data = {
-(byte) 0x8c,(byte) 0x92,(byte) 0x62,
-};
-
-static final BitmapCharRec ch126 = new BitmapCharRec(7,3,-1,-7,9,ch126data);
-
-/* char: 0x7d '}' */
-
-static final byte[] ch125data = {
-(byte) 0xe0,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x20,(byte) 0x18,(byte) 0x18,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch125 = new BitmapCharRec(5,12,-1,1,9,ch125data);
-
-/* char: 0x7c '|' */
-
-static final byte[] ch124data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch124 = new BitmapCharRec(1,12,-4,1,9,ch124data);
-
-/* char: 0x7b '{' */
-
-static final byte[] ch123data = {
-(byte) 0x38,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0xc0,(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x38,
-};
-
-static final BitmapCharRec ch123 = new BitmapCharRec(5,12,-3,1,9,ch123data);
-
-/* char: 0x7a 'z' */
-
-static final byte[] ch122data = {
-(byte) 0xfe,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch122 = new BitmapCharRec(7,7,-1,0,9,ch122data);
-
-/* char: 0x79 'y' */
-
-static final byte[] ch121data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch121 = new BitmapCharRec(6,10,-1,3,9,ch121data);
-
-/* char: 0x78 'x' */
-
-static final byte[] ch120data = {
-(byte) 0x82,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x82,
-};
-
-static final BitmapCharRec ch120 = new BitmapCharRec(7,7,-1,0,9,ch120data);
-
-/* char: 0x77 'w' */
-
-static final byte[] ch119data = {
-(byte) 0x44,(byte) 0xaa,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch119 = new BitmapCharRec(7,7,-1,0,9,ch119data);
-
-/* char: 0x76 'v' */
-
-static final byte[] ch118data = {
-(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch118 = new BitmapCharRec(7,7,-1,0,9,ch118data);
-
-/* char: 0x75 'u' */
-
-static final byte[] ch117data = {
-(byte) 0x7a,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch117 = new BitmapCharRec(7,7,-1,0,9,ch117data);
-
-/* char: 0x74 't' */
-
-static final byte[] ch116data = {
-(byte) 0x1c,(byte) 0x22,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xfc,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch116 = new BitmapCharRec(7,9,-1,0,9,ch116data);
-
-/* char: 0x73 's' */
-
-static final byte[] ch115data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x2,(byte) 0x7c,(byte) 0x80,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch115 = new BitmapCharRec(7,7,-1,0,9,ch115data);
-
-/* char: 0x72 'r' */
-
-static final byte[] ch114data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x42,(byte) 0x62,(byte) 0x9c,
-};
-
-static final BitmapCharRec ch114 = new BitmapCharRec(7,7,-1,0,9,ch114data);
-
-/* char: 0x71 'q' */
-
-static final byte[] ch113data = {
-(byte) 0x2,(byte) 0x2,(byte) 0x2,(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x86,(byte) 0x7a,
-};
-
-static final BitmapCharRec ch113 = new BitmapCharRec(7,10,-1,3,9,ch113data);
-
-/* char: 0x70 'p' */
-
-static final byte[] ch112data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xbc,(byte) 0xc2,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xc2,(byte) 0xbc,
-};
-
-static final BitmapCharRec ch112 = new BitmapCharRec(7,10,-1,3,9,ch112data);
-
-/* char: 0x6f 'o' */
-
-static final byte[] ch111data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch111 = new BitmapCharRec(7,7,-1,0,9,ch111data);
-
-/* char: 0x6e 'n' */
-
-static final byte[] ch110data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xc2,(byte) 0xbc,
-};
-
-static final BitmapCharRec ch110 = new BitmapCharRec(7,7,-1,0,9,ch110data);
-
-/* char: 0x6d 'm' */
-
-static final byte[] ch109data = {
-(byte) 0x82,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0xec,
-};
-
-static final BitmapCharRec ch109 = new BitmapCharRec(7,7,-1,0,9,ch109data);
-
-/* char: 0x6c 'l' */
-
-static final byte[] ch108data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch108 = new BitmapCharRec(5,10,-2,0,9,ch108data);
-
-/* char: 0x6b 'k' */
-
-static final byte[] ch107data = {
-(byte) 0x82,(byte) 0x8c,(byte) 0xb0,(byte) 0xc0,(byte) 0xb0,(byte) 0x8c,(byte) 0x82,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch107 = new BitmapCharRec(7,10,-1,0,9,ch107data);
-
-/* char: 0x6a 'j' */
-
-static final byte[] ch106data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x1c,(byte) 0x0,(byte) 0x0,(byte) 0xc,
-};
-
-static final BitmapCharRec ch106 = new BitmapCharRec(6,13,-1,3,9,ch106data);
-
-/* char: 0x69 'i' */
-
-static final byte[] ch105data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch105 = new BitmapCharRec(5,10,-2,0,9,ch105data);
-
-/* char: 0x68 'h' */
-
-static final byte[] ch104data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xc2,(byte) 0xbc,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch104 = new BitmapCharRec(7,10,-1,0,9,ch104data);
-
-/* char: 0x67 'g' */
-
-static final byte[] ch103data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x80,(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x7a,
-};
-
-static final BitmapCharRec ch103 = new BitmapCharRec(7,10,-1,3,9,ch103data);
-
-/* char: 0x66 'f' */
-
-static final byte[] ch102data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x22,(byte) 0x22,(byte) 0x1c,
-};
-
-static final BitmapCharRec ch102 = new BitmapCharRec(7,10,-1,0,9,ch102data);
-
-/* char: 0x65 'e' */
-
-static final byte[] ch101data = {
-(byte) 0x7c,(byte) 0x80,(byte) 0x80,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch101 = new BitmapCharRec(7,7,-1,0,9,ch101data);
-
-/* char: 0x64 'd' */
-
-static final byte[] ch100data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x86,(byte) 0x7a,(byte) 0x2,(byte) 0x2,(byte) 0x2,
-};
-
-static final BitmapCharRec ch100 = new BitmapCharRec(7,10,-1,0,9,ch100data);
-
-/* char: 0x63 'c' */
-
-static final byte[] ch99data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch99 = new BitmapCharRec(7,7,-1,0,9,ch99data);
-
-/* char: 0x62 'b' */
-
-static final byte[] ch98data = {
-(byte) 0xbc,(byte) 0xc2,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xc2,(byte) 0xbc,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch98 = new BitmapCharRec(7,10,-1,0,9,ch98data);
-
-/* char: 0x61 'a' */
-
-static final byte[] ch97data = {
-(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x7e,(byte) 0x2,(byte) 0x2,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch97 = new BitmapCharRec(7,7,-1,0,9,ch97data);
-
-/* char: 0x60 '`' */
-
-static final byte[] ch96data = {
-(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch96 = new BitmapCharRec(4,4,-3,-6,9,ch96data);
-
-/* char: 0x5f '_' */
-
-static final byte[] ch95data = {
-(byte) 0xff,
-};
-
-static final BitmapCharRec ch95 = new BitmapCharRec(8,1,0,1,9,ch95data);
-
-/* char: 0x5e '^' */
-
-static final byte[] ch94data = {
-(byte) 0x82,(byte) 0x44,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch94 = new BitmapCharRec(7,4,-1,-6,9,ch94data);
-
-/* char: 0x5d ']' */
-
-static final byte[] ch93data = {
-(byte) 0xf0,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch93 = new BitmapCharRec(4,12,-2,1,9,ch93data);
-
-/* char: 0x5c '\' */
-
-static final byte[] ch92data = {
-(byte) 0x2,(byte) 0x4,(byte) 0x4,(byte) 0x8,(byte) 0x10,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch92 = new BitmapCharRec(7,10,-1,0,9,ch92data);
-
-/* char: 0x5b '[' */
-
-static final byte[] ch91data = {
-(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch91 = new BitmapCharRec(4,12,-3,1,9,ch91data);
-
-/* char: 0x5a 'Z' */
-
-static final byte[] ch90data = {
-(byte) 0xfe,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0x2,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch90 = new BitmapCharRec(7,10,-1,0,9,ch90data);
-
-/* char: 0x59 'Y' */
-
-static final byte[] ch89data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch89 = new BitmapCharRec(7,10,-1,0,9,ch89data);
-
-/* char: 0x58 'X' */
-
-static final byte[] ch88data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch88 = new BitmapCharRec(7,10,-1,0,9,ch88data);
-
-/* char: 0x57 'W' */
-
-static final byte[] ch87data = {
-(byte) 0x44,(byte) 0xaa,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch87 = new BitmapCharRec(7,10,-1,0,9,ch87data);
-
-/* char: 0x56 'V' */
-
-static final byte[] ch86data = {
-(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch86 = new BitmapCharRec(7,10,-1,0,9,ch86data);
-
-/* char: 0x55 'U' */
-
-static final byte[] ch85data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch85 = new BitmapCharRec(7,10,-1,0,9,ch85data);
-
-/* char: 0x54 'T' */
-
-static final byte[] ch84data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch84 = new BitmapCharRec(7,10,-1,0,9,ch84data);
-
-/* char: 0x53 'S' */
-
-static final byte[] ch83data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x2,(byte) 0xc,(byte) 0x70,(byte) 0x80,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch83 = new BitmapCharRec(7,10,-1,0,9,ch83data);
-
-/* char: 0x52 'R' */
-
-static final byte[] ch82data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x84,(byte) 0x88,(byte) 0x90,(byte) 0xfc,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch82 = new BitmapCharRec(7,10,-1,0,9,ch82data);
-
-/* char: 0x51 'Q' */
-
-static final byte[] ch81data = {
-(byte) 0x6,(byte) 0x8,(byte) 0x7c,(byte) 0x92,(byte) 0xa2,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch81 = new BitmapCharRec(7,12,-1,2,9,ch81data);
-
-/* char: 0x50 'P' */
-
-static final byte[] ch80data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch80 = new BitmapCharRec(7,10,-1,0,9,ch80data);
-
-/* char: 0x4f 'O' */
-
-static final byte[] ch79data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch79 = new BitmapCharRec(7,10,-1,0,9,ch79data);
-
-/* char: 0x4e 'N' */
-
-static final byte[] ch78data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x86,(byte) 0x8a,(byte) 0x92,(byte) 0xa2,(byte) 0xc2,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch78 = new BitmapCharRec(7,10,-1,0,9,ch78data);
-
-/* char: 0x4d 'M' */
-
-static final byte[] ch77data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x92,(byte) 0x92,(byte) 0xaa,(byte) 0xaa,(byte) 0xc6,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch77 = new BitmapCharRec(7,10,-1,0,9,ch77data);
-
-/* char: 0x4c 'L' */
-
-static final byte[] ch76data = {
-(byte) 0xfe,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch76 = new BitmapCharRec(7,10,-1,0,9,ch76data);
-
-/* char: 0x4b 'K' */
-
-static final byte[] ch75data = {
-(byte) 0x82,(byte) 0x84,(byte) 0x88,(byte) 0x90,(byte) 0xa0,(byte) 0xe0,(byte) 0x90,(byte) 0x88,(byte) 0x84,(byte) 0x82,
-};
-
-static final BitmapCharRec ch75 = new BitmapCharRec(7,10,-1,0,9,ch75data);
-
-/* char: 0x4a 'J' */
-
-static final byte[] ch74data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0x1e,
-};
-
-static final BitmapCharRec ch74 = new BitmapCharRec(7,10,-1,0,9,ch74data);
-
-/* char: 0x49 'I' */
-
-static final byte[] ch73data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch73 = new BitmapCharRec(5,10,-2,0,9,ch73data);
-
-/* char: 0x48 'H' */
-
-static final byte[] ch72data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch72 = new BitmapCharRec(7,10,-1,0,9,ch72data);
-
-/* char: 0x47 'G' */
-
-static final byte[] ch71data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x8e,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch71 = new BitmapCharRec(7,10,-1,0,9,ch71data);
-
-/* char: 0x46 'F' */
-
-static final byte[] ch70data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x78,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch70 = new BitmapCharRec(7,10,-1,0,9,ch70data);
-
-/* char: 0x45 'E' */
-
-static final byte[] ch69data = {
-(byte) 0xfe,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x78,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch69 = new BitmapCharRec(7,10,-1,0,9,ch69data);
-
-/* char: 0x44 'D' */
-
-static final byte[] ch68data = {
-(byte) 0xfc,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch68 = new BitmapCharRec(7,10,-1,0,9,ch68data);
-
-/* char: 0x43 'C' */
-
-static final byte[] ch67data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch67 = new BitmapCharRec(7,10,-1,0,9,ch67data);
-
-/* char: 0x42 'B' */
-
-static final byte[] ch66data = {
-(byte) 0xfc,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0x7c,(byte) 0x42,(byte) 0x42,(byte) 0x42,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch66 = new BitmapCharRec(7,10,-1,0,9,ch66data);
-
-/* char: 0x41 'A' */
-
-static final byte[] ch65data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch65 = new BitmapCharRec(7,10,-1,0,9,ch65data);
-
-/* char: 0x40 '@' */
-
-static final byte[] ch64data = {
-(byte) 0x7c,(byte) 0x80,(byte) 0x80,(byte) 0x9a,(byte) 0xa6,(byte) 0xa2,(byte) 0x9e,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch64 = new BitmapCharRec(7,10,-1,0,9,ch64data);
-
-/* char: 0x3f '?' */
-
-static final byte[] ch63data = {
-(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0x2,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch63 = new BitmapCharRec(7,10,-1,0,9,ch63data);
-
-/* char: 0x3e '>' */
-
-static final byte[] ch62data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x8,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch62 = new BitmapCharRec(5,10,-2,0,9,ch62data);
-
-/* char: 0x3d '=' */
-
-static final byte[] ch61data = {
-(byte) 0xfe,(byte) 0x0,(byte) 0x0,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch61 = new BitmapCharRec(7,4,-1,-2,9,ch61data);
-
-/* char: 0x3c '<' */
-
-static final byte[] ch60data = {
-(byte) 0x8,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch60 = new BitmapCharRec(5,10,-2,0,9,ch60data);
-
-/* char: 0x3b ';' */
-
-static final byte[] ch59data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch59 = new BitmapCharRec(2,10,-4,3,9,ch59data);
-
-/* char: 0x3a ':' */
-
-static final byte[] ch58data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch58 = new BitmapCharRec(2,7,-4,0,9,ch58data);
-
-/* char: 0x39 '9' */
-
-static final byte[] ch57data = {
-(byte) 0x78,(byte) 0x4,(byte) 0x2,(byte) 0x2,(byte) 0x7a,(byte) 0x86,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch57 = new BitmapCharRec(7,10,-1,0,9,ch57data);
-
-/* char: 0x38 '8' */
-
-static final byte[] ch56data = {
-(byte) 0x38,(byte) 0x44,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,(byte) 0x44,(byte) 0x82,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch56 = new BitmapCharRec(7,10,-1,0,9,ch56data);
-
-/* char: 0x37 '7' */
-
-static final byte[] ch55data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0x2,(byte) 0x2,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch55 = new BitmapCharRec(7,10,-1,0,9,ch55data);
-
-/* char: 0x36 '6' */
-
-static final byte[] ch54data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xc2,(byte) 0xbc,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch54 = new BitmapCharRec(7,10,-1,0,9,ch54data);
-
-/* char: 0x35 '5' */
-
-static final byte[] ch53data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x2,(byte) 0x2,(byte) 0x2,(byte) 0xc2,(byte) 0xbc,(byte) 0x80,(byte) 0x80,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch53 = new BitmapCharRec(7,10,-1,0,9,ch53data);
-
-/* char: 0x34 '4' */
-
-static final byte[] ch52data = {
-(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0xfe,(byte) 0x84,(byte) 0x44,(byte) 0x24,(byte) 0x14,(byte) 0xc,(byte) 0x4,
-};
-
-static final BitmapCharRec ch52 = new BitmapCharRec(7,10,-1,0,9,ch52data);
-
-/* char: 0x33 '3' */
-
-static final byte[] ch51data = {
-(byte) 0x7c,(byte) 0x82,(byte) 0x2,(byte) 0x2,(byte) 0x2,(byte) 0x1c,(byte) 0x8,(byte) 0x4,(byte) 0x2,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch51 = new BitmapCharRec(7,10,-1,0,9,ch51data);
-
-/* char: 0x32 '2' */
-
-static final byte[] ch50data = {
-(byte) 0xfe,(byte) 0x80,(byte) 0x40,(byte) 0x30,(byte) 0x8,(byte) 0x4,(byte) 0x2,(byte) 0x82,(byte) 0x82,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch50 = new BitmapCharRec(7,10,-1,0,9,ch50data);
-
-/* char: 0x31 '1' */
-
-static final byte[] ch49data = {
-(byte) 0xfe,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x90,(byte) 0x50,(byte) 0x30,(byte) 0x10,
-};
-
-static final BitmapCharRec ch49 = new BitmapCharRec(7,10,-1,0,9,ch49data);
-
-/* char: 0x30 '0' */
-
-static final byte[] ch48data = {
-(byte) 0x38,(byte) 0x44,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch48 = new BitmapCharRec(7,10,-1,0,9,ch48data);
-
-/* char: 0x2f '/' */
-
-static final byte[] ch47data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0x4,(byte) 0x2,
-};
-
-static final BitmapCharRec ch47 = new BitmapCharRec(7,10,-1,0,9,ch47data);
-
-/* char: 0x2e '.' */
-
-static final byte[] ch46data = {
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch46 = new BitmapCharRec(2,2,-4,0,9,ch46data);
-
-/* char: 0x2d '-' */
-
-static final byte[] ch45data = {
-(byte) 0xfe,
-};
-
-static final BitmapCharRec ch45 = new BitmapCharRec(7,1,-1,-4,9,ch45data);
-
-/* char: 0x2c ',' */
-
-static final byte[] ch44data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch44 = new BitmapCharRec(2,5,-4,3,9,ch44data);
-
-/* char: 0x2b '+' */
-
-static final byte[] ch43data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xfe,(byte) 0x10,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch43 = new BitmapCharRec(7,7,-1,-1,9,ch43data);
-
-/* char: 0x2a '*' */
-
-static final byte[] ch42data = {
-(byte) 0x10,(byte) 0x92,(byte) 0x54,(byte) 0x38,(byte) 0x54,(byte) 0x92,(byte) 0x10,
-};
-
-static final BitmapCharRec ch42 = new BitmapCharRec(7,7,-1,-1,9,ch42data);
-
-/* char: 0x29 ')' */
-
-static final byte[] ch41data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch41 = new BitmapCharRec(3,12,-3,1,9,ch41data);
-
-/* char: 0x28 '(' */
-
-static final byte[] ch40data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch40 = new BitmapCharRec(3,12,-3,1,9,ch40data);
-
-/* char: 0x27 ''' */
-
-static final byte[] ch39data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x30,
-};
-
-static final BitmapCharRec ch39 = new BitmapCharRec(4,4,-3,-6,9,ch39data);
-
-/* char: 0x26 '&' */
-
-static final byte[] ch38data = {
-(byte) 0x62,(byte) 0x94,(byte) 0x88,(byte) 0x94,(byte) 0x62,(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch38 = new BitmapCharRec(7,10,-1,0,9,ch38data);
-
-/* char: 0x25 '%' */
-
-static final byte[] ch37data = {
-(byte) 0x84,(byte) 0x4a,(byte) 0x4a,(byte) 0x24,(byte) 0x10,(byte) 0x10,(byte) 0x48,(byte) 0xa4,(byte) 0xa4,(byte) 0x42,
-};
-
-static final BitmapCharRec ch37 = new BitmapCharRec(7,10,-1,0,9,ch37data);
-
-/* char: 0x24 '$' */
-
-static final byte[] ch36data = {
-(byte) 0x10,(byte) 0x7c,(byte) 0x92,(byte) 0x12,(byte) 0x12,(byte) 0x14,(byte) 0x38,(byte) 0x50,(byte) 0x90,(byte) 0x92,(byte) 0x7c,(byte) 0x10,
-};
-
-static final BitmapCharRec ch36 = new BitmapCharRec(7,12,-1,1,9,ch36data);
-
-/* char: 0x23 '#' */
-
-static final byte[] ch35data = {
-(byte) 0x48,(byte) 0x48,(byte) 0xfc,(byte) 0x48,(byte) 0x48,(byte) 0xfc,(byte) 0x48,(byte) 0x48,
-};
-
-static final BitmapCharRec ch35 = new BitmapCharRec(6,8,-1,-1,9,ch35data);
-
-/* char: 0x22 '"' */
-
-static final byte[] ch34data = {
-(byte) 0x90,(byte) 0x90,(byte) 0x90,
-};
-
-static final BitmapCharRec ch34 = new BitmapCharRec(4,3,-3,-7,9,ch34data);
-
-/* char: 0x21 '!' */
-
-static final byte[] ch33data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch33 = new BitmapCharRec(1,11,-4,0,9,ch33data);
-
-/* char: 0x1f */
-
-static final byte[] ch31data = {
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch31 = new BitmapCharRec(2,2,-4,-2,9,ch31data);
-
-/* char: 0x1e */
-
-static final byte[] ch30data = {
-(byte) 0x5c,(byte) 0xa2,(byte) 0x60,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x22,(byte) 0x1c,
-};
-
-static final BitmapCharRec ch30 = new BitmapCharRec(7,10,-1,0,9,ch30data);
-
-/* char: 0x1d */
-
-static final byte[] ch29data = {
-(byte) 0x80,(byte) 0x40,(byte) 0xfe,(byte) 0x10,(byte) 0xfe,(byte) 0x4,(byte) 0x2,
-};
-
-static final BitmapCharRec ch29 = new BitmapCharRec(7,7,-1,0,9,ch29data);
-
-/* char: 0x1c */
-
-static final byte[] ch28data = {
-(byte) 0x44,(byte) 0x24,(byte) 0x24,(byte) 0x24,(byte) 0x24,(byte) 0x24,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch28 = new BitmapCharRec(7,7,-1,0,9,ch28data);
-
-/* char: 0x1b */
-
-static final byte[] ch27data = {
-(byte) 0xfe,(byte) 0x0,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x8,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch27 = new BitmapCharRec(7,12,-1,2,9,ch27data);
-
-/* char: 0x1a */
-
-static final byte[] ch26data = {
-(byte) 0xfc,(byte) 0x0,(byte) 0x4,(byte) 0x8,(byte) 0x10,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x4,
-};
-
-static final BitmapCharRec ch26 = new BitmapCharRec(6,12,-2,2,9,ch26data);
-
-/* char: 0x19 */
-
-static final byte[] ch25data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch25 = new BitmapCharRec(1,15,-4,3,9,ch25data);
-
-/* char: 0x18 */
-
-static final byte[] ch24data = {
-(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch24 = new BitmapCharRec(9,7,0,3,9,ch24data);
-
-/* char: 0x17 */
-
-static final byte[] ch23data = {
-(byte) 0xff,(byte) 0x80,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,
-(byte) 0x8,(byte) 0x0,
-};
-
-static final BitmapCharRec ch23 = new BitmapCharRec(9,9,0,-3,9,ch23data);
-
-/* char: 0x16 */
-
-static final byte[] ch22data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0xf8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,
-};
-
-static final BitmapCharRec ch22 = new BitmapCharRec(5,15,0,3,9,ch22data);
-
-/* char: 0x15 */
-
-static final byte[] ch21data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch21 = new BitmapCharRec(5,15,-4,3,9,ch21data);
-
-/* char: 0x14 */
-
-static final byte[] ch20data = {
-(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch20 = new BitmapCharRec(9,1,0,1,9,ch20data);
-
-/* char: 0x13 */
-
-static final byte[] ch19data = {
-(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch19 = new BitmapCharRec(9,1,0,-1,9,ch19data);
-
-/* char: 0x12 */
-
-static final byte[] ch18data = {
-(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch18 = new BitmapCharRec(9,1,0,-3,9,ch18data);
-
-/* char: 0x11 */
-
-static final byte[] ch17data = {
-(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch17 = new BitmapCharRec(9,1,0,-5,9,ch17data);
-
-/* char: 0x10 */
-
-static final byte[] ch16data = {
-(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch16 = new BitmapCharRec(9,1,0,-7,9,ch16data);
-
-/* char: 0xf */
-
-static final byte[] ch15data = {
-(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0x8,(byte) 0x0,
-(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,
-};
-
-static final BitmapCharRec ch15 = new BitmapCharRec(9,15,0,3,9,ch15data);
-
-/* char: 0xe */
-
-static final byte[] ch14data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch14 = new BitmapCharRec(5,9,-4,-3,9,ch14data);
-
-/* char: 0xd */
-
-static final byte[] ch13data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch13 = new BitmapCharRec(5,7,-4,3,9,ch13data);
-
-/* char: 0xc */
-
-static final byte[] ch12data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch12 = new BitmapCharRec(5,7,0,3,9,ch12data);
-
-/* char: 0xb */
-
-static final byte[] ch11data = {
-(byte) 0xf8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,
-};
-
-static final BitmapCharRec ch11 = new BitmapCharRec(5,9,0,-3,9,ch11data);
-
-/* char: 0xa */
-
-static final byte[] ch10data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x3e,(byte) 0x0,(byte) 0x20,(byte) 0x50,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch10 = new BitmapCharRec(7,10,-1,2,9,ch10data);
-
-/* char: 0x9 */
-
-static final byte[] ch9data = {
-(byte) 0x3e,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x88,(byte) 0x98,(byte) 0xa8,(byte) 0xc8,(byte) 0x88,
-};
-
-static final BitmapCharRec ch9 = new BitmapCharRec(7,10,-1,2,9,ch9data);
-
-/* char: 0x8 */
-
-static final byte[] ch8data = {
-(byte) 0xfe,(byte) 0x10,(byte) 0x10,(byte) 0xfe,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch8 = new BitmapCharRec(7,6,-1,0,9,ch8data);
-
-/* char: 0x7 */
-
-static final byte[] ch7data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch7 = new BitmapCharRec(5,4,-2,-6,9,ch7data);
-
-/* char: 0x6 */
-
-static final byte[] ch6data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x3c,(byte) 0x20,(byte) 0x3e,(byte) 0x0,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch6 = new BitmapCharRec(7,10,-1,2,9,ch6data);
-
-/* char: 0x5 */
-
-static final byte[] ch5data = {
-(byte) 0x22,(byte) 0x22,(byte) 0x3c,(byte) 0x22,(byte) 0x3c,(byte) 0x0,(byte) 0x78,(byte) 0x80,(byte) 0x80,(byte) 0x78,
-};
-
-static final BitmapCharRec ch5 = new BitmapCharRec(7,10,-1,2,9,ch5data);
-
-/* char: 0x4 */
-
-static final byte[] ch4data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x1c,(byte) 0x10,(byte) 0x1e,(byte) 0x80,(byte) 0x80,(byte) 0xe0,(byte) 0x80,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch4 = new BitmapCharRec(7,10,-1,2,9,ch4data);
-
-/* char: 0x3 */
-
-static final byte[] ch3data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x3e,(byte) 0x0,(byte) 0x88,(byte) 0x88,(byte) 0xf8,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch3 = new BitmapCharRec(7,10,-1,2,9,ch3data);
-
-/* char: 0x2 */
-
-static final byte[] ch2data = {
-(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,(byte) 0x55,(byte) 0xaa,
-};
-
-static final BitmapCharRec ch2 = new BitmapCharRec(8,14,0,3,9,ch2data);
-
-/* char: 0x1 */
-
-static final byte[] ch1data = {
-(byte) 0x10,(byte) 0x38,(byte) 0x7c,(byte) 0xfe,(byte) 0x7c,(byte) 0x38,(byte) 0x10,
-};
-
-static final BitmapCharRec ch1 = new BitmapCharRec(7,7,-1,0,9,ch1data);
-
-static final BitmapCharRec[] chars = {
-ch0,
-ch1,
-ch2,
-ch3,
-ch4,
-ch5,
-ch6,
-ch7,
-ch8,
-ch9,
-ch10,
-ch11,
-ch12,
-ch13,
-ch14,
-ch15,
-ch16,
-ch17,
-ch18,
-ch19,
-ch20,
-ch21,
-ch22,
-ch23,
-ch24,
-ch25,
-ch26,
-ch27,
-ch28,
-ch29,
-ch30,
-ch31,
-ch32,
-ch33,
-ch34,
-ch35,
-ch36,
-ch37,
-ch38,
-ch39,
-ch40,
-ch41,
-ch42,
-ch43,
-ch44,
-ch45,
-ch46,
-ch47,
-ch48,
-ch49,
-ch50,
-ch51,
-ch52,
-ch53,
-ch54,
-ch55,
-ch56,
-ch57,
-ch58,
-ch59,
-ch60,
-ch61,
-ch62,
-ch63,
-ch64,
-ch65,
-ch66,
-ch67,
-ch68,
-ch69,
-ch70,
-ch71,
-ch72,
-ch73,
-ch74,
-ch75,
-ch76,
-ch77,
-ch78,
-ch79,
-ch80,
-ch81,
-ch82,
-ch83,
-ch84,
-ch85,
-ch86,
-ch87,
-ch88,
-ch89,
-ch90,
-ch91,
-ch92,
-ch93,
-ch94,
-ch95,
-ch96,
-ch97,
-ch98,
-ch99,
-ch100,
-ch101,
-ch102,
-ch103,
-ch104,
-ch105,
-ch106,
-ch107,
-ch108,
-ch109,
-ch110,
-ch111,
-ch112,
-ch113,
-ch114,
-ch115,
-ch116,
-ch117,
-ch118,
-ch119,
-ch120,
-ch121,
-ch122,
-ch123,
-ch124,
-ch125,
-ch126,
-ch127,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-ch160,
-ch161,
-ch162,
-ch163,
-ch164,
-ch165,
-ch166,
-ch167,
-ch168,
-ch169,
-ch170,
-ch171,
-ch172,
-ch173,
-ch174,
-ch175,
-ch176,
-ch177,
-ch178,
-ch179,
-ch180,
-ch181,
-ch182,
-ch183,
-ch184,
-ch185,
-ch186,
-ch187,
-ch188,
-ch189,
-ch190,
-ch191,
-ch192,
-ch193,
-ch194,
-ch195,
-ch196,
-ch197,
-ch198,
-ch199,
-ch200,
-ch201,
-ch202,
-ch203,
-ch204,
-ch205,
-ch206,
-ch207,
-ch208,
-ch209,
-ch210,
-ch211,
-ch212,
-ch213,
-ch214,
-ch215,
-ch216,
-ch217,
-ch218,
-ch219,
-ch220,
-ch221,
-ch222,
-ch223,
-ch224,
-ch225,
-ch226,
-ch227,
-ch228,
-ch229,
-ch230,
-ch231,
-ch232,
-ch233,
-ch234,
-ch235,
-ch236,
-ch237,
-ch238,
-ch239,
-ch240,
-ch241,
-ch242,
-ch243,
-ch244,
-ch245,
-ch246,
-ch247,
-ch248,
-ch249,
-ch250,
-ch251,
-ch252,
-ch253,
-ch254,
-ch255,
-};
-
- static final BitmapFontRec glutBitmap9By15 = new BitmapFontRec("-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1",
- 256,
- 0,
- chars);
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica10.java b/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica10.java
deleted file mode 100644
index f2fc8ab76..000000000
--- a/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica10.java
+++ /dev/null
@@ -1,1798 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTBitmapHelvetica10 {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-/* char: 0xff */
-
-static final byte[] ch255data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x60,(byte) 0xa0,(byte) 0xa0,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch255 = new BitmapCharRec(4,10,0,2,5,ch255data);
-
-/* char: 0xfe */
-
-static final byte[] ch254data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xb0,(byte) 0xc8,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch254 = new BitmapCharRec(5,10,0,2,6,ch254data);
-
-/* char: 0xfd */
-
-static final byte[] ch253data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x60,(byte) 0xa0,(byte) 0xa0,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch253 = new BitmapCharRec(4,11,0,2,5,ch253data);
-
-/* char: 0xfc */
-
-static final byte[] ch252data = {
-(byte) 0x70,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch252 = new BitmapCharRec(4,8,0,0,5,ch252data);
-
-/* char: 0xfb */
-
-static final byte[] ch251data = {
-(byte) 0x70,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch251 = new BitmapCharRec(4,9,0,0,5,ch251data);
-
-/* char: 0xfa */
-
-static final byte[] ch250data = {
-(byte) 0x70,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch250 = new BitmapCharRec(4,9,0,0,5,ch250data);
-
-/* char: 0xf9 */
-
-static final byte[] ch249data = {
-(byte) 0x70,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch249 = new BitmapCharRec(4,9,0,0,5,ch249data);
-
-/* char: 0xf8 */
-
-static final byte[] ch248data = {
-(byte) 0x70,(byte) 0x88,(byte) 0xc8,(byte) 0xa8,(byte) 0x98,(byte) 0x74,
-};
-
-static final BitmapCharRec ch248 = new BitmapCharRec(6,6,0,0,6,ch248data);
-
-/* char: 0xf7 */
-
-static final byte[] ch247data = {
-(byte) 0x20,(byte) 0x0,(byte) 0xf8,(byte) 0x0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch247 = new BitmapCharRec(5,5,0,-1,6,ch247data);
-
-/* char: 0xf6 */
-
-static final byte[] ch246data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch246 = new BitmapCharRec(5,8,0,0,6,ch246data);
-
-/* char: 0xf5 */
-
-static final byte[] ch245data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch245 = new BitmapCharRec(5,9,0,0,6,ch245data);
-
-/* char: 0xf4 */
-
-static final byte[] ch244data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch244 = new BitmapCharRec(5,9,0,0,6,ch244data);
-
-/* char: 0xf3 */
-
-static final byte[] ch243data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch243 = new BitmapCharRec(5,9,0,0,6,ch243data);
-
-/* char: 0xf2 */
-
-static final byte[] ch242data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch242 = new BitmapCharRec(5,9,0,0,6,ch242data);
-
-/* char: 0xf1 */
-
-static final byte[] ch241data = {
-(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,(byte) 0x0,(byte) 0xa0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch241 = new BitmapCharRec(4,9,0,0,5,ch241data);
-
-/* char: 0xf0 */
-
-static final byte[] ch240data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x90,(byte) 0x60,(byte) 0x50,
-};
-
-static final BitmapCharRec ch240 = new BitmapCharRec(5,9,0,0,6,ch240data);
-
-/* char: 0xef */
-
-static final byte[] ch239data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch239 = new BitmapCharRec(3,8,0,0,2,ch239data);
-
-/* char: 0xee */
-
-static final byte[] ch238data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch238 = new BitmapCharRec(3,9,1,0,2,ch238data);
-
-/* char: 0xed */
-
-static final byte[] ch237data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch237 = new BitmapCharRec(2,9,0,0,2,ch237data);
-
-/* char: 0xec */
-
-static final byte[] ch236data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch236 = new BitmapCharRec(2,9,1,0,2,ch236data);
-
-/* char: 0xeb */
-
-static final byte[] ch235data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0xf0,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch235 = new BitmapCharRec(4,8,0,0,5,ch235data);
-
-/* char: 0xea */
-
-static final byte[] ch234data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0xf0,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch234 = new BitmapCharRec(4,9,0,0,5,ch234data);
-
-/* char: 0xe9 */
-
-static final byte[] ch233data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0xf0,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch233 = new BitmapCharRec(4,9,0,0,5,ch233data);
-
-/* char: 0xe8 */
-
-static final byte[] ch232data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0xf0,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch232 = new BitmapCharRec(4,9,0,0,5,ch232data);
-
-/* char: 0xe7 */
-
-static final byte[] ch231data = {
-(byte) 0x60,(byte) 0x20,(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0x80,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch231 = new BitmapCharRec(4,8,0,2,5,ch231data);
-
-/* char: 0xe6 */
-
-static final byte[] ch230data = {
-(byte) 0x6c,(byte) 0x92,(byte) 0x90,(byte) 0x7e,(byte) 0x12,(byte) 0xec,
-};
-
-static final BitmapCharRec ch230 = new BitmapCharRec(7,6,0,0,8,ch230data);
-
-/* char: 0xe5 */
-
-static final byte[] ch229data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0xe0,(byte) 0x20,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch229 = new BitmapCharRec(5,9,0,0,5,ch229data);
-
-/* char: 0xe4 */
-
-static final byte[] ch228data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0xe0,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch228 = new BitmapCharRec(5,8,0,0,5,ch228data);
-
-/* char: 0xe3 */
-
-static final byte[] ch227data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0xe0,(byte) 0x0,(byte) 0xa0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch227 = new BitmapCharRec(5,9,0,0,5,ch227data);
-
-/* char: 0xe2 */
-
-static final byte[] ch226data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0xe0,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch226 = new BitmapCharRec(5,9,0,0,5,ch226data);
-
-/* char: 0xe1 */
-
-static final byte[] ch225data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0xe0,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch225 = new BitmapCharRec(5,9,0,0,5,ch225data);
-
-/* char: 0xe0 */
-
-static final byte[] ch224data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0xe0,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch224 = new BitmapCharRec(5,9,0,0,5,ch224data);
-
-/* char: 0xdf */
-
-static final byte[] ch223data = {
-(byte) 0xa0,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xa0,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch223 = new BitmapCharRec(4,8,0,0,5,ch223data);
-
-/* char: 0xde */
-
-static final byte[] ch222data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x88,(byte) 0x88,(byte) 0xf0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch222 = new BitmapCharRec(5,8,-1,0,7,ch222data);
-
-/* char: 0xdd */
-
-static final byte[] ch221data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch221 = new BitmapCharRec(7,11,0,0,7,ch221data);
-
-/* char: 0xdc */
-
-static final byte[] ch220data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x48,
-};
-
-static final BitmapCharRec ch220 = new BitmapCharRec(6,10,-1,0,8,ch220data);
-
-/* char: 0xdb */
-
-static final byte[] ch219data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch219 = new BitmapCharRec(6,11,-1,0,8,ch219data);
-
-/* char: 0xda */
-
-static final byte[] ch218data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch218 = new BitmapCharRec(6,11,-1,0,8,ch218data);
-
-/* char: 0xd9 */
-
-static final byte[] ch217data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch217 = new BitmapCharRec(6,11,-1,0,8,ch217data);
-
-/* char: 0xd8 */
-
-static final byte[] ch216data = {
-(byte) 0x80,(byte) 0x78,(byte) 0xc4,(byte) 0xa4,(byte) 0xa4,(byte) 0x94,(byte) 0x94,(byte) 0x8c,(byte) 0x78,(byte) 0x4,
-};
-
-static final BitmapCharRec ch216 = new BitmapCharRec(6,10,-1,1,8,ch216data);
-
-/* char: 0xd7 */
-
-static final byte[] ch215data = {
-(byte) 0x88,(byte) 0x50,(byte) 0x20,(byte) 0x50,(byte) 0x88,
-};
-
-static final BitmapCharRec ch215 = new BitmapCharRec(5,5,0,-1,6,ch215data);
-
-/* char: 0xd6 */
-
-static final byte[] ch214data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x48,
-};
-
-static final BitmapCharRec ch214 = new BitmapCharRec(6,10,-1,0,8,ch214data);
-
-/* char: 0xd5 */
-
-static final byte[] ch213data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch213 = new BitmapCharRec(6,11,-1,0,8,ch213data);
-
-/* char: 0xd4 */
-
-static final byte[] ch212data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch212 = new BitmapCharRec(6,11,-1,0,8,ch212data);
-
-/* char: 0xd3 */
-
-static final byte[] ch211data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch211 = new BitmapCharRec(6,11,-1,0,8,ch211data);
-
-/* char: 0xd2 */
-
-static final byte[] ch210data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch210 = new BitmapCharRec(6,11,-1,0,8,ch210data);
-
-/* char: 0xd1 */
-
-static final byte[] ch209data = {
-(byte) 0x8c,(byte) 0x8c,(byte) 0x94,(byte) 0x94,(byte) 0xa4,(byte) 0xa4,(byte) 0xc4,(byte) 0xc4,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch209 = new BitmapCharRec(6,11,-1,0,8,ch209data);
-
-/* char: 0xd0 */
-
-static final byte[] ch208data = {
-(byte) 0x78,(byte) 0x44,(byte) 0x42,(byte) 0x42,(byte) 0xf2,(byte) 0x42,(byte) 0x44,(byte) 0x78,
-};
-
-static final BitmapCharRec ch208 = new BitmapCharRec(7,8,0,0,8,ch208data);
-
-/* char: 0xcf */
-
-static final byte[] ch207data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch207 = new BitmapCharRec(3,10,0,0,3,ch207data);
-
-/* char: 0xce */
-
-static final byte[] ch206data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch206 = new BitmapCharRec(3,11,0,0,3,ch206data);
-
-/* char: 0xcd */
-
-static final byte[] ch205data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch205 = new BitmapCharRec(2,11,-1,0,3,ch205data);
-
-/* char: 0xcc */
-
-static final byte[] ch204data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch204 = new BitmapCharRec(2,11,0,0,3,ch204data);
-
-/* char: 0xcb */
-
-static final byte[] ch203data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch203 = new BitmapCharRec(5,10,-1,0,7,ch203data);
-
-/* char: 0xca */
-
-static final byte[] ch202data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch202 = new BitmapCharRec(5,11,-1,0,7,ch202data);
-
-/* char: 0xc9 */
-
-static final byte[] ch201data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch201 = new BitmapCharRec(5,11,-1,0,7,ch201data);
-
-/* char: 0xc8 */
-
-static final byte[] ch200data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch200 = new BitmapCharRec(5,11,-1,0,7,ch200data);
-
-/* char: 0xc7 */
-
-static final byte[] ch199data = {
-(byte) 0x30,(byte) 0x10,(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch199 = new BitmapCharRec(6,10,-1,2,8,ch199data);
-
-/* char: 0xc6 */
-
-static final byte[] ch198data = {
-(byte) 0x8f,(byte) 0x80,(byte) 0x88,(byte) 0x0,(byte) 0x78,(byte) 0x0,(byte) 0x48,(byte) 0x0,(byte) 0x2f,(byte) 0x80,(byte) 0x28,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x1f,(byte) 0x80,
-};
-
-static final BitmapCharRec ch198 = new BitmapCharRec(9,8,0,0,10,ch198data);
-
-/* char: 0xc5 */
-
-static final byte[] ch197data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch197 = new BitmapCharRec(7,11,0,0,7,ch197data);
-
-/* char: 0xc4 */
-
-static final byte[] ch196data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x28,
-};
-
-static final BitmapCharRec ch196 = new BitmapCharRec(7,10,0,0,7,ch196data);
-
-/* char: 0xc3 */
-
-static final byte[] ch195data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x28,(byte) 0x14,
-};
-
-static final BitmapCharRec ch195 = new BitmapCharRec(7,11,0,0,7,ch195data);
-
-/* char: 0xc2 */
-
-static final byte[] ch194data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch194 = new BitmapCharRec(7,11,0,0,7,ch194data);
-
-/* char: 0xc1 */
-
-static final byte[] ch193data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch193 = new BitmapCharRec(7,11,0,0,7,ch193data);
-
-/* char: 0xc0 */
-
-static final byte[] ch192data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch192 = new BitmapCharRec(7,11,0,0,7,ch192data);
-
-/* char: 0xbf */
-
-static final byte[] ch191data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch191 = new BitmapCharRec(4,8,-1,2,6,ch191data);
-
-/* char: 0xbe */
-
-static final byte[] ch190data = {
-(byte) 0x21,(byte) 0x0,(byte) 0x17,(byte) 0x80,(byte) 0x13,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0xc8,(byte) 0x0,(byte) 0x24,(byte) 0x0,(byte) 0x44,(byte) 0x0,(byte) 0xe2,(byte) 0x0,
-};
-
-static final BitmapCharRec ch190 = new BitmapCharRec(9,8,0,0,9,ch190data);
-
-/* char: 0xbd */
-
-static final byte[] ch189data = {
-(byte) 0x27,(byte) 0x12,(byte) 0x15,(byte) 0xb,(byte) 0x48,(byte) 0x44,(byte) 0xc4,(byte) 0x42,
-};
-
-static final BitmapCharRec ch189 = new BitmapCharRec(8,8,0,0,9,ch189data);
-
-/* char: 0xbc */
-
-static final byte[] ch188data = {
-(byte) 0x21,(byte) 0x0,(byte) 0x17,(byte) 0x80,(byte) 0x13,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x48,(byte) 0x0,(byte) 0x44,(byte) 0x0,(byte) 0xc4,(byte) 0x0,(byte) 0x42,(byte) 0x0,
-};
-
-static final BitmapCharRec ch188 = new BitmapCharRec(9,8,0,0,9,ch188data);
-
-/* char: 0xbb */
-
-static final byte[] ch187data = {
-(byte) 0xa0,(byte) 0x50,(byte) 0x28,(byte) 0x50,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch187 = new BitmapCharRec(5,5,0,0,6,ch187data);
-
-/* char: 0xba */
-
-static final byte[] ch186data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xe0,(byte) 0xa0,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch186 = new BitmapCharRec(3,5,0,-3,4,ch186data);
-
-/* char: 0xb9 */
-
-static final byte[] ch185data = {
-(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch185 = new BitmapCharRec(2,4,0,-3,3,ch185data);
-
-/* char: 0xb8 */
-
-static final byte[] ch184data = {
-(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch184 = new BitmapCharRec(2,2,0,2,3,ch184data);
-
-/* char: 0xb7 */
-
-static final byte[] ch183data = {
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch183 = new BitmapCharRec(2,1,0,-3,3,ch183data);
-
-/* char: 0xb6 */
-
-static final byte[] ch182data = {
-(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x68,(byte) 0xe8,(byte) 0xe8,(byte) 0xe8,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch182 = new BitmapCharRec(6,10,0,2,6,ch182data);
-
-/* char: 0xb5 */
-
-static final byte[] ch181data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,
-};
-
-static final BitmapCharRec ch181 = new BitmapCharRec(4,8,0,2,5,ch181data);
-
-/* char: 0xb4 */
-
-static final byte[] ch180data = {
-(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch180 = new BitmapCharRec(2,2,0,-6,3,ch180data);
-
-/* char: 0xb3 */
-
-static final byte[] ch179data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch179 = new BitmapCharRec(3,4,0,-3,3,ch179data);
-
-/* char: 0xb2 */
-
-static final byte[] ch178data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0xa0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch178 = new BitmapCharRec(3,4,0,-3,3,ch178data);
-
-/* char: 0xb1 */
-
-static final byte[] ch177data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch177 = new BitmapCharRec(5,7,0,0,6,ch177data);
-
-/* char: 0xb0 */
-
-static final byte[] ch176data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch176 = new BitmapCharRec(4,4,0,-3,4,ch176data);
-
-/* char: 0xaf */
-
-static final byte[] ch175data = {
-(byte) 0xe0,
-};
-
-static final BitmapCharRec ch175 = new BitmapCharRec(3,1,0,-7,3,ch175data);
-
-/* char: 0xae */
-
-static final byte[] ch174data = {
-(byte) 0x38,(byte) 0x44,(byte) 0xaa,(byte) 0xb2,(byte) 0xba,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch174 = new BitmapCharRec(7,7,-1,0,9,ch174data);
-
-/* char: 0xad */
-
-static final byte[] ch173data = {
-(byte) 0xe0,
-};
-
-static final BitmapCharRec ch173 = new BitmapCharRec(3,1,0,-3,4,ch173data);
-
-/* char: 0xac */
-
-static final byte[] ch172data = {
-(byte) 0x8,(byte) 0x8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch172 = new BitmapCharRec(5,3,-1,-2,7,ch172data);
-
-/* char: 0xab */
-
-static final byte[] ch171data = {
-(byte) 0x28,(byte) 0x50,(byte) 0xa0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch171 = new BitmapCharRec(5,5,0,0,6,ch171data);
-
-/* char: 0xaa */
-
-static final byte[] ch170data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xa0,(byte) 0x20,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch170 = new BitmapCharRec(3,5,0,-3,4,ch170data);
-
-/* char: 0xa9 */
-
-static final byte[] ch169data = {
-(byte) 0x38,(byte) 0x44,(byte) 0x9a,(byte) 0xa2,(byte) 0x9a,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch169 = new BitmapCharRec(7,7,-1,0,9,ch169data);
-
-/* char: 0xa8 */
-
-static final byte[] ch168data = {
-(byte) 0xa0,
-};
-
-static final BitmapCharRec ch168 = new BitmapCharRec(3,1,0,-7,3,ch168data);
-
-/* char: 0xa7 */
-
-static final byte[] ch167data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x18,(byte) 0x70,(byte) 0xc8,(byte) 0x98,(byte) 0x70,(byte) 0xc0,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch167 = new BitmapCharRec(5,10,0,2,6,ch167data);
-
-/* char: 0xa6 */
-
-static final byte[] ch166data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch166 = new BitmapCharRec(1,10,-1,2,3,ch166data);
-
-/* char: 0xa5 */
-
-static final byte[] ch165data = {
-(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0xf8,(byte) 0x50,(byte) 0x50,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch165 = new BitmapCharRec(5,8,0,0,6,ch165data);
-
-/* char: 0xa4 */
-
-static final byte[] ch164data = {
-(byte) 0x90,(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x90,
-};
-
-static final BitmapCharRec ch164 = new BitmapCharRec(4,6,0,-1,5,ch164data);
-
-/* char: 0xa3 */
-
-static final byte[] ch163data = {
-(byte) 0xb0,(byte) 0x48,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch163 = new BitmapCharRec(5,8,0,0,6,ch163data);
-
-/* char: 0xa2 */
-
-static final byte[] ch162data = {
-(byte) 0x40,(byte) 0x70,(byte) 0xa8,(byte) 0xa0,(byte) 0xa0,(byte) 0xa8,(byte) 0x70,(byte) 0x10,
-};
-
-static final BitmapCharRec ch162 = new BitmapCharRec(5,8,0,1,6,ch162data);
-
-/* char: 0xa1 */
-
-static final byte[] ch161data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch161 = new BitmapCharRec(1,8,-1,2,3,ch161data);
-
-/* char: 0xa0 */
-
-static final BitmapCharRec ch160 = new BitmapCharRec(0,0,0,0,3,null);
-
-/* char: 0x7e '~' */
-
-static final byte[] ch126data = {
-(byte) 0x98,(byte) 0x64,
-};
-
-static final BitmapCharRec ch126 = new BitmapCharRec(6,2,0,-3,7,ch126data);
-
-/* char: 0x7d '}' */
-
-static final byte[] ch125data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch125 = new BitmapCharRec(3,10,0,2,3,ch125data);
-
-/* char: 0x7c '|' */
-
-static final byte[] ch124data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch124 = new BitmapCharRec(1,10,-1,2,3,ch124data);
-
-/* char: 0x7b '{' */
-
-static final byte[] ch123data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch123 = new BitmapCharRec(3,10,0,2,3,ch123data);
-
-/* char: 0x7a 'z' */
-
-static final byte[] ch122data = {
-(byte) 0xf0,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch122 = new BitmapCharRec(4,6,0,0,5,ch122data);
-
-/* char: 0x79 'y' */
-
-static final byte[] ch121data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x60,(byte) 0xa0,(byte) 0xa0,(byte) 0x90,(byte) 0x90,
-};
-
-static final BitmapCharRec ch121 = new BitmapCharRec(4,8,0,2,5,ch121data);
-
-/* char: 0x78 'x' */
-
-static final byte[] ch120data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x50,(byte) 0x20,(byte) 0x50,(byte) 0x88,
-};
-
-static final BitmapCharRec ch120 = new BitmapCharRec(5,6,0,0,6,ch120data);
-
-/* char: 0x77 'w' */
-
-static final byte[] ch119data = {
-(byte) 0x28,(byte) 0x28,(byte) 0x54,(byte) 0x54,(byte) 0x92,(byte) 0x92,
-};
-
-static final BitmapCharRec ch119 = new BitmapCharRec(7,6,0,0,8,ch119data);
-
-/* char: 0x76 'v' */
-
-static final byte[] ch118data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x50,(byte) 0x50,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch118 = new BitmapCharRec(5,6,0,0,6,ch118data);
-
-/* char: 0x75 'u' */
-
-static final byte[] ch117data = {
-(byte) 0x70,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,
-};
-
-static final BitmapCharRec ch117 = new BitmapCharRec(4,6,0,0,5,ch117data);
-
-/* char: 0x74 't' */
-
-static final byte[] ch116data = {
-(byte) 0x60,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x40,
-};
-
-static final BitmapCharRec ch116 = new BitmapCharRec(3,8,0,0,4,ch116data);
-
-/* char: 0x73 's' */
-
-static final byte[] ch115data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x10,(byte) 0x60,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch115 = new BitmapCharRec(4,6,0,0,5,ch115data);
-
-/* char: 0x72 'r' */
-
-static final byte[] ch114data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xc0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch114 = new BitmapCharRec(3,6,0,0,4,ch114data);
-
-/* char: 0x71 'q' */
-
-static final byte[] ch113data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x98,(byte) 0x68,
-};
-
-static final BitmapCharRec ch113 = new BitmapCharRec(5,8,0,2,6,ch113data);
-
-/* char: 0x70 'p' */
-
-static final byte[] ch112data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xb0,(byte) 0xc8,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,
-};
-
-static final BitmapCharRec ch112 = new BitmapCharRec(5,8,0,2,6,ch112data);
-
-/* char: 0x6f 'o' */
-
-static final byte[] ch111data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch111 = new BitmapCharRec(5,6,0,0,6,ch111data);
-
-/* char: 0x6e 'n' */
-
-static final byte[] ch110data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,
-};
-
-static final BitmapCharRec ch110 = new BitmapCharRec(5,6,0,0,6,ch110data);
-
-/* char: 0x6d 'm' */
-
-static final byte[] ch109data = {
-(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0xec,
-};
-
-static final BitmapCharRec ch109 = new BitmapCharRec(7,6,0,0,8,ch109data);
-
-/* char: 0x6c 'l' */
-
-static final byte[] ch108data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch108 = new BitmapCharRec(1,8,0,0,2,ch108data);
-
-/* char: 0x6b 'k' */
-
-static final byte[] ch107data = {
-(byte) 0x90,(byte) 0x90,(byte) 0xa0,(byte) 0xc0,(byte) 0xa0,(byte) 0x90,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch107 = new BitmapCharRec(4,8,0,0,5,ch107data);
-
-/* char: 0x6a 'j' */
-
-static final byte[] ch106data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch106 = new BitmapCharRec(1,9,0,1,2,ch106data);
-
-/* char: 0x69 'i' */
-
-static final byte[] ch105data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch105 = new BitmapCharRec(1,8,0,0,2,ch105data);
-
-/* char: 0x68 'h' */
-
-static final byte[] ch104data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch104 = new BitmapCharRec(5,8,0,0,6,ch104data);
-
-/* char: 0x67 'g' */
-
-static final byte[] ch103data = {
-(byte) 0x70,(byte) 0x8,(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x98,(byte) 0x68,
-};
-
-static final BitmapCharRec ch103 = new BitmapCharRec(5,8,0,2,6,ch103data);
-
-/* char: 0x66 'f' */
-
-static final byte[] ch102data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x30,
-};
-
-static final BitmapCharRec ch102 = new BitmapCharRec(4,8,0,0,4,ch102data);
-
-/* char: 0x65 'e' */
-
-static final byte[] ch101data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0xf0,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch101 = new BitmapCharRec(4,6,0,0,5,ch101data);
-
-/* char: 0x64 'd' */
-
-static final byte[] ch100data = {
-(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x98,(byte) 0x68,(byte) 0x8,(byte) 0x8,
-};
-
-static final BitmapCharRec ch100 = new BitmapCharRec(5,8,0,0,6,ch100data);
-
-/* char: 0x63 'c' */
-
-static final byte[] ch99data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x80,(byte) 0x80,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch99 = new BitmapCharRec(4,6,0,0,5,ch99data);
-
-/* char: 0x62 'b' */
-
-static final byte[] ch98data = {
-(byte) 0xb0,(byte) 0xc8,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch98 = new BitmapCharRec(5,8,0,0,6,ch98data);
-
-/* char: 0x61 'a' */
-
-static final byte[] ch97data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch97 = new BitmapCharRec(5,6,0,0,5,ch97data);
-
-/* char: 0x60 '`' */
-
-static final byte[] ch96data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch96 = new BitmapCharRec(2,3,0,-5,3,ch96data);
-
-/* char: 0x5f '_' */
-
-static final byte[] ch95data = {
-(byte) 0xfc,
-};
-
-static final BitmapCharRec ch95 = new BitmapCharRec(6,1,0,2,6,ch95data);
-
-/* char: 0x5e '^' */
-
-static final byte[] ch94data = {
-(byte) 0x88,(byte) 0x50,(byte) 0x50,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch94 = new BitmapCharRec(5,5,0,-3,6,ch94data);
-
-/* char: 0x5d ']' */
-
-static final byte[] ch93data = {
-(byte) 0xc0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch93 = new BitmapCharRec(2,10,0,2,3,ch93data);
-
-/* char: 0x5c '\' */
-
-static final byte[] ch92data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch92 = new BitmapCharRec(3,8,0,0,3,ch92data);
-
-/* char: 0x5b '[' */
-
-static final byte[] ch91data = {
-(byte) 0xc0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch91 = new BitmapCharRec(2,10,-1,2,3,ch91data);
-
-/* char: 0x5a 'Z' */
-
-static final byte[] ch90data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch90 = new BitmapCharRec(5,8,-1,0,7,ch90data);
-
-/* char: 0x59 'Y' */
-
-static final byte[] ch89data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x82,
-};
-
-static final BitmapCharRec ch89 = new BitmapCharRec(7,8,0,0,7,ch89data);
-
-/* char: 0x58 'X' */
-
-static final byte[] ch88data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x50,(byte) 0x50,(byte) 0x20,(byte) 0x50,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch88 = new BitmapCharRec(5,8,-1,0,7,ch88data);
-
-/* char: 0x57 'W' */
-
-static final byte[] ch87data = {
-(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0x49,(byte) 0x0,(byte) 0x49,(byte) 0x0,(byte) 0x88,(byte) 0x80,(byte) 0x88,(byte) 0x80,
-};
-
-static final BitmapCharRec ch87 = new BitmapCharRec(9,8,0,0,9,ch87data);
-
-/* char: 0x56 'V' */
-
-static final byte[] ch86data = {
-(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch86 = new BitmapCharRec(7,8,0,0,7,ch86data);
-
-/* char: 0x55 'U' */
-
-static final byte[] ch85data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch85 = new BitmapCharRec(6,8,-1,0,8,ch85data);
-
-/* char: 0x54 'T' */
-
-static final byte[] ch84data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch84 = new BitmapCharRec(5,8,0,0,5,ch84data);
-
-/* char: 0x53 'S' */
-
-static final byte[] ch83data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x8,(byte) 0x70,(byte) 0x80,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch83 = new BitmapCharRec(5,8,-1,0,7,ch83data);
-
-/* char: 0x52 'R' */
-
-static final byte[] ch82data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xf0,(byte) 0x88,(byte) 0x88,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch82 = new BitmapCharRec(5,8,-1,0,7,ch82data);
-
-/* char: 0x51 'Q' */
-
-static final byte[] ch81data = {
-(byte) 0x2,(byte) 0x7c,(byte) 0x8c,(byte) 0x94,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch81 = new BitmapCharRec(7,9,-1,1,8,ch81data);
-
-/* char: 0x50 'P' */
-
-static final byte[] ch80data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x88,(byte) 0x88,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch80 = new BitmapCharRec(5,8,-1,0,7,ch80data);
-
-/* char: 0x4f 'O' */
-
-static final byte[] ch79data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch79 = new BitmapCharRec(6,8,-1,0,8,ch79data);
-
-/* char: 0x4e 'N' */
-
-static final byte[] ch78data = {
-(byte) 0x8c,(byte) 0x8c,(byte) 0x94,(byte) 0x94,(byte) 0xa4,(byte) 0xa4,(byte) 0xc4,(byte) 0xc4,
-};
-
-static final BitmapCharRec ch78 = new BitmapCharRec(6,8,-1,0,8,ch78data);
-
-/* char: 0x4d 'M' */
-
-static final byte[] ch77data = {
-(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0xaa,(byte) 0xaa,(byte) 0xc6,(byte) 0xc6,(byte) 0x82,
-};
-
-static final BitmapCharRec ch77 = new BitmapCharRec(7,8,-1,0,9,ch77data);
-
-/* char: 0x4c 'L' */
-
-static final byte[] ch76data = {
-(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch76 = new BitmapCharRec(4,8,-1,0,6,ch76data);
-
-/* char: 0x4b 'K' */
-
-static final byte[] ch75data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x90,(byte) 0x90,(byte) 0xe0,(byte) 0xa0,(byte) 0x90,(byte) 0x88,
-};
-
-static final BitmapCharRec ch75 = new BitmapCharRec(5,8,-1,0,7,ch75data);
-
-/* char: 0x4a 'J' */
-
-static final byte[] ch74data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch74 = new BitmapCharRec(4,8,0,0,5,ch74data);
-
-/* char: 0x49 'I' */
-
-static final byte[] ch73data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch73 = new BitmapCharRec(1,8,-1,0,3,ch73data);
-
-/* char: 0x48 'H' */
-
-static final byte[] ch72data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xfc,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch72 = new BitmapCharRec(6,8,-1,0,8,ch72data);
-
-/* char: 0x47 'G' */
-
-static final byte[] ch71data = {
-(byte) 0x74,(byte) 0x8c,(byte) 0x84,(byte) 0x8c,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch71 = new BitmapCharRec(6,8,-1,0,8,ch71data);
-
-/* char: 0x46 'F' */
-
-static final byte[] ch70data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch70 = new BitmapCharRec(5,8,-1,0,6,ch70data);
-
-/* char: 0x45 'E' */
-
-static final byte[] ch69data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch69 = new BitmapCharRec(5,8,-1,0,7,ch69data);
-
-/* char: 0x44 'D' */
-
-static final byte[] ch68data = {
-(byte) 0xf0,(byte) 0x88,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x88,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch68 = new BitmapCharRec(6,8,-1,0,8,ch68data);
-
-/* char: 0x43 'C' */
-
-static final byte[] ch67data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch67 = new BitmapCharRec(6,8,-1,0,8,ch67data);
-
-/* char: 0x42 'B' */
-
-static final byte[] ch66data = {
-(byte) 0xf0,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xf0,(byte) 0x88,(byte) 0x88,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch66 = new BitmapCharRec(5,8,-1,0,7,ch66data);
-
-/* char: 0x41 'A' */
-
-static final byte[] ch65data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch65 = new BitmapCharRec(7,8,0,0,7,ch65data);
-
-/* char: 0x40 '@' */
-
-static final byte[] ch64data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x40,(byte) 0x0,(byte) 0x9b,(byte) 0x0,(byte) 0xa4,(byte) 0x80,(byte) 0xa4,(byte) 0x80,(byte) 0xa2,(byte) 0x40,(byte) 0x92,(byte) 0x40,(byte) 0x4d,(byte) 0x40,
-(byte) 0x20,(byte) 0x80,(byte) 0x1f,(byte) 0x0,
-};
-
-static final BitmapCharRec ch64 = new BitmapCharRec(10,10,0,2,11,ch64data);
-
-/* char: 0x3f '?' */
-
-static final byte[] ch63data = {
-(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch63 = new BitmapCharRec(4,8,-1,0,6,ch63data);
-
-/* char: 0x3e '>' */
-
-static final byte[] ch62data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch62 = new BitmapCharRec(3,5,-1,-1,6,ch62data);
-
-/* char: 0x3d '=' */
-
-static final byte[] ch61data = {
-(byte) 0xf0,(byte) 0x0,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch61 = new BitmapCharRec(4,3,0,-2,5,ch61data);
-
-/* char: 0x3c '<' */
-
-static final byte[] ch60data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x80,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch60 = new BitmapCharRec(3,5,-1,-1,6,ch60data);
-
-/* char: 0x3b ';' */
-
-static final byte[] ch59data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch59 = new BitmapCharRec(2,8,0,2,3,ch59data);
-
-/* char: 0x3a ':' */
-
-static final byte[] ch58data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch58 = new BitmapCharRec(1,6,-1,0,3,ch58data);
-
-/* char: 0x39 '9' */
-
-static final byte[] ch57data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch57 = new BitmapCharRec(5,8,0,0,6,ch57data);
-
-/* char: 0x38 '8' */
-
-static final byte[] ch56data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch56 = new BitmapCharRec(5,8,0,0,6,ch56data);
-
-/* char: 0x37 '7' */
-
-static final byte[] ch55data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch55 = new BitmapCharRec(5,8,0,0,6,ch55data);
-
-/* char: 0x36 '6' */
-
-static final byte[] ch54data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch54 = new BitmapCharRec(5,8,0,0,6,ch54data);
-
-/* char: 0x35 '5' */
-
-static final byte[] ch53data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch53 = new BitmapCharRec(5,8,0,0,6,ch53data);
-
-/* char: 0x34 '4' */
-
-static final byte[] ch52data = {
-(byte) 0x10,(byte) 0x10,(byte) 0xf8,(byte) 0x90,(byte) 0x50,(byte) 0x50,(byte) 0x30,(byte) 0x10,
-};
-
-static final BitmapCharRec ch52 = new BitmapCharRec(5,8,0,0,6,ch52data);
-
-/* char: 0x33 '3' */
-
-static final byte[] ch51data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch51 = new BitmapCharRec(5,8,0,0,6,ch51data);
-
-/* char: 0x32 '2' */
-
-static final byte[] ch50data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x40,(byte) 0x30,(byte) 0x8,(byte) 0x8,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch50 = new BitmapCharRec(5,8,0,0,6,ch50data);
-
-/* char: 0x31 '1' */
-
-static final byte[] ch49data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch49 = new BitmapCharRec(2,8,-1,0,6,ch49data);
-
-/* char: 0x30 '0' */
-
-static final byte[] ch48data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch48 = new BitmapCharRec(5,8,0,0,6,ch48data);
-
-/* char: 0x2f '/' */
-
-static final byte[] ch47data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch47 = new BitmapCharRec(3,8,0,0,3,ch47data);
-
-/* char: 0x2e '.' */
-
-static final byte[] ch46data = {
-(byte) 0x80,
-};
-
-static final BitmapCharRec ch46 = new BitmapCharRec(1,1,-1,0,3,ch46data);
-
-/* char: 0x2d '-' */
-
-static final byte[] ch45data = {
-(byte) 0xf8,
-};
-
-static final BitmapCharRec ch45 = new BitmapCharRec(5,1,-1,-3,7,ch45data);
-
-/* char: 0x2c ',' */
-
-static final byte[] ch44data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,
-};
-
-static final BitmapCharRec ch44 = new BitmapCharRec(2,3,0,2,3,ch44data);
-
-/* char: 0x2b '+' */
-
-static final byte[] ch43data = {
-(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch43 = new BitmapCharRec(5,5,0,-1,6,ch43data);
-
-/* char: 0x2a '*' */
-
-static final byte[] ch42data = {
-(byte) 0xa0,(byte) 0x40,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch42 = new BitmapCharRec(3,3,0,-5,4,ch42data);
-
-/* char: 0x29 ')' */
-
-static final byte[] ch41data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch41 = new BitmapCharRec(3,10,-1,2,4,ch41data);
-
-/* char: 0x28 '(' */
-
-static final byte[] ch40data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch40 = new BitmapCharRec(3,10,0,2,4,ch40data);
-
-/* char: 0x27 ''' */
-
-static final byte[] ch39data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,
-};
-
-static final BitmapCharRec ch39 = new BitmapCharRec(2,3,-1,-5,3,ch39data);
-
-/* char: 0x26 '&' */
-
-static final byte[] ch38data = {
-(byte) 0x64,(byte) 0x98,(byte) 0x98,(byte) 0xa4,(byte) 0x60,(byte) 0x50,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch38 = new BitmapCharRec(6,8,-1,0,8,ch38data);
-
-/* char: 0x25 '%' */
-
-static final byte[] ch37data = {
-(byte) 0x26,(byte) 0x29,(byte) 0x16,(byte) 0x10,(byte) 0x8,(byte) 0x68,(byte) 0x94,(byte) 0x64,
-};
-
-static final BitmapCharRec ch37 = new BitmapCharRec(8,8,0,0,9,ch37data);
-
-/* char: 0x24 '$' */
-
-static final byte[] ch36data = {
-(byte) 0x20,(byte) 0x70,(byte) 0xa8,(byte) 0x28,(byte) 0x70,(byte) 0xa0,(byte) 0xa8,(byte) 0x70,(byte) 0x20,
-};
-
-static final BitmapCharRec ch36 = new BitmapCharRec(5,9,0,1,6,ch36data);
-
-/* char: 0x23 '#' */
-
-static final byte[] ch35data = {
-(byte) 0x50,(byte) 0x50,(byte) 0xf8,(byte) 0x28,(byte) 0x7c,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch35 = new BitmapCharRec(6,7,0,0,6,ch35data);
-
-/* char: 0x22 '"' */
-
-static final byte[] ch34data = {
-(byte) 0xa0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch34 = new BitmapCharRec(3,2,-1,-6,4,ch34data);
-
-/* char: 0x21 '!' */
-
-static final byte[] ch33data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch33 = new BitmapCharRec(1,8,-1,0,3,ch33data);
-
-/* char: 0x20 ' ' */
-
-static final BitmapCharRec ch32 = new BitmapCharRec(0,0,0,0,3,null);
-
-static final BitmapCharRec[] chars = {
-ch32,
-ch33,
-ch34,
-ch35,
-ch36,
-ch37,
-ch38,
-ch39,
-ch40,
-ch41,
-ch42,
-ch43,
-ch44,
-ch45,
-ch46,
-ch47,
-ch48,
-ch49,
-ch50,
-ch51,
-ch52,
-ch53,
-ch54,
-ch55,
-ch56,
-ch57,
-ch58,
-ch59,
-ch60,
-ch61,
-ch62,
-ch63,
-ch64,
-ch65,
-ch66,
-ch67,
-ch68,
-ch69,
-ch70,
-ch71,
-ch72,
-ch73,
-ch74,
-ch75,
-ch76,
-ch77,
-ch78,
-ch79,
-ch80,
-ch81,
-ch82,
-ch83,
-ch84,
-ch85,
-ch86,
-ch87,
-ch88,
-ch89,
-ch90,
-ch91,
-ch92,
-ch93,
-ch94,
-ch95,
-ch96,
-ch97,
-ch98,
-ch99,
-ch100,
-ch101,
-ch102,
-ch103,
-ch104,
-ch105,
-ch106,
-ch107,
-ch108,
-ch109,
-ch110,
-ch111,
-ch112,
-ch113,
-ch114,
-ch115,
-ch116,
-ch117,
-ch118,
-ch119,
-ch120,
-ch121,
-ch122,
-ch123,
-ch124,
-ch125,
-ch126,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-ch160,
-ch161,
-ch162,
-ch163,
-ch164,
-ch165,
-ch166,
-ch167,
-ch168,
-ch169,
-ch170,
-ch171,
-ch172,
-ch173,
-ch174,
-ch175,
-ch176,
-ch177,
-ch178,
-ch179,
-ch180,
-ch181,
-ch182,
-ch183,
-ch184,
-ch185,
-ch186,
-ch187,
-ch188,
-ch189,
-ch190,
-ch191,
-ch192,
-ch193,
-ch194,
-ch195,
-ch196,
-ch197,
-ch198,
-ch199,
-ch200,
-ch201,
-ch202,
-ch203,
-ch204,
-ch205,
-ch206,
-ch207,
-ch208,
-ch209,
-ch210,
-ch211,
-ch212,
-ch213,
-ch214,
-ch215,
-ch216,
-ch217,
-ch218,
-ch219,
-ch220,
-ch221,
-ch222,
-ch223,
-ch224,
-ch225,
-ch226,
-ch227,
-ch228,
-ch229,
-ch230,
-ch231,
-ch232,
-ch233,
-ch234,
-ch235,
-ch236,
-ch237,
-ch238,
-ch239,
-ch240,
-ch241,
-ch242,
-ch243,
-ch244,
-ch245,
-ch246,
-ch247,
-ch248,
-ch249,
-ch250,
-ch251,
-ch252,
-ch253,
-ch254,
-ch255,
-};
-
- static final BitmapFontRec glutBitmapHelvetica10 = new BitmapFontRec("-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1",
- 224,
- 32,
- chars);
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica12.java b/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica12.java
deleted file mode 100644
index 97a3fffbf..000000000
--- a/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica12.java
+++ /dev/null
@@ -1,1808 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTBitmapHelvetica12 {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-/* char: 0xff */
-
-static final byte[] ch255data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x30,(byte) 0x50,(byte) 0x50,(byte) 0x48,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch255 = new BitmapCharRec(5,12,-1,3,7,ch255data);
-
-/* char: 0xfe */
-
-static final byte[] ch254data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xb0,(byte) 0xc8,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch254 = new BitmapCharRec(5,12,-1,3,7,ch254data);
-
-/* char: 0xfd */
-
-static final byte[] ch253data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x50,(byte) 0x50,(byte) 0x90,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch253 = new BitmapCharRec(5,13,-1,3,7,ch253data);
-
-/* char: 0xfc */
-
-static final byte[] ch252data = {
-(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch252 = new BitmapCharRec(5,9,-1,0,7,ch252data);
-
-/* char: 0xfb */
-
-static final byte[] ch251data = {
-(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch251 = new BitmapCharRec(5,10,-1,0,7,ch251data);
-
-/* char: 0xfa */
-
-static final byte[] ch250data = {
-(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch250 = new BitmapCharRec(5,10,-1,0,7,ch250data);
-
-/* char: 0xf9 */
-
-static final byte[] ch249data = {
-(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch249 = new BitmapCharRec(5,10,-1,0,7,ch249data);
-
-/* char: 0xf8 */
-
-static final byte[] ch248data = {
-(byte) 0xb8,(byte) 0x44,(byte) 0x64,(byte) 0x54,(byte) 0x4c,(byte) 0x44,(byte) 0x3a,
-};
-
-static final BitmapCharRec ch248 = new BitmapCharRec(7,7,0,0,7,ch248data);
-
-/* char: 0xf7 */
-
-static final byte[] ch247data = {
-(byte) 0x20,(byte) 0x0,(byte) 0xf8,(byte) 0x0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch247 = new BitmapCharRec(5,5,-1,-1,7,ch247data);
-
-/* char: 0xf6 */
-
-static final byte[] ch246data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch246 = new BitmapCharRec(5,9,-1,0,7,ch246data);
-
-/* char: 0xf5 */
-
-static final byte[] ch245data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch245 = new BitmapCharRec(5,10,-1,0,7,ch245data);
-
-/* char: 0xf4 */
-
-static final byte[] ch244data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch244 = new BitmapCharRec(5,10,-1,0,7,ch244data);
-
-/* char: 0xf3 */
-
-static final byte[] ch243data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch243 = new BitmapCharRec(5,10,-1,0,7,ch243data);
-
-/* char: 0xf2 */
-
-static final byte[] ch242data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch242 = new BitmapCharRec(5,10,-1,0,7,ch242data);
-
-/* char: 0xf1 */
-
-static final byte[] ch241data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch241 = new BitmapCharRec(5,10,-1,0,7,ch241data);
-
-/* char: 0xf0 */
-
-static final byte[] ch240data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x50,(byte) 0x30,(byte) 0x68,
-};
-
-static final BitmapCharRec ch240 = new BitmapCharRec(5,10,-1,0,7,ch240data);
-
-/* char: 0xef */
-
-static final byte[] ch239data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch239 = new BitmapCharRec(3,9,0,0,3,ch239data);
-
-/* char: 0xee */
-
-static final byte[] ch238data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch238 = new BitmapCharRec(3,10,0,0,3,ch238data);
-
-/* char: 0xed */
-
-static final byte[] ch237data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch237 = new BitmapCharRec(2,10,-1,0,3,ch237data);
-
-/* char: 0xec */
-
-static final byte[] ch236data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch236 = new BitmapCharRec(2,10,0,0,3,ch236data);
-
-/* char: 0xeb */
-
-static final byte[] ch235data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x80,(byte) 0xf8,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch235 = new BitmapCharRec(5,9,-1,0,7,ch235data);
-
-/* char: 0xea */
-
-static final byte[] ch234data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x80,(byte) 0xf8,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch234 = new BitmapCharRec(5,10,-1,0,7,ch234data);
-
-/* char: 0xe9 */
-
-static final byte[] ch233data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x80,(byte) 0xf8,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch233 = new BitmapCharRec(5,10,-1,0,7,ch233data);
-
-/* char: 0xe8 */
-
-static final byte[] ch232data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x80,(byte) 0xf8,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch232 = new BitmapCharRec(5,10,-1,0,7,ch232data);
-
-/* char: 0xe7 */
-
-static final byte[] ch231data = {
-(byte) 0x60,(byte) 0x10,(byte) 0x20,(byte) 0x70,(byte) 0x88,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch231 = new BitmapCharRec(5,10,-1,3,7,ch231data);
-
-/* char: 0xe6 */
-
-static final byte[] ch230data = {
-(byte) 0x77,(byte) 0x0,(byte) 0x88,(byte) 0x80,(byte) 0x88,(byte) 0x0,(byte) 0x7f,(byte) 0x80,(byte) 0x8,(byte) 0x80,(byte) 0x88,(byte) 0x80,(byte) 0x77,(byte) 0x0,
-};
-
-static final BitmapCharRec ch230 = new BitmapCharRec(9,7,-1,0,11,ch230data);
-
-/* char: 0xe5 */
-
-static final byte[] ch229data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x88,(byte) 0x70,(byte) 0x30,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch229 = new BitmapCharRec(6,10,-1,0,7,ch229data);
-
-/* char: 0xe4 */
-
-static final byte[] ch228data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch228 = new BitmapCharRec(6,9,-1,0,7,ch228data);
-
-/* char: 0xe3 */
-
-static final byte[] ch227data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch227 = new BitmapCharRec(6,10,-1,0,7,ch227data);
-
-/* char: 0xe2 */
-
-static final byte[] ch226data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch226 = new BitmapCharRec(6,10,-1,0,7,ch226data);
-
-/* char: 0xe1 */
-
-static final byte[] ch225data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch225 = new BitmapCharRec(6,10,-1,0,7,ch225data);
-
-/* char: 0xe0 */
-
-static final byte[] ch224data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x88,(byte) 0x70,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch224 = new BitmapCharRec(6,10,-1,0,7,ch224data);
-
-/* char: 0xdf */
-
-static final byte[] ch223data = {
-(byte) 0xb0,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xb0,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch223 = new BitmapCharRec(5,9,-1,0,7,ch223data);
-
-/* char: 0xde */
-
-static final byte[] ch222data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch222 = new BitmapCharRec(6,9,-1,0,8,ch222data);
-
-/* char: 0xdd */
-
-static final byte[] ch221data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x82,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch221 = new BitmapCharRec(7,12,-1,0,9,ch221data);
-
-/* char: 0xdc */
-
-static final byte[] ch220data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x48,
-};
-
-static final BitmapCharRec ch220 = new BitmapCharRec(6,11,-1,0,8,ch220data);
-
-/* char: 0xdb */
-
-static final byte[] ch219data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch219 = new BitmapCharRec(6,12,-1,0,8,ch219data);
-
-/* char: 0xda */
-
-static final byte[] ch218data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch218 = new BitmapCharRec(6,12,-1,0,8,ch218data);
-
-/* char: 0xd9 */
-
-static final byte[] ch217data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch217 = new BitmapCharRec(6,12,-1,0,8,ch217data);
-
-/* char: 0xd8 */
-
-static final byte[] ch216data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x5e,(byte) 0x0,(byte) 0x21,(byte) 0x0,(byte) 0x50,(byte) 0x80,(byte) 0x48,(byte) 0x80,(byte) 0x44,(byte) 0x80,(byte) 0x44,(byte) 0x80,(byte) 0x42,(byte) 0x80,
-(byte) 0x21,(byte) 0x0,(byte) 0x1e,(byte) 0x80,(byte) 0x0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch216 = new BitmapCharRec(10,11,0,1,10,ch216data);
-
-/* char: 0xd7 */
-
-static final byte[] ch215data = {
-(byte) 0x88,(byte) 0x50,(byte) 0x20,(byte) 0x50,(byte) 0x88,
-};
-
-static final BitmapCharRec ch215 = new BitmapCharRec(5,5,-1,-1,7,ch215data);
-
-/* char: 0xd6 */
-
-static final byte[] ch214data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x42,(byte) 0x3c,(byte) 0x0,(byte) 0x24,
-};
-
-static final BitmapCharRec ch214 = new BitmapCharRec(8,11,-1,0,10,ch214data);
-
-/* char: 0xd5 */
-
-static final byte[] ch213data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x42,(byte) 0x3c,(byte) 0x0,(byte) 0x28,(byte) 0x14,
-};
-
-static final BitmapCharRec ch213 = new BitmapCharRec(8,12,-1,0,10,ch213data);
-
-/* char: 0xd4 */
-
-static final byte[] ch212data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x42,(byte) 0x3c,(byte) 0x0,(byte) 0x14,(byte) 0x8,
-};
-
-static final BitmapCharRec ch212 = new BitmapCharRec(8,12,-1,0,10,ch212data);
-
-/* char: 0xd3 */
-
-static final byte[] ch211data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x42,(byte) 0x3c,(byte) 0x0,(byte) 0x8,(byte) 0x4,
-};
-
-static final BitmapCharRec ch211 = new BitmapCharRec(8,12,-1,0,10,ch211data);
-
-/* char: 0xd2 */
-
-static final byte[] ch210data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x42,(byte) 0x3c,(byte) 0x0,(byte) 0x8,(byte) 0x10,
-};
-
-static final BitmapCharRec ch210 = new BitmapCharRec(8,12,-1,0,10,ch210data);
-
-/* char: 0xd1 */
-
-static final byte[] ch209data = {
-(byte) 0x82,(byte) 0x86,(byte) 0x8a,(byte) 0x8a,(byte) 0x92,(byte) 0xa2,(byte) 0xa2,(byte) 0xc2,(byte) 0x82,(byte) 0x0,(byte) 0x28,(byte) 0x14,
-};
-
-static final BitmapCharRec ch209 = new BitmapCharRec(7,12,-1,0,9,ch209data);
-
-/* char: 0xd0 */
-
-static final byte[] ch208data = {
-(byte) 0x7c,(byte) 0x42,(byte) 0x41,(byte) 0x41,(byte) 0xf1,(byte) 0x41,(byte) 0x41,(byte) 0x42,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch208 = new BitmapCharRec(8,9,0,0,9,ch208data);
-
-/* char: 0xcf */
-
-static final byte[] ch207data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch207 = new BitmapCharRec(3,11,0,0,3,ch207data);
-
-/* char: 0xce */
-
-static final byte[] ch206data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch206 = new BitmapCharRec(3,12,0,0,3,ch206data);
-
-/* char: 0xcd */
-
-static final byte[] ch205data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch205 = new BitmapCharRec(2,12,-1,0,3,ch205data);
-
-/* char: 0xcc */
-
-static final byte[] ch204data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch204 = new BitmapCharRec(2,12,0,0,3,ch204data);
-
-/* char: 0xcb */
-
-static final byte[] ch203data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x28,
-};
-
-static final BitmapCharRec ch203 = new BitmapCharRec(6,11,-1,0,8,ch203data);
-
-/* char: 0xca */
-
-static final byte[] ch202data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch202 = new BitmapCharRec(6,12,-1,0,8,ch202data);
-
-/* char: 0xc9 */
-
-static final byte[] ch201data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch201 = new BitmapCharRec(6,12,-1,0,8,ch201data);
-
-/* char: 0xc8 */
-
-static final byte[] ch200data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch200 = new BitmapCharRec(6,12,-1,0,8,ch200data);
-
-/* char: 0xc7 */
-
-static final byte[] ch199data = {
-(byte) 0x30,(byte) 0x8,(byte) 0x8,(byte) 0x3c,(byte) 0x42,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch199 = new BitmapCharRec(7,12,-1,3,9,ch199data);
-
-/* char: 0xc6 */
-
-static final byte[] ch198data = {
-(byte) 0x8f,(byte) 0x80,(byte) 0x88,(byte) 0x0,(byte) 0x88,(byte) 0x0,(byte) 0x78,(byte) 0x0,(byte) 0x4f,(byte) 0x80,(byte) 0x48,(byte) 0x0,(byte) 0x28,(byte) 0x0,(byte) 0x28,(byte) 0x0,
-(byte) 0x1f,(byte) 0x80,
-};
-
-static final BitmapCharRec ch198 = new BitmapCharRec(9,9,-1,0,11,ch198data);
-
-/* char: 0xc5 */
-
-static final byte[] ch197data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch197 = new BitmapCharRec(7,12,-1,0,9,ch197data);
-
-/* char: 0xc4 */
-
-static final byte[] ch196data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x28,
-};
-
-static final BitmapCharRec ch196 = new BitmapCharRec(7,11,-1,0,9,ch196data);
-
-/* char: 0xc3 */
-
-static final byte[] ch195data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x28,(byte) 0x14,
-};
-
-static final BitmapCharRec ch195 = new BitmapCharRec(7,12,-1,0,9,ch195data);
-
-/* char: 0xc2 */
-
-static final byte[] ch194data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch194 = new BitmapCharRec(7,12,-1,0,9,ch194data);
-
-/* char: 0xc1 */
-
-static final byte[] ch193data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch193 = new BitmapCharRec(7,12,-1,0,9,ch193data);
-
-/* char: 0xc0 */
-
-static final byte[] ch192data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch192 = new BitmapCharRec(7,12,-1,0,9,ch192data);
-
-/* char: 0xbf */
-
-static final byte[] ch191data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch191 = new BitmapCharRec(5,9,-1,3,7,ch191data);
-
-/* char: 0xbe */
-
-static final byte[] ch190data = {
-(byte) 0x21,(byte) 0x0,(byte) 0x17,(byte) 0x80,(byte) 0x15,(byte) 0x0,(byte) 0xb,(byte) 0x0,(byte) 0xc9,(byte) 0x0,(byte) 0x24,(byte) 0x0,(byte) 0x44,(byte) 0x0,(byte) 0x22,(byte) 0x0,
-(byte) 0xe1,(byte) 0x0,
-};
-
-static final BitmapCharRec ch190 = new BitmapCharRec(9,9,0,0,10,ch190data);
-
-/* char: 0xbd */
-
-static final byte[] ch189data = {
-(byte) 0x47,(byte) 0x80,(byte) 0x22,(byte) 0x0,(byte) 0x11,(byte) 0x0,(byte) 0x14,(byte) 0x80,(byte) 0x4b,(byte) 0x0,(byte) 0x48,(byte) 0x0,(byte) 0x44,(byte) 0x0,(byte) 0xc2,(byte) 0x0,
-(byte) 0x41,(byte) 0x0,
-};
-
-static final BitmapCharRec ch189 = new BitmapCharRec(9,9,0,0,10,ch189data);
-
-/* char: 0xbc */
-
-static final byte[] ch188data = {
-(byte) 0x41,(byte) 0x0,(byte) 0x27,(byte) 0x80,(byte) 0x15,(byte) 0x0,(byte) 0x13,(byte) 0x0,(byte) 0x49,(byte) 0x0,(byte) 0x44,(byte) 0x0,(byte) 0x44,(byte) 0x0,(byte) 0xc2,(byte) 0x0,
-(byte) 0x41,(byte) 0x0,
-};
-
-static final BitmapCharRec ch188 = new BitmapCharRec(9,9,0,0,10,ch188data);
-
-/* char: 0xbb */
-
-static final byte[] ch187data = {
-(byte) 0xa0,(byte) 0x50,(byte) 0x28,(byte) 0x50,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch187 = new BitmapCharRec(5,5,-1,-1,7,ch187data);
-
-/* char: 0xba */
-
-static final byte[] ch186data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xe0,(byte) 0xa0,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch186 = new BitmapCharRec(3,5,-1,-4,5,ch186data);
-
-/* char: 0xb9 */
-
-static final byte[] ch185data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch185 = new BitmapCharRec(2,5,-1,-3,4,ch185data);
-
-/* char: 0xb8 */
-
-static final byte[] ch184data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch184 = new BitmapCharRec(3,4,0,3,3,ch184data);
-
-/* char: 0xb7 */
-
-static final byte[] ch183data = {
-(byte) 0x80,
-};
-
-static final BitmapCharRec ch183 = new BitmapCharRec(1,1,-1,-3,3,ch183data);
-
-/* char: 0xb6 */
-
-static final byte[] ch182data = {
-(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x68,(byte) 0xe8,(byte) 0xe8,(byte) 0xe8,(byte) 0x68,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch182 = new BitmapCharRec(6,12,0,3,7,ch182data);
-
-/* char: 0xb5 */
-
-static final byte[] ch181data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xe8,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch181 = new BitmapCharRec(5,10,-1,3,7,ch181data);
-
-/* char: 0xb4 */
-
-static final byte[] ch180data = {
-(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch180 = new BitmapCharRec(2,2,0,-8,2,ch180data);
-
-/* char: 0xb3 */
-
-static final byte[] ch179data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0x20,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch179 = new BitmapCharRec(3,5,0,-3,4,ch179data);
-
-/* char: 0xb2 */
-
-static final byte[] ch178data = {
-(byte) 0xf0,(byte) 0x40,(byte) 0x20,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch178 = new BitmapCharRec(4,5,0,-3,4,ch178data);
-
-/* char: 0xb1 */
-
-static final byte[] ch177data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch177 = new BitmapCharRec(5,7,-1,0,7,ch177data);
-
-/* char: 0xb0 */
-
-static final byte[] ch176data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch176 = new BitmapCharRec(4,4,0,-4,5,ch176data);
-
-/* char: 0xaf */
-
-static final byte[] ch175data = {
-(byte) 0xf0,
-};
-
-static final BitmapCharRec ch175 = new BitmapCharRec(4,1,0,-8,4,ch175data);
-
-/* char: 0xae */
-
-static final byte[] ch174data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x41,(byte) 0x0,(byte) 0x94,(byte) 0x80,(byte) 0x94,(byte) 0x80,(byte) 0x98,(byte) 0x80,(byte) 0x94,(byte) 0x80,(byte) 0x9c,(byte) 0x80,(byte) 0x41,(byte) 0x0,
-(byte) 0x3e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch174 = new BitmapCharRec(9,9,-1,0,11,ch174data);
-
-/* char: 0xad */
-
-static final byte[] ch173data = {
-(byte) 0xf0,
-};
-
-static final BitmapCharRec ch173 = new BitmapCharRec(4,1,0,-3,5,ch173data);
-
-/* char: 0xac */
-
-static final byte[] ch172data = {
-(byte) 0x4,(byte) 0x4,(byte) 0x4,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch172 = new BitmapCharRec(6,4,-1,-2,8,ch172data);
-
-/* char: 0xab */
-
-static final byte[] ch171data = {
-(byte) 0x28,(byte) 0x50,(byte) 0xa0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch171 = new BitmapCharRec(5,5,-1,-1,7,ch171data);
-
-/* char: 0xaa */
-
-static final byte[] ch170data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xa0,(byte) 0x20,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch170 = new BitmapCharRec(3,5,-1,-4,5,ch170data);
-
-/* char: 0xa9 */
-
-static final byte[] ch169data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x41,(byte) 0x0,(byte) 0x9c,(byte) 0x80,(byte) 0xa2,(byte) 0x80,(byte) 0xa0,(byte) 0x80,(byte) 0xa2,(byte) 0x80,(byte) 0x9c,(byte) 0x80,(byte) 0x41,(byte) 0x0,
-(byte) 0x3e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch169 = new BitmapCharRec(9,9,-1,0,11,ch169data);
-
-/* char: 0xa8 */
-
-static final byte[] ch168data = {
-(byte) 0xa0,
-};
-
-static final BitmapCharRec ch168 = new BitmapCharRec(3,1,0,-8,3,ch168data);
-
-/* char: 0xa7 */
-
-static final byte[] ch167data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x30,(byte) 0x48,(byte) 0x88,(byte) 0x88,(byte) 0x90,(byte) 0x60,(byte) 0x80,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch167 = new BitmapCharRec(5,12,0,3,6,ch167data);
-
-/* char: 0xa6 */
-
-static final byte[] ch166data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch166 = new BitmapCharRec(1,11,-1,2,3,ch166data);
-
-/* char: 0xa5 */
-
-static final byte[] ch165data = {
-(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x50,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch165 = new BitmapCharRec(5,9,-1,0,7,ch165data);
-
-/* char: 0xa4 */
-
-static final byte[] ch164data = {
-(byte) 0x84,(byte) 0x78,(byte) 0x48,(byte) 0x48,(byte) 0x78,(byte) 0x84,
-};
-
-static final BitmapCharRec ch164 = new BitmapCharRec(6,6,0,-1,7,ch164data);
-
-/* char: 0xa3 */
-
-static final byte[] ch163data = {
-(byte) 0xb0,(byte) 0x48,(byte) 0x20,(byte) 0x20,(byte) 0xf0,(byte) 0x40,(byte) 0x40,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch163 = new BitmapCharRec(5,9,-1,0,7,ch163data);
-
-/* char: 0xa2 */
-
-static final byte[] ch162data = {
-(byte) 0x40,(byte) 0x70,(byte) 0xc8,(byte) 0xa0,(byte) 0xa0,(byte) 0xa0,(byte) 0xa8,(byte) 0x70,(byte) 0x10,
-};
-
-static final BitmapCharRec ch162 = new BitmapCharRec(5,9,-1,1,7,ch162data);
-
-/* char: 0xa1 */
-
-static final byte[] ch161data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch161 = new BitmapCharRec(1,10,-1,3,3,ch161data);
-
-/* char: 0xa0 */
-
-static final BitmapCharRec ch160 = new BitmapCharRec(0,0,0,0,4,null);
-
-/* char: 0x7e '~' */
-
-static final byte[] ch126data = {
-(byte) 0x98,(byte) 0x64,
-};
-
-static final BitmapCharRec ch126 = new BitmapCharRec(6,2,0,-3,7,ch126data);
-
-/* char: 0x7d '}' */
-
-static final byte[] ch125data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch125 = new BitmapCharRec(4,12,0,3,4,ch125data);
-
-/* char: 0x7c '|' */
-
-static final byte[] ch124data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch124 = new BitmapCharRec(1,12,-1,3,3,ch124data);
-
-/* char: 0x7b '{' */
-
-static final byte[] ch123data = {
-(byte) 0x30,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x30,
-};
-
-static final BitmapCharRec ch123 = new BitmapCharRec(4,12,0,3,4,ch123data);
-
-/* char: 0x7a 'z' */
-
-static final byte[] ch122data = {
-(byte) 0xf0,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch122 = new BitmapCharRec(4,7,-1,0,6,ch122data);
-
-/* char: 0x79 'y' */
-
-static final byte[] ch121data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x50,(byte) 0x50,(byte) 0x90,(byte) 0x88,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch121 = new BitmapCharRec(5,10,-1,3,7,ch121data);
-
-/* char: 0x78 'x' */
-
-static final byte[] ch120data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x48,(byte) 0x30,(byte) 0x30,(byte) 0x48,(byte) 0x84,
-};
-
-static final BitmapCharRec ch120 = new BitmapCharRec(6,7,0,0,6,ch120data);
-
-/* char: 0x77 'w' */
-
-static final byte[] ch119data = {
-(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0x49,(byte) 0x0,(byte) 0x49,(byte) 0x0,(byte) 0x88,(byte) 0x80,(byte) 0x88,(byte) 0x80,
-};
-
-static final BitmapCharRec ch119 = new BitmapCharRec(9,7,0,0,9,ch119data);
-
-/* char: 0x76 'v' */
-
-static final byte[] ch118data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x50,(byte) 0x50,(byte) 0x88,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch118 = new BitmapCharRec(5,7,-1,0,7,ch118data);
-
-/* char: 0x75 'u' */
-
-static final byte[] ch117data = {
-(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,
-};
-
-static final BitmapCharRec ch117 = new BitmapCharRec(5,7,-1,0,7,ch117data);
-
-/* char: 0x74 't' */
-
-static final byte[] ch116data = {
-(byte) 0x60,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x40,
-};
-
-static final BitmapCharRec ch116 = new BitmapCharRec(3,9,0,0,3,ch116data);
-
-/* char: 0x73 's' */
-
-static final byte[] ch115data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x10,(byte) 0x60,(byte) 0x80,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch115 = new BitmapCharRec(4,7,-1,0,6,ch115data);
-
-/* char: 0x72 'r' */
-
-static final byte[] ch114data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xc0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch114 = new BitmapCharRec(3,7,-1,0,4,ch114data);
-
-/* char: 0x71 'q' */
-
-static final byte[] ch113data = {
-(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x98,(byte) 0x68,
-};
-
-static final BitmapCharRec ch113 = new BitmapCharRec(5,10,-1,3,7,ch113data);
-
-/* char: 0x70 'p' */
-
-static final byte[] ch112data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xb0,(byte) 0xc8,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,
-};
-
-static final BitmapCharRec ch112 = new BitmapCharRec(5,10,-1,3,7,ch112data);
-
-/* char: 0x6f 'o' */
-
-static final byte[] ch111data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch111 = new BitmapCharRec(5,7,-1,0,7,ch111data);
-
-/* char: 0x6e 'n' */
-
-static final byte[] ch110data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,
-};
-
-static final BitmapCharRec ch110 = new BitmapCharRec(5,7,-1,0,7,ch110data);
-
-/* char: 0x6d 'm' */
-
-static final byte[] ch109data = {
-(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0xda,(byte) 0xa4,
-};
-
-static final BitmapCharRec ch109 = new BitmapCharRec(7,7,-1,0,9,ch109data);
-
-/* char: 0x6c 'l' */
-
-static final byte[] ch108data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch108 = new BitmapCharRec(1,9,-1,0,3,ch108data);
-
-/* char: 0x6b 'k' */
-
-static final byte[] ch107data = {
-(byte) 0x88,(byte) 0x90,(byte) 0xa0,(byte) 0xc0,(byte) 0xc0,(byte) 0xa0,(byte) 0x90,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch107 = new BitmapCharRec(5,9,-1,0,6,ch107data);
-
-/* char: 0x6a 'j' */
-
-static final byte[] ch106data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch106 = new BitmapCharRec(2,12,0,3,3,ch106data);
-
-/* char: 0x69 'i' */
-
-static final byte[] ch105data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch105 = new BitmapCharRec(1,9,-1,0,3,ch105data);
-
-/* char: 0x68 'h' */
-
-static final byte[] ch104data = {
-(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch104 = new BitmapCharRec(5,9,-1,0,7,ch104data);
-
-/* char: 0x67 'g' */
-
-static final byte[] ch103data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x98,(byte) 0x68,
-};
-
-static final BitmapCharRec ch103 = new BitmapCharRec(5,10,-1,3,7,ch103data);
-
-/* char: 0x66 'f' */
-
-static final byte[] ch102data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x30,
-};
-
-static final BitmapCharRec ch102 = new BitmapCharRec(4,9,0,0,3,ch102data);
-
-/* char: 0x65 'e' */
-
-static final byte[] ch101data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x80,(byte) 0xf8,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch101 = new BitmapCharRec(5,7,-1,0,7,ch101data);
-
-/* char: 0x64 'd' */
-
-static final byte[] ch100data = {
-(byte) 0x68,(byte) 0x98,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x98,(byte) 0x68,(byte) 0x8,(byte) 0x8,
-};
-
-static final BitmapCharRec ch100 = new BitmapCharRec(5,9,-1,0,7,ch100data);
-
-/* char: 0x63 'c' */
-
-static final byte[] ch99data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch99 = new BitmapCharRec(5,7,-1,0,7,ch99data);
-
-/* char: 0x62 'b' */
-
-static final byte[] ch98data = {
-(byte) 0xb0,(byte) 0xc8,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch98 = new BitmapCharRec(5,9,-1,0,7,ch98data);
-
-/* char: 0x61 'a' */
-
-static final byte[] ch97data = {
-(byte) 0x74,(byte) 0x88,(byte) 0x88,(byte) 0x78,(byte) 0x8,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch97 = new BitmapCharRec(6,7,-1,0,7,ch97data);
-
-/* char: 0x60 '`' */
-
-static final byte[] ch96data = {
-(byte) 0xc0,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch96 = new BitmapCharRec(2,3,0,-6,3,ch96data);
-
-/* char: 0x5f '_' */
-
-static final byte[] ch95data = {
-(byte) 0xfe,
-};
-
-static final BitmapCharRec ch95 = new BitmapCharRec(7,1,0,2,7,ch95data);
-
-/* char: 0x5e '^' */
-
-static final byte[] ch94data = {
-(byte) 0x88,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch94 = new BitmapCharRec(5,3,0,-5,6,ch94data);
-
-/* char: 0x5d ']' */
-
-static final byte[] ch93data = {
-(byte) 0xc0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch93 = new BitmapCharRec(2,12,0,3,3,ch93data);
-
-/* char: 0x5c '\' */
-
-static final byte[] ch92data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch92 = new BitmapCharRec(4,9,0,0,4,ch92data);
-
-/* char: 0x5b '[' */
-
-static final byte[] ch91data = {
-(byte) 0xc0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch91 = new BitmapCharRec(2,12,-1,3,3,ch91data);
-
-/* char: 0x5a 'Z' */
-
-static final byte[] ch90data = {
-(byte) 0xfe,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x4,(byte) 0x2,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch90 = new BitmapCharRec(7,9,-1,0,9,ch90data);
-
-/* char: 0x59 'Y' */
-
-static final byte[] ch89data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch89 = new BitmapCharRec(7,9,-1,0,9,ch89data);
-
-/* char: 0x58 'X' */
-
-static final byte[] ch88data = {
-(byte) 0x82,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x82,
-};
-
-static final BitmapCharRec ch88 = new BitmapCharRec(7,9,-1,0,9,ch88data);
-
-/* char: 0x57 'W' */
-
-static final byte[] ch87data = {
-(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0x49,(byte) 0x0,(byte) 0x88,(byte) 0x80,(byte) 0x88,(byte) 0x80,
-(byte) 0x88,(byte) 0x80,
-};
-
-static final BitmapCharRec ch87 = new BitmapCharRec(9,9,-1,0,11,ch87data);
-
-/* char: 0x56 'V' */
-
-static final byte[] ch86data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch86 = new BitmapCharRec(7,9,-1,0,9,ch86data);
-
-/* char: 0x55 'U' */
-
-static final byte[] ch85data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x84,
-};
-
-static final BitmapCharRec ch85 = new BitmapCharRec(6,9,-1,0,8,ch85data);
-
-/* char: 0x54 'T' */
-
-static final byte[] ch84data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch84 = new BitmapCharRec(7,9,0,0,7,ch84data);
-
-/* char: 0x53 'S' */
-
-static final byte[] ch83data = {
-(byte) 0x78,(byte) 0x84,(byte) 0x84,(byte) 0x4,(byte) 0x18,(byte) 0x60,(byte) 0x80,(byte) 0x84,(byte) 0x78,
-};
-
-static final BitmapCharRec ch83 = new BitmapCharRec(6,9,-1,0,8,ch83data);
-
-/* char: 0x52 'R' */
-
-static final byte[] ch82data = {
-(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0x88,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch82 = new BitmapCharRec(6,9,-1,0,8,ch82data);
-
-/* char: 0x51 'Q' */
-
-static final byte[] ch81data = {
-(byte) 0x3d,(byte) 0x42,(byte) 0x85,(byte) 0x89,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch81 = new BitmapCharRec(8,9,-1,0,10,ch81data);
-
-/* char: 0x50 'P' */
-
-static final byte[] ch80data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch80 = new BitmapCharRec(6,9,-1,0,8,ch80data);
-
-/* char: 0x4f 'O' */
-
-static final byte[] ch79data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x81,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch79 = new BitmapCharRec(8,9,-1,0,10,ch79data);
-
-/* char: 0x4e 'N' */
-
-static final byte[] ch78data = {
-(byte) 0x82,(byte) 0x86,(byte) 0x8a,(byte) 0x8a,(byte) 0x92,(byte) 0xa2,(byte) 0xa2,(byte) 0xc2,(byte) 0x82,
-};
-
-static final BitmapCharRec ch78 = new BitmapCharRec(7,9,-1,0,9,ch78data);
-
-/* char: 0x4d 'M' */
-
-static final byte[] ch77data = {
-(byte) 0x88,(byte) 0x80,(byte) 0x88,(byte) 0x80,(byte) 0x94,(byte) 0x80,(byte) 0x94,(byte) 0x80,(byte) 0xa2,(byte) 0x80,(byte) 0xa2,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,
-(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch77 = new BitmapCharRec(9,9,-1,0,11,ch77data);
-
-/* char: 0x4c 'L' */
-
-static final byte[] ch76data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch76 = new BitmapCharRec(5,9,-1,0,7,ch76data);
-
-/* char: 0x4b 'K' */
-
-static final byte[] ch75data = {
-(byte) 0x82,(byte) 0x84,(byte) 0x88,(byte) 0x90,(byte) 0xe0,(byte) 0xa0,(byte) 0x90,(byte) 0x88,(byte) 0x84,
-};
-
-static final BitmapCharRec ch75 = new BitmapCharRec(7,9,-1,0,8,ch75data);
-
-/* char: 0x4a 'J' */
-
-static final byte[] ch74data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,(byte) 0x8,
-};
-
-static final BitmapCharRec ch74 = new BitmapCharRec(5,9,-1,0,7,ch74data);
-
-/* char: 0x49 'I' */
-
-static final byte[] ch73data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch73 = new BitmapCharRec(1,9,-1,0,3,ch73data);
-
-/* char: 0x48 'H' */
-
-static final byte[] ch72data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0xfe,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,
-};
-
-static final BitmapCharRec ch72 = new BitmapCharRec(7,9,-1,0,9,ch72data);
-
-/* char: 0x47 'G' */
-
-static final byte[] ch71data = {
-(byte) 0x3a,(byte) 0x46,(byte) 0x82,(byte) 0x82,(byte) 0x8e,(byte) 0x80,(byte) 0x80,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch71 = new BitmapCharRec(7,9,-1,0,9,ch71data);
-
-/* char: 0x46 'F' */
-
-static final byte[] ch70data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch70 = new BitmapCharRec(6,9,-1,0,8,ch70data);
-
-/* char: 0x45 'E' */
-
-static final byte[] ch69data = {
-(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch69 = new BitmapCharRec(6,9,-1,0,8,ch69data);
-
-/* char: 0x44 'D' */
-
-static final byte[] ch68data = {
-(byte) 0xf8,(byte) 0x84,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x84,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch68 = new BitmapCharRec(7,9,-1,0,9,ch68data);
-
-/* char: 0x43 'C' */
-
-static final byte[] ch67data = {
-(byte) 0x3c,(byte) 0x42,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch67 = new BitmapCharRec(7,9,-1,0,9,ch67data);
-
-/* char: 0x42 'B' */
-
-static final byte[] ch66data = {
-(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch66 = new BitmapCharRec(6,9,-1,0,8,ch66data);
-
-/* char: 0x41 'A' */
-
-static final byte[] ch65data = {
-(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0x28,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch65 = new BitmapCharRec(7,9,-1,0,9,ch65data);
-
-/* char: 0x40 '@' */
-
-static final byte[] ch64data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x40,(byte) 0x0,(byte) 0x9b,(byte) 0x0,(byte) 0xa6,(byte) 0x80,(byte) 0xa2,(byte) 0x40,(byte) 0xa2,(byte) 0x40,(byte) 0x92,(byte) 0x40,(byte) 0x4d,(byte) 0x40,
-(byte) 0x60,(byte) 0x80,(byte) 0x1f,(byte) 0x0,
-};
-
-static final BitmapCharRec ch64 = new BitmapCharRec(10,10,-1,1,12,ch64data);
-
-/* char: 0x3f '?' */
-
-static final byte[] ch63data = {
-(byte) 0x20,(byte) 0x0,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch63 = new BitmapCharRec(5,9,-1,0,7,ch63data);
-
-/* char: 0x3e '>' */
-
-static final byte[] ch62data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch62 = new BitmapCharRec(6,5,-1,-1,7,ch62data);
-
-/* char: 0x3d '=' */
-
-static final byte[] ch61data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch61 = new BitmapCharRec(5,3,-1,-2,7,ch61data);
-
-/* char: 0x3c '<' */
-
-static final byte[] ch60data = {
-(byte) 0xc,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc,
-};
-
-static final BitmapCharRec ch60 = new BitmapCharRec(6,5,0,-1,7,ch60data);
-
-/* char: 0x3b ';' */
-
-static final byte[] ch59data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch59 = new BitmapCharRec(2,8,0,2,3,ch59data);
-
-/* char: 0x3a ':' */
-
-static final byte[] ch58data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch58 = new BitmapCharRec(1,6,-1,0,3,ch58data);
-
-/* char: 0x39 '9' */
-
-static final byte[] ch57data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0x78,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch57 = new BitmapCharRec(5,9,-1,0,7,ch57data);
-
-/* char: 0x38 '8' */
-
-static final byte[] ch56data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch56 = new BitmapCharRec(5,9,-1,0,7,ch56data);
-
-/* char: 0x37 '7' */
-
-static final byte[] ch55data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x10,(byte) 0x8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch55 = new BitmapCharRec(5,9,-1,0,7,ch55data);
-
-/* char: 0x36 '6' */
-
-static final byte[] ch54data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0xc8,(byte) 0xb0,(byte) 0x80,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch54 = new BitmapCharRec(5,9,-1,0,7,ch54data);
-
-/* char: 0x35 '5' */
-
-static final byte[] ch53data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0xf0,(byte) 0x80,(byte) 0x80,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch53 = new BitmapCharRec(5,9,-1,0,7,ch53data);
-
-/* char: 0x34 '4' */
-
-static final byte[] ch52data = {
-(byte) 0x8,(byte) 0x8,(byte) 0xfc,(byte) 0x88,(byte) 0x48,(byte) 0x28,(byte) 0x28,(byte) 0x18,(byte) 0x8,
-};
-
-static final BitmapCharRec ch52 = new BitmapCharRec(6,9,0,0,7,ch52data);
-
-/* char: 0x33 '3' */
-
-static final byte[] ch51data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x8,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch51 = new BitmapCharRec(5,9,-1,0,7,ch51data);
-
-/* char: 0x32 '2' */
-
-static final byte[] ch50data = {
-(byte) 0xf8,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x8,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch50 = new BitmapCharRec(5,9,-1,0,7,ch50data);
-
-/* char: 0x31 '1' */
-
-static final byte[] ch49data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xe0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch49 = new BitmapCharRec(3,9,-1,0,7,ch49data);
-
-/* char: 0x30 '0' */
-
-static final byte[] ch48data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x88,(byte) 0x70,
-};
-
-static final BitmapCharRec ch48 = new BitmapCharRec(5,9,-1,0,7,ch48data);
-
-/* char: 0x2f '/' */
-
-static final byte[] ch47data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x10,
-};
-
-static final BitmapCharRec ch47 = new BitmapCharRec(4,9,0,0,4,ch47data);
-
-/* char: 0x2e '.' */
-
-static final byte[] ch46data = {
-(byte) 0x80,
-};
-
-static final BitmapCharRec ch46 = new BitmapCharRec(1,1,-1,0,3,ch46data);
-
-/* char: 0x2d '-' */
-
-static final byte[] ch45data = {
-(byte) 0xf8,
-};
-
-static final BitmapCharRec ch45 = new BitmapCharRec(5,1,-1,-3,8,ch45data);
-
-/* char: 0x2c ',' */
-
-static final byte[] ch44data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,
-};
-
-static final BitmapCharRec ch44 = new BitmapCharRec(2,3,-1,2,4,ch44data);
-
-/* char: 0x2b '+' */
-
-static final byte[] ch43data = {
-(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch43 = new BitmapCharRec(5,5,-1,-1,7,ch43data);
-
-/* char: 0x2a '*' */
-
-static final byte[] ch42data = {
-(byte) 0xa0,(byte) 0x40,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch42 = new BitmapCharRec(3,3,-1,-6,5,ch42data);
-
-/* char: 0x29 ')' */
-
-static final byte[] ch41data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch41 = new BitmapCharRec(3,12,0,3,4,ch41data);
-
-/* char: 0x28 '(' */
-
-static final byte[] ch40data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch40 = new BitmapCharRec(3,12,-1,3,4,ch40data);
-
-/* char: 0x27 ''' */
-
-static final byte[] ch39data = {
-(byte) 0x80,(byte) 0x40,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch39 = new BitmapCharRec(2,3,-1,-6,3,ch39data);
-
-/* char: 0x26 '&' */
-
-static final byte[] ch38data = {
-(byte) 0x72,(byte) 0x8c,(byte) 0x84,(byte) 0x8a,(byte) 0x50,(byte) 0x30,(byte) 0x48,(byte) 0x48,(byte) 0x30,
-};
-
-static final BitmapCharRec ch38 = new BitmapCharRec(7,9,-1,0,9,ch38data);
-
-/* char: 0x25 '%' */
-
-static final byte[] ch37data = {
-(byte) 0x23,(byte) 0x0,(byte) 0x14,(byte) 0x80,(byte) 0x14,(byte) 0x80,(byte) 0x13,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x68,(byte) 0x0,(byte) 0x94,(byte) 0x0,(byte) 0x94,(byte) 0x0,
-(byte) 0x62,(byte) 0x0,
-};
-
-static final BitmapCharRec ch37 = new BitmapCharRec(9,9,-1,0,11,ch37data);
-
-/* char: 0x24 '$' */
-
-static final byte[] ch36data = {
-(byte) 0x20,(byte) 0x70,(byte) 0xa8,(byte) 0xa8,(byte) 0x28,(byte) 0x70,(byte) 0xa0,(byte) 0xa8,(byte) 0x70,(byte) 0x20,
-};
-
-static final BitmapCharRec ch36 = new BitmapCharRec(5,10,-1,1,7,ch36data);
-
-/* char: 0x23 '#' */
-
-static final byte[] ch35data = {
-(byte) 0x50,(byte) 0x50,(byte) 0x50,(byte) 0xfc,(byte) 0x28,(byte) 0xfc,(byte) 0x28,(byte) 0x28,
-};
-
-static final BitmapCharRec ch35 = new BitmapCharRec(6,8,0,0,7,ch35data);
-
-/* char: 0x22 '"' */
-
-static final byte[] ch34data = {
-(byte) 0xa0,(byte) 0xa0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch34 = new BitmapCharRec(3,3,-1,-6,5,ch34data);
-
-/* char: 0x21 '!' */
-
-static final byte[] ch33data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch33 = new BitmapCharRec(1,9,-1,0,3,ch33data);
-
-/* char: 0x20 ' ' */
-
-static final BitmapCharRec ch32 = new BitmapCharRec(0,0,0,0,4,null);
-
-static final BitmapCharRec[] chars = {
-ch32,
-ch33,
-ch34,
-ch35,
-ch36,
-ch37,
-ch38,
-ch39,
-ch40,
-ch41,
-ch42,
-ch43,
-ch44,
-ch45,
-ch46,
-ch47,
-ch48,
-ch49,
-ch50,
-ch51,
-ch52,
-ch53,
-ch54,
-ch55,
-ch56,
-ch57,
-ch58,
-ch59,
-ch60,
-ch61,
-ch62,
-ch63,
-ch64,
-ch65,
-ch66,
-ch67,
-ch68,
-ch69,
-ch70,
-ch71,
-ch72,
-ch73,
-ch74,
-ch75,
-ch76,
-ch77,
-ch78,
-ch79,
-ch80,
-ch81,
-ch82,
-ch83,
-ch84,
-ch85,
-ch86,
-ch87,
-ch88,
-ch89,
-ch90,
-ch91,
-ch92,
-ch93,
-ch94,
-ch95,
-ch96,
-ch97,
-ch98,
-ch99,
-ch100,
-ch101,
-ch102,
-ch103,
-ch104,
-ch105,
-ch106,
-ch107,
-ch108,
-ch109,
-ch110,
-ch111,
-ch112,
-ch113,
-ch114,
-ch115,
-ch116,
-ch117,
-ch118,
-ch119,
-ch120,
-ch121,
-ch122,
-ch123,
-ch124,
-ch125,
-ch126,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-ch160,
-ch161,
-ch162,
-ch163,
-ch164,
-ch165,
-ch166,
-ch167,
-ch168,
-ch169,
-ch170,
-ch171,
-ch172,
-ch173,
-ch174,
-ch175,
-ch176,
-ch177,
-ch178,
-ch179,
-ch180,
-ch181,
-ch182,
-ch183,
-ch184,
-ch185,
-ch186,
-ch187,
-ch188,
-ch189,
-ch190,
-ch191,
-ch192,
-ch193,
-ch194,
-ch195,
-ch196,
-ch197,
-ch198,
-ch199,
-ch200,
-ch201,
-ch202,
-ch203,
-ch204,
-ch205,
-ch206,
-ch207,
-ch208,
-ch209,
-ch210,
-ch211,
-ch212,
-ch213,
-ch214,
-ch215,
-ch216,
-ch217,
-ch218,
-ch219,
-ch220,
-ch221,
-ch222,
-ch223,
-ch224,
-ch225,
-ch226,
-ch227,
-ch228,
-ch229,
-ch230,
-ch231,
-ch232,
-ch233,
-ch234,
-ch235,
-ch236,
-ch237,
-ch238,
-ch239,
-ch240,
-ch241,
-ch242,
-ch243,
-ch244,
-ch245,
-ch246,
-ch247,
-ch248,
-ch249,
-ch250,
-ch251,
-ch252,
-ch253,
-ch254,
-ch255,
-};
-
- static final BitmapFontRec glutBitmapHelvetica12 = new BitmapFontRec("-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1",
- 224,
- 32,
- chars);
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica18.java b/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica18.java
deleted file mode 100644
index f172de683..000000000
--- a/src/classes/com/sun/opengl/util/GLUTBitmapHelvetica18.java
+++ /dev/null
@@ -1,1917 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTBitmapHelvetica18 {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-/* char: 0xff */
-
-static final byte[] ch255data = {
-(byte) 0x70,(byte) 0x70,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x3c,(byte) 0x24,(byte) 0x66,(byte) 0x66,(byte) 0x66,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0x0,(byte) 0x66,
-(byte) 0x66,
-};
-
-static final BitmapCharRec ch255 = new BitmapCharRec(8,17,-1,4,10,ch255data);
-
-/* char: 0xfe */
-
-static final byte[] ch254data = {
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xde,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xe3,(byte) 0x0,(byte) 0xc1,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xe3,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xde,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch254 = new BitmapCharRec(9,18,-1,4,11,ch254data);
-
-/* char: 0xfd */
-
-static final byte[] ch253data = {
-(byte) 0x70,(byte) 0x70,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x3c,(byte) 0x24,(byte) 0x66,(byte) 0x66,(byte) 0x66,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0x0,(byte) 0x18,
-(byte) 0xc,(byte) 0x6,
-};
-
-static final BitmapCharRec ch253 = new BitmapCharRec(8,18,-1,4,10,ch253data);
-
-/* char: 0xfc */
-
-static final byte[] ch252data = {
-(byte) 0x73,(byte) 0xfb,(byte) 0xc7,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0x0,(byte) 0x66,(byte) 0x66,
-};
-
-static final BitmapCharRec ch252 = new BitmapCharRec(8,13,-1,0,10,ch252data);
-
-/* char: 0xfb */
-
-static final byte[] ch251data = {
-(byte) 0x73,(byte) 0xfb,(byte) 0xc7,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0x0,(byte) 0x66,(byte) 0x3c,(byte) 0x18,
-};
-
-static final BitmapCharRec ch251 = new BitmapCharRec(8,14,-1,0,10,ch251data);
-
-/* char: 0xfa */
-
-static final byte[] ch250data = {
-(byte) 0x73,(byte) 0xfb,(byte) 0xc7,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x6,
-};
-
-static final BitmapCharRec ch250 = new BitmapCharRec(8,14,-1,0,10,ch250data);
-
-/* char: 0xf9 */
-
-static final byte[] ch249data = {
-(byte) 0x73,(byte) 0xfb,(byte) 0xc7,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x30,
-};
-
-static final BitmapCharRec ch249 = new BitmapCharRec(8,14,-1,0,10,ch249data);
-
-/* char: 0xf8 */
-
-static final byte[] ch248data = {
-(byte) 0xce,(byte) 0x0,(byte) 0x7f,(byte) 0x80,(byte) 0x31,(byte) 0x80,(byte) 0x78,(byte) 0xc0,(byte) 0x6c,(byte) 0xc0,(byte) 0x66,(byte) 0xc0,(byte) 0x63,(byte) 0xc0,(byte) 0x31,(byte) 0x80,
-(byte) 0x3f,(byte) 0xc0,(byte) 0xe,(byte) 0x60,
-};
-
-static final BitmapCharRec ch248 = new BitmapCharRec(11,10,0,0,11,ch248data);
-
-/* char: 0xf7 */
-
-static final byte[] ch247data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x0,(byte) 0xff,(byte) 0xff,(byte) 0x0,(byte) 0x18,(byte) 0x18,
-};
-
-static final BitmapCharRec ch247 = new BitmapCharRec(8,8,-1,-1,10,ch247data);
-
-/* char: 0xf6 */
-
-static final byte[] ch246data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x0,
-(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x36,(byte) 0x0,(byte) 0x36,(byte) 0x0,
-};
-
-static final BitmapCharRec ch246 = new BitmapCharRec(9,13,-1,0,11,ch246data);
-
-/* char: 0xf5 */
-
-static final byte[] ch245data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x0,
-(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x26,(byte) 0x0,(byte) 0x2d,(byte) 0x0,(byte) 0x19,(byte) 0x0,
-};
-
-static final BitmapCharRec ch245 = new BitmapCharRec(9,14,-1,0,11,ch245data);
-
-/* char: 0xf4 */
-
-static final byte[] ch244data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x0,
-(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch244 = new BitmapCharRec(9,14,-1,0,11,ch244data);
-
-/* char: 0xf3 */
-
-static final byte[] ch243data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x0,
-(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch243 = new BitmapCharRec(9,14,-1,0,11,ch243data);
-
-/* char: 0xf2 */
-
-static final byte[] ch242data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x0,
-(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-};
-
-static final BitmapCharRec ch242 = new BitmapCharRec(9,14,-1,0,11,ch242data);
-
-/* char: 0xf1 */
-
-static final byte[] ch241data = {
-(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xe3,(byte) 0xdf,(byte) 0xce,(byte) 0x0,(byte) 0x4c,(byte) 0x5a,(byte) 0x32,
-};
-
-static final BitmapCharRec ch241 = new BitmapCharRec(8,14,-1,0,10,ch241data);
-
-/* char: 0xf0 */
-
-static final byte[] ch240data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x0,
-(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x4c,(byte) 0x0,(byte) 0x38,(byte) 0x0,(byte) 0x36,(byte) 0x0,(byte) 0x60,(byte) 0x0,
-};
-
-static final BitmapCharRec ch240 = new BitmapCharRec(9,14,-1,0,11,ch240data);
-
-/* char: 0xef */
-
-static final byte[] ch239data = {
-(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x0,(byte) 0xd8,(byte) 0xd8,
-};
-
-static final BitmapCharRec ch239 = new BitmapCharRec(5,13,0,0,4,ch239data);
-
-/* char: 0xee */
-
-static final byte[] ch238data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0xcc,(byte) 0x78,(byte) 0x30,
-};
-
-static final BitmapCharRec ch238 = new BitmapCharRec(6,14,1,0,4,ch238data);
-
-/* char: 0xed */
-
-static final byte[] ch237data = {
-(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x0,(byte) 0xc0,(byte) 0x60,(byte) 0x30,
-};
-
-static final BitmapCharRec ch237 = new BitmapCharRec(4,14,0,0,4,ch237data);
-
-/* char: 0xec */
-
-static final byte[] ch236data = {
-(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x0,(byte) 0x30,(byte) 0x60,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch236 = new BitmapCharRec(4,14,0,0,4,ch236data);
-
-/* char: 0xeb */
-
-static final byte[] ch235data = {
-(byte) 0x3c,(byte) 0x7f,(byte) 0xe3,(byte) 0xc0,(byte) 0xc0,(byte) 0xff,(byte) 0xc3,(byte) 0xc3,(byte) 0x7e,(byte) 0x3c,(byte) 0x0,(byte) 0x36,(byte) 0x36,
-};
-
-static final BitmapCharRec ch235 = new BitmapCharRec(8,13,-1,0,10,ch235data);
-
-/* char: 0xea */
-
-static final byte[] ch234data = {
-(byte) 0x3c,(byte) 0x7f,(byte) 0xe3,(byte) 0xc0,(byte) 0xc0,(byte) 0xff,(byte) 0xc3,(byte) 0xc3,(byte) 0x7e,(byte) 0x3c,(byte) 0x0,(byte) 0x66,(byte) 0x3c,(byte) 0x18,
-};
-
-static final BitmapCharRec ch234 = new BitmapCharRec(8,14,-1,0,10,ch234data);
-
-/* char: 0xe9 */
-
-static final byte[] ch233data = {
-(byte) 0x3c,(byte) 0x7f,(byte) 0xe3,(byte) 0xc0,(byte) 0xc0,(byte) 0xff,(byte) 0xc3,(byte) 0xc3,(byte) 0x7e,(byte) 0x3c,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x6,
-};
-
-static final BitmapCharRec ch233 = new BitmapCharRec(8,14,-1,0,10,ch233data);
-
-/* char: 0xe8 */
-
-static final byte[] ch232data = {
-(byte) 0x3c,(byte) 0x7f,(byte) 0xe3,(byte) 0xc0,(byte) 0xc0,(byte) 0xff,(byte) 0xc3,(byte) 0xc3,(byte) 0x7e,(byte) 0x3c,(byte) 0x0,(byte) 0x18,(byte) 0x30,(byte) 0x60,
-};
-
-static final BitmapCharRec ch232 = new BitmapCharRec(8,14,-1,0,10,ch232data);
-
-/* char: 0xe7 */
-
-static final byte[] ch231data = {
-(byte) 0x78,(byte) 0x6c,(byte) 0xc,(byte) 0x38,(byte) 0x3e,(byte) 0x7f,(byte) 0x63,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x63,(byte) 0x7f,(byte) 0x3e,
-};
-
-static final BitmapCharRec ch231 = new BitmapCharRec(8,14,-1,4,10,ch231data);
-
-/* char: 0xe6 */
-
-static final byte[] ch230data = {
-(byte) 0x75,(byte) 0xe0,(byte) 0xef,(byte) 0xf8,(byte) 0xc7,(byte) 0x18,(byte) 0xc6,(byte) 0x0,(byte) 0xe6,(byte) 0x0,(byte) 0x7f,(byte) 0xf8,(byte) 0xe,(byte) 0x18,(byte) 0xc6,(byte) 0x18,
-(byte) 0xef,(byte) 0xf0,(byte) 0x7d,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch230 = new BitmapCharRec(13,10,-1,0,15,ch230data);
-
-/* char: 0xe5 */
-
-static final byte[] ch229data = {
-(byte) 0x76,(byte) 0xee,(byte) 0xc6,(byte) 0xc6,(byte) 0xe6,(byte) 0x7e,(byte) 0xe,(byte) 0xc6,(byte) 0xee,(byte) 0x7c,(byte) 0x38,(byte) 0x6c,(byte) 0x6c,(byte) 0x38,
-};
-
-static final BitmapCharRec ch229 = new BitmapCharRec(7,14,-1,0,9,ch229data);
-
-/* char: 0xe4 */
-
-static final byte[] ch228data = {
-(byte) 0x76,(byte) 0xee,(byte) 0xc6,(byte) 0xc6,(byte) 0xe6,(byte) 0x7e,(byte) 0xe,(byte) 0xc6,(byte) 0xee,(byte) 0x7c,(byte) 0x0,(byte) 0x6c,(byte) 0x6c,
-};
-
-static final BitmapCharRec ch228 = new BitmapCharRec(7,13,-1,0,9,ch228data);
-
-/* char: 0xe3 */
-
-static final byte[] ch227data = {
-(byte) 0x76,(byte) 0xee,(byte) 0xc6,(byte) 0xc6,(byte) 0xe6,(byte) 0x7e,(byte) 0xe,(byte) 0xc6,(byte) 0xee,(byte) 0x7c,(byte) 0x0,(byte) 0x4c,(byte) 0x5a,(byte) 0x32,
-};
-
-static final BitmapCharRec ch227 = new BitmapCharRec(7,14,-1,0,9,ch227data);
-
-/* char: 0xe2 */
-
-static final byte[] ch226data = {
-(byte) 0x76,(byte) 0xee,(byte) 0xc6,(byte) 0xc6,(byte) 0xe6,(byte) 0x7e,(byte) 0xe,(byte) 0xc6,(byte) 0xee,(byte) 0x7c,(byte) 0x0,(byte) 0x66,(byte) 0x3c,(byte) 0x18,
-};
-
-static final BitmapCharRec ch226 = new BitmapCharRec(7,14,-1,0,9,ch226data);
-
-/* char: 0xe1 */
-
-static final byte[] ch225data = {
-(byte) 0x76,(byte) 0xee,(byte) 0xc6,(byte) 0xc6,(byte) 0xe6,(byte) 0x7e,(byte) 0xe,(byte) 0xc6,(byte) 0xee,(byte) 0x7c,(byte) 0x0,(byte) 0x30,(byte) 0x18,(byte) 0xc,
-};
-
-static final BitmapCharRec ch225 = new BitmapCharRec(7,14,-1,0,9,ch225data);
-
-/* char: 0xe0 */
-
-static final byte[] ch224data = {
-(byte) 0x76,(byte) 0xee,(byte) 0xc6,(byte) 0xc6,(byte) 0xe6,(byte) 0x7e,(byte) 0xe,(byte) 0xc6,(byte) 0xee,(byte) 0x7c,(byte) 0x0,(byte) 0x18,(byte) 0x30,(byte) 0x60,
-};
-
-static final BitmapCharRec ch224 = new BitmapCharRec(7,14,-1,0,9,ch224data);
-
-/* char: 0xdf */
-
-static final byte[] ch223data = {
-(byte) 0xdc,(byte) 0xde,(byte) 0xc6,(byte) 0xc6,(byte) 0xc6,(byte) 0xc6,(byte) 0xdc,(byte) 0xdc,(byte) 0xc6,(byte) 0xc6,(byte) 0xc6,(byte) 0xc6,(byte) 0x7c,(byte) 0x38,
-};
-
-static final BitmapCharRec ch223 = new BitmapCharRec(7,14,-1,0,9,ch223data);
-
-/* char: 0xde */
-
-static final byte[] ch222data = {
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xc1,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc1,(byte) 0xc0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch222 = new BitmapCharRec(10,14,-1,0,12,ch222data);
-
-/* char: 0xdd */
-
-static final byte[] ch221data = {
-(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x19,(byte) 0x80,
-(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch221 = new BitmapCharRec(12,18,-1,0,14,ch221data);
-
-/* char: 0xdc */
-
-static final byte[] ch220data = {
-(byte) 0x1f,(byte) 0x0,(byte) 0x7f,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x19,(byte) 0x80,
-(byte) 0x19,(byte) 0x80,
-};
-
-static final BitmapCharRec ch220 = new BitmapCharRec(11,17,-1,0,13,ch220data);
-
-/* char: 0xdb */
-
-static final byte[] ch219data = {
-(byte) 0x1f,(byte) 0x0,(byte) 0x7f,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x19,(byte) 0x80,
-(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch219 = new BitmapCharRec(11,18,-1,0,13,ch219data);
-
-/* char: 0xda */
-
-static final byte[] ch218data = {
-(byte) 0x1f,(byte) 0x0,(byte) 0x7f,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch218 = new BitmapCharRec(11,18,-1,0,13,ch218data);
-
-/* char: 0xd9 */
-
-static final byte[] ch217data = {
-(byte) 0x1f,(byte) 0x0,(byte) 0x7f,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0x0,
-};
-
-static final BitmapCharRec ch217 = new BitmapCharRec(11,18,-1,0,13,ch217data);
-
-/* char: 0xd8 */
-
-static final byte[] ch216data = {
-(byte) 0xc7,(byte) 0xc0,(byte) 0xff,(byte) 0xf0,(byte) 0x78,(byte) 0x38,(byte) 0x38,(byte) 0x18,(byte) 0x6c,(byte) 0x1c,(byte) 0x6e,(byte) 0xc,(byte) 0x67,(byte) 0xc,(byte) 0x63,(byte) 0x8c,
-(byte) 0x61,(byte) 0xcc,(byte) 0x70,(byte) 0xdc,(byte) 0x30,(byte) 0x78,(byte) 0x38,(byte) 0x38,(byte) 0x1f,(byte) 0xfc,(byte) 0x7,(byte) 0xcc,
-};
-
-static final BitmapCharRec ch216 = new BitmapCharRec(14,14,0,0,15,ch216data);
-
-/* char: 0xd7 */
-
-static final byte[] ch215data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x33,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x61,(byte) 0x80,
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch215 = new BitmapCharRec(10,9,0,0,10,ch215data);
-
-/* char: 0xd6 */
-
-static final byte[] ch214data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x38,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,
-(byte) 0xc0,(byte) 0x18,(byte) 0xe0,(byte) 0x38,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0xd,(byte) 0x80,
-(byte) 0xd,(byte) 0x80,
-};
-
-static final BitmapCharRec ch214 = new BitmapCharRec(13,17,-1,0,15,ch214data);
-
-/* char: 0xd5 */
-
-static final byte[] ch213data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x38,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,
-(byte) 0xc0,(byte) 0x18,(byte) 0xe0,(byte) 0x38,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x9,(byte) 0x80,
-(byte) 0xb,(byte) 0x40,(byte) 0x6,(byte) 0x40,
-};
-
-static final BitmapCharRec ch213 = new BitmapCharRec(13,18,-1,0,15,ch213data);
-
-/* char: 0xd4 */
-
-static final byte[] ch212data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x38,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,
-(byte) 0xc0,(byte) 0x18,(byte) 0xe0,(byte) 0x38,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0xc,(byte) 0xc0,
-(byte) 0x7,(byte) 0x80,(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch212 = new BitmapCharRec(13,18,-1,0,15,ch212data);
-
-/* char: 0xd3 */
-
-static final byte[] ch211data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x38,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,
-(byte) 0xc0,(byte) 0x18,(byte) 0xe0,(byte) 0x38,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x3,(byte) 0x0,
-(byte) 0x1,(byte) 0x80,(byte) 0x0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch211 = new BitmapCharRec(13,18,-1,0,15,ch211data);
-
-/* char: 0xd2 */
-
-static final byte[] ch210data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x38,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,
-(byte) 0xc0,(byte) 0x18,(byte) 0xe0,(byte) 0x38,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x3,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch210 = new BitmapCharRec(13,18,-1,0,15,ch210data);
-
-/* char: 0xd1 */
-
-static final byte[] ch209data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe0,(byte) 0xc1,(byte) 0xe0,(byte) 0xc1,(byte) 0xe0,(byte) 0xc3,(byte) 0x60,(byte) 0xc6,(byte) 0x60,(byte) 0xc6,(byte) 0x60,(byte) 0xcc,(byte) 0x60,
-(byte) 0xcc,(byte) 0x60,(byte) 0xd8,(byte) 0x60,(byte) 0xd8,(byte) 0x60,(byte) 0xf0,(byte) 0x60,(byte) 0xe0,(byte) 0x60,(byte) 0xe0,(byte) 0x60,(byte) 0x0,(byte) 0x0,(byte) 0x13,(byte) 0x0,
-(byte) 0x16,(byte) 0x80,(byte) 0xc,(byte) 0x80,
-};
-
-static final BitmapCharRec ch209 = new BitmapCharRec(11,18,-1,0,13,ch209data);
-
-/* char: 0xd0 */
-
-static final byte[] ch208data = {
-(byte) 0x7f,(byte) 0x80,(byte) 0x7f,(byte) 0xc0,(byte) 0x60,(byte) 0xe0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x30,(byte) 0x60,(byte) 0x30,(byte) 0xfc,(byte) 0x30,(byte) 0xfc,(byte) 0x30,
-(byte) 0x60,(byte) 0x30,(byte) 0x60,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0xe0,(byte) 0x7f,(byte) 0xc0,(byte) 0x7f,(byte) 0x80,
-};
-
-static final BitmapCharRec ch208 = new BitmapCharRec(12,14,0,0,13,ch208data);
-
-/* char: 0xcf */
-
-static final byte[] ch207data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0xcc,
-(byte) 0xcc,
-};
-
-static final BitmapCharRec ch207 = new BitmapCharRec(6,17,0,0,6,ch207data);
-
-/* char: 0xce */
-
-static final byte[] ch206data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0xcc,
-(byte) 0x78,(byte) 0x30,
-};
-
-static final BitmapCharRec ch206 = new BitmapCharRec(6,18,0,0,6,ch206data);
-
-/* char: 0xcd */
-
-static final byte[] ch205data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,
-(byte) 0x60,(byte) 0x30,
-};
-
-static final BitmapCharRec ch205 = new BitmapCharRec(4,18,-2,0,6,ch205data);
-
-/* char: 0xcc */
-
-static final byte[] ch204data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0x30,
-(byte) 0x60,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch204 = new BitmapCharRec(4,18,0,0,6,ch204data);
-
-/* char: 0xcb */
-
-static final byte[] ch203data = {
-(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-(byte) 0x33,(byte) 0x0,
-};
-
-static final BitmapCharRec ch203 = new BitmapCharRec(9,17,-1,0,11,ch203data);
-
-/* char: 0xca */
-
-static final byte[] ch202data = {
-(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-(byte) 0x1e,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch202 = new BitmapCharRec(9,18,-1,0,11,ch202data);
-
-/* char: 0xc9 */
-
-static final byte[] ch201data = {
-(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch201 = new BitmapCharRec(9,18,-1,0,11,ch201data);
-
-/* char: 0xc8 */
-
-static final byte[] ch200data = {
-(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-(byte) 0x18,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-};
-
-static final BitmapCharRec ch200 = new BitmapCharRec(9,18,-1,0,11,ch200data);
-
-/* char: 0xc7 */
-
-static final byte[] ch199data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x1b,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,
-(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xe0,(byte) 0x0,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,
-(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch199 = new BitmapCharRec(12,18,-1,4,14,ch199data);
-
-/* char: 0xc6 */
-
-static final byte[] ch198data = {
-(byte) 0xc1,(byte) 0xff,(byte) 0xc1,(byte) 0xff,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x7f,(byte) 0x80,(byte) 0x3f,(byte) 0x80,(byte) 0x31,(byte) 0xfe,(byte) 0x31,(byte) 0xfe,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xd,(byte) 0x80,(byte) 0xd,(byte) 0x80,(byte) 0x7,(byte) 0xff,(byte) 0x7,(byte) 0xff,
-};
-
-static final BitmapCharRec ch198 = new BitmapCharRec(16,14,-1,0,18,ch198data);
-
-/* char: 0xc5 */
-
-static final byte[] ch197data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x7f,(byte) 0xe0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x19,(byte) 0x80,
-(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,
-};
-
-static final BitmapCharRec ch197 = new BitmapCharRec(12,18,0,0,12,ch197data);
-
-/* char: 0xc4 */
-
-static final byte[] ch196data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x7f,(byte) 0xe0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x19,(byte) 0x80,
-(byte) 0x19,(byte) 0x80,
-};
-
-static final BitmapCharRec ch196 = new BitmapCharRec(12,17,0,0,12,ch196data);
-
-/* char: 0xc3 */
-
-static final byte[] ch195data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x7f,(byte) 0xe0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x13,(byte) 0x0,
-(byte) 0x16,(byte) 0x80,(byte) 0xc,(byte) 0x80,
-};
-
-static final BitmapCharRec ch195 = new BitmapCharRec(12,18,0,0,12,ch195data);
-
-/* char: 0xc2 */
-
-static final byte[] ch194data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x7f,(byte) 0xe0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x19,(byte) 0x80,
-(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch194 = new BitmapCharRec(12,18,0,0,12,ch194data);
-
-/* char: 0xc1 */
-
-static final byte[] ch193data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x7f,(byte) 0xe0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch193 = new BitmapCharRec(12,18,0,0,12,ch193data);
-
-/* char: 0xc0 */
-
-static final byte[] ch192data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x7f,(byte) 0xe0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0x0,
-};
-
-static final BitmapCharRec ch192 = new BitmapCharRec(12,18,0,0,12,ch192data);
-
-/* char: 0xbf */
-
-static final byte[] ch191data = {
-(byte) 0x7c,(byte) 0xfe,(byte) 0xc6,(byte) 0xc6,(byte) 0xe0,(byte) 0x70,(byte) 0x38,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x0,(byte) 0x0,(byte) 0x18,(byte) 0x18,
-};
-
-static final BitmapCharRec ch191 = new BitmapCharRec(7,14,-1,4,10,ch191data);
-
-/* char: 0xbe */
-
-static final byte[] ch190data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0xc,(byte) 0xfc,(byte) 0x6,(byte) 0xd8,(byte) 0x6,(byte) 0x78,(byte) 0x73,(byte) 0x38,(byte) 0xf9,(byte) 0x18,(byte) 0x99,(byte) 0x88,
-(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x98,(byte) 0x60,(byte) 0xf8,(byte) 0x30,(byte) 0x70,(byte) 0x30,
-};
-
-static final BitmapCharRec ch190 = new BitmapCharRec(14,13,0,0,15,ch190data);
-
-/* char: 0xbd */
-
-static final byte[] ch189data = {
-(byte) 0x30,(byte) 0xf8,(byte) 0x30,(byte) 0xf8,(byte) 0x18,(byte) 0x60,(byte) 0xc,(byte) 0x30,(byte) 0xc,(byte) 0x18,(byte) 0x66,(byte) 0x98,(byte) 0x62,(byte) 0xf8,(byte) 0x63,(byte) 0x70,
-(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xe0,(byte) 0xc0,(byte) 0xe0,(byte) 0x60,(byte) 0x60,(byte) 0x60,
-};
-
-static final BitmapCharRec ch189 = new BitmapCharRec(13,13,-1,0,15,ch189data);
-
-/* char: 0xbc */
-
-static final byte[] ch188data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x19,(byte) 0xf8,(byte) 0xd,(byte) 0xb0,(byte) 0xc,(byte) 0xf0,(byte) 0x66,(byte) 0x70,(byte) 0x62,(byte) 0x30,(byte) 0x63,(byte) 0x10,
-(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xe0,(byte) 0xc0,(byte) 0xe0,(byte) 0x60,(byte) 0x60,(byte) 0x60,
-};
-
-static final BitmapCharRec ch188 = new BitmapCharRec(13,13,-1,0,15,ch188data);
-
-/* char: 0xbb */
-
-static final byte[] ch187data = {
-(byte) 0x90,(byte) 0xd8,(byte) 0x6c,(byte) 0x36,(byte) 0x36,(byte) 0x6c,(byte) 0xd8,(byte) 0x90,
-};
-
-static final BitmapCharRec ch187 = new BitmapCharRec(7,8,-1,-1,9,ch187data);
-
-/* char: 0xba */
-
-static final byte[] ch186data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x70,(byte) 0xd8,(byte) 0x88,(byte) 0x88,(byte) 0xd8,(byte) 0x70,
-};
-
-static final BitmapCharRec ch186 = new BitmapCharRec(5,8,-1,-6,7,ch186data);
-
-/* char: 0xb9 */
-
-static final byte[] ch185data = {
-(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0xe0,(byte) 0xe0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch185 = new BitmapCharRec(3,8,-1,-5,6,ch185data);
-
-/* char: 0xb8 */
-
-static final byte[] ch184data = {
-(byte) 0xf0,(byte) 0xd8,(byte) 0x18,(byte) 0x70,(byte) 0x60,
-};
-
-static final BitmapCharRec ch184 = new BitmapCharRec(5,5,0,4,5,ch184data);
-
-/* char: 0xb7 */
-
-static final byte[] ch183data = {
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch183 = new BitmapCharRec(2,2,-1,-4,4,ch183data);
-
-/* char: 0xb6 */
-
-static final byte[] ch182data = {
-(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x12,(byte) 0x32,(byte) 0x72,(byte) 0xf2,(byte) 0xf2,(byte) 0xf2,(byte) 0xf2,
-(byte) 0x72,(byte) 0x3f,
-};
-
-static final BitmapCharRec ch182 = new BitmapCharRec(8,18,-1,4,10,ch182data);
-
-/* char: 0xb5 */
-
-static final byte[] ch181data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xdb,(byte) 0xff,(byte) 0xe7,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,
-};
-
-static final BitmapCharRec ch181 = new BitmapCharRec(8,14,-1,4,10,ch181data);
-
-/* char: 0xb4 */
-
-static final byte[] ch180data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0x30,
-};
-
-static final BitmapCharRec ch180 = new BitmapCharRec(4,3,0,-11,4,ch180data);
-
-/* char: 0xb3 */
-
-static final byte[] ch179data = {
-(byte) 0x70,(byte) 0xf8,(byte) 0x98,(byte) 0x30,(byte) 0x30,(byte) 0x98,(byte) 0xf8,(byte) 0x70,
-};
-
-static final BitmapCharRec ch179 = new BitmapCharRec(5,8,0,-5,6,ch179data);
-
-/* char: 0xb2 */
-
-static final byte[] ch178data = {
-(byte) 0xf8,(byte) 0xf8,(byte) 0x60,(byte) 0x30,(byte) 0x18,(byte) 0x98,(byte) 0xf8,(byte) 0x70,
-};
-
-static final BitmapCharRec ch178 = new BitmapCharRec(5,8,0,-5,6,ch178data);
-
-/* char: 0xb1 */
-
-static final byte[] ch177data = {
-(byte) 0xff,(byte) 0xff,(byte) 0x0,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0xff,(byte) 0xff,(byte) 0x18,(byte) 0x18,(byte) 0x18,
-};
-
-static final BitmapCharRec ch177 = new BitmapCharRec(8,11,-1,0,10,ch177data);
-
-/* char: 0xb0 */
-
-static final byte[] ch176data = {
-(byte) 0x70,(byte) 0xd8,(byte) 0x88,(byte) 0xd8,(byte) 0x70,
-};
-
-static final BitmapCharRec ch176 = new BitmapCharRec(5,5,-1,-8,7,ch176data);
-
-/* char: 0xaf */
-
-static final byte[] ch175data = {
-(byte) 0xf8,
-};
-
-static final BitmapCharRec ch175 = new BitmapCharRec(5,1,0,-12,5,ch175data);
-
-/* char: 0xae */
-
-static final byte[] ch174data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x30,(byte) 0x60,(byte) 0x40,(byte) 0x10,(byte) 0x48,(byte) 0x50,(byte) 0x88,(byte) 0x88,(byte) 0x89,(byte) 0x8,(byte) 0x8f,(byte) 0x88,(byte) 0x88,(byte) 0x48,
-(byte) 0x88,(byte) 0x48,(byte) 0x4f,(byte) 0x90,(byte) 0x40,(byte) 0x10,(byte) 0x30,(byte) 0x60,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch174 = new BitmapCharRec(13,13,-1,0,14,ch174data);
-
-/* char: 0xad */
-
-static final byte[] ch173data = {
-(byte) 0xf8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch173 = new BitmapCharRec(5,2,-1,-4,7,ch173data);
-
-/* char: 0xac */
-
-static final byte[] ch172data = {
-(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch172 = new BitmapCharRec(9,5,-1,-3,11,ch172data);
-
-/* char: 0xab */
-
-static final byte[] ch171data = {
-(byte) 0x12,(byte) 0x36,(byte) 0x6c,(byte) 0xd8,(byte) 0xd8,(byte) 0x6c,(byte) 0x36,(byte) 0x12,
-};
-
-static final BitmapCharRec ch171 = new BitmapCharRec(7,8,-1,-1,9,ch171data);
-
-/* char: 0xaa */
-
-static final byte[] ch170data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x68,(byte) 0xd8,(byte) 0x48,(byte) 0x38,(byte) 0xc8,(byte) 0x70,
-};
-
-static final BitmapCharRec ch170 = new BitmapCharRec(5,8,-1,-6,7,ch170data);
-
-/* char: 0xa9 */
-
-static final byte[] ch169data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x30,(byte) 0x60,(byte) 0x40,(byte) 0x10,(byte) 0x47,(byte) 0x10,(byte) 0x88,(byte) 0x88,(byte) 0x90,(byte) 0x8,(byte) 0x90,(byte) 0x8,(byte) 0x90,(byte) 0x8,
-(byte) 0x88,(byte) 0x88,(byte) 0x47,(byte) 0x10,(byte) 0x40,(byte) 0x10,(byte) 0x30,(byte) 0x60,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch169 = new BitmapCharRec(13,13,-1,0,15,ch169data);
-
-/* char: 0xa8 */
-
-static final byte[] ch168data = {
-(byte) 0xd8,(byte) 0xd8,
-};
-
-static final BitmapCharRec ch168 = new BitmapCharRec(5,2,0,-11,6,ch168data);
-
-/* char: 0xa7 */
-
-static final byte[] ch167data = {
-(byte) 0x3c,(byte) 0x7e,(byte) 0xc3,(byte) 0xc3,(byte) 0x7,(byte) 0xe,(byte) 0x3e,(byte) 0x73,(byte) 0xe3,(byte) 0xc3,(byte) 0xc7,(byte) 0x6e,(byte) 0x7c,(byte) 0xf0,(byte) 0xc3,(byte) 0xc3,
-(byte) 0x7e,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch167 = new BitmapCharRec(8,18,-1,4,10,ch167data);
-
-/* char: 0xa6 */
-
-static final byte[] ch166data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch166 = new BitmapCharRec(2,17,-1,3,4,ch166data);
-
-/* char: 0xa5 */
-
-static final byte[] ch165data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0xff,(byte) 0x18,(byte) 0xff,(byte) 0x3c,(byte) 0x66,(byte) 0x66,(byte) 0x66,(byte) 0xc3,(byte) 0xc3,
-};
-
-static final BitmapCharRec ch165 = new BitmapCharRec(8,13,-1,0,10,ch165data);
-
-/* char: 0xa4 */
-
-static final byte[] ch164data = {
-(byte) 0xc3,(byte) 0xff,(byte) 0x66,(byte) 0x66,(byte) 0x66,(byte) 0xff,(byte) 0xc3,
-};
-
-static final BitmapCharRec ch164 = new BitmapCharRec(8,7,-1,-3,10,ch164data);
-
-/* char: 0xa3 */
-
-static final byte[] ch163data = {
-(byte) 0xdf,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0x60,(byte) 0x80,(byte) 0x30,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x7e,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-(byte) 0x60,(byte) 0x0,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x3f,(byte) 0x0,(byte) 0x1e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch163 = new BitmapCharRec(9,13,0,0,10,ch163data);
-
-/* char: 0xa2 */
-
-static final byte[] ch162data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x3e,(byte) 0x7f,(byte) 0x6b,(byte) 0xc8,(byte) 0xc8,(byte) 0xc8,(byte) 0xc8,(byte) 0x6b,(byte) 0x7f,(byte) 0x3e,(byte) 0x4,(byte) 0x4,
-};
-
-static final BitmapCharRec ch162 = new BitmapCharRec(8,14,-1,2,10,ch162data);
-
-/* char: 0xa1 */
-
-static final byte[] ch161data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch161 = new BitmapCharRec(2,14,-2,4,6,ch161data);
-
-/* char: 0xa0 */
-
-static final BitmapCharRec ch160 = new BitmapCharRec(0,0,0,0,5,null);
-
-/* char: 0x7e '~' */
-
-static final byte[] ch126data = {
-(byte) 0xcc,(byte) 0x7e,(byte) 0x33,
-};
-
-static final BitmapCharRec ch126 = new BitmapCharRec(8,3,-1,-4,10,ch126data);
-
-/* char: 0x7d '}' */
-
-static final byte[] ch125data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x18,(byte) 0xc,(byte) 0x18,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0x60,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch125 = new BitmapCharRec(6,18,0,4,6,ch125data);
-
-/* char: 0x7c '|' */
-
-static final byte[] ch124data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch124 = new BitmapCharRec(2,18,-1,4,4,ch124data);
-
-/* char: 0x7b '{' */
-
-static final byte[] ch123data = {
-(byte) 0xc,(byte) 0x18,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0x18,(byte) 0xc,
-};
-
-static final BitmapCharRec ch123 = new BitmapCharRec(6,18,0,4,6,ch123data);
-
-/* char: 0x7a 'z' */
-
-static final byte[] ch122data = {
-(byte) 0xfe,(byte) 0xfe,(byte) 0xc0,(byte) 0x60,(byte) 0x30,(byte) 0x18,(byte) 0xc,(byte) 0x6,(byte) 0xfe,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch122 = new BitmapCharRec(7,10,-1,0,9,ch122data);
-
-/* char: 0x79 'y' */
-
-static final byte[] ch121data = {
-(byte) 0x70,(byte) 0x70,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x3c,(byte) 0x24,(byte) 0x66,(byte) 0x66,(byte) 0x66,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,
-};
-
-static final BitmapCharRec ch121 = new BitmapCharRec(8,14,-1,4,10,ch121data);
-
-/* char: 0x78 'x' */
-
-static final byte[] ch120data = {
-(byte) 0xc3,(byte) 0xe7,(byte) 0x66,(byte) 0x3c,(byte) 0x18,(byte) 0x18,(byte) 0x3c,(byte) 0x66,(byte) 0xe7,(byte) 0xc3,
-};
-
-static final BitmapCharRec ch120 = new BitmapCharRec(8,10,-1,0,10,ch120data);
-
-/* char: 0x77 'w' */
-
-static final byte[] ch119data = {
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0x39,(byte) 0xc0,(byte) 0x29,(byte) 0x40,(byte) 0x69,(byte) 0x60,(byte) 0x66,(byte) 0x60,(byte) 0x66,(byte) 0x60,(byte) 0xc6,(byte) 0x30,
-(byte) 0xc6,(byte) 0x30,(byte) 0xc6,(byte) 0x30,
-};
-
-static final BitmapCharRec ch119 = new BitmapCharRec(12,10,-1,0,14,ch119data);
-
-/* char: 0x76 'v' */
-
-static final byte[] ch118data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x3c,(byte) 0x24,(byte) 0x66,(byte) 0x66,(byte) 0x66,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,
-};
-
-static final BitmapCharRec ch118 = new BitmapCharRec(8,10,-1,0,10,ch118data);
-
-/* char: 0x75 'u' */
-
-static final byte[] ch117data = {
-(byte) 0x73,(byte) 0xfb,(byte) 0xc7,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,
-};
-
-static final BitmapCharRec ch117 = new BitmapCharRec(8,10,-1,0,10,ch117data);
-
-/* char: 0x74 't' */
-
-static final byte[] ch116data = {
-(byte) 0x18,(byte) 0x38,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0xfc,(byte) 0xfc,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-};
-
-static final BitmapCharRec ch116 = new BitmapCharRec(6,13,0,0,6,ch116data);
-
-/* char: 0x73 's' */
-
-static final byte[] ch115data = {
-(byte) 0x78,(byte) 0xfc,(byte) 0xc6,(byte) 0x6,(byte) 0x3e,(byte) 0xfc,(byte) 0xc0,(byte) 0xc6,(byte) 0x7e,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch115 = new BitmapCharRec(7,10,-1,0,9,ch115data);
-
-/* char: 0x72 'r' */
-
-static final byte[] ch114data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xe0,(byte) 0xd8,(byte) 0xd8,
-};
-
-static final BitmapCharRec ch114 = new BitmapCharRec(5,10,-1,0,6,ch114data);
-
-/* char: 0x71 'q' */
-
-static final byte[] ch113data = {
-(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x3d,(byte) 0x80,(byte) 0x7f,(byte) 0x80,(byte) 0x63,(byte) 0x80,(byte) 0xc1,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x80,(byte) 0x7f,(byte) 0x80,(byte) 0x3d,(byte) 0x80,
-};
-
-static final BitmapCharRec ch113 = new BitmapCharRec(9,14,-1,4,11,ch113data);
-
-/* char: 0x70 'p' */
-
-static final byte[] ch112data = {
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xde,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xe3,(byte) 0x0,(byte) 0xc1,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xe3,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xde,(byte) 0x0,
-};
-
-static final BitmapCharRec ch112 = new BitmapCharRec(9,14,-1,4,11,ch112data);
-
-/* char: 0x6f 'o' */
-
-static final byte[] ch111data = {
-(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x0,
-(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch111 = new BitmapCharRec(9,10,-1,0,11,ch111data);
-
-/* char: 0x6e 'n' */
-
-static final byte[] ch110data = {
-(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xe3,(byte) 0xdf,(byte) 0xce,
-};
-
-static final BitmapCharRec ch110 = new BitmapCharRec(8,10,-1,0,10,ch110data);
-
-/* char: 0x6d 'm' */
-
-static final byte[] ch109data = {
-(byte) 0xc6,(byte) 0x30,(byte) 0xc6,(byte) 0x30,(byte) 0xc6,(byte) 0x30,(byte) 0xc6,(byte) 0x30,(byte) 0xc6,(byte) 0x30,(byte) 0xc6,(byte) 0x30,(byte) 0xc6,(byte) 0x30,(byte) 0xe7,(byte) 0x30,
-(byte) 0xde,(byte) 0xf0,(byte) 0xcc,(byte) 0x60,
-};
-
-static final BitmapCharRec ch109 = new BitmapCharRec(12,10,-1,0,14,ch109data);
-
-/* char: 0x6c 'l' */
-
-static final byte[] ch108data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch108 = new BitmapCharRec(2,14,-1,0,4,ch108data);
-
-/* char: 0x6b 'k' */
-
-static final byte[] ch107data = {
-(byte) 0xc7,(byte) 0xc6,(byte) 0xce,(byte) 0xcc,(byte) 0xd8,(byte) 0xf8,(byte) 0xf0,(byte) 0xd8,(byte) 0xcc,(byte) 0xc6,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch107 = new BitmapCharRec(8,14,-1,0,9,ch107data);
-
-/* char: 0x6a 'j' */
-
-static final byte[] ch106data = {
-(byte) 0xe0,(byte) 0xf0,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0x0,
-(byte) 0x30,(byte) 0x30,
-};
-
-static final BitmapCharRec ch106 = new BitmapCharRec(4,18,1,4,4,ch106data);
-
-/* char: 0x69 'i' */
-
-static final byte[] ch105data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch105 = new BitmapCharRec(2,14,-1,0,4,ch105data);
-
-/* char: 0x68 'h' */
-
-static final byte[] ch104data = {
-(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xe3,(byte) 0xdf,(byte) 0xce,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch104 = new BitmapCharRec(8,14,-1,0,10,ch104data);
-
-/* char: 0x67 'g' */
-
-static final byte[] ch103data = {
-(byte) 0x1c,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x1,(byte) 0x80,(byte) 0x3d,(byte) 0x80,(byte) 0x7f,(byte) 0x80,(byte) 0x63,(byte) 0x80,(byte) 0xc1,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x7f,(byte) 0x80,(byte) 0x3d,(byte) 0x80,
-};
-
-static final BitmapCharRec ch103 = new BitmapCharRec(9,14,-1,4,11,ch103data);
-
-/* char: 0x66 'f' */
-
-static final byte[] ch102data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0xfc,(byte) 0xfc,(byte) 0x30,(byte) 0x30,(byte) 0x3c,(byte) 0x1c,
-};
-
-static final BitmapCharRec ch102 = new BitmapCharRec(6,14,0,0,6,ch102data);
-
-/* char: 0x65 'e' */
-
-static final byte[] ch101data = {
-(byte) 0x3c,(byte) 0x7f,(byte) 0xe3,(byte) 0xc0,(byte) 0xc0,(byte) 0xff,(byte) 0xc3,(byte) 0xc3,(byte) 0x7e,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch101 = new BitmapCharRec(8,10,-1,0,10,ch101data);
-
-/* char: 0x64 'd' */
-
-static final byte[] ch100data = {
-(byte) 0x3d,(byte) 0x80,(byte) 0x7f,(byte) 0x80,(byte) 0x63,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x63,(byte) 0x80,
-(byte) 0x7f,(byte) 0x80,(byte) 0x3d,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch100 = new BitmapCharRec(9,14,-1,0,11,ch100data);
-
-/* char: 0x63 'c' */
-
-static final byte[] ch99data = {
-(byte) 0x3e,(byte) 0x7f,(byte) 0x63,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x63,(byte) 0x7f,(byte) 0x3e,
-};
-
-static final BitmapCharRec ch99 = new BitmapCharRec(8,10,-1,0,10,ch99data);
-
-/* char: 0x62 'b' */
-
-static final byte[] ch98data = {
-(byte) 0xde,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xe3,(byte) 0x0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xe3,(byte) 0x0,
-(byte) 0xff,(byte) 0x0,(byte) 0xde,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch98 = new BitmapCharRec(9,14,-1,0,11,ch98data);
-
-/* char: 0x61 'a' */
-
-static final byte[] ch97data = {
-(byte) 0x76,(byte) 0xee,(byte) 0xc6,(byte) 0xc6,(byte) 0xe6,(byte) 0x7e,(byte) 0xe,(byte) 0xc6,(byte) 0xee,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch97 = new BitmapCharRec(7,10,-1,0,9,ch97data);
-
-/* char: 0x60 '`' */
-
-static final byte[] ch96data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x80,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch96 = new BitmapCharRec(2,5,-1,-9,4,ch96data);
-
-/* char: 0x5f '_' */
-
-static final byte[] ch95data = {
-(byte) 0xff,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch95 = new BitmapCharRec(10,2,0,4,10,ch95data);
-
-/* char: 0x5e '^' */
-
-static final byte[] ch94data = {
-(byte) 0x82,(byte) 0xc6,(byte) 0x6c,(byte) 0x38,(byte) 0x10,
-};
-
-static final BitmapCharRec ch94 = new BitmapCharRec(7,5,-1,-8,9,ch94data);
-
-/* char: 0x5d ']' */
-
-static final byte[] ch93data = {
-(byte) 0xf0,(byte) 0xf0,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0xf0,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch93 = new BitmapCharRec(4,18,0,4,5,ch93data);
-
-/* char: 0x5c '\' */
-
-static final byte[] ch92data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x10,(byte) 0x10,(byte) 0x30,(byte) 0x30,(byte) 0x20,(byte) 0x20,(byte) 0x60,(byte) 0x60,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch92 = new BitmapCharRec(5,14,0,0,5,ch92data);
-
-/* char: 0x5b '[' */
-
-static final byte[] ch91data = {
-(byte) 0xf0,(byte) 0xf0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xf0,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch91 = new BitmapCharRec(4,18,-1,4,5,ch91data);
-
-/* char: 0x5a 'Z' */
-
-static final byte[] ch90data = {
-(byte) 0xff,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1,(byte) 0x80,(byte) 0x0,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch90 = new BitmapCharRec(10,14,-1,0,12,ch90data);
-
-/* char: 0x59 'Y' */
-
-static final byte[] ch89data = {
-(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x19,(byte) 0x80,
-(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,
-};
-
-static final BitmapCharRec ch89 = new BitmapCharRec(12,14,-1,0,14,ch89data);
-
-/* char: 0x58 'X' */
-
-static final byte[] ch88data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0xe0,(byte) 0xe0,(byte) 0x60,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x31,(byte) 0x80,(byte) 0x1b,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0xe,(byte) 0x0,
-(byte) 0x1b,(byte) 0x0,(byte) 0x31,(byte) 0x80,(byte) 0x71,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe0,(byte) 0xe0,(byte) 0xc0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch88 = new BitmapCharRec(11,14,-1,0,13,ch88data);
-
-/* char: 0x57 'W' */
-
-static final byte[] ch87data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x1c,(byte) 0x38,(byte) 0x34,(byte) 0x2c,(byte) 0x36,(byte) 0x6c,(byte) 0x36,(byte) 0x6c,(byte) 0x66,(byte) 0x66,(byte) 0x66,(byte) 0x66,
-(byte) 0x62,(byte) 0x46,(byte) 0x63,(byte) 0xc6,(byte) 0xc3,(byte) 0xc3,(byte) 0xc1,(byte) 0x83,(byte) 0xc1,(byte) 0x83,(byte) 0xc1,(byte) 0x83,
-};
-
-static final BitmapCharRec ch87 = new BitmapCharRec(16,14,-1,0,18,ch87data);
-
-/* char: 0x56 'V' */
-
-static final byte[] ch86data = {
-(byte) 0x6,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x30,(byte) 0xc0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,
-};
-
-static final BitmapCharRec ch86 = new BitmapCharRec(12,14,-1,0,14,ch86data);
-
-/* char: 0x55 'U' */
-
-static final byte[] ch85data = {
-(byte) 0x1f,(byte) 0x0,(byte) 0x7f,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch85 = new BitmapCharRec(11,14,-1,0,13,ch85data);
-
-/* char: 0x54 'T' */
-
-static final byte[] ch84data = {
-(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,
-(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xff,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch84 = new BitmapCharRec(10,14,-1,0,12,ch84data);
-
-/* char: 0x53 'S' */
-
-static final byte[] ch83data = {
-(byte) 0x3f,(byte) 0x0,(byte) 0x7f,(byte) 0xc0,(byte) 0xe0,(byte) 0xe0,(byte) 0xc0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0xe0,(byte) 0x3,(byte) 0xc0,(byte) 0x1f,(byte) 0x0,
-(byte) 0x7c,(byte) 0x0,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x60,(byte) 0xe0,(byte) 0xe0,(byte) 0x7f,(byte) 0xc0,(byte) 0x1f,(byte) 0x0,
-};
-
-static final BitmapCharRec ch83 = new BitmapCharRec(11,14,-1,0,13,ch83data);
-
-/* char: 0x52 'R' */
-
-static final byte[] ch82data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc1,(byte) 0xc0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x0,
-};
-
-static final BitmapCharRec ch82 = new BitmapCharRec(10,14,-1,0,12,ch82data);
-
-/* char: 0x51 'Q' */
-
-static final byte[] ch81data = {
-(byte) 0x0,(byte) 0x30,(byte) 0xf,(byte) 0xb0,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0xf0,(byte) 0x61,(byte) 0xb0,(byte) 0xe1,(byte) 0xb8,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,
-(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0xe0,(byte) 0x38,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch81 = new BitmapCharRec(13,15,-1,1,15,ch81data);
-
-/* char: 0x50 'P' */
-
-static final byte[] ch80data = {
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc1,(byte) 0xc0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x0,
-};
-
-static final BitmapCharRec ch80 = new BitmapCharRec(10,14,-1,0,12,ch80data);
-
-/* char: 0x4f 'O' */
-
-static final byte[] ch79data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x38,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0xc0,(byte) 0x18,
-(byte) 0xc0,(byte) 0x18,(byte) 0xe0,(byte) 0x38,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch79 = new BitmapCharRec(13,14,-1,0,15,ch79data);
-
-/* char: 0x4e 'N' */
-
-static final byte[] ch78data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe0,(byte) 0xc1,(byte) 0xe0,(byte) 0xc1,(byte) 0xe0,(byte) 0xc3,(byte) 0x60,(byte) 0xc6,(byte) 0x60,(byte) 0xc6,(byte) 0x60,(byte) 0xcc,(byte) 0x60,
-(byte) 0xcc,(byte) 0x60,(byte) 0xd8,(byte) 0x60,(byte) 0xf0,(byte) 0x60,(byte) 0xf0,(byte) 0x60,(byte) 0xe0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch78 = new BitmapCharRec(11,14,-1,0,13,ch78data);
-
-/* char: 0x4d 'M' */
-
-static final byte[] ch77data = {
-(byte) 0xc3,(byte) 0xc,(byte) 0xc3,(byte) 0xc,(byte) 0xc7,(byte) 0x8c,(byte) 0xc4,(byte) 0x8c,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,(byte) 0xd8,(byte) 0x6c,(byte) 0xd8,(byte) 0x6c,
-(byte) 0xf0,(byte) 0x3c,(byte) 0xf0,(byte) 0x3c,(byte) 0xe0,(byte) 0x1c,(byte) 0xe0,(byte) 0x1c,(byte) 0xc0,(byte) 0xc,(byte) 0xc0,(byte) 0xc,
-};
-
-static final BitmapCharRec ch77 = new BitmapCharRec(14,14,-1,0,16,ch77data);
-
-/* char: 0x4c 'L' */
-
-static final byte[] ch76data = {
-(byte) 0xff,(byte) 0xff,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch76 = new BitmapCharRec(8,14,-1,0,10,ch76data);
-
-/* char: 0x4b 'K' */
-
-static final byte[] ch75data = {
-(byte) 0xc0,(byte) 0x70,(byte) 0xc0,(byte) 0xe0,(byte) 0xc1,(byte) 0xc0,(byte) 0xc3,(byte) 0x80,(byte) 0xc7,(byte) 0x0,(byte) 0xce,(byte) 0x0,(byte) 0xfc,(byte) 0x0,(byte) 0xf8,(byte) 0x0,
-(byte) 0xdc,(byte) 0x0,(byte) 0xce,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x80,(byte) 0xc1,(byte) 0xc0,(byte) 0xc0,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch75 = new BitmapCharRec(12,14,-1,0,13,ch75data);
-
-/* char: 0x4a 'J' */
-
-static final byte[] ch74data = {
-(byte) 0x3c,(byte) 0x7e,(byte) 0xe7,(byte) 0xc3,(byte) 0xc3,(byte) 0x3,(byte) 0x3,(byte) 0x3,(byte) 0x3,(byte) 0x3,(byte) 0x3,(byte) 0x3,(byte) 0x3,(byte) 0x3,
-};
-
-static final BitmapCharRec ch74 = new BitmapCharRec(8,14,-1,0,10,ch74data);
-
-/* char: 0x49 'I' */
-
-static final byte[] ch73data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch73 = new BitmapCharRec(2,14,-2,0,6,ch73data);
-
-/* char: 0x48 'H' */
-
-static final byte[] ch72data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xff,(byte) 0xe0,(byte) 0xff,(byte) 0xe0,
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch72 = new BitmapCharRec(11,14,-1,0,13,ch72data);
-
-/* char: 0x47 'G' */
-
-static final byte[] ch71data = {
-(byte) 0xf,(byte) 0xb0,(byte) 0x3f,(byte) 0xf0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x30,(byte) 0xc1,(byte) 0xf0,(byte) 0xc1,(byte) 0xf0,(byte) 0xc0,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xe0,(byte) 0x30,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch71 = new BitmapCharRec(12,14,-1,0,14,ch71data);
-
-/* char: 0x46 'F' */
-
-static final byte[] ch70data = {
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch70 = new BitmapCharRec(9,14,-1,0,11,ch70data);
-
-/* char: 0x45 'E' */
-
-static final byte[] ch69data = {
-(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,
-};
-
-static final BitmapCharRec ch69 = new BitmapCharRec(9,14,-1,0,11,ch69data);
-
-/* char: 0x44 'D' */
-
-static final byte[] ch68data = {
-(byte) 0xff,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xc1,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,
-(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0xc1,(byte) 0xc0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x0,
-};
-
-static final BitmapCharRec ch68 = new BitmapCharRec(11,14,-1,0,13,ch68data);
-
-/* char: 0x43 'C' */
-
-static final byte[] ch67data = {
-(byte) 0xf,(byte) 0x80,(byte) 0x3f,(byte) 0xe0,(byte) 0x70,(byte) 0x70,(byte) 0x60,(byte) 0x30,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xe0,(byte) 0x0,(byte) 0x60,(byte) 0x30,(byte) 0x70,(byte) 0x70,(byte) 0x3f,(byte) 0xe0,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch67 = new BitmapCharRec(12,14,-1,0,14,ch67data);
-
-/* char: 0x42 'B' */
-
-static final byte[] ch66data = {
-(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0xc0,(byte) 0xc0,(byte) 0xe0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe0,(byte) 0xff,(byte) 0xc0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc1,(byte) 0xc0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x0,
-};
-
-static final BitmapCharRec ch66 = new BitmapCharRec(11,14,-1,0,13,ch66data);
-
-/* char: 0x41 'A' */
-
-static final byte[] ch65data = {
-(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x7f,(byte) 0xe0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0xc0,
-(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0xf,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch65 = new BitmapCharRec(12,14,0,0,12,ch65data);
-
-/* char: 0x40 '@' */
-
-static final byte[] ch64data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1f,(byte) 0xf0,(byte) 0x38,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x67,(byte) 0x70,(byte) 0xcf,(byte) 0xf8,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,(byte) 0x66,
-(byte) 0xcc,(byte) 0x66,(byte) 0xcc,(byte) 0x63,(byte) 0xc6,(byte) 0x33,(byte) 0x67,(byte) 0x73,(byte) 0x63,(byte) 0xb3,(byte) 0x30,(byte) 0x6,(byte) 0x1c,(byte) 0xe,(byte) 0xf,(byte) 0xfc,
-(byte) 0x3,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch64 = new BitmapCharRec(16,17,-1,3,18,ch64data);
-
-/* char: 0x3f '?' */
-
-static final byte[] ch63data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x38,(byte) 0x1c,(byte) 0xe,(byte) 0xc6,(byte) 0xc6,(byte) 0xfe,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch63 = new BitmapCharRec(7,14,-1,0,10,ch63data);
-
-/* char: 0x3e '>' */
-
-static final byte[] ch62data = {
-(byte) 0xc0,(byte) 0xf0,(byte) 0x3c,(byte) 0xe,(byte) 0x3,(byte) 0xe,(byte) 0x3c,(byte) 0xf0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch62 = new BitmapCharRec(8,9,-1,0,10,ch62data);
-
-/* char: 0x3d '=' */
-
-static final byte[] ch61data = {
-(byte) 0xfe,(byte) 0xfe,(byte) 0x0,(byte) 0x0,(byte) 0xfe,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch61 = new BitmapCharRec(7,6,-2,-2,11,ch61data);
-
-/* char: 0x3c '<' */
-
-static final byte[] ch60data = {
-(byte) 0x3,(byte) 0xf,(byte) 0x3c,(byte) 0x70,(byte) 0xc0,(byte) 0x70,(byte) 0x3c,(byte) 0xf,(byte) 0x3,
-};
-
-static final BitmapCharRec ch60 = new BitmapCharRec(8,9,-1,0,10,ch60data);
-
-/* char: 0x3b ';' */
-
-static final byte[] ch59data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch59 = new BitmapCharRec(2,13,-1,3,5,ch59data);
-
-/* char: 0x3a ':' */
-
-static final byte[] ch58data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch58 = new BitmapCharRec(2,10,-1,0,5,ch58data);
-
-/* char: 0x39 '9' */
-
-static final byte[] ch57data = {
-(byte) 0x7c,(byte) 0xfe,(byte) 0xc6,(byte) 0x3,(byte) 0x3,(byte) 0x3b,(byte) 0x7f,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc7,(byte) 0x7e,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch57 = new BitmapCharRec(8,13,-1,0,10,ch57data);
-
-/* char: 0x38 '8' */
-
-static final byte[] ch56data = {
-(byte) 0x3c,(byte) 0x7e,(byte) 0xe7,(byte) 0xc3,(byte) 0xc3,(byte) 0x66,(byte) 0x7e,(byte) 0x66,(byte) 0xc3,(byte) 0xc3,(byte) 0xe7,(byte) 0x7e,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch56 = new BitmapCharRec(8,13,-1,0,10,ch56data);
-
-/* char: 0x37 '7' */
-
-static final byte[] ch55data = {
-(byte) 0x60,(byte) 0x60,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x18,(byte) 0x18,(byte) 0xc,(byte) 0xc,(byte) 0x6,(byte) 0x3,(byte) 0xff,(byte) 0xff,
-};
-
-static final BitmapCharRec ch55 = new BitmapCharRec(8,13,-1,0,10,ch55data);
-
-/* char: 0x36 '6' */
-
-static final byte[] ch54data = {
-(byte) 0x3c,(byte) 0x7e,(byte) 0xe3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xfe,(byte) 0xdc,(byte) 0xc0,(byte) 0xc0,(byte) 0x63,(byte) 0x7f,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch54 = new BitmapCharRec(8,13,-1,0,10,ch54data);
-
-/* char: 0x35 '5' */
-
-static final byte[] ch53data = {
-(byte) 0x7c,(byte) 0xfe,(byte) 0xc7,(byte) 0xc3,(byte) 0x3,(byte) 0x3,(byte) 0xc7,(byte) 0xfe,(byte) 0xfc,(byte) 0xc0,(byte) 0xc0,(byte) 0xfe,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch53 = new BitmapCharRec(8,13,-1,0,10,ch53data);
-
-/* char: 0x34 '4' */
-
-static final byte[] ch52data = {
-(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-(byte) 0x33,(byte) 0x0,(byte) 0x1b,(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x7,(byte) 0x0,(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch52 = new BitmapCharRec(9,13,-1,0,10,ch52data);
-
-/* char: 0x33 '3' */
-
-static final byte[] ch51data = {
-(byte) 0x3c,(byte) 0x7e,(byte) 0xc7,(byte) 0xc3,(byte) 0x3,(byte) 0x7,(byte) 0x1e,(byte) 0x1c,(byte) 0x6,(byte) 0xc3,(byte) 0xc3,(byte) 0x7e,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch51 = new BitmapCharRec(8,13,-1,0,10,ch51data);
-
-/* char: 0x32 '2' */
-
-static final byte[] ch50data = {
-(byte) 0xff,(byte) 0xff,(byte) 0xc0,(byte) 0xe0,(byte) 0x70,(byte) 0x38,(byte) 0x1c,(byte) 0xe,(byte) 0x7,(byte) 0x3,(byte) 0xc3,(byte) 0xfe,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch50 = new BitmapCharRec(8,13,-1,0,10,ch50data);
-
-/* char: 0x31 '1' */
-
-static final byte[] ch49data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0xf8,(byte) 0xf8,(byte) 0x18,
-};
-
-static final BitmapCharRec ch49 = new BitmapCharRec(5,13,-2,0,10,ch49data);
-
-/* char: 0x30 '0' */
-
-static final byte[] ch48data = {
-(byte) 0x3c,(byte) 0x7e,(byte) 0x66,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0xc3,(byte) 0x66,(byte) 0x7e,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch48 = new BitmapCharRec(8,13,-1,0,10,ch48data);
-
-/* char: 0x2f '/' */
-
-static final byte[] ch47data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x40,(byte) 0x40,(byte) 0x60,(byte) 0x60,(byte) 0x20,(byte) 0x20,(byte) 0x30,(byte) 0x30,(byte) 0x10,(byte) 0x10,(byte) 0x18,(byte) 0x18,
-};
-
-static final BitmapCharRec ch47 = new BitmapCharRec(5,14,0,0,5,ch47data);
-
-/* char: 0x2e '.' */
-
-static final byte[] ch46data = {
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch46 = new BitmapCharRec(2,2,-1,0,5,ch46data);
-
-/* char: 0x2d '-' */
-
-static final byte[] ch45data = {
-(byte) 0xff,(byte) 0xff,
-};
-
-static final BitmapCharRec ch45 = new BitmapCharRec(8,2,-1,-4,11,ch45data);
-
-/* char: 0x2c ',' */
-
-static final byte[] ch44data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch44 = new BitmapCharRec(2,5,-1,3,5,ch44data);
-
-/* char: 0x2b '+' */
-
-static final byte[] ch43data = {
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0xff,(byte) 0xff,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,
-};
-
-static final BitmapCharRec ch43 = new BitmapCharRec(8,10,-1,0,10,ch43data);
-
-/* char: 0x2a '*' */
-
-static final byte[] ch42data = {
-(byte) 0x88,(byte) 0x70,(byte) 0x70,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch42 = new BitmapCharRec(5,6,-1,-8,7,ch42data);
-
-/* char: 0x29 ')' */
-
-static final byte[] ch41data = {
-(byte) 0x80,(byte) 0xc0,(byte) 0x60,(byte) 0x60,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x60,(byte) 0x60,
-(byte) 0xc0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch41 = new BitmapCharRec(4,18,-1,4,6,ch41data);
-
-/* char: 0x28 '(' */
-
-static final byte[] ch40data = {
-(byte) 0x10,(byte) 0x30,(byte) 0x60,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0x60,
-(byte) 0x30,(byte) 0x10,
-};
-
-static final BitmapCharRec ch40 = new BitmapCharRec(4,18,-1,4,6,ch40data);
-
-/* char: 0x27 ''' */
-
-static final byte[] ch39data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch39 = new BitmapCharRec(2,5,-1,-9,4,ch39data);
-
-/* char: 0x26 '&' */
-
-static final byte[] ch38data = {
-(byte) 0x3c,(byte) 0x70,(byte) 0x7e,(byte) 0xe0,(byte) 0xe7,(byte) 0xc0,(byte) 0xc3,(byte) 0x80,(byte) 0xc3,(byte) 0xc0,(byte) 0xc6,(byte) 0xc0,(byte) 0xee,(byte) 0xc0,(byte) 0x7c,(byte) 0x0,
-(byte) 0x3c,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0x7e,(byte) 0x0,(byte) 0x3c,(byte) 0x0,
-};
-
-static final BitmapCharRec ch38 = new BitmapCharRec(12,13,-1,0,13,ch38data);
-
-/* char: 0x25 '%' */
-
-static final byte[] ch37data = {
-(byte) 0x18,(byte) 0x78,(byte) 0x18,(byte) 0xfc,(byte) 0xc,(byte) 0xcc,(byte) 0xc,(byte) 0xcc,(byte) 0x6,(byte) 0xfc,(byte) 0x6,(byte) 0x78,(byte) 0x3,(byte) 0x0,(byte) 0x7b,(byte) 0x0,
-(byte) 0xfd,(byte) 0x80,(byte) 0xcd,(byte) 0x80,(byte) 0xcc,(byte) 0xc0,(byte) 0xfc,(byte) 0xc0,(byte) 0x78,(byte) 0x60,
-};
-
-static final BitmapCharRec ch37 = new BitmapCharRec(14,13,-1,0,16,ch37data);
-
-/* char: 0x24 '$' */
-
-static final byte[] ch36data = {
-(byte) 0x8,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0xeb,(byte) 0x80,(byte) 0xc9,(byte) 0x80,(byte) 0x9,(byte) 0x80,(byte) 0xf,(byte) 0x0,
-(byte) 0x3e,(byte) 0x0,(byte) 0x78,(byte) 0x0,(byte) 0xe8,(byte) 0x0,(byte) 0xc8,(byte) 0x0,(byte) 0xcb,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x8,(byte) 0x0,
-};
-
-static final BitmapCharRec ch36 = new BitmapCharRec(9,16,-1,2,10,ch36data);
-
-/* char: 0x23 '#' */
-
-static final byte[] ch35data = {
-(byte) 0x24,(byte) 0x0,(byte) 0x24,(byte) 0x0,(byte) 0x24,(byte) 0x0,(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0x80,(byte) 0x12,(byte) 0x0,(byte) 0x12,(byte) 0x0,(byte) 0x12,(byte) 0x0,
-(byte) 0x7f,(byte) 0xc0,(byte) 0x7f,(byte) 0xc0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,
-};
-
-static final BitmapCharRec ch35 = new BitmapCharRec(10,13,0,0,10,ch35data);
-
-/* char: 0x22 '"' */
-
-static final byte[] ch34data = {
-(byte) 0x90,(byte) 0x90,(byte) 0xd8,(byte) 0xd8,(byte) 0xd8,
-};
-
-static final BitmapCharRec ch34 = new BitmapCharRec(5,5,0,-9,5,ch34data);
-
-/* char: 0x21 '!' */
-
-static final byte[] ch33data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch33 = new BitmapCharRec(2,14,-2,0,6,ch33data);
-
-/* char: 0x20 ' ' */
-
-static final BitmapCharRec ch32 = new BitmapCharRec(0,0,0,0,5,null);
-
-static final BitmapCharRec[] chars = {
-ch32,
-ch33,
-ch34,
-ch35,
-ch36,
-ch37,
-ch38,
-ch39,
-ch40,
-ch41,
-ch42,
-ch43,
-ch44,
-ch45,
-ch46,
-ch47,
-ch48,
-ch49,
-ch50,
-ch51,
-ch52,
-ch53,
-ch54,
-ch55,
-ch56,
-ch57,
-ch58,
-ch59,
-ch60,
-ch61,
-ch62,
-ch63,
-ch64,
-ch65,
-ch66,
-ch67,
-ch68,
-ch69,
-ch70,
-ch71,
-ch72,
-ch73,
-ch74,
-ch75,
-ch76,
-ch77,
-ch78,
-ch79,
-ch80,
-ch81,
-ch82,
-ch83,
-ch84,
-ch85,
-ch86,
-ch87,
-ch88,
-ch89,
-ch90,
-ch91,
-ch92,
-ch93,
-ch94,
-ch95,
-ch96,
-ch97,
-ch98,
-ch99,
-ch100,
-ch101,
-ch102,
-ch103,
-ch104,
-ch105,
-ch106,
-ch107,
-ch108,
-ch109,
-ch110,
-ch111,
-ch112,
-ch113,
-ch114,
-ch115,
-ch116,
-ch117,
-ch118,
-ch119,
-ch120,
-ch121,
-ch122,
-ch123,
-ch124,
-ch125,
-ch126,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-ch160,
-ch161,
-ch162,
-ch163,
-ch164,
-ch165,
-ch166,
-ch167,
-ch168,
-ch169,
-ch170,
-ch171,
-ch172,
-ch173,
-ch174,
-ch175,
-ch176,
-ch177,
-ch178,
-ch179,
-ch180,
-ch181,
-ch182,
-ch183,
-ch184,
-ch185,
-ch186,
-ch187,
-ch188,
-ch189,
-ch190,
-ch191,
-ch192,
-ch193,
-ch194,
-ch195,
-ch196,
-ch197,
-ch198,
-ch199,
-ch200,
-ch201,
-ch202,
-ch203,
-ch204,
-ch205,
-ch206,
-ch207,
-ch208,
-ch209,
-ch210,
-ch211,
-ch212,
-ch213,
-ch214,
-ch215,
-ch216,
-ch217,
-ch218,
-ch219,
-ch220,
-ch221,
-ch222,
-ch223,
-ch224,
-ch225,
-ch226,
-ch227,
-ch228,
-ch229,
-ch230,
-ch231,
-ch232,
-ch233,
-ch234,
-ch235,
-ch236,
-ch237,
-ch238,
-ch239,
-ch240,
-ch241,
-ch242,
-ch243,
-ch244,
-ch245,
-ch246,
-ch247,
-ch248,
-ch249,
-ch250,
-ch251,
-ch252,
-ch253,
-ch254,
-ch255,
-};
-
- static final BitmapFontRec glutBitmapHelvetica18 = new BitmapFontRec("-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1",
- 224,
- 32,
- chars);
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman10.java b/src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman10.java
deleted file mode 100644
index fc06ddea3..000000000
--- a/src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman10.java
+++ /dev/null
@@ -1,1797 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTBitmapTimesRoman10 {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-/* char: 0xff */
-
-static final byte[] ch255data = {
-(byte) 0x80,(byte) 0xc0,(byte) 0x40,(byte) 0x60,(byte) 0xa0,(byte) 0x90,(byte) 0xb8,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch255 = new BitmapCharRec(5,9,0,2,5,ch255data);
-
-/* char: 0xfe */
-
-static final byte[] ch254data = {
-(byte) 0xc0,(byte) 0x80,(byte) 0xe0,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch254 = new BitmapCharRec(4,9,0,2,5,ch254data);
-
-/* char: 0xfd */
-
-static final byte[] ch253data = {
-(byte) 0x80,(byte) 0xc0,(byte) 0x40,(byte) 0x60,(byte) 0xa0,(byte) 0x90,(byte) 0xb8,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch253 = new BitmapCharRec(5,10,0,2,5,ch253data);
-
-/* char: 0xfc */
-
-static final byte[] ch252data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch252 = new BitmapCharRec(5,7,0,0,5,ch252data);
-
-/* char: 0xfb */
-
-static final byte[] ch251data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch251 = new BitmapCharRec(5,8,0,0,5,ch251data);
-
-/* char: 0xfa */
-
-static final byte[] ch250data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch250 = new BitmapCharRec(5,8,0,0,5,ch250data);
-
-/* char: 0xf9 */
-
-static final byte[] ch249data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch249 = new BitmapCharRec(5,8,0,0,5,ch249data);
-
-/* char: 0xf8 */
-
-static final byte[] ch248data = {
-(byte) 0x80,(byte) 0x70,(byte) 0x48,(byte) 0x48,(byte) 0x48,(byte) 0x38,(byte) 0x4,
-};
-
-static final BitmapCharRec ch248 = new BitmapCharRec(6,7,1,1,5,ch248data);
-
-/* char: 0xf7 */
-
-static final byte[] ch247data = {
-(byte) 0x20,(byte) 0x0,(byte) 0xf8,(byte) 0x0,(byte) 0x20,
-};
-
-static final BitmapCharRec ch247 = new BitmapCharRec(5,5,0,0,6,ch247data);
-
-/* char: 0xf6 */
-
-static final byte[] ch246data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch246 = new BitmapCharRec(4,7,0,0,5,ch246data);
-
-/* char: 0xf5 */
-
-static final byte[] ch245data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0xa0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch245 = new BitmapCharRec(4,8,0,0,5,ch245data);
-
-/* char: 0xf4 */
-
-static final byte[] ch244data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch244 = new BitmapCharRec(4,8,0,0,5,ch244data);
-
-/* char: 0xf3 */
-
-static final byte[] ch243data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch243 = new BitmapCharRec(4,8,0,0,5,ch243data);
-
-/* char: 0xf2 */
-
-static final byte[] ch242data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch242 = new BitmapCharRec(4,8,0,0,5,ch242data);
-
-/* char: 0xf1 */
-
-static final byte[] ch241data = {
-(byte) 0xd8,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,(byte) 0x0,(byte) 0xa0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch241 = new BitmapCharRec(5,8,0,0,5,ch241data);
-
-/* char: 0xf0 */
-
-static final byte[] ch240data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0xa0,(byte) 0x70,(byte) 0x40,
-};
-
-static final BitmapCharRec ch240 = new BitmapCharRec(4,8,0,0,5,ch240data);
-
-/* char: 0xef */
-
-static final byte[] ch239data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch239 = new BitmapCharRec(3,7,0,0,4,ch239data);
-
-/* char: 0xee */
-
-static final byte[] ch238data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch238 = new BitmapCharRec(3,8,0,0,4,ch238data);
-
-/* char: 0xed */
-
-static final byte[] ch237data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch237 = new BitmapCharRec(3,8,0,0,4,ch237data);
-
-/* char: 0xec */
-
-static final byte[] ch236data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch236 = new BitmapCharRec(3,8,0,0,4,ch236data);
-
-/* char: 0xeb */
-
-static final byte[] ch235data = {
-(byte) 0x60,(byte) 0x80,(byte) 0xc0,(byte) 0xa0,(byte) 0x60,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch235 = new BitmapCharRec(3,7,0,0,4,ch235data);
-
-/* char: 0xea */
-
-static final byte[] ch234data = {
-(byte) 0x60,(byte) 0x80,(byte) 0xc0,(byte) 0xa0,(byte) 0x60,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch234 = new BitmapCharRec(3,8,0,0,4,ch234data);
-
-/* char: 0xe9 */
-
-static final byte[] ch233data = {
-(byte) 0x60,(byte) 0x80,(byte) 0xc0,(byte) 0xa0,(byte) 0x60,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch233 = new BitmapCharRec(3,8,0,0,4,ch233data);
-
-/* char: 0xe8 */
-
-static final byte[] ch232data = {
-(byte) 0x60,(byte) 0x80,(byte) 0xc0,(byte) 0xa0,(byte) 0x60,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch232 = new BitmapCharRec(3,8,0,0,4,ch232data);
-
-/* char: 0xe7 */
-
-static final byte[] ch231data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0x60,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x60,
-};
-
-static final BitmapCharRec ch231 = new BitmapCharRec(3,8,0,3,4,ch231data);
-
-/* char: 0xe6 */
-
-static final byte[] ch230data = {
-(byte) 0xd8,(byte) 0xa0,(byte) 0x70,(byte) 0x28,(byte) 0xd8,
-};
-
-static final BitmapCharRec ch230 = new BitmapCharRec(5,5,0,0,6,ch230data);
-
-/* char: 0xe5 */
-
-static final byte[] ch229data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x60,(byte) 0x20,(byte) 0xc0,(byte) 0x40,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch229 = new BitmapCharRec(3,8,0,0,4,ch229data);
-
-/* char: 0xe4 */
-
-static final byte[] ch228data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x60,(byte) 0x20,(byte) 0xc0,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch228 = new BitmapCharRec(3,7,0,0,4,ch228data);
-
-/* char: 0xe3 */
-
-static final byte[] ch227data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x60,(byte) 0x20,(byte) 0xc0,(byte) 0x0,(byte) 0xa0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch227 = new BitmapCharRec(4,8,0,0,4,ch227data);
-
-/* char: 0xe2 */
-
-static final byte[] ch226data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x60,(byte) 0x20,(byte) 0xc0,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch226 = new BitmapCharRec(3,8,0,0,4,ch226data);
-
-/* char: 0xe1 */
-
-static final byte[] ch225data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x60,(byte) 0x20,(byte) 0xc0,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch225 = new BitmapCharRec(3,8,0,0,4,ch225data);
-
-/* char: 0xe0 */
-
-static final byte[] ch224data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x60,(byte) 0x20,(byte) 0xc0,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch224 = new BitmapCharRec(3,8,0,0,4,ch224data);
-
-/* char: 0xdf */
-
-static final byte[] ch223data = {
-(byte) 0xe0,(byte) 0x50,(byte) 0x50,(byte) 0x60,(byte) 0x50,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch223 = new BitmapCharRec(4,7,0,0,5,ch223data);
-
-/* char: 0xde */
-
-static final byte[] ch222data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x70,(byte) 0x48,(byte) 0x70,(byte) 0x40,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch222 = new BitmapCharRec(5,7,0,0,6,ch222data);
-
-/* char: 0xdd */
-
-static final byte[] ch221data = {
-(byte) 0x38,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0xee,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch221 = new BitmapCharRec(7,10,0,0,8,ch221data);
-
-/* char: 0xdc */
-
-static final byte[] ch220data = {
-(byte) 0x38,(byte) 0x6c,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0xee,(byte) 0x0,(byte) 0x28,
-};
-
-static final BitmapCharRec ch220 = new BitmapCharRec(7,9,0,0,8,ch220data);
-
-/* char: 0xdb */
-
-static final byte[] ch219data = {
-(byte) 0x38,(byte) 0x6c,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0xee,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch219 = new BitmapCharRec(7,10,0,0,8,ch219data);
-
-/* char: 0xda */
-
-static final byte[] ch218data = {
-(byte) 0x38,(byte) 0x6c,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0xee,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch218 = new BitmapCharRec(7,10,0,0,8,ch218data);
-
-/* char: 0xd9 */
-
-static final byte[] ch217data = {
-(byte) 0x38,(byte) 0x6c,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0xee,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch217 = new BitmapCharRec(7,10,0,0,8,ch217data);
-
-/* char: 0xd8 */
-
-static final byte[] ch216data = {
-(byte) 0x80,(byte) 0x7c,(byte) 0x66,(byte) 0x52,(byte) 0x52,(byte) 0x4a,(byte) 0x66,(byte) 0x3e,(byte) 0x1,
-};
-
-static final BitmapCharRec ch216 = new BitmapCharRec(8,9,0,1,8,ch216data);
-
-/* char: 0xd7 */
-
-static final byte[] ch215data = {
-(byte) 0x88,(byte) 0x50,(byte) 0x20,(byte) 0x50,(byte) 0x88,
-};
-
-static final BitmapCharRec ch215 = new BitmapCharRec(5,5,0,0,6,ch215data);
-
-/* char: 0xd6 */
-
-static final byte[] ch214data = {
-(byte) 0x78,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xcc,(byte) 0x78,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch214 = new BitmapCharRec(6,9,0,0,7,ch214data);
-
-/* char: 0xd5 */
-
-static final byte[] ch213data = {
-(byte) 0x78,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xcc,(byte) 0x78,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch213 = new BitmapCharRec(6,10,0,0,7,ch213data);
-
-/* char: 0xd4 */
-
-static final byte[] ch212data = {
-(byte) 0x78,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xcc,(byte) 0x78,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch212 = new BitmapCharRec(6,10,0,0,7,ch212data);
-
-/* char: 0xd3 */
-
-static final byte[] ch211data = {
-(byte) 0x78,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xcc,(byte) 0x78,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch211 = new BitmapCharRec(6,10,0,0,7,ch211data);
-
-/* char: 0xd2 */
-
-static final byte[] ch210data = {
-(byte) 0x78,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xcc,(byte) 0x78,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch210 = new BitmapCharRec(6,10,0,0,7,ch210data);
-
-/* char: 0xd1 */
-
-static final byte[] ch209data = {
-(byte) 0xe4,(byte) 0x4c,(byte) 0x4c,(byte) 0x54,(byte) 0x54,(byte) 0x64,(byte) 0xee,(byte) 0x0,(byte) 0x50,(byte) 0x28,
-};
-
-static final BitmapCharRec ch209 = new BitmapCharRec(7,10,0,0,8,ch209data);
-
-/* char: 0xd0 */
-
-static final byte[] ch208data = {
-(byte) 0xf8,(byte) 0x4c,(byte) 0x44,(byte) 0xe4,(byte) 0x44,(byte) 0x4c,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch208 = new BitmapCharRec(6,7,0,0,7,ch208data);
-
-/* char: 0xcf */
-
-static final byte[] ch207data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch207 = new BitmapCharRec(3,9,0,0,4,ch207data);
-
-/* char: 0xce */
-
-static final byte[] ch206data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch206 = new BitmapCharRec(3,10,0,0,4,ch206data);
-
-/* char: 0xcd */
-
-static final byte[] ch205data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x0,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch205 = new BitmapCharRec(3,10,0,0,4,ch205data);
-
-/* char: 0xcc */
-
-static final byte[] ch204data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x0,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch204 = new BitmapCharRec(3,10,0,0,4,ch204data);
-
-/* char: 0xcb */
-
-static final byte[] ch203data = {
-(byte) 0xf8,(byte) 0x48,(byte) 0x40,(byte) 0x70,(byte) 0x40,(byte) 0x48,(byte) 0xf8,(byte) 0x0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch203 = new BitmapCharRec(5,9,0,0,6,ch203data);
-
-/* char: 0xca */
-
-static final byte[] ch202data = {
-(byte) 0xf8,(byte) 0x48,(byte) 0x40,(byte) 0x70,(byte) 0x40,(byte) 0x48,(byte) 0xf8,(byte) 0x0,(byte) 0x50,(byte) 0x20,
-};
-
-static final BitmapCharRec ch202 = new BitmapCharRec(5,10,0,0,6,ch202data);
-
-/* char: 0xc9 */
-
-static final byte[] ch201data = {
-(byte) 0xf8,(byte) 0x48,(byte) 0x40,(byte) 0x70,(byte) 0x40,(byte) 0x48,(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x10,
-};
-
-static final BitmapCharRec ch201 = new BitmapCharRec(5,10,0,0,6,ch201data);
-
-/* char: 0xc8 */
-
-static final byte[] ch200data = {
-(byte) 0xf8,(byte) 0x48,(byte) 0x40,(byte) 0x70,(byte) 0x40,(byte) 0x48,(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch200 = new BitmapCharRec(5,10,0,0,6,ch200data);
-
-/* char: 0xc7 */
-
-static final byte[] ch199data = {
-(byte) 0x60,(byte) 0x10,(byte) 0x20,(byte) 0x78,(byte) 0xc4,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xc4,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch199 = new BitmapCharRec(6,10,0,3,7,ch199data);
-
-/* char: 0xc6 */
-
-static final byte[] ch198data = {
-(byte) 0xef,(byte) 0x49,(byte) 0x78,(byte) 0x2e,(byte) 0x28,(byte) 0x39,(byte) 0x1f,
-};
-
-static final BitmapCharRec ch198 = new BitmapCharRec(8,7,0,0,9,ch198data);
-
-/* char: 0xc5 */
-
-static final byte[] ch197data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x7c,(byte) 0x28,(byte) 0x28,(byte) 0x38,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch197 = new BitmapCharRec(7,10,0,0,8,ch197data);
-
-/* char: 0xc4 */
-
-static final byte[] ch196data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x7c,(byte) 0x28,(byte) 0x28,(byte) 0x38,(byte) 0x10,(byte) 0x0,(byte) 0x28,
-};
-
-static final BitmapCharRec ch196 = new BitmapCharRec(7,9,0,0,8,ch196data);
-
-/* char: 0xc3 */
-
-static final byte[] ch195data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x7c,(byte) 0x28,(byte) 0x28,(byte) 0x38,(byte) 0x10,(byte) 0x0,(byte) 0x28,(byte) 0x14,
-};
-
-static final BitmapCharRec ch195 = new BitmapCharRec(7,10,0,0,8,ch195data);
-
-/* char: 0xc2 */
-
-static final byte[] ch194data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x7c,(byte) 0x28,(byte) 0x28,(byte) 0x38,(byte) 0x10,(byte) 0x0,(byte) 0x28,(byte) 0x10,
-};
-
-static final BitmapCharRec ch194 = new BitmapCharRec(7,10,0,0,8,ch194data);
-
-/* char: 0xc1 */
-
-static final byte[] ch193data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x7c,(byte) 0x28,(byte) 0x28,(byte) 0x38,(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x8,
-};
-
-static final BitmapCharRec ch193 = new BitmapCharRec(7,10,0,0,8,ch193data);
-
-/* char: 0xc0 */
-
-static final byte[] ch192data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x7c,(byte) 0x28,(byte) 0x28,(byte) 0x38,(byte) 0x10,(byte) 0x0,(byte) 0x10,(byte) 0x20,
-};
-
-static final BitmapCharRec ch192 = new BitmapCharRec(7,10,0,0,8,ch192data);
-
-/* char: 0xbf */
-
-static final byte[] ch191data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch191 = new BitmapCharRec(3,7,0,2,4,ch191data);
-
-/* char: 0xbe */
-
-static final byte[] ch190data = {
-(byte) 0x44,(byte) 0x3e,(byte) 0x2c,(byte) 0xd4,(byte) 0x28,(byte) 0x48,(byte) 0xe4,
-};
-
-static final BitmapCharRec ch190 = new BitmapCharRec(7,7,0,0,8,ch190data);
-
-/* char: 0xbd */
-
-static final byte[] ch189data = {
-(byte) 0x4e,(byte) 0x24,(byte) 0x2a,(byte) 0xf6,(byte) 0x48,(byte) 0xc8,(byte) 0x44,
-};
-
-static final BitmapCharRec ch189 = new BitmapCharRec(7,7,0,0,8,ch189data);
-
-/* char: 0xbc */
-
-static final byte[] ch188data = {
-(byte) 0x44,(byte) 0x3e,(byte) 0x2c,(byte) 0xf4,(byte) 0x48,(byte) 0xc8,(byte) 0x44,
-};
-
-static final BitmapCharRec ch188 = new BitmapCharRec(7,7,0,0,8,ch188data);
-
-/* char: 0xbb */
-
-static final byte[] ch187data = {
-(byte) 0xa0,(byte) 0x50,(byte) 0x50,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch187 = new BitmapCharRec(4,4,0,-1,5,ch187data);
-
-/* char: 0xba */
-
-static final byte[] ch186data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0x40,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch186 = new BitmapCharRec(3,5,0,-2,4,ch186data);
-
-/* char: 0xb9 */
-
-static final byte[] ch185data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch185 = new BitmapCharRec(3,4,0,-3,3,ch185data);
-
-/* char: 0xb8 */
-
-static final byte[] ch184data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x40,
-};
-
-static final BitmapCharRec ch184 = new BitmapCharRec(3,3,0,3,4,ch184data);
-
-/* char: 0xb7 */
-
-static final byte[] ch183data = {
-(byte) 0x80,
-};
-
-static final BitmapCharRec ch183 = new BitmapCharRec(1,1,0,-2,2,ch183data);
-
-/* char: 0xb6 */
-
-static final byte[] ch182data = {
-(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x28,(byte) 0x68,(byte) 0xe8,(byte) 0xe8,(byte) 0xe8,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch182 = new BitmapCharRec(6,9,0,2,6,ch182data);
-
-/* char: 0xb5 */
-
-static final byte[] ch181data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xe8,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,
-};
-
-static final BitmapCharRec ch181 = new BitmapCharRec(5,7,0,2,5,ch181data);
-
-/* char: 0xb4 */
-
-static final byte[] ch180data = {
-(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch180 = new BitmapCharRec(2,2,0,-5,3,ch180data);
-
-/* char: 0xb3 */
-
-static final byte[] ch179data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch179 = new BitmapCharRec(3,4,0,-3,3,ch179data);
-
-/* char: 0xb2 */
-
-static final byte[] ch178data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0xa0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch178 = new BitmapCharRec(3,4,0,-3,3,ch178data);
-
-/* char: 0xb1 */
-
-static final byte[] ch177data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch177 = new BitmapCharRec(5,7,0,0,6,ch177data);
-
-/* char: 0xb0 */
-
-static final byte[] ch176data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch176 = new BitmapCharRec(4,4,0,-3,4,ch176data);
-
-/* char: 0xaf */
-
-static final byte[] ch175data = {
-(byte) 0xe0,
-};
-
-static final BitmapCharRec ch175 = new BitmapCharRec(3,1,0,-6,4,ch175data);
-
-/* char: 0xae */
-
-static final byte[] ch174data = {
-(byte) 0x38,(byte) 0x44,(byte) 0xaa,(byte) 0xb2,(byte) 0xba,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch174 = new BitmapCharRec(7,7,-1,0,9,ch174data);
-
-/* char: 0xad */
-
-static final byte[] ch173data = {
-(byte) 0xe0,
-};
-
-static final BitmapCharRec ch173 = new BitmapCharRec(3,1,0,-2,4,ch173data);
-
-/* char: 0xac */
-
-static final byte[] ch172data = {
-(byte) 0x8,(byte) 0x8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch172 = new BitmapCharRec(5,3,-1,-1,7,ch172data);
-
-/* char: 0xab */
-
-static final byte[] ch171data = {
-(byte) 0x50,(byte) 0xa0,(byte) 0xa0,(byte) 0x50,
-};
-
-static final BitmapCharRec ch171 = new BitmapCharRec(4,4,0,-1,5,ch171data);
-
-/* char: 0xaa */
-
-static final byte[] ch170data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xa0,(byte) 0x20,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch170 = new BitmapCharRec(3,5,0,-2,4,ch170data);
-
-/* char: 0xa9 */
-
-static final byte[] ch169data = {
-(byte) 0x38,(byte) 0x44,(byte) 0x9a,(byte) 0xa2,(byte) 0x9a,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch169 = new BitmapCharRec(7,7,-1,0,9,ch169data);
-
-/* char: 0xa8 */
-
-static final byte[] ch168data = {
-(byte) 0xa0,
-};
-
-static final BitmapCharRec ch168 = new BitmapCharRec(3,1,-1,-6,5,ch168data);
-
-/* char: 0xa7 */
-
-static final byte[] ch167data = {
-(byte) 0xe0,(byte) 0x90,(byte) 0x20,(byte) 0x50,(byte) 0x90,(byte) 0xa0,(byte) 0x40,(byte) 0x90,(byte) 0x70,
-};
-
-static final BitmapCharRec ch167 = new BitmapCharRec(4,9,0,1,5,ch167data);
-
-/* char: 0xa6 */
-
-static final byte[] ch166data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch166 = new BitmapCharRec(1,7,0,0,2,ch166data);
-
-/* char: 0xa5 */
-
-static final byte[] ch165data = {
-(byte) 0x70,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0xd8,(byte) 0x50,(byte) 0x88,
-};
-
-static final BitmapCharRec ch165 = new BitmapCharRec(5,7,0,0,5,ch165data);
-
-/* char: 0xa4 */
-
-static final byte[] ch164data = {
-(byte) 0x88,(byte) 0x70,(byte) 0x50,(byte) 0x50,(byte) 0x70,(byte) 0x88,
-};
-
-static final BitmapCharRec ch164 = new BitmapCharRec(5,6,0,-1,5,ch164data);
-
-/* char: 0xa3 */
-
-static final byte[] ch163data = {
-(byte) 0xf0,(byte) 0xc8,(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x50,(byte) 0x30,
-};
-
-static final BitmapCharRec ch163 = new BitmapCharRec(5,7,0,0,5,ch163data);
-
-/* char: 0xa2 */
-
-static final byte[] ch162data = {
-(byte) 0x80,(byte) 0xe0,(byte) 0x90,(byte) 0x80,(byte) 0x90,(byte) 0x70,(byte) 0x10,
-};
-
-static final BitmapCharRec ch162 = new BitmapCharRec(4,7,0,1,5,ch162data);
-
-/* char: 0xa1 */
-
-static final byte[] ch161data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch161 = new BitmapCharRec(1,7,-1,2,3,ch161data);
-
-/* char: 0xa0 */
-
-static final BitmapCharRec ch160 = new BitmapCharRec(0,0,0,0,2,null);
-
-/* char: 0x7e '~' */
-
-static final byte[] ch126data = {
-(byte) 0x98,(byte) 0x64,
-};
-
-static final BitmapCharRec ch126 = new BitmapCharRec(6,2,0,-2,7,ch126data);
-
-/* char: 0x7d '}' */
-
-static final byte[] ch125data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch125 = new BitmapCharRec(3,9,0,2,4,ch125data);
-
-/* char: 0x7c '|' */
-
-static final byte[] ch124data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch124 = new BitmapCharRec(1,9,0,2,2,ch124data);
-
-/* char: 0x7b '{' */
-
-static final byte[] ch123data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch123 = new BitmapCharRec(3,9,0,2,4,ch123data);
-
-/* char: 0x7a 'z' */
-
-static final byte[] ch122data = {
-(byte) 0xf0,(byte) 0x90,(byte) 0x40,(byte) 0x20,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch122 = new BitmapCharRec(4,5,0,0,5,ch122data);
-
-/* char: 0x79 'y' */
-
-static final byte[] ch121data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x30,(byte) 0x50,(byte) 0x48,(byte) 0xdc,
-};
-
-static final BitmapCharRec ch121 = new BitmapCharRec(6,7,1,2,5,ch121data);
-
-/* char: 0x78 'x' */
-
-static final byte[] ch120data = {
-(byte) 0xd8,(byte) 0x50,(byte) 0x20,(byte) 0x50,(byte) 0xd8,
-};
-
-static final BitmapCharRec ch120 = new BitmapCharRec(5,5,0,0,6,ch120data);
-
-/* char: 0x77 'w' */
-
-static final byte[] ch119data = {
-(byte) 0x28,(byte) 0x6c,(byte) 0x54,(byte) 0x92,(byte) 0xdb,
-};
-
-static final BitmapCharRec ch119 = new BitmapCharRec(8,5,0,0,8,ch119data);
-
-/* char: 0x76 'v' */
-
-static final byte[] ch118data = {
-(byte) 0x20,(byte) 0x60,(byte) 0x50,(byte) 0x90,(byte) 0xd8,
-};
-
-static final BitmapCharRec ch118 = new BitmapCharRec(5,5,0,0,5,ch118data);
-
-/* char: 0x75 'u' */
-
-static final byte[] ch117data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,
-};
-
-static final BitmapCharRec ch117 = new BitmapCharRec(5,5,0,0,5,ch117data);
-
-/* char: 0x74 't' */
-
-static final byte[] ch116data = {
-(byte) 0x30,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch116 = new BitmapCharRec(4,6,0,0,4,ch116data);
-
-/* char: 0x73 's' */
-
-static final byte[] ch115data = {
-(byte) 0xe0,(byte) 0x20,(byte) 0x60,(byte) 0x80,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch115 = new BitmapCharRec(3,5,0,0,4,ch115data);
-
-/* char: 0x72 'r' */
-
-static final byte[] ch114data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x60,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch114 = new BitmapCharRec(3,5,0,0,4,ch114data);
-
-/* char: 0x71 'q' */
-
-static final byte[] ch113data = {
-(byte) 0x38,(byte) 0x10,(byte) 0x70,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x70,
-};
-
-static final BitmapCharRec ch113 = new BitmapCharRec(5,7,0,2,5,ch113data);
-
-/* char: 0x70 'p' */
-
-static final byte[] ch112data = {
-(byte) 0xc0,(byte) 0x80,(byte) 0xe0,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch112 = new BitmapCharRec(4,7,0,2,5,ch112data);
-
-/* char: 0x6f 'o' */
-
-static final byte[] ch111data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch111 = new BitmapCharRec(4,5,0,0,5,ch111data);
-
-/* char: 0x6e 'n' */
-
-static final byte[] ch110data = {
-(byte) 0xd8,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch110 = new BitmapCharRec(5,5,0,0,5,ch110data);
-
-/* char: 0x6d 'm' */
-
-static final byte[] ch109data = {
-(byte) 0xdb,(byte) 0x92,(byte) 0x92,(byte) 0x92,(byte) 0xec,
-};
-
-static final BitmapCharRec ch109 = new BitmapCharRec(8,5,0,0,8,ch109data);
-
-/* char: 0x6c 'l' */
-
-static final byte[] ch108data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch108 = new BitmapCharRec(3,7,0,0,4,ch108data);
-
-/* char: 0x6b 'k' */
-
-static final byte[] ch107data = {
-(byte) 0x98,(byte) 0x90,(byte) 0xe0,(byte) 0xa0,(byte) 0x90,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch107 = new BitmapCharRec(5,7,0,0,5,ch107data);
-
-/* char: 0x6a 'j' */
-
-static final byte[] ch106data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch106 = new BitmapCharRec(2,9,0,2,3,ch106data);
-
-/* char: 0x69 'i' */
-
-static final byte[] ch105data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch105 = new BitmapCharRec(2,7,0,0,3,ch105data);
-
-/* char: 0x68 'h' */
-
-static final byte[] ch104data = {
-(byte) 0xd8,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch104 = new BitmapCharRec(5,7,0,0,5,ch104data);
-
-/* char: 0x67 'g' */
-
-static final byte[] ch103data = {
-(byte) 0xe0,(byte) 0x90,(byte) 0x60,(byte) 0x40,(byte) 0xa0,(byte) 0xa0,(byte) 0x70,
-};
-
-static final BitmapCharRec ch103 = new BitmapCharRec(4,7,0,2,5,ch103data);
-
-/* char: 0x66 'f' */
-
-static final byte[] ch102data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,(byte) 0x40,(byte) 0x30,
-};
-
-static final BitmapCharRec ch102 = new BitmapCharRec(4,7,0,0,4,ch102data);
-
-/* char: 0x65 'e' */
-
-static final byte[] ch101data = {
-(byte) 0x60,(byte) 0x80,(byte) 0xc0,(byte) 0xa0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch101 = new BitmapCharRec(3,5,0,0,4,ch101data);
-
-/* char: 0x64 'd' */
-
-static final byte[] ch100data = {
-(byte) 0x68,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x70,(byte) 0x10,(byte) 0x30,
-};
-
-static final BitmapCharRec ch100 = new BitmapCharRec(5,7,0,0,5,ch100data);
-
-/* char: 0x63 'c' */
-
-static final byte[] ch99data = {
-(byte) 0x60,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x60,
-};
-
-static final BitmapCharRec ch99 = new BitmapCharRec(3,5,0,0,4,ch99data);
-
-/* char: 0x62 'b' */
-
-static final byte[] ch98data = {
-(byte) 0xe0,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch98 = new BitmapCharRec(4,7,0,0,5,ch98data);
-
-/* char: 0x61 'a' */
-
-static final byte[] ch97data = {
-(byte) 0xe0,(byte) 0xa0,(byte) 0x60,(byte) 0x20,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch97 = new BitmapCharRec(3,5,0,0,4,ch97data);
-
-/* char: 0x60 '`' */
-
-static final byte[] ch96data = {
-(byte) 0xc0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch96 = new BitmapCharRec(2,2,0,-5,3,ch96data);
-
-/* char: 0x5f '_' */
-
-static final byte[] ch95data = {
-(byte) 0xf8,
-};
-
-static final BitmapCharRec ch95 = new BitmapCharRec(5,1,0,3,5,ch95data);
-
-/* char: 0x5e '^' */
-
-static final byte[] ch94data = {
-(byte) 0xa0,(byte) 0xa0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch94 = new BitmapCharRec(3,3,-1,-4,5,ch94data);
-
-/* char: 0x5d ']' */
-
-static final byte[] ch93data = {
-(byte) 0xc0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch93 = new BitmapCharRec(2,9,0,2,3,ch93data);
-
-/* char: 0x5c '\' */
-
-static final byte[] ch92data = {
-(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch92 = new BitmapCharRec(3,7,0,0,3,ch92data);
-
-/* char: 0x5b '[' */
-
-static final byte[] ch91data = {
-(byte) 0xc0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch91 = new BitmapCharRec(2,9,0,2,3,ch91data);
-
-/* char: 0x5a 'Z' */
-
-static final byte[] ch90data = {
-(byte) 0xf8,(byte) 0x88,(byte) 0x40,(byte) 0x20,(byte) 0x10,(byte) 0x88,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch90 = new BitmapCharRec(5,7,0,0,6,ch90data);
-
-/* char: 0x59 'Y' */
-
-static final byte[] ch89data = {
-(byte) 0x38,(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x44,(byte) 0xee,
-};
-
-static final BitmapCharRec ch89 = new BitmapCharRec(7,7,0,0,8,ch89data);
-
-/* char: 0x58 'X' */
-
-static final byte[] ch88data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x28,(byte) 0x10,(byte) 0x28,(byte) 0x44,(byte) 0xee,
-};
-
-static final BitmapCharRec ch88 = new BitmapCharRec(7,7,0,0,8,ch88data);
-
-/* char: 0x57 'W' */
-
-static final byte[] ch87data = {
-(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0xc9,(byte) 0x80,(byte) 0x88,(byte) 0x80,(byte) 0xdd,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch87 = new BitmapCharRec(10,7,0,0,10,ch87data);
-
-/* char: 0x56 'V' */
-
-static final byte[] ch86data = {
-(byte) 0x10,(byte) 0x10,(byte) 0x28,(byte) 0x28,(byte) 0x6c,(byte) 0x44,(byte) 0xee,
-};
-
-static final BitmapCharRec ch86 = new BitmapCharRec(7,7,0,0,8,ch86data);
-
-/* char: 0x55 'U' */
-
-static final byte[] ch85data = {
-(byte) 0x38,(byte) 0x6c,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0xee,
-};
-
-static final BitmapCharRec ch85 = new BitmapCharRec(7,7,0,0,8,ch85data);
-
-/* char: 0x54 'T' */
-
-static final byte[] ch84data = {
-(byte) 0x70,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xa8,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch84 = new BitmapCharRec(5,7,0,0,6,ch84data);
-
-/* char: 0x53 'S' */
-
-static final byte[] ch83data = {
-(byte) 0xe0,(byte) 0x90,(byte) 0x10,(byte) 0x60,(byte) 0xc0,(byte) 0x90,(byte) 0x70,
-};
-
-static final BitmapCharRec ch83 = new BitmapCharRec(4,7,0,0,5,ch83data);
-
-/* char: 0x52 'R' */
-
-static final byte[] ch82data = {
-(byte) 0xec,(byte) 0x48,(byte) 0x50,(byte) 0x70,(byte) 0x48,(byte) 0x48,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch82 = new BitmapCharRec(6,7,0,0,7,ch82data);
-
-/* char: 0x51 'Q' */
-
-static final byte[] ch81data = {
-(byte) 0xc,(byte) 0x18,(byte) 0x70,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xcc,(byte) 0x78,
-};
-
-static final BitmapCharRec ch81 = new BitmapCharRec(6,9,0,2,7,ch81data);
-
-/* char: 0x50 'P' */
-
-static final byte[] ch80data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x70,(byte) 0x48,(byte) 0x48,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch80 = new BitmapCharRec(5,7,0,0,6,ch80data);
-
-/* char: 0x4f 'O' */
-
-static final byte[] ch79data = {
-(byte) 0x78,(byte) 0xcc,(byte) 0x84,(byte) 0x84,(byte) 0x84,(byte) 0xcc,(byte) 0x78,
-};
-
-static final BitmapCharRec ch79 = new BitmapCharRec(6,7,0,0,7,ch79data);
-
-/* char: 0x4e 'N' */
-
-static final byte[] ch78data = {
-(byte) 0xe4,(byte) 0x4c,(byte) 0x4c,(byte) 0x54,(byte) 0x54,(byte) 0x64,(byte) 0xee,
-};
-
-static final BitmapCharRec ch78 = new BitmapCharRec(7,7,0,0,8,ch78data);
-
-/* char: 0x4d 'M' */
-
-static final byte[] ch77data = {
-(byte) 0xeb,(byte) 0x80,(byte) 0x49,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0x55,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0xe3,(byte) 0x80,
-};
-
-static final BitmapCharRec ch77 = new BitmapCharRec(9,7,0,0,10,ch77data);
-
-/* char: 0x4c 'L' */
-
-static final byte[] ch76data = {
-(byte) 0xf8,(byte) 0x48,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch76 = new BitmapCharRec(5,7,0,0,6,ch76data);
-
-/* char: 0x4b 'K' */
-
-static final byte[] ch75data = {
-(byte) 0xec,(byte) 0x48,(byte) 0x50,(byte) 0x60,(byte) 0x50,(byte) 0x48,(byte) 0xec,
-};
-
-static final BitmapCharRec ch75 = new BitmapCharRec(6,7,0,0,7,ch75data);
-
-/* char: 0x4a 'J' */
-
-static final byte[] ch74data = {
-(byte) 0xc0,(byte) 0xa0,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x70,
-};
-
-static final BitmapCharRec ch74 = new BitmapCharRec(4,7,0,0,4,ch74data);
-
-/* char: 0x49 'I' */
-
-static final byte[] ch73data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch73 = new BitmapCharRec(3,7,0,0,4,ch73data);
-
-/* char: 0x48 'H' */
-
-static final byte[] ch72data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x44,(byte) 0x7c,(byte) 0x44,(byte) 0x44,(byte) 0xee,
-};
-
-static final BitmapCharRec ch72 = new BitmapCharRec(7,7,0,0,8,ch72data);
-
-/* char: 0x47 'G' */
-
-static final byte[] ch71data = {
-(byte) 0x78,(byte) 0xc4,(byte) 0x84,(byte) 0x9c,(byte) 0x80,(byte) 0xc4,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch71 = new BitmapCharRec(6,7,0,0,7,ch71data);
-
-/* char: 0x46 'F' */
-
-static final byte[] ch70data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x70,(byte) 0x40,(byte) 0x48,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch70 = new BitmapCharRec(5,7,0,0,6,ch70data);
-
-/* char: 0x45 'E' */
-
-static final byte[] ch69data = {
-(byte) 0xf8,(byte) 0x48,(byte) 0x40,(byte) 0x70,(byte) 0x40,(byte) 0x48,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch69 = new BitmapCharRec(5,7,0,0,6,ch69data);
-
-/* char: 0x44 'D' */
-
-static final byte[] ch68data = {
-(byte) 0xf8,(byte) 0x4c,(byte) 0x44,(byte) 0x44,(byte) 0x44,(byte) 0x4c,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch68 = new BitmapCharRec(6,7,0,0,7,ch68data);
-
-/* char: 0x43 'C' */
-
-static final byte[] ch67data = {
-(byte) 0x78,(byte) 0xc4,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0xc4,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch67 = new BitmapCharRec(6,7,0,0,7,ch67data);
-
-/* char: 0x42 'B' */
-
-static final byte[] ch66data = {
-(byte) 0xf0,(byte) 0x48,(byte) 0x48,(byte) 0x70,(byte) 0x48,(byte) 0x48,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch66 = new BitmapCharRec(5,7,0,0,6,ch66data);
-
-/* char: 0x41 'A' */
-
-static final byte[] ch65data = {
-(byte) 0xee,(byte) 0x44,(byte) 0x7c,(byte) 0x28,(byte) 0x28,(byte) 0x38,(byte) 0x10,
-};
-
-static final BitmapCharRec ch65 = new BitmapCharRec(7,7,0,0,8,ch65data);
-
-/* char: 0x40 '@' */
-
-static final byte[] ch64data = {
-(byte) 0x3e,(byte) 0x40,(byte) 0x92,(byte) 0xad,(byte) 0xa5,(byte) 0xa5,(byte) 0x9d,(byte) 0x42,(byte) 0x3c,
-};
-
-static final BitmapCharRec ch64 = new BitmapCharRec(8,9,0,2,9,ch64data);
-
-/* char: 0x3f '?' */
-
-static final byte[] ch63data = {
-(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0xa0,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch63 = new BitmapCharRec(3,7,0,0,4,ch63data);
-
-/* char: 0x3e '>' */
-
-static final byte[] ch62data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch62 = new BitmapCharRec(3,5,0,0,5,ch62data);
-
-/* char: 0x3d '=' */
-
-static final byte[] ch61data = {
-(byte) 0xf8,(byte) 0x0,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch61 = new BitmapCharRec(5,3,0,-1,6,ch61data);
-
-/* char: 0x3c '<' */
-
-static final byte[] ch60data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x80,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch60 = new BitmapCharRec(3,5,-1,0,5,ch60data);
-
-/* char: 0x3b ';' */
-
-static final byte[] ch59data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch59 = new BitmapCharRec(1,7,-1,2,3,ch59data);
-
-/* char: 0x3a ':' */
-
-static final byte[] ch58data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x80,
-};
-
-static final BitmapCharRec ch58 = new BitmapCharRec(1,5,-1,0,3,ch58data);
-
-/* char: 0x39 '9' */
-
-static final byte[] ch57data = {
-(byte) 0xc0,(byte) 0x20,(byte) 0x70,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch57 = new BitmapCharRec(4,7,0,0,5,ch57data);
-
-/* char: 0x38 '8' */
-
-static final byte[] ch56data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch56 = new BitmapCharRec(4,7,0,0,5,ch56data);
-
-/* char: 0x37 '7' */
-
-static final byte[] ch55data = {
-(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x90,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch55 = new BitmapCharRec(4,7,0,0,5,ch55data);
-
-/* char: 0x36 '6' */
-
-static final byte[] ch54data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0xe0,(byte) 0x40,(byte) 0x30,
-};
-
-static final BitmapCharRec ch54 = new BitmapCharRec(4,7,0,0,5,ch54data);
-
-/* char: 0x35 '5' */
-
-static final byte[] ch53data = {
-(byte) 0xe0,(byte) 0x90,(byte) 0x10,(byte) 0x10,(byte) 0xe0,(byte) 0x40,(byte) 0x70,
-};
-
-static final BitmapCharRec ch53 = new BitmapCharRec(4,7,0,0,5,ch53data);
-
-/* char: 0x34 '4' */
-
-static final byte[] ch52data = {
-(byte) 0x10,(byte) 0x10,(byte) 0xf8,(byte) 0x90,(byte) 0x50,(byte) 0x30,(byte) 0x10,
-};
-
-static final BitmapCharRec ch52 = new BitmapCharRec(5,7,0,0,5,ch52data);
-
-/* char: 0x33 '3' */
-
-static final byte[] ch51data = {
-(byte) 0xe0,(byte) 0x10,(byte) 0x10,(byte) 0x60,(byte) 0x10,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch51 = new BitmapCharRec(4,7,0,0,5,ch51data);
-
-/* char: 0x32 '2' */
-
-static final byte[] ch50data = {
-(byte) 0xf0,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x10,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch50 = new BitmapCharRec(4,7,0,0,5,ch50data);
-
-/* char: 0x31 '1' */
-
-static final byte[] ch49data = {
-(byte) 0xe0,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0xc0,(byte) 0x40,
-};
-
-static final BitmapCharRec ch49 = new BitmapCharRec(3,7,-1,0,5,ch49data);
-
-/* char: 0x30 '0' */
-
-static final byte[] ch48data = {
-(byte) 0x60,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x90,(byte) 0x60,
-};
-
-static final BitmapCharRec ch48 = new BitmapCharRec(4,7,0,0,5,ch48data);
-
-/* char: 0x2f '/' */
-
-static final byte[] ch47data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch47 = new BitmapCharRec(3,7,0,0,3,ch47data);
-
-/* char: 0x2e '.' */
-
-static final byte[] ch46data = {
-(byte) 0x80,
-};
-
-static final BitmapCharRec ch46 = new BitmapCharRec(1,1,-1,0,3,ch46data);
-
-/* char: 0x2d '-' */
-
-static final byte[] ch45data = {
-(byte) 0xf0,
-};
-
-static final BitmapCharRec ch45 = new BitmapCharRec(4,1,-1,-2,7,ch45data);
-
-/* char: 0x2c ',' */
-
-static final byte[] ch44data = {
-(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch44 = new BitmapCharRec(1,3,-1,2,3,ch44data);
-
-/* char: 0x2b '+' */
-
-static final byte[] ch43data = {
-(byte) 0x20,(byte) 0x20,(byte) 0xf8,(byte) 0x20,(byte) 0x20,
-};
-
-static final BitmapCharRec ch43 = new BitmapCharRec(5,5,0,0,6,ch43data);
-
-/* char: 0x2a '*' */
-
-static final byte[] ch42data = {
-(byte) 0xa0,(byte) 0x40,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch42 = new BitmapCharRec(3,3,0,-4,5,ch42data);
-
-/* char: 0x29 ')' */
-
-static final byte[] ch41data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch41 = new BitmapCharRec(3,9,0,2,4,ch41data);
-
-/* char: 0x28 '(' */
-
-static final byte[] ch40data = {
-(byte) 0x20,(byte) 0x40,(byte) 0x40,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x40,(byte) 0x40,(byte) 0x20,
-};
-
-static final BitmapCharRec ch40 = new BitmapCharRec(3,9,0,2,4,ch40data);
-
-/* char: 0x27 ''' */
-
-static final byte[] ch39data = {
-(byte) 0x40,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch39 = new BitmapCharRec(2,2,0,-5,3,ch39data);
-
-/* char: 0x26 '&' */
-
-static final byte[] ch38data = {
-(byte) 0x76,(byte) 0x8d,(byte) 0x98,(byte) 0x74,(byte) 0x6e,(byte) 0x50,(byte) 0x30,
-};
-
-static final BitmapCharRec ch38 = new BitmapCharRec(8,7,0,0,8,ch38data);
-
-/* char: 0x25 '%' */
-
-static final byte[] ch37data = {
-(byte) 0x44,(byte) 0x2a,(byte) 0x2a,(byte) 0x56,(byte) 0xa8,(byte) 0xa4,(byte) 0x7e,
-};
-
-static final BitmapCharRec ch37 = new BitmapCharRec(7,7,0,0,8,ch37data);
-
-/* char: 0x24 '$' */
-
-static final byte[] ch36data = {
-(byte) 0x20,(byte) 0xe0,(byte) 0x90,(byte) 0x10,(byte) 0x60,(byte) 0x80,(byte) 0x90,(byte) 0x70,(byte) 0x20,
-};
-
-static final BitmapCharRec ch36 = new BitmapCharRec(4,9,0,1,5,ch36data);
-
-/* char: 0x23 '#' */
-
-static final byte[] ch35data = {
-(byte) 0x50,(byte) 0x50,(byte) 0xf8,(byte) 0x50,(byte) 0xf8,(byte) 0x50,(byte) 0x50,
-};
-
-static final BitmapCharRec ch35 = new BitmapCharRec(5,7,0,0,5,ch35data);
-
-/* char: 0x22 '"' */
-
-static final byte[] ch34data = {
-(byte) 0xa0,(byte) 0xa0,
-};
-
-static final BitmapCharRec ch34 = new BitmapCharRec(3,2,0,-5,4,ch34data);
-
-/* char: 0x21 '!' */
-
-static final byte[] ch33data = {
-(byte) 0x80,(byte) 0x0,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,(byte) 0x80,
-};
-
-static final BitmapCharRec ch33 = new BitmapCharRec(1,7,-1,0,3,ch33data);
-
-/* char: 0x20 ' ' */
-
-static final BitmapCharRec ch32 = new BitmapCharRec(0,0,0,0,2,null);
-
-static final BitmapCharRec[] chars = {
-ch32,
-ch33,
-ch34,
-ch35,
-ch36,
-ch37,
-ch38,
-ch39,
-ch40,
-ch41,
-ch42,
-ch43,
-ch44,
-ch45,
-ch46,
-ch47,
-ch48,
-ch49,
-ch50,
-ch51,
-ch52,
-ch53,
-ch54,
-ch55,
-ch56,
-ch57,
-ch58,
-ch59,
-ch60,
-ch61,
-ch62,
-ch63,
-ch64,
-ch65,
-ch66,
-ch67,
-ch68,
-ch69,
-ch70,
-ch71,
-ch72,
-ch73,
-ch74,
-ch75,
-ch76,
-ch77,
-ch78,
-ch79,
-ch80,
-ch81,
-ch82,
-ch83,
-ch84,
-ch85,
-ch86,
-ch87,
-ch88,
-ch89,
-ch90,
-ch91,
-ch92,
-ch93,
-ch94,
-ch95,
-ch96,
-ch97,
-ch98,
-ch99,
-ch100,
-ch101,
-ch102,
-ch103,
-ch104,
-ch105,
-ch106,
-ch107,
-ch108,
-ch109,
-ch110,
-ch111,
-ch112,
-ch113,
-ch114,
-ch115,
-ch116,
-ch117,
-ch118,
-ch119,
-ch120,
-ch121,
-ch122,
-ch123,
-ch124,
-ch125,
-ch126,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-ch160,
-ch161,
-ch162,
-ch163,
-ch164,
-ch165,
-ch166,
-ch167,
-ch168,
-ch169,
-ch170,
-ch171,
-ch172,
-ch173,
-ch174,
-ch175,
-ch176,
-ch177,
-ch178,
-ch179,
-ch180,
-ch181,
-ch182,
-ch183,
-ch184,
-ch185,
-ch186,
-ch187,
-ch188,
-ch189,
-ch190,
-ch191,
-ch192,
-ch193,
-ch194,
-ch195,
-ch196,
-ch197,
-ch198,
-ch199,
-ch200,
-ch201,
-ch202,
-ch203,
-ch204,
-ch205,
-ch206,
-ch207,
-ch208,
-ch209,
-ch210,
-ch211,
-ch212,
-ch213,
-ch214,
-ch215,
-ch216,
-ch217,
-ch218,
-ch219,
-ch220,
-ch221,
-ch222,
-ch223,
-ch224,
-ch225,
-ch226,
-ch227,
-ch228,
-ch229,
-ch230,
-ch231,
-ch232,
-ch233,
-ch234,
-ch235,
-ch236,
-ch237,
-ch238,
-ch239,
-ch240,
-ch241,
-ch242,
-ch243,
-ch244,
-ch245,
-ch246,
-ch247,
-ch248,
-ch249,
-ch250,
-ch251,
-ch252,
-ch253,
-ch254,
-ch255,
-};
-
- static final BitmapFontRec glutBitmapTimesRoman10 = new BitmapFontRec("-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1",
- 224,
- 32,
- chars);
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman24.java b/src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman24.java
deleted file mode 100644
index 3a03e3893..000000000
--- a/src/classes/com/sun/opengl/util/GLUTBitmapTimesRoman24.java
+++ /dev/null
@@ -1,2080 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTBitmapTimesRoman24 {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-/* char: 0xff */
-
-static final byte[] ch255data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xf0,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0xe,(byte) 0x0,
-(byte) 0x1a,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x31,(byte) 0x0,(byte) 0x30,(byte) 0x80,(byte) 0x30,(byte) 0x80,(byte) 0x60,(byte) 0x80,(byte) 0x60,(byte) 0xc0,
-(byte) 0xf1,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-};
-
-static final BitmapCharRec ch255 = new BitmapCharRec(11,21,0,5,11,ch255data);
-
-/* char: 0xfe */
-
-static final byte[] ch254data = {
-(byte) 0xf0,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x6e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,
-(byte) 0x6e,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0xe0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch254 = new BitmapCharRec(10,22,-1,5,12,ch254data);
-
-/* char: 0xfd */
-
-static final byte[] ch253data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xf0,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0xe,(byte) 0x0,
-(byte) 0x1a,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x31,(byte) 0x0,(byte) 0x30,(byte) 0x80,(byte) 0x30,(byte) 0x80,(byte) 0x60,(byte) 0x80,(byte) 0x60,(byte) 0xc0,
-(byte) 0xf1,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x3,(byte) 0x80,(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch253 = new BitmapCharRec(11,22,0,5,11,ch253data);
-
-/* char: 0xfc */
-
-static final byte[] ch252data = {
-(byte) 0x1c,(byte) 0xe0,(byte) 0x3e,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe1,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-};
-
-static final BitmapCharRec ch252 = new BitmapCharRec(11,16,-1,0,13,ch252data);
-
-/* char: 0xfb */
-
-static final byte[] ch251data = {
-(byte) 0x1c,(byte) 0xe0,(byte) 0x3e,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe1,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x21,(byte) 0x0,(byte) 0x12,(byte) 0x0,(byte) 0x1e,(byte) 0x0,
-(byte) 0xc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch251 = new BitmapCharRec(11,17,-1,0,13,ch251data);
-
-/* char: 0xfa */
-
-static final byte[] ch250data = {
-(byte) 0x1c,(byte) 0xe0,(byte) 0x3e,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe1,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x3,(byte) 0x80,
-(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch250 = new BitmapCharRec(11,17,-1,0,13,ch250data);
-
-/* char: 0xf9 */
-
-static final byte[] ch249data = {
-(byte) 0x1c,(byte) 0xe0,(byte) 0x3e,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe1,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x38,(byte) 0x0,
-(byte) 0x30,(byte) 0x0,
-};
-
-static final BitmapCharRec ch249 = new BitmapCharRec(11,17,-1,0,13,ch249data);
-
-/* char: 0xf8 */
-
-static final byte[] ch248data = {
-(byte) 0xc0,(byte) 0x0,(byte) 0xde,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x71,(byte) 0x80,(byte) 0xd0,(byte) 0xc0,(byte) 0xd8,(byte) 0xc0,(byte) 0xc8,(byte) 0xc0,(byte) 0xcc,(byte) 0xc0,
-(byte) 0xc4,(byte) 0xc0,(byte) 0xc6,(byte) 0xc0,(byte) 0x63,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1e,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch248 = new BitmapCharRec(10,14,-1,1,12,ch248data);
-
-/* char: 0xf7 */
-
-static final byte[] ch247data = {
-(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch247 = new BitmapCharRec(12,10,-1,-2,14,ch247data);
-
-/* char: 0xf6 */
-
-static final byte[] ch246data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-};
-
-static final BitmapCharRec ch246 = new BitmapCharRec(10,16,-1,0,12,ch246data);
-
-/* char: 0xf5 */
-
-static final byte[] ch245data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x27,(byte) 0x0,(byte) 0x1c,(byte) 0x80,
-};
-
-static final BitmapCharRec ch245 = new BitmapCharRec(10,16,-1,0,12,ch245data);
-
-/* char: 0xf4 */
-
-static final byte[] ch244data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x21,(byte) 0x0,(byte) 0x12,(byte) 0x0,(byte) 0x1e,(byte) 0x0,
-(byte) 0xc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch244 = new BitmapCharRec(10,17,-1,0,12,ch244data);
-
-/* char: 0xf3 */
-
-static final byte[] ch243data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x3,(byte) 0x80,
-(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch243 = new BitmapCharRec(10,17,-1,0,12,ch243data);
-
-/* char: 0xf2 */
-
-static final byte[] ch242data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x38,(byte) 0x0,
-(byte) 0x30,(byte) 0x0,
-};
-
-static final BitmapCharRec ch242 = new BitmapCharRec(10,17,-1,0,12,ch242data);
-
-/* char: 0xf1 */
-
-static final byte[] ch241data = {
-(byte) 0xf1,(byte) 0xe0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x6f,(byte) 0x80,(byte) 0xe7,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x27,(byte) 0x0,(byte) 0x1c,(byte) 0x80,
-};
-
-static final BitmapCharRec ch241 = new BitmapCharRec(11,16,-1,0,13,ch241data);
-
-/* char: 0xf0 */
-
-static final byte[] ch240data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1f,(byte) 0x0,(byte) 0xc6,(byte) 0x0,(byte) 0x3c,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x71,(byte) 0x80,
-(byte) 0xc0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch240 = new BitmapCharRec(10,17,-1,0,12,ch240data);
-
-/* char: 0xef */
-
-static final byte[] ch239data = {
-(byte) 0x78,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x70,(byte) 0x0,(byte) 0x0,(byte) 0xcc,(byte) 0xcc,
-};
-
-static final BitmapCharRec ch239 = new BitmapCharRec(6,16,0,0,6,ch239data);
-
-/* char: 0xee */
-
-static final byte[] ch238data = {
-(byte) 0x78,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x70,(byte) 0x0,(byte) 0x84,(byte) 0x48,(byte) 0x78,
-(byte) 0x30,
-};
-
-static final BitmapCharRec ch238 = new BitmapCharRec(6,17,0,0,6,ch238data);
-
-/* char: 0xed */
-
-static final byte[] ch237data = {
-(byte) 0xf0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0xe0,(byte) 0x0,(byte) 0x80,(byte) 0x60,(byte) 0x38,
-(byte) 0x18,
-};
-
-static final BitmapCharRec ch237 = new BitmapCharRec(5,17,-1,0,6,ch237data);
-
-/* char: 0xec */
-
-static final byte[] ch236data = {
-(byte) 0x78,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x70,(byte) 0x0,(byte) 0x8,(byte) 0x30,(byte) 0xe0,
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch236 = new BitmapCharRec(5,17,0,0,6,ch236data);
-
-/* char: 0xeb */
-
-static final byte[] ch235data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x70,(byte) 0x80,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0x41,(byte) 0x80,(byte) 0x63,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-};
-
-static final BitmapCharRec ch235 = new BitmapCharRec(9,16,-1,0,11,ch235data);
-
-/* char: 0xea */
-
-static final byte[] ch234data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x70,(byte) 0x80,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0x41,(byte) 0x80,(byte) 0x63,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x21,(byte) 0x0,(byte) 0x12,(byte) 0x0,(byte) 0x1e,(byte) 0x0,
-(byte) 0xc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch234 = new BitmapCharRec(9,17,-1,0,11,ch234data);
-
-/* char: 0xe9 */
-
-static final byte[] ch233data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x70,(byte) 0x80,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0x41,(byte) 0x80,(byte) 0x63,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x7,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch233 = new BitmapCharRec(9,17,-1,0,11,ch233data);
-
-/* char: 0xe8 */
-
-static final byte[] ch232data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x70,(byte) 0x80,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0x41,(byte) 0x80,(byte) 0x63,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x70,(byte) 0x0,
-(byte) 0x60,(byte) 0x0,
-};
-
-static final BitmapCharRec ch232 = new BitmapCharRec(9,17,-1,0,11,ch232data);
-
-/* char: 0xe7 */
-
-static final byte[] ch231data = {
-(byte) 0x3c,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,
-(byte) 0x70,(byte) 0x80,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x41,(byte) 0x80,
-(byte) 0x63,(byte) 0x80,(byte) 0x1f,(byte) 0x0,
-};
-
-static final BitmapCharRec ch231 = new BitmapCharRec(9,18,-1,6,11,ch231data);
-
-/* char: 0xe6 */
-
-static final byte[] ch230data = {
-(byte) 0x70,(byte) 0xf0,(byte) 0xfb,(byte) 0xf8,(byte) 0xc7,(byte) 0x84,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0xfc,
-(byte) 0x3,(byte) 0xc,(byte) 0x63,(byte) 0xc,(byte) 0x67,(byte) 0x98,(byte) 0x3c,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch230 = new BitmapCharRec(14,12,-1,0,16,ch230data);
-
-/* char: 0xe5 */
-
-static final byte[] ch229data = {
-(byte) 0x71,(byte) 0x80,(byte) 0xfb,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,
-(byte) 0x1c,(byte) 0x0,
-};
-
-static final BitmapCharRec ch229 = new BitmapCharRec(9,17,-1,0,11,ch229data);
-
-/* char: 0xe4 */
-
-static final byte[] ch228data = {
-(byte) 0x71,(byte) 0x80,(byte) 0xfb,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0x66,(byte) 0x0,
-};
-
-static final BitmapCharRec ch228 = new BitmapCharRec(9,16,-1,0,11,ch228data);
-
-/* char: 0xe3 */
-
-static final byte[] ch227data = {
-(byte) 0x71,(byte) 0x80,(byte) 0xfb,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x5c,(byte) 0x0,(byte) 0x3a,(byte) 0x0,
-};
-
-static final BitmapCharRec ch227 = new BitmapCharRec(9,16,-1,0,11,ch227data);
-
-/* char: 0xe2 */
-
-static final byte[] ch226data = {
-(byte) 0x71,(byte) 0x80,(byte) 0xfb,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x42,(byte) 0x0,(byte) 0x24,(byte) 0x0,(byte) 0x3c,(byte) 0x0,
-(byte) 0x18,(byte) 0x0,
-};
-
-static final BitmapCharRec ch226 = new BitmapCharRec(9,17,-1,0,11,ch226data);
-
-/* char: 0xe1 */
-
-static final byte[] ch225data = {
-(byte) 0x71,(byte) 0x80,(byte) 0xfb,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x7,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch225 = new BitmapCharRec(9,17,-1,0,11,ch225data);
-
-/* char: 0xe0 */
-
-static final byte[] ch224data = {
-(byte) 0x71,(byte) 0x80,(byte) 0xfb,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x70,(byte) 0x0,
-(byte) 0x60,(byte) 0x0,
-};
-
-static final BitmapCharRec ch224 = new BitmapCharRec(9,17,-1,0,11,ch224data);
-
-/* char: 0xdf */
-
-static final byte[] ch223data = {
-(byte) 0xe7,(byte) 0x0,(byte) 0x6c,(byte) 0x80,(byte) 0x6c,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x61,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x63,(byte) 0x80,
-(byte) 0x67,(byte) 0x0,(byte) 0x6c,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x33,(byte) 0x0,
-(byte) 0x1e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch223 = new BitmapCharRec(10,17,-1,0,12,ch223data);
-
-/* char: 0xde */
-
-static final byte[] ch222data = {
-(byte) 0xfc,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x70,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x18,
-(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x70,(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-(byte) 0xfc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch222 = new BitmapCharRec(13,17,-1,0,15,ch222data);
-
-/* char: 0xdd */
-
-static final byte[] ch221data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x3,(byte) 0xc0,
-(byte) 0x3,(byte) 0x40,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x20,(byte) 0xc,(byte) 0x30,(byte) 0x1c,(byte) 0x10,(byte) 0x18,(byte) 0x18,(byte) 0x38,(byte) 0x8,(byte) 0x30,(byte) 0xc,
-(byte) 0xfc,(byte) 0x3f,(byte) 0x0,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x30,
-};
-
-static final BitmapCharRec ch221 = new BitmapCharRec(16,22,0,0,16,ch221data);
-
-/* char: 0xdc */
-
-static final byte[] ch220data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x30,(byte) 0x18,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0xfc,(byte) 0x1f,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x30,(byte) 0x6,(byte) 0x30,
-};
-
-static final BitmapCharRec ch220 = new BitmapCharRec(16,21,-1,0,18,ch220data);
-
-/* char: 0xdb */
-
-static final byte[] ch219data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x30,(byte) 0x18,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0xfc,(byte) 0x1f,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x10,(byte) 0x6,(byte) 0x60,(byte) 0x3,(byte) 0xc0,(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch219 = new BitmapCharRec(16,22,-1,0,18,ch219data);
-
-/* char: 0xda */
-
-static final byte[] ch218data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x30,(byte) 0x18,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0xfc,(byte) 0x1f,(byte) 0x0,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x30,
-};
-
-static final BitmapCharRec ch218 = new BitmapCharRec(16,22,-1,0,18,ch218data);
-
-/* char: 0xd9 */
-
-static final byte[] ch217data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x30,(byte) 0x18,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0xfc,(byte) 0x1f,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x40,(byte) 0x1,(byte) 0x80,(byte) 0x7,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch217 = new BitmapCharRec(16,22,-1,0,18,ch217data);
-
-/* char: 0xd8 */
-
-static final byte[] ch216data = {
-(byte) 0x20,(byte) 0x0,(byte) 0x27,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x68,(byte) 0x6,(byte) 0x64,(byte) 0x6,(byte) 0xc2,(byte) 0x3,(byte) 0xc2,(byte) 0x3,
-(byte) 0xc1,(byte) 0x3,(byte) 0xc1,(byte) 0x3,(byte) 0xc0,(byte) 0x83,(byte) 0xc0,(byte) 0x83,(byte) 0xc0,(byte) 0x43,(byte) 0x60,(byte) 0x46,(byte) 0x60,(byte) 0x26,(byte) 0x38,(byte) 0x1c,
-(byte) 0x1c,(byte) 0x38,(byte) 0x7,(byte) 0xe4,(byte) 0x0,(byte) 0x4,
-};
-
-static final BitmapCharRec ch216 = new BitmapCharRec(16,19,-1,1,18,ch216data);
-
-/* char: 0xd7 */
-
-static final byte[] ch215data = {
-(byte) 0x80,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x33,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0x80,(byte) 0x40,
-};
-
-static final BitmapCharRec ch215 = new BitmapCharRec(10,11,-2,-1,14,ch215data);
-
-/* char: 0xd6 */
-
-static final byte[] ch214data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,
-(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x38,(byte) 0x1c,(byte) 0x1c,(byte) 0x38,
-(byte) 0x7,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x60,
-};
-
-static final BitmapCharRec ch214 = new BitmapCharRec(16,21,-1,0,18,ch214data);
-
-/* char: 0xd5 */
-
-static final byte[] ch213data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,
-(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x38,(byte) 0x1c,(byte) 0x1c,(byte) 0x38,
-(byte) 0x7,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0xe0,(byte) 0x3,(byte) 0x90,
-};
-
-static final BitmapCharRec ch213 = new BitmapCharRec(16,21,-1,0,18,ch213data);
-
-/* char: 0xd4 */
-
-static final byte[] ch212data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,
-(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x38,(byte) 0x1c,(byte) 0x1c,(byte) 0x38,
-(byte) 0x7,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x10,(byte) 0x6,(byte) 0x60,(byte) 0x3,(byte) 0xc0,(byte) 0x1,(byte) 0x80,
-};
-
-static final BitmapCharRec ch212 = new BitmapCharRec(16,22,-1,0,18,ch212data);
-
-/* char: 0xd3 */
-
-static final byte[] ch211data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,
-(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x38,(byte) 0x1c,(byte) 0x1c,(byte) 0x38,
-(byte) 0x7,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x30,
-};
-
-static final BitmapCharRec ch211 = new BitmapCharRec(16,22,-1,0,18,ch211data);
-
-/* char: 0xd2 */
-
-static final byte[] ch210data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,
-(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x38,(byte) 0x1c,(byte) 0x1c,(byte) 0x38,
-(byte) 0x7,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x40,(byte) 0x1,(byte) 0x80,(byte) 0x7,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch210 = new BitmapCharRec(16,22,-1,0,18,ch210data);
-
-/* char: 0xd1 */
-
-static final byte[] ch209data = {
-(byte) 0xf8,(byte) 0xc,(byte) 0x20,(byte) 0x1c,(byte) 0x20,(byte) 0x1c,(byte) 0x20,(byte) 0x34,(byte) 0x20,(byte) 0x64,(byte) 0x20,(byte) 0x64,(byte) 0x20,(byte) 0xc4,(byte) 0x21,(byte) 0x84,
-(byte) 0x21,(byte) 0x84,(byte) 0x23,(byte) 0x4,(byte) 0x26,(byte) 0x4,(byte) 0x26,(byte) 0x4,(byte) 0x2c,(byte) 0x4,(byte) 0x38,(byte) 0x4,(byte) 0x38,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0xf0,(byte) 0x1f,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0xe0,(byte) 0x3,(byte) 0x90,
-};
-
-static final BitmapCharRec ch209 = new BitmapCharRec(16,21,-1,0,18,ch209data);
-
-/* char: 0xd0 */
-
-static final byte[] ch208data = {
-(byte) 0x7f,(byte) 0xe0,(byte) 0x18,(byte) 0x38,(byte) 0x18,(byte) 0x1c,(byte) 0x18,(byte) 0x6,(byte) 0x18,(byte) 0x6,(byte) 0x18,(byte) 0x3,(byte) 0x18,(byte) 0x3,(byte) 0x18,(byte) 0x3,
-(byte) 0xff,(byte) 0x3,(byte) 0x18,(byte) 0x3,(byte) 0x18,(byte) 0x3,(byte) 0x18,(byte) 0x3,(byte) 0x18,(byte) 0x6,(byte) 0x18,(byte) 0x6,(byte) 0x18,(byte) 0x1c,(byte) 0x18,(byte) 0x38,
-(byte) 0x7f,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch208 = new BitmapCharRec(16,17,0,0,17,ch208data);
-
-/* char: 0xcf */
-
-static final byte[] ch207data = {
-(byte) 0xfc,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0xfc,(byte) 0x0,(byte) 0x0,(byte) 0xcc,(byte) 0xcc,
-};
-
-static final BitmapCharRec ch207 = new BitmapCharRec(6,21,-1,0,8,ch207data);
-
-/* char: 0xce */
-
-static final byte[] ch206data = {
-(byte) 0x7e,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,
-(byte) 0x7e,(byte) 0x0,(byte) 0x81,(byte) 0x66,(byte) 0x3c,(byte) 0x18,
-};
-
-static final BitmapCharRec ch206 = new BitmapCharRec(8,22,-1,0,8,ch206data);
-
-/* char: 0xcd */
-
-static final byte[] ch205data = {
-(byte) 0xfc,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0xfc,(byte) 0x0,(byte) 0x40,(byte) 0x30,(byte) 0x1c,(byte) 0xc,
-};
-
-static final BitmapCharRec ch205 = new BitmapCharRec(6,22,-1,0,8,ch205data);
-
-/* char: 0xcc */
-
-static final byte[] ch204data = {
-(byte) 0xfc,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0xfc,(byte) 0x0,(byte) 0x8,(byte) 0x30,(byte) 0xe0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch204 = new BitmapCharRec(6,22,-1,0,8,ch204data);
-
-/* char: 0xcb */
-
-static final byte[] ch203data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,
-(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x30,
-(byte) 0xff,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,
-};
-
-static final BitmapCharRec ch203 = new BitmapCharRec(13,21,-1,0,15,ch203data);
-
-/* char: 0xca */
-
-static final byte[] ch202data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,
-(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x30,
-(byte) 0xff,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x20,(byte) 0xc,(byte) 0xc0,(byte) 0x7,(byte) 0x80,(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch202 = new BitmapCharRec(13,22,-1,0,15,ch202data);
-
-/* char: 0xc9 */
-
-static final byte[] ch201data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,
-(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x30,
-(byte) 0xff,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch201 = new BitmapCharRec(13,22,-1,0,15,ch201data);
-
-/* char: 0xc8 */
-
-static final byte[] ch200data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,
-(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x30,
-(byte) 0xff,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0x18,(byte) 0x0,
-};
-
-static final BitmapCharRec ch200 = new BitmapCharRec(13,22,-1,0,15,ch200data);
-
-/* char: 0xc7 */
-
-static final byte[] ch199data = {
-(byte) 0x7,(byte) 0x80,(byte) 0xc,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x7,(byte) 0xe0,(byte) 0x1e,(byte) 0x38,
-(byte) 0x38,(byte) 0x8,(byte) 0x60,(byte) 0x4,(byte) 0x60,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x60,(byte) 0x4,(byte) 0x60,(byte) 0x4,(byte) 0x38,(byte) 0xc,(byte) 0x1c,(byte) 0x3c,(byte) 0x7,(byte) 0xe4,
-};
-
-static final BitmapCharRec ch199 = new BitmapCharRec(14,23,-1,6,16,ch199data);
-
-/* char: 0xc6 */
-
-static final byte[] ch198data = {
-(byte) 0xf9,(byte) 0xff,(byte) 0xf0,(byte) 0x30,(byte) 0x60,(byte) 0x30,(byte) 0x10,(byte) 0x60,(byte) 0x10,(byte) 0x10,(byte) 0x60,(byte) 0x10,(byte) 0x18,(byte) 0x60,(byte) 0x0,(byte) 0x8,
-(byte) 0x60,(byte) 0x0,(byte) 0xf,(byte) 0xe0,(byte) 0x80,(byte) 0xc,(byte) 0x60,(byte) 0x80,(byte) 0x4,(byte) 0x7f,(byte) 0x80,(byte) 0x4,(byte) 0x60,(byte) 0x80,(byte) 0x6,(byte) 0x60,
-(byte) 0x80,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x20,(byte) 0x1,(byte) 0x60,(byte) 0x20,(byte) 0x1,(byte) 0xe0,(byte) 0x60,
-(byte) 0x3,(byte) 0xff,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch198 = new BitmapCharRec(20,17,0,0,21,ch198data);
-
-/* char: 0xc5 */
-
-static final byte[] ch197data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x8,
-(byte) 0xc,(byte) 0x0,(byte) 0xf,(byte) 0xf8,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,
-(byte) 0x0,(byte) 0x2,(byte) 0x30,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-(byte) 0x0,(byte) 0x80,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x2,(byte) 0x20,(byte) 0x0,(byte) 0x2,(byte) 0x20,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch197 = new BitmapCharRec(17,21,0,0,17,ch197data);
-
-/* char: 0xc4 */
-
-static final byte[] ch196data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x8,
-(byte) 0xc,(byte) 0x0,(byte) 0xf,(byte) 0xf8,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,
-(byte) 0x0,(byte) 0x2,(byte) 0x30,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-(byte) 0x0,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,(byte) 0x0,
-};
-
-static final BitmapCharRec ch196 = new BitmapCharRec(17,21,0,0,17,ch196data);
-
-/* char: 0xc3 */
-
-static final byte[] ch195data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x7,(byte) 0x0,(byte) 0x10,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x8,
-(byte) 0xc,(byte) 0x0,(byte) 0xf,(byte) 0xf8,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,
-(byte) 0x0,(byte) 0x2,(byte) 0x30,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-(byte) 0x0,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0xe0,(byte) 0x0,(byte) 0x3,(byte) 0x90,(byte) 0x0,
-};
-
-static final BitmapCharRec ch195 = new BitmapCharRec(17,21,0,0,17,ch195data);
-
-/* char: 0xc2 */
-
-static final byte[] ch194data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x8,
-(byte) 0xc,(byte) 0x0,(byte) 0xf,(byte) 0xf8,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,
-(byte) 0x0,(byte) 0x2,(byte) 0x30,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-(byte) 0x0,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x10,(byte) 0x0,(byte) 0x6,(byte) 0x60,(byte) 0x0,(byte) 0x3,(byte) 0xc0,(byte) 0x0,(byte) 0x1,
-(byte) 0x80,(byte) 0x0,
-};
-
-static final BitmapCharRec ch194 = new BitmapCharRec(17,22,0,0,17,ch194data);
-
-/* char: 0xc1 */
-
-static final byte[] ch193data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x8,
-(byte) 0xc,(byte) 0x0,(byte) 0xf,(byte) 0xf8,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,
-(byte) 0x0,(byte) 0x2,(byte) 0x30,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-(byte) 0x0,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x0,
-(byte) 0x30,(byte) 0x0,
-};
-
-static final BitmapCharRec ch193 = new BitmapCharRec(17,22,0,0,17,ch193data);
-
-/* char: 0xc0 */
-
-static final byte[] ch192data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x8,
-(byte) 0xc,(byte) 0x0,(byte) 0xf,(byte) 0xf8,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,
-(byte) 0x0,(byte) 0x2,(byte) 0x30,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-(byte) 0x0,(byte) 0x80,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x3,(byte) 0x80,(byte) 0x0,(byte) 0x3,
-(byte) 0x0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch192 = new BitmapCharRec(17,22,0,0,17,ch192data);
-
-/* char: 0xbf */
-
-static final byte[] ch191data = {
-(byte) 0x3e,(byte) 0x63,(byte) 0xc1,(byte) 0xc3,(byte) 0xc3,(byte) 0xe0,(byte) 0x70,(byte) 0x30,(byte) 0x38,(byte) 0x18,(byte) 0x18,(byte) 0x8,(byte) 0x8,(byte) 0x0,(byte) 0x0,(byte) 0xc,
-(byte) 0xc,
-};
-
-static final BitmapCharRec ch191 = new BitmapCharRec(8,17,-1,5,11,ch191data);
-
-/* char: 0xbe */
-
-static final byte[] ch190data = {
-(byte) 0x18,(byte) 0x2,(byte) 0x0,(byte) 0x8,(byte) 0x2,(byte) 0x0,(byte) 0xc,(byte) 0x7f,(byte) 0x80,(byte) 0x4,(byte) 0x22,(byte) 0x0,(byte) 0x6,(byte) 0x32,(byte) 0x0,(byte) 0x3,
-(byte) 0x12,(byte) 0x0,(byte) 0x1,(byte) 0xa,(byte) 0x0,(byte) 0x71,(byte) 0x8e,(byte) 0x0,(byte) 0x88,(byte) 0x86,(byte) 0x0,(byte) 0x8c,(byte) 0xc2,(byte) 0x0,(byte) 0xc,(byte) 0x60,
-(byte) 0x0,(byte) 0x8,(byte) 0x20,(byte) 0x0,(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0x8,(byte) 0x10,(byte) 0x0,(byte) 0x8c,(byte) 0x18,(byte) 0x0,(byte) 0x4c,(byte) 0xc,(byte) 0x0,
-(byte) 0x38,(byte) 0x4,(byte) 0x0,
-};
-
-static final BitmapCharRec ch190 = new BitmapCharRec(17,17,0,0,18,ch190data);
-
-/* char: 0xbd */
-
-static final byte[] ch189data = {
-(byte) 0x30,(byte) 0x7e,(byte) 0x10,(byte) 0x22,(byte) 0x18,(byte) 0x10,(byte) 0x8,(byte) 0x18,(byte) 0xc,(byte) 0x8,(byte) 0x6,(byte) 0x4,(byte) 0x2,(byte) 0x6,(byte) 0xfb,(byte) 0x46,
-(byte) 0x21,(byte) 0x26,(byte) 0x21,(byte) 0x9c,(byte) 0x20,(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0x20,(byte) 0x60,(byte) 0x20,(byte) 0x20,(byte) 0xa0,(byte) 0x30,(byte) 0x60,(byte) 0x18,
-(byte) 0x20,(byte) 0x8,
-};
-
-static final BitmapCharRec ch189 = new BitmapCharRec(15,17,-1,0,18,ch189data);
-
-/* char: 0xbc */
-
-static final byte[] ch188data = {
-(byte) 0x30,(byte) 0x4,(byte) 0x10,(byte) 0x4,(byte) 0x18,(byte) 0xff,(byte) 0x8,(byte) 0x44,(byte) 0xc,(byte) 0x64,(byte) 0x6,(byte) 0x24,(byte) 0x2,(byte) 0x14,(byte) 0xfb,(byte) 0x1c,
-(byte) 0x21,(byte) 0xc,(byte) 0x21,(byte) 0x84,(byte) 0x20,(byte) 0xc0,(byte) 0x20,(byte) 0x40,(byte) 0x20,(byte) 0x60,(byte) 0x20,(byte) 0x20,(byte) 0xa0,(byte) 0x30,(byte) 0x60,(byte) 0x18,
-(byte) 0x20,(byte) 0x8,
-};
-
-static final BitmapCharRec ch188 = new BitmapCharRec(16,17,-1,0,18,ch188data);
-
-/* char: 0xbb */
-
-static final byte[] ch187data = {
-(byte) 0x88,(byte) 0x0,(byte) 0xcc,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x19,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0x33,(byte) 0x0,(byte) 0x66,(byte) 0x0,
-(byte) 0xcc,(byte) 0x0,(byte) 0x88,(byte) 0x0,
-};
-
-static final BitmapCharRec ch187 = new BitmapCharRec(9,10,-2,-1,12,ch187data);
-
-/* char: 0xba */
-
-static final byte[] ch186data = {
-(byte) 0xfc,(byte) 0x0,(byte) 0x78,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,(byte) 0x78,
-};
-
-static final BitmapCharRec ch186 = new BitmapCharRec(6,9,-1,-8,8,ch186data);
-
-/* char: 0xb9 */
-
-static final byte[] ch185data = {
-(byte) 0xf8,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0x20,(byte) 0xa0,(byte) 0x60,(byte) 0x20,
-};
-
-static final BitmapCharRec ch185 = new BitmapCharRec(5,10,-1,-7,7,ch185data);
-
-/* char: 0xb8 */
-
-static final byte[] ch184data = {
-(byte) 0x78,(byte) 0xcc,(byte) 0xc,(byte) 0x3c,(byte) 0x30,(byte) 0x10,
-};
-
-static final BitmapCharRec ch184 = new BitmapCharRec(6,6,-1,6,8,ch184data);
-
-/* char: 0xb7 */
-
-static final byte[] ch183data = {
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch183 = new BitmapCharRec(2,2,-2,-6,6,ch183data);
-
-/* char: 0xb6 */
-
-static final byte[] ch182data = {
-(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,
-(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x39,(byte) 0x0,(byte) 0x79,(byte) 0x0,(byte) 0x79,(byte) 0x0,(byte) 0xf9,(byte) 0x0,
-(byte) 0xf9,(byte) 0x0,(byte) 0xf9,(byte) 0x0,(byte) 0x79,(byte) 0x0,(byte) 0x79,(byte) 0x0,(byte) 0x39,(byte) 0x0,(byte) 0x1f,(byte) 0x80,
-};
-
-static final BitmapCharRec ch182 = new BitmapCharRec(9,22,-1,5,11,ch182data);
-
-/* char: 0xb5 */
-
-static final byte[] ch181data = {
-(byte) 0x40,(byte) 0x0,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x0,(byte) 0x5c,(byte) 0xe0,(byte) 0x7e,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0xe1,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch181 = new BitmapCharRec(11,17,-1,5,13,ch181data);
-
-/* char: 0xb4 */
-
-static final byte[] ch180data = {
-(byte) 0x80,(byte) 0x60,(byte) 0x38,(byte) 0x18,
-};
-
-static final BitmapCharRec ch180 = new BitmapCharRec(5,4,-2,-13,8,ch180data);
-
-/* char: 0xb3 */
-
-static final byte[] ch179data = {
-(byte) 0x70,(byte) 0x88,(byte) 0x8c,(byte) 0xc,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x8c,(byte) 0x4c,(byte) 0x38,
-};
-
-static final BitmapCharRec ch179 = new BitmapCharRec(6,10,0,-7,7,ch179data);
-
-/* char: 0xb2 */
-
-static final byte[] ch178data = {
-(byte) 0xfc,(byte) 0x44,(byte) 0x20,(byte) 0x30,(byte) 0x10,(byte) 0x8,(byte) 0xc,(byte) 0x8c,(byte) 0x4c,(byte) 0x38,
-};
-
-static final BitmapCharRec ch178 = new BitmapCharRec(6,10,0,-7,7,ch178data);
-
-/* char: 0xb1 */
-
-static final byte[] ch177data = {
-(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch177 = new BitmapCharRec(12,15,-1,0,14,ch177data);
-
-/* char: 0xb0 */
-
-static final byte[] ch176data = {
-(byte) 0x38,(byte) 0x44,(byte) 0x82,(byte) 0x82,(byte) 0x82,(byte) 0x44,(byte) 0x38,
-};
-
-static final BitmapCharRec ch176 = new BitmapCharRec(7,7,-1,-10,9,ch176data);
-
-/* char: 0xaf */
-
-static final byte[] ch175data = {
-(byte) 0xfc,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch175 = new BitmapCharRec(6,2,-1,-14,8,ch175data);
-
-/* char: 0xae */
-
-static final byte[] ch174data = {
-(byte) 0x7,(byte) 0xf0,(byte) 0x0,(byte) 0x1c,(byte) 0x1c,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x60,(byte) 0x3,(byte) 0x0,(byte) 0x47,(byte) 0x19,(byte) 0x0,(byte) 0xc2,
-(byte) 0x31,(byte) 0x80,(byte) 0x82,(byte) 0x20,(byte) 0x80,(byte) 0x82,(byte) 0x40,(byte) 0x80,(byte) 0x83,(byte) 0xe0,(byte) 0x80,(byte) 0x82,(byte) 0x30,(byte) 0x80,(byte) 0x82,(byte) 0x10,
-(byte) 0x80,(byte) 0xc2,(byte) 0x11,(byte) 0x80,(byte) 0x42,(byte) 0x31,(byte) 0x0,(byte) 0x67,(byte) 0xe3,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x1c,(byte) 0x1c,(byte) 0x0,
-(byte) 0x7,(byte) 0xf0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch174 = new BitmapCharRec(17,17,-1,0,19,ch174data);
-
-/* char: 0xad */
-
-static final byte[] ch173data = {
-(byte) 0xfe,(byte) 0xfe,
-};
-
-static final BitmapCharRec ch173 = new BitmapCharRec(7,2,-1,-5,9,ch173data);
-
-/* char: 0xac */
-
-static final byte[] ch172data = {
-(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch172 = new BitmapCharRec(12,7,-1,-3,14,ch172data);
-
-/* char: 0xab */
-
-static final byte[] ch171data = {
-(byte) 0x8,(byte) 0x80,(byte) 0x19,(byte) 0x80,(byte) 0x33,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0xcc,(byte) 0x0,(byte) 0xcc,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0x33,(byte) 0x0,
-(byte) 0x19,(byte) 0x80,(byte) 0x8,(byte) 0x80,
-};
-
-static final BitmapCharRec ch171 = new BitmapCharRec(9,10,-2,-1,13,ch171data);
-
-/* char: 0xaa */
-
-static final byte[] ch170data = {
-(byte) 0x7e,(byte) 0x0,(byte) 0x76,(byte) 0xcc,(byte) 0xcc,(byte) 0x7c,(byte) 0xc,(byte) 0xcc,(byte) 0x78,
-};
-
-static final BitmapCharRec ch170 = new BitmapCharRec(7,9,0,-8,8,ch170data);
-
-/* char: 0xa9 */
-
-static final byte[] ch169data = {
-(byte) 0x7,(byte) 0xf0,(byte) 0x0,(byte) 0x1c,(byte) 0x1c,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x61,(byte) 0xc3,(byte) 0x0,(byte) 0x47,(byte) 0x71,(byte) 0x0,(byte) 0xc4,
-(byte) 0x19,(byte) 0x80,(byte) 0x8c,(byte) 0x0,(byte) 0x80,(byte) 0x88,(byte) 0x0,(byte) 0x80,(byte) 0x88,(byte) 0x0,(byte) 0x80,(byte) 0x88,(byte) 0x0,(byte) 0x80,(byte) 0x8c,(byte) 0x0,
-(byte) 0x80,(byte) 0xc4,(byte) 0x19,(byte) 0x80,(byte) 0x47,(byte) 0x31,(byte) 0x0,(byte) 0x61,(byte) 0xe3,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x1c,(byte) 0x1c,(byte) 0x0,
-(byte) 0x7,(byte) 0xf0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch169 = new BitmapCharRec(17,17,-1,0,19,ch169data);
-
-/* char: 0xa8 */
-
-static final byte[] ch168data = {
-(byte) 0xcc,(byte) 0xcc,
-};
-
-static final BitmapCharRec ch168 = new BitmapCharRec(6,2,-1,-14,8,ch168data);
-
-/* char: 0xa7 */
-
-static final byte[] ch167data = {
-(byte) 0x38,(byte) 0x64,(byte) 0x62,(byte) 0x6,(byte) 0xe,(byte) 0x1c,(byte) 0x38,(byte) 0x74,(byte) 0xe2,(byte) 0xc3,(byte) 0x83,(byte) 0x87,(byte) 0x4e,(byte) 0x3c,(byte) 0x38,(byte) 0x70,
-(byte) 0x60,(byte) 0x46,(byte) 0x26,(byte) 0x1c,
-};
-
-static final BitmapCharRec ch167 = new BitmapCharRec(8,20,-2,2,12,ch167data);
-
-/* char: 0xa6 */
-
-static final byte[] ch166data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch166 = new BitmapCharRec(2,17,-2,0,6,ch166data);
-
-/* char: 0xa5 */
-
-static final byte[] ch165data = {
-(byte) 0xf,(byte) 0xc0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1f,(byte) 0xe0,(byte) 0x3,(byte) 0x0,(byte) 0x1f,(byte) 0xe0,
-(byte) 0x3,(byte) 0x0,(byte) 0x7,(byte) 0x80,(byte) 0xc,(byte) 0x80,(byte) 0xc,(byte) 0xc0,(byte) 0x18,(byte) 0x40,(byte) 0x18,(byte) 0x60,(byte) 0x30,(byte) 0x20,(byte) 0x70,(byte) 0x30,
-(byte) 0xf8,(byte) 0x7c,
-};
-
-static final BitmapCharRec ch165 = new BitmapCharRec(14,17,0,0,14,ch165data);
-
-/* char: 0xa4 */
-
-static final byte[] ch164data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0xee,(byte) 0xe0,(byte) 0x7f,(byte) 0xc0,(byte) 0x31,(byte) 0x80,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x31,(byte) 0x80,(byte) 0x7f,(byte) 0xc0,(byte) 0xee,(byte) 0xe0,(byte) 0xc0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch164 = new BitmapCharRec(11,12,-1,-3,13,ch164data);
-
-/* char: 0xa3 */
-
-static final byte[] ch163data = {
-(byte) 0xe7,(byte) 0x80,(byte) 0xbe,(byte) 0xc0,(byte) 0x78,(byte) 0x40,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-(byte) 0x30,(byte) 0x0,(byte) 0xfc,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x31,(byte) 0x80,(byte) 0x19,(byte) 0x80,
-(byte) 0xf,(byte) 0x0,
-};
-
-static final BitmapCharRec ch163 = new BitmapCharRec(10,17,-1,0,12,ch163data);
-
-/* char: 0xa2 */
-
-static final byte[] ch162data = {
-(byte) 0x40,(byte) 0x0,(byte) 0x40,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x70,(byte) 0x80,(byte) 0xd0,(byte) 0x0,(byte) 0xc8,(byte) 0x0,(byte) 0xc8,(byte) 0x0,
-(byte) 0xc8,(byte) 0x0,(byte) 0xc4,(byte) 0x0,(byte) 0xc4,(byte) 0x0,(byte) 0x43,(byte) 0x80,(byte) 0x63,(byte) 0x80,(byte) 0x1f,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x1,(byte) 0x0,
-};
-
-static final BitmapCharRec ch162 = new BitmapCharRec(9,16,-1,2,12,ch162data);
-
-/* char: 0xa1 */
-
-static final byte[] ch161data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch161 = new BitmapCharRec(2,17,-4,5,8,ch161data);
-
-/* char: 0xa0 */
-
-static final BitmapCharRec ch160 = new BitmapCharRec(0,0,0,0,6,null);
-
-/* char: 0x7e '~' */
-
-static final byte[] ch126data = {
-(byte) 0x83,(byte) 0x80,(byte) 0xc7,(byte) 0xc0,(byte) 0x7c,(byte) 0x60,(byte) 0x38,(byte) 0x20,
-};
-
-static final BitmapCharRec ch126 = new BitmapCharRec(11,4,-1,-5,13,ch126data);
-
-/* char: 0x7d '}' */
-
-static final byte[] ch125data = {
-(byte) 0xe0,(byte) 0x30,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x8,(byte) 0xc,(byte) 0x4,(byte) 0x3,(byte) 0x4,(byte) 0xc,(byte) 0x8,(byte) 0x18,
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x30,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch125 = new BitmapCharRec(8,22,-1,5,10,ch125data);
-
-/* char: 0x7c '|' */
-
-static final byte[] ch124data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch124 = new BitmapCharRec(2,17,-2,0,6,ch124data);
-
-/* char: 0x7b '{' */
-
-static final byte[] ch123data = {
-(byte) 0x7,(byte) 0xc,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x10,(byte) 0x30,(byte) 0x20,(byte) 0xc0,(byte) 0x20,(byte) 0x30,(byte) 0x10,(byte) 0x18,
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0xc,(byte) 0x7,
-};
-
-static final BitmapCharRec ch123 = new BitmapCharRec(8,22,-1,5,10,ch123data);
-
-/* char: 0x7a 'z' */
-
-static final byte[] ch122data = {
-(byte) 0xff,(byte) 0xc3,(byte) 0x61,(byte) 0x70,(byte) 0x30,(byte) 0x38,(byte) 0x18,(byte) 0x1c,(byte) 0xe,(byte) 0x86,(byte) 0xc3,(byte) 0xff,
-};
-
-static final BitmapCharRec ch122 = new BitmapCharRec(8,12,-1,0,10,ch122data);
-
-/* char: 0x79 'y' */
-
-static final byte[] ch121data = {
-(byte) 0xe0,(byte) 0x0,(byte) 0xf0,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0xe,(byte) 0x0,
-(byte) 0x1a,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x31,(byte) 0x0,(byte) 0x30,(byte) 0x80,(byte) 0x30,(byte) 0x80,(byte) 0x60,(byte) 0x80,(byte) 0x60,(byte) 0xc0,
-(byte) 0xf1,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch121 = new BitmapCharRec(11,17,0,5,11,ch121data);
-
-/* char: 0x78 'x' */
-
-static final byte[] ch120data = {
-(byte) 0xf1,(byte) 0xe0,(byte) 0x60,(byte) 0xc0,(byte) 0x21,(byte) 0x80,(byte) 0x33,(byte) 0x80,(byte) 0x1b,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x1a,(byte) 0x0,
-(byte) 0x39,(byte) 0x0,(byte) 0x31,(byte) 0x80,(byte) 0x60,(byte) 0xc0,(byte) 0xf1,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch120 = new BitmapCharRec(11,12,-1,0,13,ch120data);
-
-/* char: 0x77 'w' */
-
-static final byte[] ch119data = {
-(byte) 0x4,(byte) 0x10,(byte) 0x0,(byte) 0xe,(byte) 0x38,(byte) 0x0,(byte) 0xe,(byte) 0x38,(byte) 0x0,(byte) 0x1a,(byte) 0x28,(byte) 0x0,(byte) 0x1a,(byte) 0x64,(byte) 0x0,(byte) 0x19,
-(byte) 0x64,(byte) 0x0,(byte) 0x31,(byte) 0x64,(byte) 0x0,(byte) 0x30,(byte) 0xc2,(byte) 0x0,(byte) 0x30,(byte) 0xc2,(byte) 0x0,(byte) 0x60,(byte) 0xc2,(byte) 0x0,(byte) 0x60,(byte) 0xc3,
-(byte) 0x0,(byte) 0xf1,(byte) 0xe7,(byte) 0x80,
-};
-
-static final BitmapCharRec ch119 = new BitmapCharRec(17,12,0,0,17,ch119data);
-
-/* char: 0x76 'v' */
-
-static final byte[] ch118data = {
-(byte) 0x4,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0xe,(byte) 0x0,(byte) 0x1a,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x19,(byte) 0x0,(byte) 0x31,(byte) 0x0,(byte) 0x30,(byte) 0x80,
-(byte) 0x30,(byte) 0x80,(byte) 0x60,(byte) 0x80,(byte) 0x60,(byte) 0xc0,(byte) 0xf1,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch118 = new BitmapCharRec(11,12,0,0,11,ch118data);
-
-/* char: 0x75 'u' */
-
-static final byte[] ch117data = {
-(byte) 0x1c,(byte) 0xe0,(byte) 0x3e,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0xe1,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch117 = new BitmapCharRec(11,12,-1,0,13,ch117data);
-
-/* char: 0x74 't' */
-
-static final byte[] ch116data = {
-(byte) 0x1c,(byte) 0x32,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0xfe,(byte) 0x70,(byte) 0x30,(byte) 0x10,
-};
-
-static final BitmapCharRec ch116 = new BitmapCharRec(7,15,0,0,7,ch116data);
-
-/* char: 0x73 's' */
-
-static final byte[] ch115data = {
-(byte) 0xf8,(byte) 0xc6,(byte) 0x83,(byte) 0x3,(byte) 0x7,(byte) 0x1e,(byte) 0x7c,(byte) 0x70,(byte) 0xe0,(byte) 0xc2,(byte) 0x66,(byte) 0x3e,
-};
-
-static final BitmapCharRec ch115 = new BitmapCharRec(8,12,-1,0,10,ch115data);
-
-/* char: 0x72 'r' */
-
-static final byte[] ch114data = {
-(byte) 0xf0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x76,(byte) 0x6e,(byte) 0xe6,
-};
-
-static final BitmapCharRec ch114 = new BitmapCharRec(7,12,-1,0,8,ch114data);
-
-/* char: 0x71 'q' */
-
-static final byte[] ch113data = {
-(byte) 0x3,(byte) 0xc0,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1d,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,
-(byte) 0x1d,(byte) 0x80,
-};
-
-static final BitmapCharRec ch113 = new BitmapCharRec(10,17,-1,5,12,ch113data);
-
-/* char: 0x70 'p' */
-
-static final byte[] ch112data = {
-(byte) 0xf0,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x6e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,
-(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,
-(byte) 0xee,(byte) 0x0,
-};
-
-static final BitmapCharRec ch112 = new BitmapCharRec(10,17,-1,5,12,ch112data);
-
-/* char: 0x6f 'o' */
-
-static final byte[] ch111data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch111 = new BitmapCharRec(10,12,-1,0,12,ch111data);
-
-/* char: 0x6e 'n' */
-
-static final byte[] ch110data = {
-(byte) 0xf1,(byte) 0xe0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x6f,(byte) 0x80,(byte) 0xe7,(byte) 0x0,
-};
-
-static final BitmapCharRec ch110 = new BitmapCharRec(11,12,-1,0,13,ch110data);
-
-/* char: 0x6d 'm' */
-
-static final byte[] ch109data = {
-(byte) 0xf1,(byte) 0xe3,(byte) 0xc0,(byte) 0x60,(byte) 0xc1,(byte) 0x80,(byte) 0x60,(byte) 0xc1,(byte) 0x80,(byte) 0x60,(byte) 0xc1,(byte) 0x80,(byte) 0x60,(byte) 0xc1,(byte) 0x80,(byte) 0x60,
-(byte) 0xc1,(byte) 0x80,(byte) 0x60,(byte) 0xc1,(byte) 0x80,(byte) 0x60,(byte) 0xc1,(byte) 0x80,(byte) 0x60,(byte) 0xc1,(byte) 0x80,(byte) 0x71,(byte) 0xe3,(byte) 0x80,(byte) 0x6f,(byte) 0x9f,
-(byte) 0x0,(byte) 0xe7,(byte) 0xe,(byte) 0x0,
-};
-
-static final BitmapCharRec ch109 = new BitmapCharRec(18,12,-1,0,20,ch109data);
-
-/* char: 0x6c 'l' */
-
-static final byte[] ch108data = {
-(byte) 0xf0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,
-(byte) 0xe0,
-};
-
-static final BitmapCharRec ch108 = new BitmapCharRec(4,17,-1,0,6,ch108data);
-
-/* char: 0x6b 'k' */
-
-static final byte[] ch107data = {
-(byte) 0xf3,(byte) 0xe0,(byte) 0x61,(byte) 0xc0,(byte) 0x63,(byte) 0x80,(byte) 0x67,(byte) 0x0,(byte) 0x6e,(byte) 0x0,(byte) 0x6c,(byte) 0x0,(byte) 0x78,(byte) 0x0,(byte) 0x68,(byte) 0x0,
-(byte) 0x64,(byte) 0x0,(byte) 0x66,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0xc0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,
-(byte) 0xe0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch107 = new BitmapCharRec(11,17,-1,0,12,ch107data);
-
-/* char: 0x6a 'j' */
-
-static final byte[] ch106data = {
-(byte) 0xc0,(byte) 0xe0,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0x70,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x30,
-};
-
-static final BitmapCharRec ch106 = new BitmapCharRec(4,22,0,5,6,ch106data);
-
-/* char: 0x69 'i' */
-
-static final byte[] ch105data = {
-(byte) 0xf0,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0x60,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x60,
-(byte) 0x60,
-};
-
-static final BitmapCharRec ch105 = new BitmapCharRec(4,17,-1,0,6,ch105data);
-
-/* char: 0x68 'h' */
-
-static final byte[] ch104data = {
-(byte) 0xf1,(byte) 0xe0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x71,(byte) 0xc0,(byte) 0x6f,(byte) 0x80,(byte) 0x67,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,
-(byte) 0xe0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch104 = new BitmapCharRec(11,17,-1,0,13,ch104data);
-
-/* char: 0x67 'g' */
-
-static final byte[] ch103data = {
-(byte) 0x3f,(byte) 0x0,(byte) 0xf1,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x20,(byte) 0x60,(byte) 0x60,(byte) 0x3f,(byte) 0xc0,(byte) 0x7f,(byte) 0x0,(byte) 0x60,(byte) 0x0,
-(byte) 0x30,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x33,(byte) 0x0,
-(byte) 0x1f,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch103 = new BitmapCharRec(11,17,-1,5,12,ch103data);
-
-/* char: 0x66 'f' */
-
-static final byte[] ch102data = {
-(byte) 0x78,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0xfe,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x16,
-(byte) 0xe,
-};
-
-static final BitmapCharRec ch102 = new BitmapCharRec(7,17,0,0,7,ch102data);
-
-/* char: 0x65 'e' */
-
-static final byte[] ch101data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x70,(byte) 0x80,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xff,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0x41,(byte) 0x80,(byte) 0x63,(byte) 0x0,(byte) 0x1e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch101 = new BitmapCharRec(9,12,-1,0,11,ch101data);
-
-/* char: 0x64 'd' */
-
-static final byte[] ch100data = {
-(byte) 0x1e,(byte) 0xc0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0xc1,(byte) 0x80,
-(byte) 0xc1,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x1d,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,
-(byte) 0x3,(byte) 0x80,
-};
-
-static final BitmapCharRec ch100 = new BitmapCharRec(10,17,-1,0,12,ch100data);
-
-/* char: 0x63 'c' */
-
-static final byte[] ch99data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x7f,(byte) 0x0,(byte) 0x70,(byte) 0x80,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0x41,(byte) 0x80,(byte) 0x63,(byte) 0x80,(byte) 0x1f,(byte) 0x0,
-};
-
-static final BitmapCharRec ch99 = new BitmapCharRec(9,12,-1,0,11,ch99data);
-
-/* char: 0x62 'b' */
-
-static final byte[] ch98data = {
-(byte) 0x5e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,(byte) 0x60,(byte) 0xc0,
-(byte) 0x60,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x73,(byte) 0x80,(byte) 0x6e,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,
-(byte) 0xe0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch98 = new BitmapCharRec(10,17,-1,0,12,ch98data);
-
-/* char: 0x61 'a' */
-
-static final byte[] ch97data = {
-(byte) 0x71,(byte) 0x80,(byte) 0xfb,(byte) 0x0,(byte) 0xc7,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x3b,(byte) 0x0,(byte) 0xf,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x67,(byte) 0x0,(byte) 0x3e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch97 = new BitmapCharRec(9,12,-1,0,11,ch97data);
-
-/* char: 0x60 '`' */
-
-static final byte[] ch96data = {
-(byte) 0x60,(byte) 0xe0,(byte) 0x80,(byte) 0xc0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch96 = new BitmapCharRec(3,5,-2,-12,7,ch96data);
-
-/* char: 0x5f '_' */
-
-static final byte[] ch95data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0xff,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch95 = new BitmapCharRec(13,2,0,5,13,ch95data);
-
-/* char: 0x5e '^' */
-
-static final byte[] ch94data = {
-(byte) 0x80,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x41,(byte) 0x0,(byte) 0x63,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x36,(byte) 0x0,(byte) 0x14,(byte) 0x0,(byte) 0x1c,(byte) 0x0,
-(byte) 0x8,(byte) 0x0,
-};
-
-static final BitmapCharRec ch94 = new BitmapCharRec(9,9,-1,-8,11,ch94data);
-
-/* char: 0x5d ']' */
-
-static final byte[] ch93data = {
-(byte) 0xf8,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,
-(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch93 = new BitmapCharRec(5,21,-1,4,8,ch93data);
-
-/* char: 0x5c '\' */
-
-static final byte[] ch92data = {
-(byte) 0x6,(byte) 0x6,(byte) 0x4,(byte) 0xc,(byte) 0xc,(byte) 0x8,(byte) 0x18,(byte) 0x18,(byte) 0x10,(byte) 0x30,(byte) 0x30,(byte) 0x20,(byte) 0x60,(byte) 0x60,(byte) 0x40,(byte) 0xc0,
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch92 = new BitmapCharRec(7,17,0,0,7,ch92data);
-
-/* char: 0x5b '[' */
-
-static final byte[] ch91data = {
-(byte) 0xf8,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch91 = new BitmapCharRec(5,21,-2,4,8,ch91data);
-
-/* char: 0x5a 'Z' */
-
-static final byte[] ch90data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0xe0,(byte) 0x18,(byte) 0x70,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x38,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0xe,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0x7,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x80,(byte) 0x1,(byte) 0xc0,(byte) 0x80,(byte) 0xc0,(byte) 0x80,(byte) 0xe0,(byte) 0xc0,(byte) 0x70,
-(byte) 0xff,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch90 = new BitmapCharRec(13,17,-1,0,15,ch90data);
-
-/* char: 0x59 'Y' */
-
-static final byte[] ch89data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x3,(byte) 0xc0,
-(byte) 0x3,(byte) 0x40,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x20,(byte) 0xc,(byte) 0x30,(byte) 0x1c,(byte) 0x10,(byte) 0x18,(byte) 0x18,(byte) 0x38,(byte) 0x8,(byte) 0x30,(byte) 0xc,
-(byte) 0xfc,(byte) 0x3f,
-};
-
-static final BitmapCharRec ch89 = new BitmapCharRec(16,17,0,0,16,ch89data);
-
-/* char: 0x58 'X' */
-
-static final byte[] ch88data = {
-(byte) 0xfc,(byte) 0xf,(byte) 0xc0,(byte) 0x30,(byte) 0x3,(byte) 0x80,(byte) 0x18,(byte) 0x7,(byte) 0x0,(byte) 0x8,(byte) 0xe,(byte) 0x0,(byte) 0x4,(byte) 0xc,(byte) 0x0,(byte) 0x6,
-(byte) 0x18,(byte) 0x0,(byte) 0x2,(byte) 0x38,(byte) 0x0,(byte) 0x1,(byte) 0x70,(byte) 0x0,(byte) 0x0,(byte) 0xe0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,
-(byte) 0x0,(byte) 0x3,(byte) 0xa0,(byte) 0x0,(byte) 0x3,(byte) 0x10,(byte) 0x0,(byte) 0x6,(byte) 0x8,(byte) 0x0,(byte) 0xe,(byte) 0xc,(byte) 0x0,(byte) 0x1c,(byte) 0x6,(byte) 0x0,
-(byte) 0x7e,(byte) 0xf,(byte) 0x80,
-};
-
-static final BitmapCharRec ch88 = new BitmapCharRec(18,17,0,0,18,ch88data);
-
-/* char: 0x57 'W' */
-
-static final byte[] ch87data = {
-(byte) 0x1,(byte) 0x83,(byte) 0x0,(byte) 0x1,(byte) 0x83,(byte) 0x0,(byte) 0x1,(byte) 0x83,(byte) 0x80,(byte) 0x3,(byte) 0x87,(byte) 0x80,(byte) 0x3,(byte) 0x46,(byte) 0x80,(byte) 0x3,
-(byte) 0x46,(byte) 0xc0,(byte) 0x6,(byte) 0x46,(byte) 0x40,(byte) 0x6,(byte) 0x4c,(byte) 0x40,(byte) 0x6,(byte) 0x4c,(byte) 0x60,(byte) 0xc,(byte) 0x2c,(byte) 0x60,(byte) 0xc,(byte) 0x2c,
-(byte) 0x20,(byte) 0x18,(byte) 0x2c,(byte) 0x20,(byte) 0x18,(byte) 0x18,(byte) 0x30,(byte) 0x18,(byte) 0x18,(byte) 0x10,(byte) 0x30,(byte) 0x18,(byte) 0x10,(byte) 0x30,(byte) 0x18,(byte) 0x18,
-(byte) 0xfc,(byte) 0x7e,(byte) 0x7e,
-};
-
-static final BitmapCharRec ch87 = new BitmapCharRec(23,17,0,0,23,ch87data);
-
-/* char: 0x56 'V' */
-
-static final byte[] ch86data = {
-(byte) 0x1,(byte) 0x80,(byte) 0x0,(byte) 0x1,(byte) 0x80,(byte) 0x0,(byte) 0x1,(byte) 0x80,(byte) 0x0,(byte) 0x3,(byte) 0xc0,(byte) 0x0,(byte) 0x3,(byte) 0x40,(byte) 0x0,(byte) 0x3,
-(byte) 0x60,(byte) 0x0,(byte) 0x6,(byte) 0x20,(byte) 0x0,(byte) 0x6,(byte) 0x20,(byte) 0x0,(byte) 0x6,(byte) 0x30,(byte) 0x0,(byte) 0xc,(byte) 0x10,(byte) 0x0,(byte) 0xc,(byte) 0x18,
-(byte) 0x0,(byte) 0x18,(byte) 0x8,(byte) 0x0,(byte) 0x18,(byte) 0x8,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x30,(byte) 0x4,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,
-};
-
-static final BitmapCharRec ch86 = new BitmapCharRec(17,17,0,0,17,ch86data);
-
-/* char: 0x55 'U' */
-
-static final byte[] ch85data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x30,(byte) 0x18,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0xfc,(byte) 0x1f,
-};
-
-static final BitmapCharRec ch85 = new BitmapCharRec(16,17,-1,0,18,ch85data);
-
-/* char: 0x54 'T' */
-
-static final byte[] ch84data = {
-(byte) 0xf,(byte) 0xc0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x83,(byte) 0x4,(byte) 0x83,(byte) 0x4,(byte) 0xc3,(byte) 0xc,
-(byte) 0xff,(byte) 0xfc,
-};
-
-static final BitmapCharRec ch84 = new BitmapCharRec(14,17,-1,0,16,ch84data);
-
-/* char: 0x53 'S' */
-
-static final byte[] ch83data = {
-(byte) 0x9e,(byte) 0x0,(byte) 0xf1,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0x80,(byte) 0x60,(byte) 0x80,(byte) 0x60,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0xe0,(byte) 0x3,(byte) 0xc0,
-(byte) 0xf,(byte) 0x80,(byte) 0x1e,(byte) 0x0,(byte) 0x78,(byte) 0x0,(byte) 0xe0,(byte) 0x0,(byte) 0xc0,(byte) 0x40,(byte) 0xc0,(byte) 0x40,(byte) 0xc0,(byte) 0xc0,(byte) 0x63,(byte) 0xc0,
-(byte) 0x1e,(byte) 0x40,
-};
-
-static final BitmapCharRec ch83 = new BitmapCharRec(11,17,-1,0,13,ch83data);
-
-/* char: 0x52 'R' */
-
-static final byte[] ch82data = {
-(byte) 0xfc,(byte) 0x1e,(byte) 0x30,(byte) 0x1c,(byte) 0x30,(byte) 0x38,(byte) 0x30,(byte) 0x70,(byte) 0x30,(byte) 0x60,(byte) 0x30,(byte) 0xc0,(byte) 0x31,(byte) 0xc0,(byte) 0x33,(byte) 0x80,
-(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x70,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x38,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x38,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x70,
-(byte) 0xff,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch82 = new BitmapCharRec(15,17,-1,0,16,ch82data);
-
-/* char: 0x51 'Q' */
-
-static final byte[] ch81data = {
-(byte) 0x0,(byte) 0xf,(byte) 0x0,(byte) 0x38,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0xe0,(byte) 0x1,(byte) 0xc0,(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,
-(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,
-(byte) 0xc0,(byte) 0x3,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x38,(byte) 0x1c,(byte) 0x1c,(byte) 0x38,(byte) 0x7,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch81 = new BitmapCharRec(16,22,-1,5,18,ch81data);
-
-/* char: 0x50 'P' */
-
-static final byte[] ch80data = {
-(byte) 0xfc,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x70,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x70,
-(byte) 0xff,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch80 = new BitmapCharRec(13,17,-1,0,15,ch80data);
-
-/* char: 0x4f 'O' */
-
-static final byte[] ch79data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1c,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,
-(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0xc0,(byte) 0x3,(byte) 0x60,(byte) 0x6,(byte) 0x60,(byte) 0x6,(byte) 0x38,(byte) 0x1c,(byte) 0x1c,(byte) 0x38,
-(byte) 0x7,(byte) 0xe0,
-};
-
-static final BitmapCharRec ch79 = new BitmapCharRec(16,17,-1,0,18,ch79data);
-
-/* char: 0x4e 'N' */
-
-static final byte[] ch78data = {
-(byte) 0xf8,(byte) 0xc,(byte) 0x20,(byte) 0x1c,(byte) 0x20,(byte) 0x1c,(byte) 0x20,(byte) 0x34,(byte) 0x20,(byte) 0x64,(byte) 0x20,(byte) 0x64,(byte) 0x20,(byte) 0xc4,(byte) 0x21,(byte) 0x84,
-(byte) 0x21,(byte) 0x84,(byte) 0x23,(byte) 0x4,(byte) 0x26,(byte) 0x4,(byte) 0x26,(byte) 0x4,(byte) 0x2c,(byte) 0x4,(byte) 0x38,(byte) 0x4,(byte) 0x38,(byte) 0x4,(byte) 0x30,(byte) 0x4,
-(byte) 0xf0,(byte) 0x1f,
-};
-
-static final BitmapCharRec ch78 = new BitmapCharRec(16,17,-1,0,18,ch78data);
-
-/* char: 0x4d 'M' */
-
-static final byte[] ch77data = {
-(byte) 0xf8,(byte) 0x21,(byte) 0xf8,(byte) 0x20,(byte) 0x60,(byte) 0x60,(byte) 0x20,(byte) 0x60,(byte) 0x60,(byte) 0x20,(byte) 0xd0,(byte) 0x60,(byte) 0x20,(byte) 0xd0,(byte) 0x60,(byte) 0x21,
-(byte) 0x88,(byte) 0x60,(byte) 0x21,(byte) 0x88,(byte) 0x60,(byte) 0x23,(byte) 0x8,(byte) 0x60,(byte) 0x23,(byte) 0x4,(byte) 0x60,(byte) 0x26,(byte) 0x4,(byte) 0x60,(byte) 0x26,(byte) 0x2,
-(byte) 0x60,(byte) 0x2c,(byte) 0x2,(byte) 0x60,(byte) 0x2c,(byte) 0x2,(byte) 0x60,(byte) 0x38,(byte) 0x1,(byte) 0x60,(byte) 0x38,(byte) 0x1,(byte) 0x60,(byte) 0x30,(byte) 0x0,(byte) 0xe0,
-(byte) 0xf0,(byte) 0x0,(byte) 0xf8,
-};
-
-static final BitmapCharRec ch77 = new BitmapCharRec(21,17,-1,0,22,ch77data);
-
-/* char: 0x4c 'L' */
-
-static final byte[] ch76data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,
-(byte) 0xfc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch76 = new BitmapCharRec(13,17,-1,0,14,ch76data);
-
-/* char: 0x4b 'K' */
-
-static final byte[] ch75data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x30,(byte) 0xe,(byte) 0x30,(byte) 0x1c,(byte) 0x30,(byte) 0x38,(byte) 0x30,(byte) 0x70,(byte) 0x30,(byte) 0xe0,(byte) 0x31,(byte) 0xc0,(byte) 0x33,(byte) 0x80,
-(byte) 0x3f,(byte) 0x0,(byte) 0x3e,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x31,(byte) 0x80,(byte) 0x30,(byte) 0xc0,(byte) 0x30,(byte) 0x60,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x18,
-(byte) 0xfc,(byte) 0x7e,
-};
-
-static final BitmapCharRec ch75 = new BitmapCharRec(16,17,-1,0,17,ch75data);
-
-/* char: 0x4a 'J' */
-
-static final byte[] ch74data = {
-(byte) 0x78,(byte) 0x0,(byte) 0xcc,(byte) 0x0,(byte) 0xc6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0x1f,(byte) 0x80,
-};
-
-static final BitmapCharRec ch74 = new BitmapCharRec(9,17,-1,0,11,ch74data);
-
-/* char: 0x49 'I' */
-
-static final byte[] ch73data = {
-(byte) 0xfc,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x30,
-(byte) 0xfc,
-};
-
-static final BitmapCharRec ch73 = new BitmapCharRec(6,17,-1,0,8,ch73data);
-
-/* char: 0x48 'H' */
-
-static final byte[] ch72data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,
-(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x3f,(byte) 0xfe,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,
-(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x30,(byte) 0x6,(byte) 0x0,
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,
-};
-
-static final BitmapCharRec ch72 = new BitmapCharRec(17,17,-1,0,19,ch72data);
-
-/* char: 0x47 'G' */
-
-static final byte[] ch71data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1e,(byte) 0x38,(byte) 0x38,(byte) 0x1c,(byte) 0x60,(byte) 0xc,(byte) 0x60,(byte) 0xc,(byte) 0xc0,(byte) 0xc,(byte) 0xc0,(byte) 0xc,(byte) 0xc0,(byte) 0x3f,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x60,(byte) 0x4,(byte) 0x60,(byte) 0x4,(byte) 0x38,(byte) 0xc,(byte) 0x1c,(byte) 0x3c,
-(byte) 0x7,(byte) 0xe4,
-};
-
-static final BitmapCharRec ch71 = new BitmapCharRec(16,17,-1,0,18,ch71data);
-
-/* char: 0x46 'F' */
-
-static final byte[] ch70data = {
-(byte) 0xfc,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x20,(byte) 0x30,(byte) 0x20,
-(byte) 0x3f,(byte) 0xe0,(byte) 0x30,(byte) 0x20,(byte) 0x30,(byte) 0x20,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x30,
-(byte) 0xff,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch70 = new BitmapCharRec(12,17,-1,0,14,ch70data);
-
-/* char: 0x45 'E' */
-
-static final byte[] ch69data = {
-(byte) 0xff,(byte) 0xf8,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x8,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,
-(byte) 0x3f,(byte) 0xc0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x10,(byte) 0x30,(byte) 0x30,
-(byte) 0xff,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch69 = new BitmapCharRec(13,17,-1,0,15,ch69data);
-
-/* char: 0x44 'D' */
-
-static final byte[] ch68data = {
-(byte) 0xff,(byte) 0xc0,(byte) 0x30,(byte) 0x70,(byte) 0x30,(byte) 0x38,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0x6,(byte) 0x30,(byte) 0x6,(byte) 0x30,(byte) 0x6,
-(byte) 0x30,(byte) 0x6,(byte) 0x30,(byte) 0x6,(byte) 0x30,(byte) 0x6,(byte) 0x30,(byte) 0x6,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0x38,(byte) 0x30,(byte) 0x70,
-(byte) 0xff,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch68 = new BitmapCharRec(15,17,-1,0,17,ch68data);
-
-/* char: 0x43 'C' */
-
-static final byte[] ch67data = {
-(byte) 0x7,(byte) 0xe0,(byte) 0x1e,(byte) 0x38,(byte) 0x38,(byte) 0x8,(byte) 0x60,(byte) 0x4,(byte) 0x60,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x60,(byte) 0x4,(byte) 0x60,(byte) 0x4,(byte) 0x38,(byte) 0xc,(byte) 0x1c,(byte) 0x3c,
-(byte) 0x7,(byte) 0xe4,
-};
-
-static final BitmapCharRec ch67 = new BitmapCharRec(14,17,-1,0,16,ch67data);
-
-/* char: 0x42 'B' */
-
-static final byte[] ch66data = {
-(byte) 0xff,(byte) 0xe0,(byte) 0x30,(byte) 0x78,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0xc,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x38,
-(byte) 0x3f,(byte) 0xe0,(byte) 0x30,(byte) 0x40,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x18,(byte) 0x30,(byte) 0x30,(byte) 0x30,(byte) 0x70,
-(byte) 0xff,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch66 = new BitmapCharRec(14,17,-1,0,16,ch66data);
-
-/* char: 0x41 'A' */
-
-static final byte[] ch65data = {
-(byte) 0xfc,(byte) 0x1f,(byte) 0x80,(byte) 0x30,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0x6,(byte) 0x0,(byte) 0x10,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0xc,(byte) 0x0,(byte) 0x8,
-(byte) 0xc,(byte) 0x0,(byte) 0xf,(byte) 0xf8,(byte) 0x0,(byte) 0xc,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x18,(byte) 0x0,(byte) 0x4,(byte) 0x30,(byte) 0x0,(byte) 0x6,(byte) 0x30,
-(byte) 0x0,(byte) 0x2,(byte) 0x30,(byte) 0x0,(byte) 0x2,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0x60,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,
-(byte) 0x0,(byte) 0x80,(byte) 0x0,
-};
-
-static final BitmapCharRec ch65 = new BitmapCharRec(17,17,0,0,17,ch65data);
-
-/* char: 0x40 '@' */
-
-static final byte[] ch64data = {
-(byte) 0x3,(byte) 0xf0,(byte) 0x0,(byte) 0xe,(byte) 0xc,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x0,(byte) 0x61,(byte) 0xde,(byte) 0x0,(byte) 0x63,
-(byte) 0x7b,(byte) 0x0,(byte) 0xc6,(byte) 0x39,(byte) 0x80,(byte) 0xc6,(byte) 0x18,(byte) 0x80,(byte) 0xc6,(byte) 0x18,(byte) 0xc0,(byte) 0xc6,(byte) 0x18,(byte) 0x40,(byte) 0xc6,(byte) 0xc,
-(byte) 0x40,(byte) 0xc3,(byte) 0xc,(byte) 0x40,(byte) 0xc3,(byte) 0x8c,(byte) 0x40,(byte) 0xe1,(byte) 0xfc,(byte) 0x40,(byte) 0x60,(byte) 0xec,(byte) 0xc0,(byte) 0x70,(byte) 0x0,(byte) 0x80,
-(byte) 0x38,(byte) 0x1,(byte) 0x80,(byte) 0x1c,(byte) 0x3,(byte) 0x0,(byte) 0xf,(byte) 0xe,(byte) 0x0,(byte) 0x3,(byte) 0xf8,(byte) 0x0,
-};
-
-static final BitmapCharRec ch64 = new BitmapCharRec(18,20,-2,3,22,ch64data);
-
-/* char: 0x3f '?' */
-
-static final byte[] ch63data = {
-(byte) 0x30,(byte) 0x30,(byte) 0x0,(byte) 0x0,(byte) 0x10,(byte) 0x10,(byte) 0x10,(byte) 0x18,(byte) 0x18,(byte) 0xc,(byte) 0xe,(byte) 0x7,(byte) 0xc3,(byte) 0xc3,(byte) 0x83,(byte) 0xc6,
-(byte) 0x7c,
-};
-
-static final BitmapCharRec ch63 = new BitmapCharRec(8,17,-2,0,11,ch63data);
-
-/* char: 0x3e '>' */
-
-static final byte[] ch62data = {
-(byte) 0xc0,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0x7,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x60,(byte) 0x1,(byte) 0xc0,(byte) 0x7,(byte) 0x0,
-(byte) 0x1c,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0xc0,(byte) 0x0,
-};
-
-static final BitmapCharRec ch62 = new BitmapCharRec(11,11,-1,-1,13,ch62data);
-
-/* char: 0x3d '=' */
-
-static final byte[] ch61data = {
-(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch61 = new BitmapCharRec(12,6,-1,-4,14,ch61data);
-
-/* char: 0x3c '<' */
-
-static final byte[] ch60data = {
-(byte) 0x0,(byte) 0x60,(byte) 0x1,(byte) 0xc0,(byte) 0x7,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x1c,(byte) 0x0,
-(byte) 0x7,(byte) 0x0,(byte) 0x1,(byte) 0xc0,(byte) 0x0,(byte) 0x60,
-};
-
-static final BitmapCharRec ch60 = new BitmapCharRec(11,11,-1,-1,13,ch60data);
-
-/* char: 0x3b ';' */
-
-static final byte[] ch59data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0x20,(byte) 0xe0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch59 = new BitmapCharRec(3,14,-2,3,7,ch59data);
-
-/* char: 0x3a ':' */
-
-static final byte[] ch58data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch58 = new BitmapCharRec(2,11,-2,0,6,ch58data);
-
-/* char: 0x39 '9' */
-
-static final byte[] ch57data = {
-(byte) 0xf0,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1d,(byte) 0x80,(byte) 0x73,(byte) 0xc0,
-(byte) 0x61,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc1,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x77,(byte) 0x80,
-(byte) 0x1e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch57 = new BitmapCharRec(10,17,-1,0,12,ch57data);
-
-/* char: 0x38 '8' */
-
-static final byte[] ch56data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x73,(byte) 0x80,(byte) 0xe1,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x41,(byte) 0xc0,(byte) 0x61,(byte) 0x80,
-(byte) 0x37,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x33,(byte) 0x0,
-(byte) 0x1e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch56 = new BitmapCharRec(10,17,-1,0,12,ch56data);
-
-/* char: 0x37 '7' */
-
-static final byte[] ch55data = {
-(byte) 0x18,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x1,(byte) 0x80,(byte) 0x81,(byte) 0x80,(byte) 0xc0,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,
-(byte) 0x7f,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch55 = new BitmapCharRec(10,17,-1,0,12,ch55data);
-
-/* char: 0x36 '6' */
-
-static final byte[] ch54data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x7b,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xe0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc1,(byte) 0x80,(byte) 0xf3,(byte) 0x80,(byte) 0xee,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x70,(byte) 0x0,(byte) 0x30,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0xe,(byte) 0x0,
-(byte) 0x3,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch54 = new BitmapCharRec(10,17,-1,0,12,ch54data);
-
-/* char: 0x35 '5' */
-
-static final byte[] ch53data = {
-(byte) 0x7e,(byte) 0x0,(byte) 0xe3,(byte) 0x80,(byte) 0xc1,(byte) 0x80,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x0,(byte) 0xc0,(byte) 0x1,(byte) 0xc0,
-(byte) 0x3,(byte) 0x80,(byte) 0xf,(byte) 0x80,(byte) 0x7e,(byte) 0x0,(byte) 0x78,(byte) 0x0,(byte) 0x60,(byte) 0x0,(byte) 0x20,(byte) 0x0,(byte) 0x20,(byte) 0x0,(byte) 0x1f,(byte) 0x80,
-(byte) 0x1f,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch53 = new BitmapCharRec(10,17,-1,0,12,ch53data);
-
-/* char: 0x34 '4' */
-
-static final byte[] ch52data = {
-(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0xff,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,(byte) 0xc3,(byte) 0x0,(byte) 0x43,(byte) 0x0,
-(byte) 0x63,(byte) 0x0,(byte) 0x23,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x13,(byte) 0x0,(byte) 0x1b,(byte) 0x0,(byte) 0xb,(byte) 0x0,(byte) 0x7,(byte) 0x0,(byte) 0x7,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,
-};
-
-static final BitmapCharRec ch52 = new BitmapCharRec(10,17,-1,0,12,ch52data);
-
-/* char: 0x33 '3' */
-
-static final byte[] ch51data = {
-(byte) 0x78,(byte) 0x0,(byte) 0xe6,(byte) 0x0,(byte) 0xc3,(byte) 0x0,(byte) 0x1,(byte) 0x0,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x3,(byte) 0x80,
-(byte) 0x7,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x83,(byte) 0x0,(byte) 0x83,(byte) 0x0,(byte) 0x47,(byte) 0x0,(byte) 0x7e,(byte) 0x0,
-(byte) 0x1c,(byte) 0x0,
-};
-
-static final BitmapCharRec ch51 = new BitmapCharRec(9,17,-1,0,12,ch51data);
-
-/* char: 0x32 '2' */
-
-static final byte[] ch50data = {
-(byte) 0xff,(byte) 0x80,(byte) 0xff,(byte) 0xc0,(byte) 0x60,(byte) 0x40,(byte) 0x30,(byte) 0x0,(byte) 0x18,(byte) 0x0,(byte) 0xc,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-(byte) 0x3,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1,(byte) 0x80,(byte) 0x1,(byte) 0x80,(byte) 0x81,(byte) 0x80,(byte) 0x81,(byte) 0x80,(byte) 0x43,(byte) 0x80,(byte) 0x7f,(byte) 0x0,
-(byte) 0x1c,(byte) 0x0,
-};
-
-static final BitmapCharRec ch50 = new BitmapCharRec(10,17,-1,0,12,ch50data);
-
-/* char: 0x31 '1' */
-
-static final byte[] ch49data = {
-(byte) 0xff,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x18,(byte) 0x78,(byte) 0x18,
-(byte) 0x8,
-};
-
-static final BitmapCharRec ch49 = new BitmapCharRec(8,17,-2,0,12,ch49data);
-
-/* char: 0x30 '0' */
-
-static final byte[] ch48data = {
-(byte) 0x1e,(byte) 0x0,(byte) 0x33,(byte) 0x0,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0xe1,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x61,(byte) 0x80,(byte) 0x61,(byte) 0x80,(byte) 0x33,(byte) 0x0,
-(byte) 0x1e,(byte) 0x0,
-};
-
-static final BitmapCharRec ch48 = new BitmapCharRec(10,17,-1,0,12,ch48data);
-
-/* char: 0x2f '/' */
-
-static final byte[] ch47data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,(byte) 0x60,(byte) 0x20,(byte) 0x30,(byte) 0x30,(byte) 0x10,(byte) 0x18,(byte) 0x18,(byte) 0x8,(byte) 0xc,(byte) 0xc,(byte) 0x4,(byte) 0x6,
-(byte) 0x6,(byte) 0x3,(byte) 0x3,(byte) 0x3,
-};
-
-static final BitmapCharRec ch47 = new BitmapCharRec(8,20,1,3,7,ch47data);
-
-/* char: 0x2e '.' */
-
-static final byte[] ch46data = {
-(byte) 0xc0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch46 = new BitmapCharRec(2,2,-2,0,6,ch46data);
-
-/* char: 0x2d '-' */
-
-static final byte[] ch45data = {
-(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,
-};
-
-static final BitmapCharRec ch45 = new BitmapCharRec(12,2,-1,-6,14,ch45data);
-
-/* char: 0x2c ',' */
-
-static final byte[] ch44data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0x20,(byte) 0xe0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch44 = new BitmapCharRec(3,5,-2,3,7,ch44data);
-
-/* char: 0x2b '+' */
-
-static final byte[] ch43data = {
-(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0xff,(byte) 0xf0,(byte) 0xff,(byte) 0xf0,(byte) 0x6,(byte) 0x0,
-(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x6,(byte) 0x0,
-};
-
-static final BitmapCharRec ch43 = new BitmapCharRec(12,12,-1,-1,14,ch43data);
-
-/* char: 0x2a '*' */
-
-static final byte[] ch42data = {
-(byte) 0x8,(byte) 0x0,(byte) 0x1c,(byte) 0x0,(byte) 0xc9,(byte) 0x80,(byte) 0xeb,(byte) 0x80,(byte) 0x1c,(byte) 0x0,(byte) 0xeb,(byte) 0x80,(byte) 0xc9,(byte) 0x80,(byte) 0x1c,(byte) 0x0,
-(byte) 0x8,(byte) 0x0,
-};
-
-static final BitmapCharRec ch42 = new BitmapCharRec(9,9,-2,-8,12,ch42data);
-
-/* char: 0x29 ')' */
-
-static final byte[] ch41data = {
-(byte) 0x80,(byte) 0x40,(byte) 0x20,(byte) 0x30,(byte) 0x10,(byte) 0x18,(byte) 0x18,(byte) 0xc,(byte) 0xc,(byte) 0xc,(byte) 0xc,(byte) 0xc,(byte) 0xc,(byte) 0xc,(byte) 0xc,(byte) 0x18,
-(byte) 0x18,(byte) 0x10,(byte) 0x30,(byte) 0x20,(byte) 0x40,(byte) 0x80,
-};
-
-static final BitmapCharRec ch41 = new BitmapCharRec(6,22,-1,5,8,ch41data);
-
-/* char: 0x28 '(' */
-
-static final byte[] ch40data = {
-(byte) 0x4,(byte) 0x8,(byte) 0x10,(byte) 0x30,(byte) 0x20,(byte) 0x60,(byte) 0x60,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0x60,
-(byte) 0x60,(byte) 0x20,(byte) 0x30,(byte) 0x10,(byte) 0x8,(byte) 0x4,
-};
-
-static final BitmapCharRec ch40 = new BitmapCharRec(6,22,-1,5,8,ch40data);
-
-/* char: 0x27 ''' */
-
-static final byte[] ch39data = {
-(byte) 0xc0,(byte) 0x60,(byte) 0x20,(byte) 0xe0,(byte) 0xc0,
-};
-
-static final BitmapCharRec ch39 = new BitmapCharRec(3,5,-3,-12,8,ch39data);
-
-/* char: 0x26 '&' */
-
-static final byte[] ch38data = {
-(byte) 0x3c,(byte) 0x3c,(byte) 0x7f,(byte) 0x7e,(byte) 0xe1,(byte) 0xe1,(byte) 0xc0,(byte) 0xc0,(byte) 0xc1,(byte) 0xc0,(byte) 0xc1,(byte) 0xa0,(byte) 0x63,(byte) 0x20,(byte) 0x37,(byte) 0x10,
-(byte) 0x1e,(byte) 0x18,(byte) 0xe,(byte) 0x3e,(byte) 0xf,(byte) 0x0,(byte) 0x1d,(byte) 0x80,(byte) 0x18,(byte) 0xc0,(byte) 0x18,(byte) 0x40,(byte) 0x18,(byte) 0x40,(byte) 0xc,(byte) 0xc0,
-(byte) 0x7,(byte) 0x80,
-};
-
-static final BitmapCharRec ch38 = new BitmapCharRec(16,17,-1,0,18,ch38data);
-
-/* char: 0x25 '%' */
-
-static final byte[] ch37data = {
-(byte) 0x30,(byte) 0x3c,(byte) 0x0,(byte) 0x18,(byte) 0x72,(byte) 0x0,(byte) 0xc,(byte) 0x61,(byte) 0x0,(byte) 0x4,(byte) 0x60,(byte) 0x80,(byte) 0x6,(byte) 0x60,(byte) 0x80,(byte) 0x3,
-(byte) 0x30,(byte) 0x80,(byte) 0x1,(byte) 0x19,(byte) 0x80,(byte) 0x1,(byte) 0x8f,(byte) 0x0,(byte) 0x78,(byte) 0xc0,(byte) 0x0,(byte) 0xe4,(byte) 0x40,(byte) 0x0,(byte) 0xc2,(byte) 0x60,
-(byte) 0x0,(byte) 0xc1,(byte) 0x30,(byte) 0x0,(byte) 0xc1,(byte) 0x10,(byte) 0x0,(byte) 0x61,(byte) 0x18,(byte) 0x0,(byte) 0x33,(byte) 0xfc,(byte) 0x0,(byte) 0x1e,(byte) 0xc,(byte) 0x0,
-};
-
-static final BitmapCharRec ch37 = new BitmapCharRec(17,16,-1,0,19,ch37data);
-
-/* char: 0x24 '$' */
-
-static final byte[] ch36data = {
-(byte) 0x4,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x3f,(byte) 0x0,(byte) 0xe5,(byte) 0xc0,(byte) 0xc4,(byte) 0xc0,(byte) 0x84,(byte) 0x60,(byte) 0x84,(byte) 0x60,(byte) 0x4,(byte) 0x60,
-(byte) 0x4,(byte) 0xe0,(byte) 0x7,(byte) 0xc0,(byte) 0x7,(byte) 0x80,(byte) 0x1e,(byte) 0x0,(byte) 0x3c,(byte) 0x0,(byte) 0x74,(byte) 0x0,(byte) 0x64,(byte) 0x0,(byte) 0x64,(byte) 0x20,
-(byte) 0x64,(byte) 0x60,(byte) 0x34,(byte) 0xe0,(byte) 0x1f,(byte) 0x80,(byte) 0x4,(byte) 0x0,(byte) 0x4,(byte) 0x0,
-};
-
-static final BitmapCharRec ch36 = new BitmapCharRec(11,21,0,2,12,ch36data);
-
-/* char: 0x23 '#' */
-
-static final byte[] ch35data = {
-(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0x22,(byte) 0x0,(byte) 0xff,(byte) 0xc0,(byte) 0xff,(byte) 0xc0,(byte) 0x11,(byte) 0x0,
-(byte) 0x11,(byte) 0x0,(byte) 0x11,(byte) 0x0,(byte) 0x7f,(byte) 0xe0,(byte) 0x7f,(byte) 0xe0,(byte) 0x8,(byte) 0x80,(byte) 0x8,(byte) 0x80,(byte) 0x8,(byte) 0x80,(byte) 0x8,(byte) 0x80,
-(byte) 0x8,(byte) 0x80,
-};
-
-static final BitmapCharRec ch35 = new BitmapCharRec(11,17,-1,0,13,ch35data);
-
-/* char: 0x22 '"' */
-
-static final byte[] ch34data = {
-(byte) 0x88,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,(byte) 0xcc,
-};
-
-static final BitmapCharRec ch34 = new BitmapCharRec(6,5,-1,-12,10,ch34data);
-
-/* char: 0x21 '!' */
-
-static final byte[] ch33data = {
-(byte) 0xc0,(byte) 0xc0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,(byte) 0xc0,
-(byte) 0xc0,
-};
-
-static final BitmapCharRec ch33 = new BitmapCharRec(2,17,-3,0,8,ch33data);
-
-/* char: 0x20 ' ' */
-
-static final BitmapCharRec ch32 = new BitmapCharRec(0,0,0,0,6,null);
-
-static final BitmapCharRec[] chars = {
-ch32,
-ch33,
-ch34,
-ch35,
-ch36,
-ch37,
-ch38,
-ch39,
-ch40,
-ch41,
-ch42,
-ch43,
-ch44,
-ch45,
-ch46,
-ch47,
-ch48,
-ch49,
-ch50,
-ch51,
-ch52,
-ch53,
-ch54,
-ch55,
-ch56,
-ch57,
-ch58,
-ch59,
-ch60,
-ch61,
-ch62,
-ch63,
-ch64,
-ch65,
-ch66,
-ch67,
-ch68,
-ch69,
-ch70,
-ch71,
-ch72,
-ch73,
-ch74,
-ch75,
-ch76,
-ch77,
-ch78,
-ch79,
-ch80,
-ch81,
-ch82,
-ch83,
-ch84,
-ch85,
-ch86,
-ch87,
-ch88,
-ch89,
-ch90,
-ch91,
-ch92,
-ch93,
-ch94,
-ch95,
-ch96,
-ch97,
-ch98,
-ch99,
-ch100,
-ch101,
-ch102,
-ch103,
-ch104,
-ch105,
-ch106,
-ch107,
-ch108,
-ch109,
-ch110,
-ch111,
-ch112,
-ch113,
-ch114,
-ch115,
-ch116,
-ch117,
-ch118,
-ch119,
-ch120,
-ch121,
-ch122,
-ch123,
-ch124,
-ch125,
-ch126,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-null,
-ch160,
-ch161,
-ch162,
-ch163,
-ch164,
-ch165,
-ch166,
-ch167,
-ch168,
-ch169,
-ch170,
-ch171,
-ch172,
-ch173,
-ch174,
-ch175,
-ch176,
-ch177,
-ch178,
-ch179,
-ch180,
-ch181,
-ch182,
-ch183,
-ch184,
-ch185,
-ch186,
-ch187,
-ch188,
-ch189,
-ch190,
-ch191,
-ch192,
-ch193,
-ch194,
-ch195,
-ch196,
-ch197,
-ch198,
-ch199,
-ch200,
-ch201,
-ch202,
-ch203,
-ch204,
-ch205,
-ch206,
-ch207,
-ch208,
-ch209,
-ch210,
-ch211,
-ch212,
-ch213,
-ch214,
-ch215,
-ch216,
-ch217,
-ch218,
-ch219,
-ch220,
-ch221,
-ch222,
-ch223,
-ch224,
-ch225,
-ch226,
-ch227,
-ch228,
-ch229,
-ch230,
-ch231,
-ch232,
-ch233,
-ch234,
-ch235,
-ch236,
-ch237,
-ch238,
-ch239,
-ch240,
-ch241,
-ch242,
-ch243,
-ch244,
-ch245,
-ch246,
-ch247,
-ch248,
-ch249,
-ch250,
-ch251,
-ch252,
-ch253,
-ch254,
-ch255,
-};
-
- static final BitmapFontRec glutBitmapTimesRoman24 = new BitmapFontRec("-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1",
- 224,
- 32,
- chars);
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTStrokeMonoRoman.java b/src/classes/com/sun/opengl/util/GLUTStrokeMonoRoman.java
deleted file mode 100644
index 8c9910994..000000000
--- a/src/classes/com/sun/opengl/util/GLUTStrokeMonoRoman.java
+++ /dev/null
@@ -1,2491 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTStrokeMonoRoman {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-/* char: 33 '!' */
-
-static final CoordRec char33_stroke0[] = {
- new CoordRec((float) 52.381, (float) 100 ),
- new CoordRec((float) 52.381, (float) 33.3333 ),
-};
-
-static final CoordRec char33_stroke1[] = {
- new CoordRec((float) 52.381, (float) 9.5238 ),
- new CoordRec((float) 47.6191, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 0 ),
- new CoordRec((float) 57.1429, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 9.5238 ),
-};
-
-static final StrokeRec char33[] = {
- new StrokeRec( 2, char33_stroke0 ),
- new StrokeRec( 5, char33_stroke1 ),
-};
-
-/* char: 34 '"' */
-
-static final CoordRec char34_stroke0[] = {
- new CoordRec((float) 33.3334, (float) 100 ),
- new CoordRec((float) 33.3334, (float) 66.6667 ),
-};
-
-static final CoordRec char34_stroke1[] = {
- new CoordRec((float) 71.4286, (float) 100 ),
- new CoordRec((float) 71.4286, (float) 66.6667 ),
-};
-
-static final StrokeRec char34[] = {
- new StrokeRec( 2, char34_stroke0 ),
- new StrokeRec( 2, char34_stroke1 ),
-};
-
-/* char: 35 '#' */
-
-static final CoordRec char35_stroke0[] = {
- new CoordRec((float) 54.7619, (float) 119.048 ),
- new CoordRec((float) 21.4286, (float) -33.3333 ),
-};
-
-static final CoordRec char35_stroke1[] = {
- new CoordRec((float) 83.3334, (float) 119.048 ),
- new CoordRec((float) 50, (float) -33.3333 ),
-};
-
-static final CoordRec char35_stroke2[] = {
- new CoordRec((float) 21.4286, (float) 57.1429 ),
- new CoordRec((float) 88.0952, (float) 57.1429 ),
-};
-
-static final CoordRec char35_stroke3[] = {
- new CoordRec((float) 16.6667, (float) 28.5714 ),
- new CoordRec((float) 83.3334, (float) 28.5714 ),
-};
-
-static final StrokeRec char35[] = {
- new StrokeRec( 2, char35_stroke0 ),
- new StrokeRec( 2, char35_stroke1 ),
- new StrokeRec( 2, char35_stroke2 ),
- new StrokeRec( 2, char35_stroke3 ),
-};
-
-/* char: 36 '$' */
-
-static final CoordRec char36_stroke0[] = {
- new CoordRec((float) 42.8571, (float) 119.048 ),
- new CoordRec((float) 42.8571, (float) -19.0476 ),
-};
-
-static final CoordRec char36_stroke1[] = {
- new CoordRec((float) 61.9047, (float) 119.048 ),
- new CoordRec((float) 61.9047, (float) -19.0476 ),
-};
-
-static final CoordRec char36_stroke2[] = {
- new CoordRec((float) 85.7143, (float) 85.7143 ),
- new CoordRec((float) 76.1905, (float) 95.2381 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 28.5714, (float) 95.2381 ),
- new CoordRec((float) 19.0476, (float) 85.7143 ),
- new CoordRec((float) 19.0476, (float) 76.1905 ),
- new CoordRec((float) 23.8095, (float) 66.6667 ),
- new CoordRec((float) 28.5714, (float) 61.9048 ),
- new CoordRec((float) 38.0952, (float) 57.1429 ),
- new CoordRec((float) 66.6666, (float) 47.619 ),
- new CoordRec((float) 76.1905, (float) 42.8571 ),
- new CoordRec((float) 80.9524, (float) 38.0952 ),
- new CoordRec((float) 85.7143, (float) 28.5714 ),
- new CoordRec((float) 85.7143, (float) 14.2857 ),
- new CoordRec((float) 76.1905, (float) 4.7619 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 28.5714, (float) 4.7619 ),
- new CoordRec((float) 19.0476, (float) 14.2857 ),
-};
-
-static final StrokeRec char36[] = {
- new StrokeRec( 2, char36_stroke0 ),
- new StrokeRec( 2, char36_stroke1 ),
- new StrokeRec( 20, char36_stroke2 ),
-};
-
-/* char: 37 '%' */
-
-static final CoordRec char37_stroke0[] = {
- new CoordRec((float) 95.2381, (float) 100 ),
- new CoordRec((float) 9.5238, (float) 0 ),
-};
-
-static final CoordRec char37_stroke1[] = {
- new CoordRec((float) 33.3333, (float) 100 ),
- new CoordRec((float) 42.8571, (float) 90.4762 ),
- new CoordRec((float) 42.8571, (float) 80.9524 ),
- new CoordRec((float) 38.0952, (float) 71.4286 ),
- new CoordRec((float) 28.5714, (float) 66.6667 ),
- new CoordRec((float) 19.0476, (float) 66.6667 ),
- new CoordRec((float) 9.5238, (float) 76.1905 ),
- new CoordRec((float) 9.5238, (float) 85.7143 ),
- new CoordRec((float) 14.2857, (float) 95.2381 ),
- new CoordRec((float) 23.8095, (float) 100 ),
- new CoordRec((float) 33.3333, (float) 100 ),
- new CoordRec((float) 42.8571, (float) 95.2381 ),
- new CoordRec((float) 57.1428, (float) 90.4762 ),
- new CoordRec((float) 71.4286, (float) 90.4762 ),
- new CoordRec((float) 85.7143, (float) 95.2381 ),
- new CoordRec((float) 95.2381, (float) 100 ),
-};
-
-static final CoordRec char37_stroke2[] = {
- new CoordRec((float) 76.1905, (float) 33.3333 ),
- new CoordRec((float) 66.6667, (float) 28.5714 ),
- new CoordRec((float) 61.9048, (float) 19.0476 ),
- new CoordRec((float) 61.9048, (float) 9.5238 ),
- new CoordRec((float) 71.4286, (float) 0 ),
- new CoordRec((float) 80.9524, (float) 0 ),
- new CoordRec((float) 90.4762, (float) 4.7619 ),
- new CoordRec((float) 95.2381, (float) 14.2857 ),
- new CoordRec((float) 95.2381, (float) 23.8095 ),
- new CoordRec((float) 85.7143, (float) 33.3333 ),
- new CoordRec((float) 76.1905, (float) 33.3333 ),
-};
-
-static final StrokeRec char37[] = {
- new StrokeRec( 2, char37_stroke0 ),
- new StrokeRec( 16, char37_stroke1 ),
- new StrokeRec( 11, char37_stroke2 ),
-};
-
-/* char: 38 '&' */
-
-static final CoordRec char38_stroke0[] = {
- new CoordRec((float) 100, (float) 57.1429 ),
- new CoordRec((float) 100, (float) 61.9048 ),
- new CoordRec((float) 95.2381, (float) 66.6667 ),
- new CoordRec((float) 90.4762, (float) 66.6667 ),
- new CoordRec((float) 85.7143, (float) 61.9048 ),
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 71.4286, (float) 28.5714 ),
- new CoordRec((float) 61.9048, (float) 14.2857 ),
- new CoordRec((float) 52.3809, (float) 4.7619 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 23.8095, (float) 0 ),
- new CoordRec((float) 14.2857, (float) 4.7619 ),
- new CoordRec((float) 9.5238, (float) 9.5238 ),
- new CoordRec((float) 4.7619, (float) 19.0476 ),
- new CoordRec((float) 4.7619, (float) 28.5714 ),
- new CoordRec((float) 9.5238, (float) 38.0952 ),
- new CoordRec((float) 14.2857, (float) 42.8571 ),
- new CoordRec((float) 47.619, (float) 61.9048 ),
- new CoordRec((float) 52.3809, (float) 66.6667 ),
- new CoordRec((float) 57.1429, (float) 76.1905 ),
- new CoordRec((float) 57.1429, (float) 85.7143 ),
- new CoordRec((float) 52.3809, (float) 95.2381 ),
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 33.3333, (float) 95.2381 ),
- new CoordRec((float) 28.5714, (float) 85.7143 ),
- new CoordRec((float) 28.5714, (float) 76.1905 ),
- new CoordRec((float) 33.3333, (float) 61.9048 ),
- new CoordRec((float) 42.8571, (float) 47.619 ),
- new CoordRec((float) 66.6667, (float) 14.2857 ),
- new CoordRec((float) 76.1905, (float) 4.7619 ),
- new CoordRec((float) 85.7143, (float) 0 ),
- new CoordRec((float) 95.2381, (float) 0 ),
- new CoordRec((float) 100, (float) 4.7619 ),
- new CoordRec((float) 100, (float) 9.5238 ),
-};
-
-static final StrokeRec char38[] = {
- new StrokeRec( 34, char38_stroke0 ),
-};
-
-/* char: 39 ''' */
-
-static final CoordRec char39_stroke0[] = {
- new CoordRec((float) 52.381, (float) 100 ),
- new CoordRec((float) 52.381, (float) 66.6667 ),
-};
-
-static final StrokeRec char39[] = {
- new StrokeRec( 2, char39_stroke0 ),
-};
-
-/* char: 40 '(' */
-
-static final CoordRec char40_stroke0[] = {
- new CoordRec((float) 69.0476, (float) 119.048 ),
- new CoordRec((float) 59.5238, (float) 109.524 ),
- new CoordRec((float) 50, (float) 95.2381 ),
- new CoordRec((float) 40.4762, (float) 76.1905 ),
- new CoordRec((float) 35.7143, (float) 52.381 ),
- new CoordRec((float) 35.7143, (float) 33.3333 ),
- new CoordRec((float) 40.4762, (float) 9.5238 ),
- new CoordRec((float) 50, (float) -9.5238 ),
- new CoordRec((float) 59.5238, (float) -23.8095 ),
- new CoordRec((float) 69.0476, (float) -33.3333 ),
-};
-
-static final StrokeRec char40[] = {
- new StrokeRec( 10, char40_stroke0 ),
-};
-
-/* char: 41 ')' */
-
-static final CoordRec char41_stroke0[] = {
- new CoordRec((float) 35.7143, (float) 119.048 ),
- new CoordRec((float) 45.2381, (float) 109.524 ),
- new CoordRec((float) 54.7619, (float) 95.2381 ),
- new CoordRec((float) 64.2857, (float) 76.1905 ),
- new CoordRec((float) 69.0476, (float) 52.381 ),
- new CoordRec((float) 69.0476, (float) 33.3333 ),
- new CoordRec((float) 64.2857, (float) 9.5238 ),
- new CoordRec((float) 54.7619, (float) -9.5238 ),
- new CoordRec((float) 45.2381, (float) -23.8095 ),
- new CoordRec((float) 35.7143, (float) -33.3333 ),
-};
-
-static final StrokeRec char41[] = {
- new StrokeRec( 10, char41_stroke0 ),
-};
-
-/* char: 42 '*' */
-
-static final CoordRec char42_stroke0[] = {
- new CoordRec((float) 52.381, (float) 71.4286 ),
- new CoordRec((float) 52.381, (float) 14.2857 ),
-};
-
-static final CoordRec char42_stroke1[] = {
- new CoordRec((float) 28.5715, (float) 57.1429 ),
- new CoordRec((float) 76.1905, (float) 28.5714 ),
-};
-
-static final CoordRec char42_stroke2[] = {
- new CoordRec((float) 76.1905, (float) 57.1429 ),
- new CoordRec((float) 28.5715, (float) 28.5714 ),
-};
-
-static final StrokeRec char42[] = {
- new StrokeRec( 2, char42_stroke0 ),
- new StrokeRec( 2, char42_stroke1 ),
- new StrokeRec( 2, char42_stroke2 ),
-};
-
-/* char: 43 '+' */
-
-static final CoordRec char43_stroke0[] = {
- new CoordRec((float) 52.3809, (float) 85.7143 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final CoordRec char43_stroke1[] = {
- new CoordRec((float) 9.5238, (float) 42.8571 ),
- new CoordRec((float) 95.2381, (float) 42.8571 ),
-};
-
-static final StrokeRec char43[] = {
- new StrokeRec( 2, char43_stroke0 ),
- new StrokeRec( 2, char43_stroke1 ),
-};
-
-/* char: 44 ',' */
-
-static final CoordRec char44_stroke0[] = {
- new CoordRec((float) 57.1429, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 0 ),
- new CoordRec((float) 47.6191, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 9.5238 ),
- new CoordRec((float) 57.1429, (float) 4.7619 ),
- new CoordRec((float) 57.1429, (float) -4.7619 ),
- new CoordRec((float) 52.381, (float) -14.2857 ),
- new CoordRec((float) 47.6191, (float) -19.0476 ),
-};
-
-static final StrokeRec char44[] = {
- new StrokeRec( 8, char44_stroke0 ),
-};
-
-/* char: 45 '-' */
-
-static final CoordRec char45_stroke0[] = {
- new CoordRec((float) 9.5238, (float) 42.8571 ),
- new CoordRec((float) 95.2381, (float) 42.8571 ),
-};
-
-static final StrokeRec char45[] = {
- new StrokeRec( 2, char45_stroke0 ),
-};
-
-/* char: 46 '.' */
-
-static final CoordRec char46_stroke0[] = {
- new CoordRec((float) 52.381, (float) 9.5238 ),
- new CoordRec((float) 47.6191, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 0 ),
- new CoordRec((float) 57.1429, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 9.5238 ),
-};
-
-static final StrokeRec char46[] = {
- new StrokeRec( 5, char46_stroke0 ),
-};
-
-/* char: 47 '/' */
-
-static final CoordRec char47_stroke0[] = {
- new CoordRec((float) 19.0476, (float) -14.2857 ),
- new CoordRec((float) 85.7143, (float) 100 ),
-};
-
-static final StrokeRec char47[] = {
- new StrokeRec( 2, char47_stroke0 ),
-};
-
-/* char: 48 '0' */
-
-static final CoordRec char48_stroke0[] = {
- new CoordRec((float) 47.619, (float) 100 ),
- new CoordRec((float) 33.3333, (float) 95.2381 ),
- new CoordRec((float) 23.8095, (float) 80.9524 ),
- new CoordRec((float) 19.0476, (float) 57.1429 ),
- new CoordRec((float) 19.0476, (float) 42.8571 ),
- new CoordRec((float) 23.8095, (float) 19.0476 ),
- new CoordRec((float) 33.3333, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 57.1428, (float) 0 ),
- new CoordRec((float) 71.4286, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 19.0476 ),
- new CoordRec((float) 85.7143, (float) 42.8571 ),
- new CoordRec((float) 85.7143, (float) 57.1429 ),
- new CoordRec((float) 80.9524, (float) 80.9524 ),
- new CoordRec((float) 71.4286, (float) 95.2381 ),
- new CoordRec((float) 57.1428, (float) 100 ),
- new CoordRec((float) 47.619, (float) 100 ),
-};
-
-static final StrokeRec char48[] = {
- new StrokeRec( 17, char48_stroke0 ),
-};
-
-/* char: 49 '1' */
-
-static final CoordRec char49_stroke0[] = {
- new CoordRec((float) 40.4762, (float) 80.9524 ),
- new CoordRec((float) 50, (float) 85.7143 ),
- new CoordRec((float) 64.2857, (float) 100 ),
- new CoordRec((float) 64.2857, (float) 0 ),
-};
-
-static final StrokeRec char49[] = {
- new StrokeRec( 4, char49_stroke0 ),
-};
-
-/* char: 50 '2' */
-
-static final CoordRec char50_stroke0[] = {
- new CoordRec((float) 23.8095, (float) 76.1905 ),
- new CoordRec((float) 23.8095, (float) 80.9524 ),
- new CoordRec((float) 28.5714, (float) 90.4762 ),
- new CoordRec((float) 33.3333, (float) 95.2381 ),
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 71.4286, (float) 95.2381 ),
- new CoordRec((float) 76.1905, (float) 90.4762 ),
- new CoordRec((float) 80.9524, (float) 80.9524 ),
- new CoordRec((float) 80.9524, (float) 71.4286 ),
- new CoordRec((float) 76.1905, (float) 61.9048 ),
- new CoordRec((float) 66.6666, (float) 47.619 ),
- new CoordRec((float) 19.0476, (float) 0 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final StrokeRec char50[] = {
- new StrokeRec( 14, char50_stroke0 ),
-};
-
-/* char: 51 '3' */
-
-static final CoordRec char51_stroke0[] = {
- new CoordRec((float) 28.5714, (float) 100 ),
- new CoordRec((float) 80.9524, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 61.9048 ),
- new CoordRec((float) 66.6666, (float) 61.9048 ),
- new CoordRec((float) 76.1905, (float) 57.1429 ),
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 85.7143, (float) 38.0952 ),
- new CoordRec((float) 85.7143, (float) 28.5714 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
- new CoordRec((float) 71.4286, (float) 4.7619 ),
- new CoordRec((float) 57.1428, (float) 0 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 28.5714, (float) 4.7619 ),
- new CoordRec((float) 23.8095, (float) 9.5238 ),
- new CoordRec((float) 19.0476, (float) 19.0476 ),
-};
-
-static final StrokeRec char51[] = {
- new StrokeRec( 15, char51_stroke0 ),
-};
-
-/* char: 52 '4' */
-
-static final CoordRec char52_stroke0[] = {
- new CoordRec((float) 64.2857, (float) 100 ),
- new CoordRec((float) 16.6667, (float) 33.3333 ),
- new CoordRec((float) 88.0952, (float) 33.3333 ),
-};
-
-static final CoordRec char52_stroke1[] = {
- new CoordRec((float) 64.2857, (float) 100 ),
- new CoordRec((float) 64.2857, (float) 0 ),
-};
-
-static final StrokeRec char52[] = {
- new StrokeRec( 3, char52_stroke0 ),
- new StrokeRec( 2, char52_stroke1 ),
-};
-
-/* char: 53 '5' */
-
-static final CoordRec char53_stroke0[] = {
- new CoordRec((float) 76.1905, (float) 100 ),
- new CoordRec((float) 28.5714, (float) 100 ),
- new CoordRec((float) 23.8095, (float) 57.1429 ),
- new CoordRec((float) 28.5714, (float) 61.9048 ),
- new CoordRec((float) 42.8571, (float) 66.6667 ),
- new CoordRec((float) 57.1428, (float) 66.6667 ),
- new CoordRec((float) 71.4286, (float) 61.9048 ),
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 85.7143, (float) 38.0952 ),
- new CoordRec((float) 85.7143, (float) 28.5714 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
- new CoordRec((float) 71.4286, (float) 4.7619 ),
- new CoordRec((float) 57.1428, (float) 0 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 28.5714, (float) 4.7619 ),
- new CoordRec((float) 23.8095, (float) 9.5238 ),
- new CoordRec((float) 19.0476, (float) 19.0476 ),
-};
-
-static final StrokeRec char53[] = {
- new StrokeRec( 17, char53_stroke0 ),
-};
-
-/* char: 54 '6' */
-
-static final CoordRec char54_stroke0[] = {
- new CoordRec((float) 78.5714, (float) 85.7143 ),
- new CoordRec((float) 73.8096, (float) 95.2381 ),
- new CoordRec((float) 59.5238, (float) 100 ),
- new CoordRec((float) 50, (float) 100 ),
- new CoordRec((float) 35.7143, (float) 95.2381 ),
- new CoordRec((float) 26.1905, (float) 80.9524 ),
- new CoordRec((float) 21.4286, (float) 57.1429 ),
- new CoordRec((float) 21.4286, (float) 33.3333 ),
- new CoordRec((float) 26.1905, (float) 14.2857 ),
- new CoordRec((float) 35.7143, (float) 4.7619 ),
- new CoordRec((float) 50, (float) 0 ),
- new CoordRec((float) 54.7619, (float) 0 ),
- new CoordRec((float) 69.0476, (float) 4.7619 ),
- new CoordRec((float) 78.5714, (float) 14.2857 ),
- new CoordRec((float) 83.3334, (float) 28.5714 ),
- new CoordRec((float) 83.3334, (float) 33.3333 ),
- new CoordRec((float) 78.5714, (float) 47.619 ),
- new CoordRec((float) 69.0476, (float) 57.1429 ),
- new CoordRec((float) 54.7619, (float) 61.9048 ),
- new CoordRec((float) 50, (float) 61.9048 ),
- new CoordRec((float) 35.7143, (float) 57.1429 ),
- new CoordRec((float) 26.1905, (float) 47.619 ),
- new CoordRec((float) 21.4286, (float) 33.3333 ),
-};
-
-static final StrokeRec char54[] = {
- new StrokeRec( 23, char54_stroke0 ),
-};
-
-/* char: 55 '7' */
-
-static final CoordRec char55_stroke0[] = {
- new CoordRec((float) 85.7143, (float) 100 ),
- new CoordRec((float) 38.0952, (float) 0 ),
-};
-
-static final CoordRec char55_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 85.7143, (float) 100 ),
-};
-
-static final StrokeRec char55[] = {
- new StrokeRec( 2, char55_stroke0 ),
- new StrokeRec( 2, char55_stroke1 ),
-};
-
-/* char: 56 '8' */
-
-static final CoordRec char56_stroke0[] = {
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 28.5714, (float) 95.2381 ),
- new CoordRec((float) 23.8095, (float) 85.7143 ),
- new CoordRec((float) 23.8095, (float) 76.1905 ),
- new CoordRec((float) 28.5714, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 61.9048 ),
- new CoordRec((float) 57.1428, (float) 57.1429 ),
- new CoordRec((float) 71.4286, (float) 52.381 ),
- new CoordRec((float) 80.9524, (float) 42.8571 ),
- new CoordRec((float) 85.7143, (float) 33.3333 ),
- new CoordRec((float) 85.7143, (float) 19.0476 ),
- new CoordRec((float) 80.9524, (float) 9.5238 ),
- new CoordRec((float) 76.1905, (float) 4.7619 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 28.5714, (float) 4.7619 ),
- new CoordRec((float) 23.8095, (float) 9.5238 ),
- new CoordRec((float) 19.0476, (float) 19.0476 ),
- new CoordRec((float) 19.0476, (float) 33.3333 ),
- new CoordRec((float) 23.8095, (float) 42.8571 ),
- new CoordRec((float) 33.3333, (float) 52.381 ),
- new CoordRec((float) 47.619, (float) 57.1429 ),
- new CoordRec((float) 66.6666, (float) 61.9048 ),
- new CoordRec((float) 76.1905, (float) 66.6667 ),
- new CoordRec((float) 80.9524, (float) 76.1905 ),
- new CoordRec((float) 80.9524, (float) 85.7143 ),
- new CoordRec((float) 76.1905, (float) 95.2381 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 42.8571, (float) 100 ),
-};
-
-static final StrokeRec char56[] = {
- new StrokeRec( 29, char56_stroke0 ),
-};
-
-/* char: 57 '9' */
-
-static final CoordRec char57_stroke0[] = {
- new CoordRec((float) 83.3334, (float) 66.6667 ),
- new CoordRec((float) 78.5714, (float) 52.381 ),
- new CoordRec((float) 69.0476, (float) 42.8571 ),
- new CoordRec((float) 54.7619, (float) 38.0952 ),
- new CoordRec((float) 50, (float) 38.0952 ),
- new CoordRec((float) 35.7143, (float) 42.8571 ),
- new CoordRec((float) 26.1905, (float) 52.381 ),
- new CoordRec((float) 21.4286, (float) 66.6667 ),
- new CoordRec((float) 21.4286, (float) 71.4286 ),
- new CoordRec((float) 26.1905, (float) 85.7143 ),
- new CoordRec((float) 35.7143, (float) 95.2381 ),
- new CoordRec((float) 50, (float) 100 ),
- new CoordRec((float) 54.7619, (float) 100 ),
- new CoordRec((float) 69.0476, (float) 95.2381 ),
- new CoordRec((float) 78.5714, (float) 85.7143 ),
- new CoordRec((float) 83.3334, (float) 66.6667 ),
- new CoordRec((float) 83.3334, (float) 42.8571 ),
- new CoordRec((float) 78.5714, (float) 19.0476 ),
- new CoordRec((float) 69.0476, (float) 4.7619 ),
- new CoordRec((float) 54.7619, (float) 0 ),
- new CoordRec((float) 45.2381, (float) 0 ),
- new CoordRec((float) 30.9524, (float) 4.7619 ),
- new CoordRec((float) 26.1905, (float) 14.2857 ),
-};
-
-static final StrokeRec char57[] = {
- new StrokeRec( 23, char57_stroke0 ),
-};
-
-/* char: 58 ':' */
-
-static final CoordRec char58_stroke0[] = {
- new CoordRec((float) 52.381, (float) 66.6667 ),
- new CoordRec((float) 47.6191, (float) 61.9048 ),
- new CoordRec((float) 52.381, (float) 57.1429 ),
- new CoordRec((float) 57.1429, (float) 61.9048 ),
- new CoordRec((float) 52.381, (float) 66.6667 ),
-};
-
-static final CoordRec char58_stroke1[] = {
- new CoordRec((float) 52.381, (float) 9.5238 ),
- new CoordRec((float) 47.6191, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 0 ),
- new CoordRec((float) 57.1429, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 9.5238 ),
-};
-
-static final StrokeRec char58[] = {
- new StrokeRec( 5, char58_stroke0 ),
- new StrokeRec( 5, char58_stroke1 ),
-};
-
-/* char: 59 ';' */
-
-static final CoordRec char59_stroke0[] = {
- new CoordRec((float) 52.381, (float) 66.6667 ),
- new CoordRec((float) 47.6191, (float) 61.9048 ),
- new CoordRec((float) 52.381, (float) 57.1429 ),
- new CoordRec((float) 57.1429, (float) 61.9048 ),
- new CoordRec((float) 52.381, (float) 66.6667 ),
-};
-
-static final CoordRec char59_stroke1[] = {
- new CoordRec((float) 57.1429, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 0 ),
- new CoordRec((float) 47.6191, (float) 4.7619 ),
- new CoordRec((float) 52.381, (float) 9.5238 ),
- new CoordRec((float) 57.1429, (float) 4.7619 ),
- new CoordRec((float) 57.1429, (float) -4.7619 ),
- new CoordRec((float) 52.381, (float) -14.2857 ),
- new CoordRec((float) 47.6191, (float) -19.0476 ),
-};
-
-static final StrokeRec char59[] = {
- new StrokeRec( 5, char59_stroke0 ),
- new StrokeRec( 8, char59_stroke1 ),
-};
-
-/* char: 60 '<' */
-
-static final CoordRec char60_stroke0[] = {
- new CoordRec((float) 90.4762, (float) 85.7143 ),
- new CoordRec((float) 14.2857, (float) 42.8571 ),
- new CoordRec((float) 90.4762, (float) 0 ),
-};
-
-static final StrokeRec char60[] = {
- new StrokeRec( 3, char60_stroke0 ),
-};
-
-/* char: 61 '=' */
-
-static final CoordRec char61_stroke0[] = {
- new CoordRec((float) 9.5238, (float) 57.1429 ),
- new CoordRec((float) 95.2381, (float) 57.1429 ),
-};
-
-static final CoordRec char61_stroke1[] = {
- new CoordRec((float) 9.5238, (float) 28.5714 ),
- new CoordRec((float) 95.2381, (float) 28.5714 ),
-};
-
-static final StrokeRec char61[] = {
- new StrokeRec( 2, char61_stroke0 ),
- new StrokeRec( 2, char61_stroke1 ),
-};
-
-/* char: 62 '>' */
-
-static final CoordRec char62_stroke0[] = {
- new CoordRec((float) 14.2857, (float) 85.7143 ),
- new CoordRec((float) 90.4762, (float) 42.8571 ),
- new CoordRec((float) 14.2857, (float) 0 ),
-};
-
-static final StrokeRec char62[] = {
- new StrokeRec( 3, char62_stroke0 ),
-};
-
-/* char: 63 '?' */
-
-static final CoordRec char63_stroke0[] = {
- new CoordRec((float) 23.8095, (float) 76.1905 ),
- new CoordRec((float) 23.8095, (float) 80.9524 ),
- new CoordRec((float) 28.5714, (float) 90.4762 ),
- new CoordRec((float) 33.3333, (float) 95.2381 ),
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 71.4285, (float) 95.2381 ),
- new CoordRec((float) 76.1905, (float) 90.4762 ),
- new CoordRec((float) 80.9524, (float) 80.9524 ),
- new CoordRec((float) 80.9524, (float) 71.4286 ),
- new CoordRec((float) 76.1905, (float) 61.9048 ),
- new CoordRec((float) 71.4285, (float) 57.1429 ),
- new CoordRec((float) 52.3809, (float) 47.619 ),
- new CoordRec((float) 52.3809, (float) 33.3333 ),
-};
-
-static final CoordRec char63_stroke1[] = {
- new CoordRec((float) 52.3809, (float) 9.5238 ),
- new CoordRec((float) 47.619, (float) 4.7619 ),
- new CoordRec((float) 52.3809, (float) 0 ),
- new CoordRec((float) 57.1428, (float) 4.7619 ),
- new CoordRec((float) 52.3809, (float) 9.5238 ),
-};
-
-static final StrokeRec char63[] = {
- new StrokeRec( 14, char63_stroke0 ),
- new StrokeRec( 5, char63_stroke1 ),
-};
-
-/* char: 64 '@' */
-
-static final CoordRec char64_stroke0[] = {
- new CoordRec((float) 64.2857, (float) 52.381 ),
- new CoordRec((float) 54.7619, (float) 57.1429 ),
- new CoordRec((float) 45.2381, (float) 57.1429 ),
- new CoordRec((float) 40.4762, (float) 47.619 ),
- new CoordRec((float) 40.4762, (float) 42.8571 ),
- new CoordRec((float) 45.2381, (float) 33.3333 ),
- new CoordRec((float) 54.7619, (float) 33.3333 ),
- new CoordRec((float) 64.2857, (float) 38.0952 ),
-};
-
-static final CoordRec char64_stroke1[] = {
- new CoordRec((float) 64.2857, (float) 57.1429 ),
- new CoordRec((float) 64.2857, (float) 38.0952 ),
- new CoordRec((float) 69.0476, (float) 33.3333 ),
- new CoordRec((float) 78.5714, (float) 33.3333 ),
- new CoordRec((float) 83.3334, (float) 42.8571 ),
- new CoordRec((float) 83.3334, (float) 47.619 ),
- new CoordRec((float) 78.5714, (float) 61.9048 ),
- new CoordRec((float) 69.0476, (float) 71.4286 ),
- new CoordRec((float) 54.7619, (float) 76.1905 ),
- new CoordRec((float) 50, (float) 76.1905 ),
- new CoordRec((float) 35.7143, (float) 71.4286 ),
- new CoordRec((float) 26.1905, (float) 61.9048 ),
- new CoordRec((float) 21.4286, (float) 47.619 ),
- new CoordRec((float) 21.4286, (float) 42.8571 ),
- new CoordRec((float) 26.1905, (float) 28.5714 ),
- new CoordRec((float) 35.7143, (float) 19.0476 ),
- new CoordRec((float) 50, (float) 14.2857 ),
- new CoordRec((float) 54.7619, (float) 14.2857 ),
- new CoordRec((float) 69.0476, (float) 19.0476 ),
-};
-
-static final StrokeRec char64[] = {
- new StrokeRec( 8, char64_stroke0 ),
- new StrokeRec( 19, char64_stroke1 ),
-};
-
-/* char: 65 'A' */
-
-static final CoordRec char65_stroke0[] = {
- new CoordRec((float) 52.3809, (float) 100 ),
- new CoordRec((float) 14.2857, (float) 0 ),
-};
-
-static final CoordRec char65_stroke1[] = {
- new CoordRec((float) 52.3809, (float) 100 ),
- new CoordRec((float) 90.4762, (float) 0 ),
-};
-
-static final CoordRec char65_stroke2[] = {
- new CoordRec((float) 28.5714, (float) 33.3333 ),
- new CoordRec((float) 76.1905, (float) 33.3333 ),
-};
-
-static final StrokeRec char65[] = {
- new StrokeRec( 2, char65_stroke0 ),
- new StrokeRec( 2, char65_stroke1 ),
- new StrokeRec( 2, char65_stroke2 ),
-};
-
-/* char: 66 'B' */
-
-static final CoordRec char66_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char66_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 76.1905, (float) 95.2381 ),
- new CoordRec((float) 80.9524, (float) 90.4762 ),
- new CoordRec((float) 85.7143, (float) 80.9524 ),
- new CoordRec((float) 85.7143, (float) 71.4286 ),
- new CoordRec((float) 80.9524, (float) 61.9048 ),
- new CoordRec((float) 76.1905, (float) 57.1429 ),
- new CoordRec((float) 61.9047, (float) 52.381 ),
-};
-
-static final CoordRec char66_stroke2[] = {
- new CoordRec((float) 19.0476, (float) 52.381 ),
- new CoordRec((float) 61.9047, (float) 52.381 ),
- new CoordRec((float) 76.1905, (float) 47.619 ),
- new CoordRec((float) 80.9524, (float) 42.8571 ),
- new CoordRec((float) 85.7143, (float) 33.3333 ),
- new CoordRec((float) 85.7143, (float) 19.0476 ),
- new CoordRec((float) 80.9524, (float) 9.5238 ),
- new CoordRec((float) 76.1905, (float) 4.7619 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final StrokeRec char66[] = {
- new StrokeRec( 2, char66_stroke0 ),
- new StrokeRec( 9, char66_stroke1 ),
- new StrokeRec( 10, char66_stroke2 ),
-};
-
-/* char: 67 'C' */
-
-static final CoordRec char67_stroke0[] = {
- new CoordRec((float) 88.0952, (float) 76.1905 ),
- new CoordRec((float) 83.3334, (float) 85.7143 ),
- new CoordRec((float) 73.8096, (float) 95.2381 ),
- new CoordRec((float) 64.2857, (float) 100 ),
- new CoordRec((float) 45.2381, (float) 100 ),
- new CoordRec((float) 35.7143, (float) 95.2381 ),
- new CoordRec((float) 26.1905, (float) 85.7143 ),
- new CoordRec((float) 21.4286, (float) 76.1905 ),
- new CoordRec((float) 16.6667, (float) 61.9048 ),
- new CoordRec((float) 16.6667, (float) 38.0952 ),
- new CoordRec((float) 21.4286, (float) 23.8095 ),
- new CoordRec((float) 26.1905, (float) 14.2857 ),
- new CoordRec((float) 35.7143, (float) 4.7619 ),
- new CoordRec((float) 45.2381, (float) 0 ),
- new CoordRec((float) 64.2857, (float) 0 ),
- new CoordRec((float) 73.8096, (float) 4.7619 ),
- new CoordRec((float) 83.3334, (float) 14.2857 ),
- new CoordRec((float) 88.0952, (float) 23.8095 ),
-};
-
-static final StrokeRec char67[] = {
- new StrokeRec( 18, char67_stroke0 ),
-};
-
-/* char: 68 'D' */
-
-static final CoordRec char68_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char68_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 100 ),
- new CoordRec((float) 66.6666, (float) 95.2381 ),
- new CoordRec((float) 76.1905, (float) 85.7143 ),
- new CoordRec((float) 80.9524, (float) 76.1905 ),
- new CoordRec((float) 85.7143, (float) 61.9048 ),
- new CoordRec((float) 85.7143, (float) 38.0952 ),
- new CoordRec((float) 80.9524, (float) 23.8095 ),
- new CoordRec((float) 76.1905, (float) 14.2857 ),
- new CoordRec((float) 66.6666, (float) 4.7619 ),
- new CoordRec((float) 52.3809, (float) 0 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final StrokeRec char68[] = {
- new StrokeRec( 2, char68_stroke0 ),
- new StrokeRec( 12, char68_stroke1 ),
-};
-
-/* char: 69 'E' */
-
-static final CoordRec char69_stroke0[] = {
- new CoordRec((float) 21.4286, (float) 100 ),
- new CoordRec((float) 21.4286, (float) 0 ),
-};
-
-static final CoordRec char69_stroke1[] = {
- new CoordRec((float) 21.4286, (float) 100 ),
- new CoordRec((float) 83.3334, (float) 100 ),
-};
-
-static final CoordRec char69_stroke2[] = {
- new CoordRec((float) 21.4286, (float) 52.381 ),
- new CoordRec((float) 59.5238, (float) 52.381 ),
-};
-
-static final CoordRec char69_stroke3[] = {
- new CoordRec((float) 21.4286, (float) 0 ),
- new CoordRec((float) 83.3334, (float) 0 ),
-};
-
-static final StrokeRec char69[] = {
- new StrokeRec( 2, char69_stroke0 ),
- new StrokeRec( 2, char69_stroke1 ),
- new StrokeRec( 2, char69_stroke2 ),
- new StrokeRec( 2, char69_stroke3 ),
-};
-
-/* char: 70 'F' */
-
-static final CoordRec char70_stroke0[] = {
- new CoordRec((float) 21.4286, (float) 100 ),
- new CoordRec((float) 21.4286, (float) 0 ),
-};
-
-static final CoordRec char70_stroke1[] = {
- new CoordRec((float) 21.4286, (float) 100 ),
- new CoordRec((float) 83.3334, (float) 100 ),
-};
-
-static final CoordRec char70_stroke2[] = {
- new CoordRec((float) 21.4286, (float) 52.381 ),
- new CoordRec((float) 59.5238, (float) 52.381 ),
-};
-
-static final StrokeRec char70[] = {
- new StrokeRec( 2, char70_stroke0 ),
- new StrokeRec( 2, char70_stroke1 ),
- new StrokeRec( 2, char70_stroke2 ),
-};
-
-/* char: 71 'G' */
-
-static final CoordRec char71_stroke0[] = {
- new CoordRec((float) 88.0952, (float) 76.1905 ),
- new CoordRec((float) 83.3334, (float) 85.7143 ),
- new CoordRec((float) 73.8096, (float) 95.2381 ),
- new CoordRec((float) 64.2857, (float) 100 ),
- new CoordRec((float) 45.2381, (float) 100 ),
- new CoordRec((float) 35.7143, (float) 95.2381 ),
- new CoordRec((float) 26.1905, (float) 85.7143 ),
- new CoordRec((float) 21.4286, (float) 76.1905 ),
- new CoordRec((float) 16.6667, (float) 61.9048 ),
- new CoordRec((float) 16.6667, (float) 38.0952 ),
- new CoordRec((float) 21.4286, (float) 23.8095 ),
- new CoordRec((float) 26.1905, (float) 14.2857 ),
- new CoordRec((float) 35.7143, (float) 4.7619 ),
- new CoordRec((float) 45.2381, (float) 0 ),
- new CoordRec((float) 64.2857, (float) 0 ),
- new CoordRec((float) 73.8096, (float) 4.7619 ),
- new CoordRec((float) 83.3334, (float) 14.2857 ),
- new CoordRec((float) 88.0952, (float) 23.8095 ),
- new CoordRec((float) 88.0952, (float) 38.0952 ),
-};
-
-static final CoordRec char71_stroke1[] = {
- new CoordRec((float) 64.2857, (float) 38.0952 ),
- new CoordRec((float) 88.0952, (float) 38.0952 ),
-};
-
-static final StrokeRec char71[] = {
- new StrokeRec( 19, char71_stroke0 ),
- new StrokeRec( 2, char71_stroke1 ),
-};
-
-/* char: 72 'H' */
-
-static final CoordRec char72_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char72_stroke1[] = {
- new CoordRec((float) 85.7143, (float) 100 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final CoordRec char72_stroke2[] = {
- new CoordRec((float) 19.0476, (float) 52.381 ),
- new CoordRec((float) 85.7143, (float) 52.381 ),
-};
-
-static final StrokeRec char72[] = {
- new StrokeRec( 2, char72_stroke0 ),
- new StrokeRec( 2, char72_stroke1 ),
- new StrokeRec( 2, char72_stroke2 ),
-};
-
-/* char: 73 'I' */
-
-static final CoordRec char73_stroke0[] = {
- new CoordRec((float) 52.381, (float) 100 ),
- new CoordRec((float) 52.381, (float) 0 ),
-};
-
-static final StrokeRec char73[] = {
- new StrokeRec( 2, char73_stroke0 ),
-};
-
-/* char: 74 'J' */
-
-static final CoordRec char74_stroke0[] = {
- new CoordRec((float) 76.1905, (float) 100 ),
- new CoordRec((float) 76.1905, (float) 23.8095 ),
- new CoordRec((float) 71.4286, (float) 9.5238 ),
- new CoordRec((float) 66.6667, (float) 4.7619 ),
- new CoordRec((float) 57.1429, (float) 0 ),
- new CoordRec((float) 47.6191, (float) 0 ),
- new CoordRec((float) 38.0953, (float) 4.7619 ),
- new CoordRec((float) 33.3334, (float) 9.5238 ),
- new CoordRec((float) 28.5715, (float) 23.8095 ),
- new CoordRec((float) 28.5715, (float) 33.3333 ),
-};
-
-static final StrokeRec char74[] = {
- new StrokeRec( 10, char74_stroke0 ),
-};
-
-/* char: 75 'K' */
-
-static final CoordRec char75_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char75_stroke1[] = {
- new CoordRec((float) 85.7143, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 33.3333 ),
-};
-
-static final CoordRec char75_stroke2[] = {
- new CoordRec((float) 42.8571, (float) 57.1429 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final StrokeRec char75[] = {
- new StrokeRec( 2, char75_stroke0 ),
- new StrokeRec( 2, char75_stroke1 ),
- new StrokeRec( 2, char75_stroke2 ),
-};
-
-/* char: 76 'L' */
-
-static final CoordRec char76_stroke0[] = {
- new CoordRec((float) 23.8095, (float) 100 ),
- new CoordRec((float) 23.8095, (float) 0 ),
-};
-
-static final CoordRec char76_stroke1[] = {
- new CoordRec((float) 23.8095, (float) 0 ),
- new CoordRec((float) 80.9524, (float) 0 ),
-};
-
-static final StrokeRec char76[] = {
- new StrokeRec( 2, char76_stroke0 ),
- new StrokeRec( 2, char76_stroke1 ),
-};
-
-/* char: 77 'M' */
-
-static final CoordRec char77_stroke0[] = {
- new CoordRec((float) 14.2857, (float) 100 ),
- new CoordRec((float) 14.2857, (float) 0 ),
-};
-
-static final CoordRec char77_stroke1[] = {
- new CoordRec((float) 14.2857, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final CoordRec char77_stroke2[] = {
- new CoordRec((float) 90.4762, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final CoordRec char77_stroke3[] = {
- new CoordRec((float) 90.4762, (float) 100 ),
- new CoordRec((float) 90.4762, (float) 0 ),
-};
-
-static final StrokeRec char77[] = {
- new StrokeRec( 2, char77_stroke0 ),
- new StrokeRec( 2, char77_stroke1 ),
- new StrokeRec( 2, char77_stroke2 ),
- new StrokeRec( 2, char77_stroke3 ),
-};
-
-/* char: 78 'N' */
-
-static final CoordRec char78_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char78_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final CoordRec char78_stroke2[] = {
- new CoordRec((float) 85.7143, (float) 100 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final StrokeRec char78[] = {
- new StrokeRec( 2, char78_stroke0 ),
- new StrokeRec( 2, char78_stroke1 ),
- new StrokeRec( 2, char78_stroke2 ),
-};
-
-/* char: 79 'O' */
-
-static final CoordRec char79_stroke0[] = {
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 33.3333, (float) 95.2381 ),
- new CoordRec((float) 23.8095, (float) 85.7143 ),
- new CoordRec((float) 19.0476, (float) 76.1905 ),
- new CoordRec((float) 14.2857, (float) 61.9048 ),
- new CoordRec((float) 14.2857, (float) 38.0952 ),
- new CoordRec((float) 19.0476, (float) 23.8095 ),
- new CoordRec((float) 23.8095, (float) 14.2857 ),
- new CoordRec((float) 33.3333, (float) 4.7619 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4286, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
- new CoordRec((float) 85.7143, (float) 23.8095 ),
- new CoordRec((float) 90.4762, (float) 38.0952 ),
- new CoordRec((float) 90.4762, (float) 61.9048 ),
- new CoordRec((float) 85.7143, (float) 76.1905 ),
- new CoordRec((float) 80.9524, (float) 85.7143 ),
- new CoordRec((float) 71.4286, (float) 95.2381 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 42.8571, (float) 100 ),
-};
-
-static final StrokeRec char79[] = {
- new StrokeRec( 21, char79_stroke0 ),
-};
-
-/* char: 80 'P' */
-
-static final CoordRec char80_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char80_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 76.1905, (float) 95.2381 ),
- new CoordRec((float) 80.9524, (float) 90.4762 ),
- new CoordRec((float) 85.7143, (float) 80.9524 ),
- new CoordRec((float) 85.7143, (float) 66.6667 ),
- new CoordRec((float) 80.9524, (float) 57.1429 ),
- new CoordRec((float) 76.1905, (float) 52.381 ),
- new CoordRec((float) 61.9047, (float) 47.619 ),
- new CoordRec((float) 19.0476, (float) 47.619 ),
-};
-
-static final StrokeRec char80[] = {
- new StrokeRec( 2, char80_stroke0 ),
- new StrokeRec( 10, char80_stroke1 ),
-};
-
-/* char: 81 'Q' */
-
-static final CoordRec char81_stroke0[] = {
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 33.3333, (float) 95.2381 ),
- new CoordRec((float) 23.8095, (float) 85.7143 ),
- new CoordRec((float) 19.0476, (float) 76.1905 ),
- new CoordRec((float) 14.2857, (float) 61.9048 ),
- new CoordRec((float) 14.2857, (float) 38.0952 ),
- new CoordRec((float) 19.0476, (float) 23.8095 ),
- new CoordRec((float) 23.8095, (float) 14.2857 ),
- new CoordRec((float) 33.3333, (float) 4.7619 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4286, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
- new CoordRec((float) 85.7143, (float) 23.8095 ),
- new CoordRec((float) 90.4762, (float) 38.0952 ),
- new CoordRec((float) 90.4762, (float) 61.9048 ),
- new CoordRec((float) 85.7143, (float) 76.1905 ),
- new CoordRec((float) 80.9524, (float) 85.7143 ),
- new CoordRec((float) 71.4286, (float) 95.2381 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 42.8571, (float) 100 ),
-};
-
-static final CoordRec char81_stroke1[] = {
- new CoordRec((float) 57.1428, (float) 19.0476 ),
- new CoordRec((float) 85.7143, (float) -9.5238 ),
-};
-
-static final StrokeRec char81[] = {
- new StrokeRec( 21, char81_stroke0 ),
- new StrokeRec( 2, char81_stroke1 ),
-};
-
-/* char: 82 'R' */
-
-static final CoordRec char82_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char82_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 76.1905, (float) 95.2381 ),
- new CoordRec((float) 80.9524, (float) 90.4762 ),
- new CoordRec((float) 85.7143, (float) 80.9524 ),
- new CoordRec((float) 85.7143, (float) 71.4286 ),
- new CoordRec((float) 80.9524, (float) 61.9048 ),
- new CoordRec((float) 76.1905, (float) 57.1429 ),
- new CoordRec((float) 61.9047, (float) 52.381 ),
- new CoordRec((float) 19.0476, (float) 52.381 ),
-};
-
-static final CoordRec char82_stroke2[] = {
- new CoordRec((float) 52.3809, (float) 52.381 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final StrokeRec char82[] = {
- new StrokeRec( 2, char82_stroke0 ),
- new StrokeRec( 10, char82_stroke1 ),
- new StrokeRec( 2, char82_stroke2 ),
-};
-
-/* char: 83 'S' */
-
-static final CoordRec char83_stroke0[] = {
- new CoordRec((float) 85.7143, (float) 85.7143 ),
- new CoordRec((float) 76.1905, (float) 95.2381 ),
- new CoordRec((float) 61.9047, (float) 100 ),
- new CoordRec((float) 42.8571, (float) 100 ),
- new CoordRec((float) 28.5714, (float) 95.2381 ),
- new CoordRec((float) 19.0476, (float) 85.7143 ),
- new CoordRec((float) 19.0476, (float) 76.1905 ),
- new CoordRec((float) 23.8095, (float) 66.6667 ),
- new CoordRec((float) 28.5714, (float) 61.9048 ),
- new CoordRec((float) 38.0952, (float) 57.1429 ),
- new CoordRec((float) 66.6666, (float) 47.619 ),
- new CoordRec((float) 76.1905, (float) 42.8571 ),
- new CoordRec((float) 80.9524, (float) 38.0952 ),
- new CoordRec((float) 85.7143, (float) 28.5714 ),
- new CoordRec((float) 85.7143, (float) 14.2857 ),
- new CoordRec((float) 76.1905, (float) 4.7619 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 28.5714, (float) 4.7619 ),
- new CoordRec((float) 19.0476, (float) 14.2857 ),
-};
-
-static final StrokeRec char83[] = {
- new StrokeRec( 20, char83_stroke0 ),
-};
-
-/* char: 84 'T' */
-
-static final CoordRec char84_stroke0[] = {
- new CoordRec((float) 52.3809, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final CoordRec char84_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 85.7143, (float) 100 ),
-};
-
-static final StrokeRec char84[] = {
- new StrokeRec( 2, char84_stroke0 ),
- new StrokeRec( 2, char84_stroke1 ),
-};
-
-/* char: 85 'U' */
-
-static final CoordRec char85_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 28.5714 ),
- new CoordRec((float) 23.8095, (float) 14.2857 ),
- new CoordRec((float) 33.3333, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 57.1428, (float) 0 ),
- new CoordRec((float) 71.4286, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
- new CoordRec((float) 85.7143, (float) 28.5714 ),
- new CoordRec((float) 85.7143, (float) 100 ),
-};
-
-static final StrokeRec char85[] = {
- new StrokeRec( 10, char85_stroke0 ),
-};
-
-/* char: 86 'V' */
-
-static final CoordRec char86_stroke0[] = {
- new CoordRec((float) 14.2857, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final CoordRec char86_stroke1[] = {
- new CoordRec((float) 90.4762, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final StrokeRec char86[] = {
- new StrokeRec( 2, char86_stroke0 ),
- new StrokeRec( 2, char86_stroke1 ),
-};
-
-/* char: 87 'W' */
-
-static final CoordRec char87_stroke0[] = {
- new CoordRec((float) 4.7619, (float) 100 ),
- new CoordRec((float) 28.5714, (float) 0 ),
-};
-
-static final CoordRec char87_stroke1[] = {
- new CoordRec((float) 52.3809, (float) 100 ),
- new CoordRec((float) 28.5714, (float) 0 ),
-};
-
-static final CoordRec char87_stroke2[] = {
- new CoordRec((float) 52.3809, (float) 100 ),
- new CoordRec((float) 76.1905, (float) 0 ),
-};
-
-static final CoordRec char87_stroke3[] = {
- new CoordRec((float) 100, (float) 100 ),
- new CoordRec((float) 76.1905, (float) 0 ),
-};
-
-static final StrokeRec char87[] = {
- new StrokeRec( 2, char87_stroke0 ),
- new StrokeRec( 2, char87_stroke1 ),
- new StrokeRec( 2, char87_stroke2 ),
- new StrokeRec( 2, char87_stroke3 ),
-};
-
-/* char: 88 'X' */
-
-static final CoordRec char88_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final CoordRec char88_stroke1[] = {
- new CoordRec((float) 85.7143, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final StrokeRec char88[] = {
- new StrokeRec( 2, char88_stroke0 ),
- new StrokeRec( 2, char88_stroke1 ),
-};
-
-/* char: 89 'Y' */
-
-static final CoordRec char89_stroke0[] = {
- new CoordRec((float) 14.2857, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 52.381 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final CoordRec char89_stroke1[] = {
- new CoordRec((float) 90.4762, (float) 100 ),
- new CoordRec((float) 52.3809, (float) 52.381 ),
-};
-
-static final StrokeRec char89[] = {
- new StrokeRec( 3, char89_stroke0 ),
- new StrokeRec( 2, char89_stroke1 ),
-};
-
-/* char: 90 'Z' */
-
-static final CoordRec char90_stroke0[] = {
- new CoordRec((float) 85.7143, (float) 100 ),
- new CoordRec((float) 19.0476, (float) 0 ),
-};
-
-static final CoordRec char90_stroke1[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 85.7143, (float) 100 ),
-};
-
-static final CoordRec char90_stroke2[] = {
- new CoordRec((float) 19.0476, (float) 0 ),
- new CoordRec((float) 85.7143, (float) 0 ),
-};
-
-static final StrokeRec char90[] = {
- new StrokeRec( 2, char90_stroke0 ),
- new StrokeRec( 2, char90_stroke1 ),
- new StrokeRec( 2, char90_stroke2 ),
-};
-
-/* char: 91 '[' */
-
-static final CoordRec char91_stroke0[] = {
- new CoordRec((float) 35.7143, (float) 119.048 ),
- new CoordRec((float) 35.7143, (float) -33.3333 ),
-};
-
-static final CoordRec char91_stroke1[] = {
- new CoordRec((float) 40.4762, (float) 119.048 ),
- new CoordRec((float) 40.4762, (float) -33.3333 ),
-};
-
-static final CoordRec char91_stroke2[] = {
- new CoordRec((float) 35.7143, (float) 119.048 ),
- new CoordRec((float) 69.0476, (float) 119.048 ),
-};
-
-static final CoordRec char91_stroke3[] = {
- new CoordRec((float) 35.7143, (float) -33.3333 ),
- new CoordRec((float) 69.0476, (float) -33.3333 ),
-};
-
-static final StrokeRec char91[] = {
- new StrokeRec( 2, char91_stroke0 ),
- new StrokeRec( 2, char91_stroke1 ),
- new StrokeRec( 2, char91_stroke2 ),
- new StrokeRec( 2, char91_stroke3 ),
-};
-
-/* char: 92 '\' */
-
-static final CoordRec char92_stroke0[] = {
- new CoordRec((float) 19.0476, (float) 100 ),
- new CoordRec((float) 85.7143, (float) -14.2857 ),
-};
-
-static final StrokeRec char92[] = {
- new StrokeRec( 2, char92_stroke0 ),
-};
-
-/* char: 93 ']' */
-
-static final CoordRec char93_stroke0[] = {
- new CoordRec((float) 64.2857, (float) 119.048 ),
- new CoordRec((float) 64.2857, (float) -33.3333 ),
-};
-
-static final CoordRec char93_stroke1[] = {
- new CoordRec((float) 69.0476, (float) 119.048 ),
- new CoordRec((float) 69.0476, (float) -33.3333 ),
-};
-
-static final CoordRec char93_stroke2[] = {
- new CoordRec((float) 35.7143, (float) 119.048 ),
- new CoordRec((float) 69.0476, (float) 119.048 ),
-};
-
-static final CoordRec char93_stroke3[] = {
- new CoordRec((float) 35.7143, (float) -33.3333 ),
- new CoordRec((float) 69.0476, (float) -33.3333 ),
-};
-
-static final StrokeRec char93[] = {
- new StrokeRec( 2, char93_stroke0 ),
- new StrokeRec( 2, char93_stroke1 ),
- new StrokeRec( 2, char93_stroke2 ),
- new StrokeRec( 2, char93_stroke3 ),
-};
-
-/* char: 94 '^' */
-
-static final CoordRec char94_stroke0[] = {
- new CoordRec((float) 52.3809, (float) 109.524 ),
- new CoordRec((float) 14.2857, (float) 42.8571 ),
-};
-
-static final CoordRec char94_stroke1[] = {
- new CoordRec((float) 52.3809, (float) 109.524 ),
- new CoordRec((float) 90.4762, (float) 42.8571 ),
-};
-
-static final StrokeRec char94[] = {
- new StrokeRec( 2, char94_stroke0 ),
- new StrokeRec( 2, char94_stroke1 ),
-};
-
-/* char: 95 '_' */
-
-static final CoordRec char95_stroke0[] = {
- new CoordRec((float) 0, (float) -33.3333 ),
- new CoordRec((float) 104.762, (float) -33.3333 ),
- new CoordRec((float) 104.762, (float) -28.5714 ),
- new CoordRec((float) 0, (float) -28.5714 ),
- new CoordRec((float) 0, (float) -33.3333 ),
-};
-
-static final StrokeRec char95[] = {
- new StrokeRec( 5, char95_stroke0 ),
-};
-
-/* char: 96 '`' */
-
-static final CoordRec char96_stroke0[] = {
- new CoordRec((float) 42.8572, (float) 100 ),
- new CoordRec((float) 66.6667, (float) 71.4286 ),
-};
-
-static final CoordRec char96_stroke1[] = {
- new CoordRec((float) 42.8572, (float) 100 ),
- new CoordRec((float) 38.0953, (float) 95.2381 ),
- new CoordRec((float) 66.6667, (float) 71.4286 ),
-};
-
-static final StrokeRec char96[] = {
- new StrokeRec( 2, char96_stroke0 ),
- new StrokeRec( 3, char96_stroke1 ),
-};
-
-/* char: 97 'a' */
-
-static final CoordRec char97_stroke0[] = {
- new CoordRec((float) 80.9524, (float) 66.6667 ),
- new CoordRec((float) 80.9524, (float) 0 ),
-};
-
-static final CoordRec char97_stroke1[] = {
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 71.4285, (float) 61.9048 ),
- new CoordRec((float) 61.9047, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 61.9048 ),
- new CoordRec((float) 28.5714, (float) 52.381 ),
- new CoordRec((float) 23.8095, (float) 38.0952 ),
- new CoordRec((float) 23.8095, (float) 28.5714 ),
- new CoordRec((float) 28.5714, (float) 14.2857 ),
- new CoordRec((float) 38.0952, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4285, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
-};
-
-static final StrokeRec char97[] = {
- new StrokeRec( 2, char97_stroke0 ),
- new StrokeRec( 14, char97_stroke1 ),
-};
-
-/* char: 98 'b' */
-
-static final CoordRec char98_stroke0[] = {
- new CoordRec((float) 23.8095, (float) 100 ),
- new CoordRec((float) 23.8095, (float) 0 ),
-};
-
-static final CoordRec char98_stroke1[] = {
- new CoordRec((float) 23.8095, (float) 52.381 ),
- new CoordRec((float) 33.3333, (float) 61.9048 ),
- new CoordRec((float) 42.8571, (float) 66.6667 ),
- new CoordRec((float) 57.1428, (float) 66.6667 ),
- new CoordRec((float) 66.6666, (float) 61.9048 ),
- new CoordRec((float) 76.1905, (float) 52.381 ),
- new CoordRec((float) 80.9524, (float) 38.0952 ),
- new CoordRec((float) 80.9524, (float) 28.5714 ),
- new CoordRec((float) 76.1905, (float) 14.2857 ),
- new CoordRec((float) 66.6666, (float) 4.7619 ),
- new CoordRec((float) 57.1428, (float) 0 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 33.3333, (float) 4.7619 ),
- new CoordRec((float) 23.8095, (float) 14.2857 ),
-};
-
-static final StrokeRec char98[] = {
- new StrokeRec( 2, char98_stroke0 ),
- new StrokeRec( 14, char98_stroke1 ),
-};
-
-/* char: 99 'c' */
-
-static final CoordRec char99_stroke0[] = {
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 71.4285, (float) 61.9048 ),
- new CoordRec((float) 61.9047, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 61.9048 ),
- new CoordRec((float) 28.5714, (float) 52.381 ),
- new CoordRec((float) 23.8095, (float) 38.0952 ),
- new CoordRec((float) 23.8095, (float) 28.5714 ),
- new CoordRec((float) 28.5714, (float) 14.2857 ),
- new CoordRec((float) 38.0952, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4285, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
-};
-
-static final StrokeRec char99[] = {
- new StrokeRec( 14, char99_stroke0 ),
-};
-
-/* char: 100 'd' */
-
-static final CoordRec char100_stroke0[] = {
- new CoordRec((float) 80.9524, (float) 100 ),
- new CoordRec((float) 80.9524, (float) 0 ),
-};
-
-static final CoordRec char100_stroke1[] = {
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 71.4285, (float) 61.9048 ),
- new CoordRec((float) 61.9047, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 61.9048 ),
- new CoordRec((float) 28.5714, (float) 52.381 ),
- new CoordRec((float) 23.8095, (float) 38.0952 ),
- new CoordRec((float) 23.8095, (float) 28.5714 ),
- new CoordRec((float) 28.5714, (float) 14.2857 ),
- new CoordRec((float) 38.0952, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4285, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
-};
-
-static final StrokeRec char100[] = {
- new StrokeRec( 2, char100_stroke0 ),
- new StrokeRec( 14, char100_stroke1 ),
-};
-
-/* char: 101 'e' */
-
-static final CoordRec char101_stroke0[] = {
- new CoordRec((float) 23.8095, (float) 38.0952 ),
- new CoordRec((float) 80.9524, (float) 38.0952 ),
- new CoordRec((float) 80.9524, (float) 47.619 ),
- new CoordRec((float) 76.1905, (float) 57.1429 ),
- new CoordRec((float) 71.4285, (float) 61.9048 ),
- new CoordRec((float) 61.9047, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 61.9048 ),
- new CoordRec((float) 28.5714, (float) 52.381 ),
- new CoordRec((float) 23.8095, (float) 38.0952 ),
- new CoordRec((float) 23.8095, (float) 28.5714 ),
- new CoordRec((float) 28.5714, (float) 14.2857 ),
- new CoordRec((float) 38.0952, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4285, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
-};
-
-static final StrokeRec char101[] = {
- new StrokeRec( 17, char101_stroke0 ),
-};
-
-/* char: 102 'f' */
-
-static final CoordRec char102_stroke0[] = {
- new CoordRec((float) 71.4286, (float) 100 ),
- new CoordRec((float) 61.9048, (float) 100 ),
- new CoordRec((float) 52.381, (float) 95.2381 ),
- new CoordRec((float) 47.6191, (float) 80.9524 ),
- new CoordRec((float) 47.6191, (float) 0 ),
-};
-
-static final CoordRec char102_stroke1[] = {
- new CoordRec((float) 33.3334, (float) 66.6667 ),
- new CoordRec((float) 66.6667, (float) 66.6667 ),
-};
-
-static final StrokeRec char102[] = {
- new StrokeRec( 5, char102_stroke0 ),
- new StrokeRec( 2, char102_stroke1 ),
-};
-
-/* char: 103 'g' */
-
-static final CoordRec char103_stroke0[] = {
- new CoordRec((float) 80.9524, (float) 66.6667 ),
- new CoordRec((float) 80.9524, (float) -9.5238 ),
- new CoordRec((float) 76.1905, (float) -23.8095 ),
- new CoordRec((float) 71.4285, (float) -28.5714 ),
- new CoordRec((float) 61.9047, (float) -33.3333 ),
- new CoordRec((float) 47.619, (float) -33.3333 ),
- new CoordRec((float) 38.0952, (float) -28.5714 ),
-};
-
-static final CoordRec char103_stroke1[] = {
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 71.4285, (float) 61.9048 ),
- new CoordRec((float) 61.9047, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 61.9048 ),
- new CoordRec((float) 28.5714, (float) 52.381 ),
- new CoordRec((float) 23.8095, (float) 38.0952 ),
- new CoordRec((float) 23.8095, (float) 28.5714 ),
- new CoordRec((float) 28.5714, (float) 14.2857 ),
- new CoordRec((float) 38.0952, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4285, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
-};
-
-static final StrokeRec char103[] = {
- new StrokeRec( 7, char103_stroke0 ),
- new StrokeRec( 14, char103_stroke1 ),
-};
-
-/* char: 104 'h' */
-
-static final CoordRec char104_stroke0[] = {
- new CoordRec((float) 26.1905, (float) 100 ),
- new CoordRec((float) 26.1905, (float) 0 ),
-};
-
-static final CoordRec char104_stroke1[] = {
- new CoordRec((float) 26.1905, (float) 47.619 ),
- new CoordRec((float) 40.4762, (float) 61.9048 ),
- new CoordRec((float) 50, (float) 66.6667 ),
- new CoordRec((float) 64.2857, (float) 66.6667 ),
- new CoordRec((float) 73.8095, (float) 61.9048 ),
- new CoordRec((float) 78.5715, (float) 47.619 ),
- new CoordRec((float) 78.5715, (float) 0 ),
-};
-
-static final StrokeRec char104[] = {
- new StrokeRec( 2, char104_stroke0 ),
- new StrokeRec( 7, char104_stroke1 ),
-};
-
-/* char: 105 'i' */
-
-static final CoordRec char105_stroke0[] = {
- new CoordRec((float) 47.6191, (float) 100 ),
- new CoordRec((float) 52.381, (float) 95.2381 ),
- new CoordRec((float) 57.1429, (float) 100 ),
- new CoordRec((float) 52.381, (float) 104.762 ),
- new CoordRec((float) 47.6191, (float) 100 ),
-};
-
-static final CoordRec char105_stroke1[] = {
- new CoordRec((float) 52.381, (float) 66.6667 ),
- new CoordRec((float) 52.381, (float) 0 ),
-};
-
-static final StrokeRec char105[] = {
- new StrokeRec( 5, char105_stroke0 ),
- new StrokeRec( 2, char105_stroke1 ),
-};
-
-/* char: 106 'j' */
-
-static final CoordRec char106_stroke0[] = {
- new CoordRec((float) 57.1429, (float) 100 ),
- new CoordRec((float) 61.9048, (float) 95.2381 ),
- new CoordRec((float) 66.6667, (float) 100 ),
- new CoordRec((float) 61.9048, (float) 104.762 ),
- new CoordRec((float) 57.1429, (float) 100 ),
-};
-
-static final CoordRec char106_stroke1[] = {
- new CoordRec((float) 61.9048, (float) 66.6667 ),
- new CoordRec((float) 61.9048, (float) -14.2857 ),
- new CoordRec((float) 57.1429, (float) -28.5714 ),
- new CoordRec((float) 47.6191, (float) -33.3333 ),
- new CoordRec((float) 38.0953, (float) -33.3333 ),
-};
-
-static final StrokeRec char106[] = {
- new StrokeRec( 5, char106_stroke0 ),
- new StrokeRec( 5, char106_stroke1 ),
-};
-
-/* char: 107 'k' */
-
-static final CoordRec char107_stroke0[] = {
- new CoordRec((float) 26.1905, (float) 100 ),
- new CoordRec((float) 26.1905, (float) 0 ),
-};
-
-static final CoordRec char107_stroke1[] = {
- new CoordRec((float) 73.8095, (float) 66.6667 ),
- new CoordRec((float) 26.1905, (float) 19.0476 ),
-};
-
-static final CoordRec char107_stroke2[] = {
- new CoordRec((float) 45.2381, (float) 38.0952 ),
- new CoordRec((float) 78.5715, (float) 0 ),
-};
-
-static final StrokeRec char107[] = {
- new StrokeRec( 2, char107_stroke0 ),
- new StrokeRec( 2, char107_stroke1 ),
- new StrokeRec( 2, char107_stroke2 ),
-};
-
-/* char: 108 'l' */
-
-static final CoordRec char108_stroke0[] = {
- new CoordRec((float) 52.381, (float) 100 ),
- new CoordRec((float) 52.381, (float) 0 ),
-};
-
-static final StrokeRec char108[] = {
- new StrokeRec( 2, char108_stroke0 ),
-};
-
-/* char: 109 'm' */
-
-static final CoordRec char109_stroke0[] = {
- new CoordRec((float) 0, (float) 66.6667 ),
- new CoordRec((float) 0, (float) 0 ),
-};
-
-static final CoordRec char109_stroke1[] = {
- new CoordRec((float) 0, (float) 47.619 ),
- new CoordRec((float) 14.2857, (float) 61.9048 ),
- new CoordRec((float) 23.8095, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 61.9048 ),
- new CoordRec((float) 52.381, (float) 47.619 ),
- new CoordRec((float) 52.381, (float) 0 ),
-};
-
-static final CoordRec char109_stroke2[] = {
- new CoordRec((float) 52.381, (float) 47.619 ),
- new CoordRec((float) 66.6667, (float) 61.9048 ),
- new CoordRec((float) 76.1905, (float) 66.6667 ),
- new CoordRec((float) 90.4762, (float) 66.6667 ),
- new CoordRec((float) 100, (float) 61.9048 ),
- new CoordRec((float) 104.762, (float) 47.619 ),
- new CoordRec((float) 104.762, (float) 0 ),
-};
-
-static final StrokeRec char109[] = {
- new StrokeRec( 2, char109_stroke0 ),
- new StrokeRec( 7, char109_stroke1 ),
- new StrokeRec( 7, char109_stroke2 ),
-};
-
-/* char: 110 'n' */
-
-static final CoordRec char110_stroke0[] = {
- new CoordRec((float) 26.1905, (float) 66.6667 ),
- new CoordRec((float) 26.1905, (float) 0 ),
-};
-
-static final CoordRec char110_stroke1[] = {
- new CoordRec((float) 26.1905, (float) 47.619 ),
- new CoordRec((float) 40.4762, (float) 61.9048 ),
- new CoordRec((float) 50, (float) 66.6667 ),
- new CoordRec((float) 64.2857, (float) 66.6667 ),
- new CoordRec((float) 73.8095, (float) 61.9048 ),
- new CoordRec((float) 78.5715, (float) 47.619 ),
- new CoordRec((float) 78.5715, (float) 0 ),
-};
-
-static final StrokeRec char110[] = {
- new StrokeRec( 2, char110_stroke0 ),
- new StrokeRec( 7, char110_stroke1 ),
-};
-
-/* char: 111 'o' */
-
-static final CoordRec char111_stroke0[] = {
- new CoordRec((float) 45.2381, (float) 66.6667 ),
- new CoordRec((float) 35.7143, (float) 61.9048 ),
- new CoordRec((float) 26.1905, (float) 52.381 ),
- new CoordRec((float) 21.4286, (float) 38.0952 ),
- new CoordRec((float) 21.4286, (float) 28.5714 ),
- new CoordRec((float) 26.1905, (float) 14.2857 ),
- new CoordRec((float) 35.7143, (float) 4.7619 ),
- new CoordRec((float) 45.2381, (float) 0 ),
- new CoordRec((float) 59.5238, (float) 0 ),
- new CoordRec((float) 69.0476, (float) 4.7619 ),
- new CoordRec((float) 78.5714, (float) 14.2857 ),
- new CoordRec((float) 83.3334, (float) 28.5714 ),
- new CoordRec((float) 83.3334, (float) 38.0952 ),
- new CoordRec((float) 78.5714, (float) 52.381 ),
- new CoordRec((float) 69.0476, (float) 61.9048 ),
- new CoordRec((float) 59.5238, (float) 66.6667 ),
- new CoordRec((float) 45.2381, (float) 66.6667 ),
-};
-
-static final StrokeRec char111[] = {
- new StrokeRec( 17, char111_stroke0 ),
-};
-
-/* char: 112 'p' */
-
-static final CoordRec char112_stroke0[] = {
- new CoordRec((float) 23.8095, (float) 66.6667 ),
- new CoordRec((float) 23.8095, (float) -33.3333 ),
-};
-
-static final CoordRec char112_stroke1[] = {
- new CoordRec((float) 23.8095, (float) 52.381 ),
- new CoordRec((float) 33.3333, (float) 61.9048 ),
- new CoordRec((float) 42.8571, (float) 66.6667 ),
- new CoordRec((float) 57.1428, (float) 66.6667 ),
- new CoordRec((float) 66.6666, (float) 61.9048 ),
- new CoordRec((float) 76.1905, (float) 52.381 ),
- new CoordRec((float) 80.9524, (float) 38.0952 ),
- new CoordRec((float) 80.9524, (float) 28.5714 ),
- new CoordRec((float) 76.1905, (float) 14.2857 ),
- new CoordRec((float) 66.6666, (float) 4.7619 ),
- new CoordRec((float) 57.1428, (float) 0 ),
- new CoordRec((float) 42.8571, (float) 0 ),
- new CoordRec((float) 33.3333, (float) 4.7619 ),
- new CoordRec((float) 23.8095, (float) 14.2857 ),
-};
-
-static final StrokeRec char112[] = {
- new StrokeRec( 2, char112_stroke0 ),
- new StrokeRec( 14, char112_stroke1 ),
-};
-
-/* char: 113 'q' */
-
-static final CoordRec char113_stroke0[] = {
- new CoordRec((float) 80.9524, (float) 66.6667 ),
- new CoordRec((float) 80.9524, (float) -33.3333 ),
-};
-
-static final CoordRec char113_stroke1[] = {
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 71.4285, (float) 61.9048 ),
- new CoordRec((float) 61.9047, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 66.6667 ),
- new CoordRec((float) 38.0952, (float) 61.9048 ),
- new CoordRec((float) 28.5714, (float) 52.381 ),
- new CoordRec((float) 23.8095, (float) 38.0952 ),
- new CoordRec((float) 23.8095, (float) 28.5714 ),
- new CoordRec((float) 28.5714, (float) 14.2857 ),
- new CoordRec((float) 38.0952, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 61.9047, (float) 0 ),
- new CoordRec((float) 71.4285, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
-};
-
-static final StrokeRec char113[] = {
- new StrokeRec( 2, char113_stroke0 ),
- new StrokeRec( 14, char113_stroke1 ),
-};
-
-/* char: 114 'r' */
-
-static final CoordRec char114_stroke0[] = {
- new CoordRec((float) 33.3334, (float) 66.6667 ),
- new CoordRec((float) 33.3334, (float) 0 ),
-};
-
-static final CoordRec char114_stroke1[] = {
- new CoordRec((float) 33.3334, (float) 38.0952 ),
- new CoordRec((float) 38.0953, (float) 52.381 ),
- new CoordRec((float) 47.6191, (float) 61.9048 ),
- new CoordRec((float) 57.1429, (float) 66.6667 ),
- new CoordRec((float) 71.4286, (float) 66.6667 ),
-};
-
-static final StrokeRec char114[] = {
- new StrokeRec( 2, char114_stroke0 ),
- new StrokeRec( 5, char114_stroke1 ),
-};
-
-/* char: 115 's' */
-
-static final CoordRec char115_stroke0[] = {
- new CoordRec((float) 78.5715, (float) 52.381 ),
- new CoordRec((float) 73.8095, (float) 61.9048 ),
- new CoordRec((float) 59.5238, (float) 66.6667 ),
- new CoordRec((float) 45.2381, (float) 66.6667 ),
- new CoordRec((float) 30.9524, (float) 61.9048 ),
- new CoordRec((float) 26.1905, (float) 52.381 ),
- new CoordRec((float) 30.9524, (float) 42.8571 ),
- new CoordRec((float) 40.4762, (float) 38.0952 ),
- new CoordRec((float) 64.2857, (float) 33.3333 ),
- new CoordRec((float) 73.8095, (float) 28.5714 ),
- new CoordRec((float) 78.5715, (float) 19.0476 ),
- new CoordRec((float) 78.5715, (float) 14.2857 ),
- new CoordRec((float) 73.8095, (float) 4.7619 ),
- new CoordRec((float) 59.5238, (float) 0 ),
- new CoordRec((float) 45.2381, (float) 0 ),
- new CoordRec((float) 30.9524, (float) 4.7619 ),
- new CoordRec((float) 26.1905, (float) 14.2857 ),
-};
-
-static final StrokeRec char115[] = {
- new StrokeRec( 17, char115_stroke0 ),
-};
-
-/* char: 116 't' */
-
-static final CoordRec char116_stroke0[] = {
- new CoordRec((float) 47.6191, (float) 100 ),
- new CoordRec((float) 47.6191, (float) 19.0476 ),
- new CoordRec((float) 52.381, (float) 4.7619 ),
- new CoordRec((float) 61.9048, (float) 0 ),
- new CoordRec((float) 71.4286, (float) 0 ),
-};
-
-static final CoordRec char116_stroke1[] = {
- new CoordRec((float) 33.3334, (float) 66.6667 ),
- new CoordRec((float) 66.6667, (float) 66.6667 ),
-};
-
-static final StrokeRec char116[] = {
- new StrokeRec( 5, char116_stroke0 ),
- new StrokeRec( 2, char116_stroke1 ),
-};
-
-/* char: 117 'u' */
-
-static final CoordRec char117_stroke0[] = {
- new CoordRec((float) 26.1905, (float) 66.6667 ),
- new CoordRec((float) 26.1905, (float) 19.0476 ),
- new CoordRec((float) 30.9524, (float) 4.7619 ),
- new CoordRec((float) 40.4762, (float) 0 ),
- new CoordRec((float) 54.7619, (float) 0 ),
- new CoordRec((float) 64.2857, (float) 4.7619 ),
- new CoordRec((float) 78.5715, (float) 19.0476 ),
-};
-
-static final CoordRec char117_stroke1[] = {
- new CoordRec((float) 78.5715, (float) 66.6667 ),
- new CoordRec((float) 78.5715, (float) 0 ),
-};
-
-static final StrokeRec char117[] = {
- new StrokeRec( 7, char117_stroke0 ),
- new StrokeRec( 2, char117_stroke1 ),
-};
-
-/* char: 118 'v' */
-
-static final CoordRec char118_stroke0[] = {
- new CoordRec((float) 23.8095, (float) 66.6667 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final CoordRec char118_stroke1[] = {
- new CoordRec((float) 80.9524, (float) 66.6667 ),
- new CoordRec((float) 52.3809, (float) 0 ),
-};
-
-static final StrokeRec char118[] = {
- new StrokeRec( 2, char118_stroke0 ),
- new StrokeRec( 2, char118_stroke1 ),
-};
-
-/* char: 119 'w' */
-
-static final CoordRec char119_stroke0[] = {
- new CoordRec((float) 14.2857, (float) 66.6667 ),
- new CoordRec((float) 33.3333, (float) 0 ),
-};
-
-static final CoordRec char119_stroke1[] = {
- new CoordRec((float) 52.3809, (float) 66.6667 ),
- new CoordRec((float) 33.3333, (float) 0 ),
-};
-
-static final CoordRec char119_stroke2[] = {
- new CoordRec((float) 52.3809, (float) 66.6667 ),
- new CoordRec((float) 71.4286, (float) 0 ),
-};
-
-static final CoordRec char119_stroke3[] = {
- new CoordRec((float) 90.4762, (float) 66.6667 ),
- new CoordRec((float) 71.4286, (float) 0 ),
-};
-
-static final StrokeRec char119[] = {
- new StrokeRec( 2, char119_stroke0 ),
- new StrokeRec( 2, char119_stroke1 ),
- new StrokeRec( 2, char119_stroke2 ),
- new StrokeRec( 2, char119_stroke3 ),
-};
-
-/* char: 120 'x' */
-
-static final CoordRec char120_stroke0[] = {
- new CoordRec((float) 26.1905, (float) 66.6667 ),
- new CoordRec((float) 78.5715, (float) 0 ),
-};
-
-static final CoordRec char120_stroke1[] = {
- new CoordRec((float) 78.5715, (float) 66.6667 ),
- new CoordRec((float) 26.1905, (float) 0 ),
-};
-
-static final StrokeRec char120[] = {
- new StrokeRec( 2, char120_stroke0 ),
- new StrokeRec( 2, char120_stroke1 ),
-};
-
-/* char: 121 'y' */
-
-static final CoordRec char121_stroke0[] = {
- new CoordRec((float) 26.1905, (float) 66.6667 ),
- new CoordRec((float) 54.7619, (float) 0 ),
-};
-
-static final CoordRec char121_stroke1[] = {
- new CoordRec((float) 83.3334, (float) 66.6667 ),
- new CoordRec((float) 54.7619, (float) 0 ),
- new CoordRec((float) 45.2381, (float) -19.0476 ),
- new CoordRec((float) 35.7143, (float) -28.5714 ),
- new CoordRec((float) 26.1905, (float) -33.3333 ),
- new CoordRec((float) 21.4286, (float) -33.3333 ),
-};
-
-static final StrokeRec char121[] = {
- new StrokeRec( 2, char121_stroke0 ),
- new StrokeRec( 6, char121_stroke1 ),
-};
-
-/* char: 122 'z' */
-
-static final CoordRec char122_stroke0[] = {
- new CoordRec((float) 78.5715, (float) 66.6667 ),
- new CoordRec((float) 26.1905, (float) 0 ),
-};
-
-static final CoordRec char122_stroke1[] = {
- new CoordRec((float) 26.1905, (float) 66.6667 ),
- new CoordRec((float) 78.5715, (float) 66.6667 ),
-};
-
-static final CoordRec char122_stroke2[] = {
- new CoordRec((float) 26.1905, (float) 0 ),
- new CoordRec((float) 78.5715, (float) 0 ),
-};
-
-static final StrokeRec char122[] = {
- new StrokeRec( 2, char122_stroke0 ),
- new StrokeRec( 2, char122_stroke1 ),
- new StrokeRec( 2, char122_stroke2 ),
-};
-
-/* char: 123 '{' */
-
-static final CoordRec char123_stroke0[] = {
- new CoordRec((float) 64.2857, (float) 119.048 ),
- new CoordRec((float) 54.7619, (float) 114.286 ),
- new CoordRec((float) 50, (float) 109.524 ),
- new CoordRec((float) 45.2381, (float) 100 ),
- new CoordRec((float) 45.2381, (float) 90.4762 ),
- new CoordRec((float) 50, (float) 80.9524 ),
- new CoordRec((float) 54.7619, (float) 76.1905 ),
- new CoordRec((float) 59.5238, (float) 66.6667 ),
- new CoordRec((float) 59.5238, (float) 57.1429 ),
- new CoordRec((float) 50, (float) 47.619 ),
-};
-
-static final CoordRec char123_stroke1[] = {
- new CoordRec((float) 54.7619, (float) 114.286 ),
- new CoordRec((float) 50, (float) 104.762 ),
- new CoordRec((float) 50, (float) 95.2381 ),
- new CoordRec((float) 54.7619, (float) 85.7143 ),
- new CoordRec((float) 59.5238, (float) 80.9524 ),
- new CoordRec((float) 64.2857, (float) 71.4286 ),
- new CoordRec((float) 64.2857, (float) 61.9048 ),
- new CoordRec((float) 59.5238, (float) 52.381 ),
- new CoordRec((float) 40.4762, (float) 42.8571 ),
- new CoordRec((float) 59.5238, (float) 33.3333 ),
- new CoordRec((float) 64.2857, (float) 23.8095 ),
- new CoordRec((float) 64.2857, (float) 14.2857 ),
- new CoordRec((float) 59.5238, (float) 4.7619 ),
- new CoordRec((float) 54.7619, (float) 0 ),
- new CoordRec((float) 50, (float) -9.5238 ),
- new CoordRec((float) 50, (float) -19.0476 ),
- new CoordRec((float) 54.7619, (float) -28.5714 ),
-};
-
-static final CoordRec char123_stroke2[] = {
- new CoordRec((float) 50, (float) 38.0952 ),
- new CoordRec((float) 59.5238, (float) 28.5714 ),
- new CoordRec((float) 59.5238, (float) 19.0476 ),
- new CoordRec((float) 54.7619, (float) 9.5238 ),
- new CoordRec((float) 50, (float) 4.7619 ),
- new CoordRec((float) 45.2381, (float) -4.7619 ),
- new CoordRec((float) 45.2381, (float) -14.2857 ),
- new CoordRec((float) 50, (float) -23.8095 ),
- new CoordRec((float) 54.7619, (float) -28.5714 ),
- new CoordRec((float) 64.2857, (float) -33.3333 ),
-};
-
-static final StrokeRec char123[] = {
- new StrokeRec( 10, char123_stroke0 ),
- new StrokeRec( 17, char123_stroke1 ),
- new StrokeRec( 10, char123_stroke2 ),
-};
-
-/* char: 124 '|' */
-
-static final CoordRec char124_stroke0[] = {
- new CoordRec((float) 52.381, (float) 119.048 ),
- new CoordRec((float) 52.381, (float) -33.3333 ),
-};
-
-static final StrokeRec char124[] = {
- new StrokeRec( 2, char124_stroke0 ),
-};
-
-/* char: 125 '}' */
-
-static final CoordRec char125_stroke0[] = {
- new CoordRec((float) 40.4762, (float) 119.048 ),
- new CoordRec((float) 50, (float) 114.286 ),
- new CoordRec((float) 54.7619, (float) 109.524 ),
- new CoordRec((float) 59.5238, (float) 100 ),
- new CoordRec((float) 59.5238, (float) 90.4762 ),
- new CoordRec((float) 54.7619, (float) 80.9524 ),
- new CoordRec((float) 50, (float) 76.1905 ),
- new CoordRec((float) 45.2381, (float) 66.6667 ),
- new CoordRec((float) 45.2381, (float) 57.1429 ),
- new CoordRec((float) 54.7619, (float) 47.619 ),
-};
-
-static final CoordRec char125_stroke1[] = {
- new CoordRec((float) 50, (float) 114.286 ),
- new CoordRec((float) 54.7619, (float) 104.762 ),
- new CoordRec((float) 54.7619, (float) 95.2381 ),
- new CoordRec((float) 50, (float) 85.7143 ),
- new CoordRec((float) 45.2381, (float) 80.9524 ),
- new CoordRec((float) 40.4762, (float) 71.4286 ),
- new CoordRec((float) 40.4762, (float) 61.9048 ),
- new CoordRec((float) 45.2381, (float) 52.381 ),
- new CoordRec((float) 64.2857, (float) 42.8571 ),
- new CoordRec((float) 45.2381, (float) 33.3333 ),
- new CoordRec((float) 40.4762, (float) 23.8095 ),
- new CoordRec((float) 40.4762, (float) 14.2857 ),
- new CoordRec((float) 45.2381, (float) 4.7619 ),
- new CoordRec((float) 50, (float) 0 ),
- new CoordRec((float) 54.7619, (float) -9.5238 ),
- new CoordRec((float) 54.7619, (float) -19.0476 ),
- new CoordRec((float) 50, (float) -28.5714 ),
-};
-
-static final CoordRec char125_stroke2[] = {
- new CoordRec((float) 54.7619, (float) 38.0952 ),
- new CoordRec((float) 45.2381, (float) 28.5714 ),
- new CoordRec((float) 45.2381, (float) 19.0476 ),
- new CoordRec((float) 50, (float) 9.5238 ),
- new CoordRec((float) 54.7619, (float) 4.7619 ),
- new CoordRec((float) 59.5238, (float) -4.7619 ),
- new CoordRec((float) 59.5238, (float) -14.2857 ),
- new CoordRec((float) 54.7619, (float) -23.8095 ),
- new CoordRec((float) 50, (float) -28.5714 ),
- new CoordRec((float) 40.4762, (float) -33.3333 ),
-};
-
-static final StrokeRec char125[] = {
- new StrokeRec( 10, char125_stroke0 ),
- new StrokeRec( 17, char125_stroke1 ),
- new StrokeRec( 10, char125_stroke2 ),
-};
-
-/* char: 126 '~' */
-
-static final CoordRec char126_stroke0[] = {
- new CoordRec((float) 9.5238, (float) 28.5714 ),
- new CoordRec((float) 9.5238, (float) 38.0952 ),
- new CoordRec((float) 14.2857, (float) 52.381 ),
- new CoordRec((float) 23.8095, (float) 57.1429 ),
- new CoordRec((float) 33.3333, (float) 57.1429 ),
- new CoordRec((float) 42.8571, (float) 52.381 ),
- new CoordRec((float) 61.9048, (float) 38.0952 ),
- new CoordRec((float) 71.4286, (float) 33.3333 ),
- new CoordRec((float) 80.9524, (float) 33.3333 ),
- new CoordRec((float) 90.4762, (float) 38.0952 ),
- new CoordRec((float) 95.2381, (float) 47.619 ),
-};
-
-static final CoordRec char126_stroke1[] = {
- new CoordRec((float) 9.5238, (float) 38.0952 ),
- new CoordRec((float) 14.2857, (float) 47.619 ),
- new CoordRec((float) 23.8095, (float) 52.381 ),
- new CoordRec((float) 33.3333, (float) 52.381 ),
- new CoordRec((float) 42.8571, (float) 47.619 ),
- new CoordRec((float) 61.9048, (float) 33.3333 ),
- new CoordRec((float) 71.4286, (float) 28.5714 ),
- new CoordRec((float) 80.9524, (float) 28.5714 ),
- new CoordRec((float) 90.4762, (float) 33.3333 ),
- new CoordRec((float) 95.2381, (float) 47.619 ),
- new CoordRec((float) 95.2381, (float) 57.1429 ),
-};
-
-static final StrokeRec char126[] = {
- new StrokeRec( 11, char126_stroke0 ),
- new StrokeRec( 11, char126_stroke1 ),
-};
-
-/* char: 127 */
-
-static final CoordRec char127_stroke0[] = {
- new CoordRec((float) 71.4286, (float) 100 ),
- new CoordRec((float) 33.3333, (float) -33.3333 ),
-};
-
-static final CoordRec char127_stroke1[] = {
- new CoordRec((float) 47.619, (float) 66.6667 ),
- new CoordRec((float) 33.3333, (float) 61.9048 ),
- new CoordRec((float) 23.8095, (float) 52.381 ),
- new CoordRec((float) 19.0476, (float) 38.0952 ),
- new CoordRec((float) 19.0476, (float) 23.8095 ),
- new CoordRec((float) 23.8095, (float) 14.2857 ),
- new CoordRec((float) 33.3333, (float) 4.7619 ),
- new CoordRec((float) 47.619, (float) 0 ),
- new CoordRec((float) 57.1428, (float) 0 ),
- new CoordRec((float) 71.4286, (float) 4.7619 ),
- new CoordRec((float) 80.9524, (float) 14.2857 ),
- new CoordRec((float) 85.7143, (float) 28.5714 ),
- new CoordRec((float) 85.7143, (float) 42.8571 ),
- new CoordRec((float) 80.9524, (float) 52.381 ),
- new CoordRec((float) 71.4286, (float) 61.9048 ),
- new CoordRec((float) 57.1428, (float) 66.6667 ),
- new CoordRec((float) 47.619, (float) 66.6667 ),
-};
-
-static final StrokeRec char127[] = {
- new StrokeRec( 2, char127_stroke0 ),
- new StrokeRec( 17, char127_stroke1 ),
-};
-
-static final StrokeCharRec chars[] = {
- new StrokeCharRec(0, /* char0 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char1 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char2 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char3 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char4 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char5 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char6 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char7 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char8 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char9 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char10 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char11 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char12 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char13 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char14 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char15 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char16 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char17 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char18 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char19 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char20 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char21 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char22 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char23 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char24 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char25 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char26 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char27 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char28 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char29 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char30 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char31 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec(0, /* char32 */ null, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char33, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char34, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(4, char35, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char36, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char37, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char38, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char39, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char40, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char41, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char42, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char43, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char44, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char45, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char46, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char47, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char48, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char49, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char50, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char51, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char52, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char53, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char54, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char55, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char56, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char57, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char58, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char59, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char60, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char61, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char62, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char63, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char64, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char65, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char66, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char67, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char68, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(4, char69, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char70, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char71, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char72, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char73, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char74, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char75, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char76, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(4, char77, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char78, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char79, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char80, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char81, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char82, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char83, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char84, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char85, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char86, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(4, char87, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char88, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char89, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char90, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(4, char91, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char92, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(4, char93, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char94, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char95, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char96, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char97, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char98, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char99, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char100, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char101, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char102, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char103, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char104, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char105, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char106, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char107, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char108, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char109, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char110, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char111, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char112, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char113, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char114, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char115, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char116, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char117, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char118, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(4, char119, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char120, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char121, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char122, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char123, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(1, char124, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(3, char125, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char126, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec(2, char127, (float) 52.381, (float) 104.762 ),
-};
-
-static final StrokeFontRec glutStrokeMonoRoman = new StrokeFontRec( "Roman", 128, chars, (float) 119.048, (float) -33.3333 );
-}
diff --git a/src/classes/com/sun/opengl/util/GLUTStrokeRoman.java b/src/classes/com/sun/opengl/util/GLUTStrokeRoman.java
deleted file mode 100644
index 8345c15e8..000000000
--- a/src/classes/com/sun/opengl/util/GLUTStrokeRoman.java
+++ /dev/null
@@ -1,2491 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-class GLUTStrokeRoman {
-
-/* GENERATED FILE -- DO NOT MODIFY */
-
-/* char: 33 '!' */
-
-static final CoordRec char33_stroke0[] = {
- new CoordRec((float) 13.3819, (float) 100),
- new CoordRec((float) 13.3819, (float) 33.3333),
-};
-
-static final CoordRec char33_stroke1[] = {
- new CoordRec((float) 13.3819, (float) 9.5238),
- new CoordRec((float) 8.62, (float) 4.7619),
- new CoordRec((float) 13.3819, (float) 0),
- new CoordRec((float) 18.1438, (float) 4.7619),
- new CoordRec((float) 13.3819, (float) 9.5238),
-};
-
-static final StrokeRec char33[] = {
- new StrokeRec(2, char33_stroke0),
- new StrokeRec(5, char33_stroke1),
-};
-
-/* char: 34 '"' */
-
-static final CoordRec char34_stroke0[] = {
- new CoordRec((float) 4.02, (float) 100),
- new CoordRec((float) 4.02, (float) 66.6667),
-};
-
-static final CoordRec char34_stroke1[] = {
- new CoordRec((float) 42.1152, (float) 100),
- new CoordRec((float) 42.1152, (float) 66.6667),
-};
-
-static final StrokeRec char34[] = {
- new StrokeRec(2, char34_stroke0),
- new StrokeRec(2, char34_stroke1),
-};
-
-/* char: 35 '#' */
-
-static final CoordRec char35_stroke0[] = {
- new CoordRec((float) 41.2952, (float) 119.048),
- new CoordRec((float) 7.9619, (float) -33.3333),
-};
-
-static final CoordRec char35_stroke1[] = {
- new CoordRec((float) 69.8667, (float) 119.048),
- new CoordRec((float) 36.5333, (float) -33.3333),
-};
-
-static final CoordRec char35_stroke2[] = {
- new CoordRec((float) 7.9619, (float) 57.1429),
- new CoordRec((float) 74.6286, (float) 57.1429),
-};
-
-static final CoordRec char35_stroke3[] = {
- new CoordRec((float) 3.2, (float) 28.5714),
- new CoordRec((float) 69.8667, (float) 28.5714),
-};
-
-static final StrokeRec char35[] = {
- new StrokeRec(2, char35_stroke0),
- new StrokeRec(2, char35_stroke1),
- new StrokeRec(2, char35_stroke2),
- new StrokeRec(2, char35_stroke3),
-};
-
-/* char: 36 '$' */
-
-static final CoordRec char36_stroke0[] = {
- new CoordRec((float) 28.6295, (float) 119.048),
- new CoordRec((float) 28.6295, (float) -19.0476),
-};
-
-static final CoordRec char36_stroke1[] = {
- new CoordRec((float) 47.6771, (float) 119.048),
- new CoordRec((float) 47.6771, (float) -19.0476),
-};
-
-static final CoordRec char36_stroke2[] = {
- new CoordRec((float) 71.4867, (float) 85.7143),
- new CoordRec((float) 61.9629, (float) 95.2381),
- new CoordRec((float) 47.6771, (float) 100),
- new CoordRec((float) 28.6295, (float) 100),
- new CoordRec((float) 14.3438, (float) 95.2381),
- new CoordRec((float) 4.82, (float) 85.7143),
- new CoordRec((float) 4.82, (float) 76.1905),
- new CoordRec((float) 9.5819, (float) 66.6667),
- new CoordRec((float) 14.3438, (float) 61.9048),
- new CoordRec((float) 23.8676, (float) 57.1429),
- new CoordRec((float) 52.439, (float) 47.619),
- new CoordRec((float) 61.9629, (float) 42.8571),
- new CoordRec((float) 66.7248, (float) 38.0952),
- new CoordRec((float) 71.4867, (float) 28.5714),
- new CoordRec((float) 71.4867, (float) 14.2857),
- new CoordRec((float) 61.9629, (float) 4.7619),
- new CoordRec((float) 47.6771, (float) 0),
- new CoordRec((float) 28.6295, (float) 0),
- new CoordRec((float) 14.3438, (float) 4.7619),
- new CoordRec((float) 4.82, (float) 14.2857),
-};
-
-static final StrokeRec char36[] = {
- new StrokeRec(2, char36_stroke0),
- new StrokeRec(2, char36_stroke1),
- new StrokeRec(20, char36_stroke2),
-};
-
-/* char: 37 '%' */
-
-static final CoordRec char37_stroke0[] = {
- new CoordRec((float) 92.0743, (float) 100),
- new CoordRec((float) 6.36, (float) 0),
-};
-
-static final CoordRec char37_stroke1[] = {
- new CoordRec((float) 30.1695, (float) 100),
- new CoordRec((float) 39.6933, (float) 90.4762),
- new CoordRec((float) 39.6933, (float) 80.9524),
- new CoordRec((float) 34.9314, (float) 71.4286),
- new CoordRec((float) 25.4076, (float) 66.6667),
- new CoordRec((float) 15.8838, (float) 66.6667),
- new CoordRec((float) 6.36, (float) 76.1905),
- new CoordRec((float) 6.36, (float) 85.7143),
- new CoordRec((float) 11.1219, (float) 95.2381),
- new CoordRec((float) 20.6457, (float) 100),
- new CoordRec((float) 30.1695, (float) 100),
- new CoordRec((float) 39.6933, (float) 95.2381),
- new CoordRec((float) 53.979, (float) 90.4762),
- new CoordRec((float) 68.2648, (float) 90.4762),
- new CoordRec((float) 82.5505, (float) 95.2381),
- new CoordRec((float) 92.0743, (float) 100),
-};
-
-static final CoordRec char37_stroke2[] = {
- new CoordRec((float) 73.0267, (float) 33.3333),
- new CoordRec((float) 63.5029, (float) 28.5714),
- new CoordRec((float) 58.741, (float) 19.0476),
- new CoordRec((float) 58.741, (float) 9.5238),
- new CoordRec((float) 68.2648, (float) 0),
- new CoordRec((float) 77.7886, (float) 0),
- new CoordRec((float) 87.3124, (float) 4.7619),
- new CoordRec((float) 92.0743, (float) 14.2857),
- new CoordRec((float) 92.0743, (float) 23.8095),
- new CoordRec((float) 82.5505, (float) 33.3333),
- new CoordRec((float) 73.0267, (float) 33.3333),
-};
-
-static final StrokeRec char37[] = {
- new StrokeRec(2, char37_stroke0),
- new StrokeRec(16, char37_stroke1),
- new StrokeRec(11, char37_stroke2),
-};
-
-/* char: 38 '&' */
-
-static final CoordRec char38_stroke0[] = {
- new CoordRec((float) 101.218, (float) 57.1429),
- new CoordRec((float) 101.218, (float) 61.9048),
- new CoordRec((float) 96.4562, (float) 66.6667),
- new CoordRec((float) 91.6943, (float) 66.6667),
- new CoordRec((float) 86.9324, (float) 61.9048),
- new CoordRec((float) 82.1705, (float) 52.381),
- new CoordRec((float) 72.6467, (float) 28.5714),
- new CoordRec((float) 63.1229, (float) 14.2857),
- new CoordRec((float) 53.599, (float) 4.7619),
- new CoordRec((float) 44.0752, (float) 0),
- new CoordRec((float) 25.0276, (float) 0),
- new CoordRec((float) 15.5038, (float) 4.7619),
- new CoordRec((float) 10.7419, (float) 9.5238),
- new CoordRec((float) 5.98, (float) 19.0476),
- new CoordRec((float) 5.98, (float) 28.5714),
- new CoordRec((float) 10.7419, (float) 38.0952),
- new CoordRec((float) 15.5038, (float) 42.8571),
- new CoordRec((float) 48.8371, (float) 61.9048),
- new CoordRec((float) 53.599, (float) 66.6667),
- new CoordRec((float) 58.361, (float) 76.1905),
- new CoordRec((float) 58.361, (float) 85.7143),
- new CoordRec((float) 53.599, (float) 95.2381),
- new CoordRec((float) 44.0752, (float) 100),
- new CoordRec((float) 34.5514, (float) 95.2381),
- new CoordRec((float) 29.7895, (float) 85.7143),
- new CoordRec((float) 29.7895, (float) 76.1905),
- new CoordRec((float) 34.5514, (float) 61.9048),
- new CoordRec((float) 44.0752, (float) 47.619),
- new CoordRec((float) 67.8848, (float) 14.2857),
- new CoordRec((float) 77.4086, (float) 4.7619),
- new CoordRec((float) 86.9324, (float) 0),
- new CoordRec((float) 96.4562, (float) 0),
- new CoordRec((float) 101.218, (float) 4.7619),
- new CoordRec((float) 101.218, (float) 9.5238),
-};
-
-static final StrokeRec char38[] = {
- new StrokeRec(34, char38_stroke0),
-};
-
-/* char: 39 ''' */
-
-static final CoordRec char39_stroke0[] = {
- new CoordRec((float) 4.44, (float) 100),
- new CoordRec((float) 4.44, (float) 66.6667),
-};
-
-static final StrokeRec char39[] = {
- new StrokeRec(2, char39_stroke0),
-};
-
-/* char: 40 '(' */
-
-static final CoordRec char40_stroke0[] = {
- new CoordRec((float) 40.9133, (float) 119.048),
- new CoordRec((float) 31.3895, (float) 109.524),
- new CoordRec((float) 21.8657, (float) 95.2381),
- new CoordRec((float) 12.3419, (float) 76.1905),
- new CoordRec((float) 7.58, (float) 52.381),
- new CoordRec((float) 7.58, (float) 33.3333),
- new CoordRec((float) 12.3419, (float) 9.5238),
- new CoordRec((float) 21.8657, (float) -9.5238),
- new CoordRec((float) 31.3895, (float) -23.8095),
- new CoordRec((float) 40.9133, (float) -33.3333),
-};
-
-static final StrokeRec char40[] = {
- new StrokeRec(10, char40_stroke0),
-};
-
-/* char: 41 ')' */
-
-static final CoordRec char41_stroke0[] = {
- new CoordRec((float) 5.28, (float) 119.048),
- new CoordRec((float) 14.8038, (float) 109.524),
- new CoordRec((float) 24.3276, (float) 95.2381),
- new CoordRec((float) 33.8514, (float) 76.1905),
- new CoordRec((float) 38.6133, (float) 52.381),
- new CoordRec((float) 38.6133, (float) 33.3333),
- new CoordRec((float) 33.8514, (float) 9.5238),
- new CoordRec((float) 24.3276, (float) -9.5238),
- new CoordRec((float) 14.8038, (float) -23.8095),
- new CoordRec((float) 5.28, (float) -33.3333),
-};
-
-static final StrokeRec char41[] = {
- new StrokeRec(10, char41_stroke0),
-};
-
-/* char: 42 '*' */
-
-static final CoordRec char42_stroke0[] = {
- new CoordRec((float) 30.7695, (float) 71.4286),
- new CoordRec((float) 30.7695, (float) 14.2857),
-};
-
-static final CoordRec char42_stroke1[] = {
- new CoordRec((float) 6.96, (float) 57.1429),
- new CoordRec((float) 54.579, (float) 28.5714),
-};
-
-static final CoordRec char42_stroke2[] = {
- new CoordRec((float) 54.579, (float) 57.1429),
- new CoordRec((float) 6.96, (float) 28.5714),
-};
-
-static final StrokeRec char42[] = {
- new StrokeRec(2, char42_stroke0),
- new StrokeRec(2, char42_stroke1),
- new StrokeRec(2, char42_stroke2),
-};
-
-/* char: 43 '+' */
-
-static final CoordRec char43_stroke0[] = {
- new CoordRec((float) 48.8371, (float) 85.7143),
- new CoordRec((float) 48.8371, (float) 0),
-};
-
-static final CoordRec char43_stroke1[] = {
- new CoordRec((float) 5.98, (float) 42.8571),
- new CoordRec((float) 91.6943, (float) 42.8571),
-};
-
-static final StrokeRec char43[] = {
- new StrokeRec(2, char43_stroke0),
- new StrokeRec(2, char43_stroke1),
-};
-
-/* char: 44 ',' */
-
-static final CoordRec char44_stroke0[] = {
- new CoordRec((float) 18.2838, (float) 4.7619),
- new CoordRec((float) 13.5219, (float) 0),
- new CoordRec((float) 8.76, (float) 4.7619),
- new CoordRec((float) 13.5219, (float) 9.5238),
- new CoordRec((float) 18.2838, (float) 4.7619),
- new CoordRec((float) 18.2838, (float) -4.7619),
- new CoordRec((float) 13.5219, (float) -14.2857),
- new CoordRec((float) 8.76, (float) -19.0476),
-};
-
-static final StrokeRec char44[] = {
- new StrokeRec(8, char44_stroke0),
-};
-
-/* char: 45 '-' */
-
-static final CoordRec char45_stroke0[] = {
- new CoordRec((float) 7.38, (float) 42.8571),
- new CoordRec((float) 93.0943, (float) 42.8571),
-};
-
-static final StrokeRec char45[] = {
- new StrokeRec(2, char45_stroke0),
-};
-
-/* char: 46 '.' */
-
-static final CoordRec char46_stroke0[] = {
- new CoordRec((float) 13.1019, (float) 9.5238),
- new CoordRec((float) 8.34, (float) 4.7619),
- new CoordRec((float) 13.1019, (float) 0),
- new CoordRec((float) 17.8638, (float) 4.7619),
- new CoordRec((float) 13.1019, (float) 9.5238),
-};
-
-static final StrokeRec char46[] = {
- new StrokeRec(5, char46_stroke0),
-};
-
-/* char: 47 '/' */
-
-static final CoordRec char47_stroke0[] = {
- new CoordRec((float) 7.24, (float) -14.2857),
- new CoordRec((float) 73.9067, (float) 100),
-};
-
-static final StrokeRec char47[] = {
- new StrokeRec(2, char47_stroke0),
-};
-
-/* char: 48 '0' */
-
-static final CoordRec char48_stroke0[] = {
- new CoordRec((float) 33.5514, (float) 100),
- new CoordRec((float) 19.2657, (float) 95.2381),
- new CoordRec((float) 9.7419, (float) 80.9524),
- new CoordRec((float) 4.98, (float) 57.1429),
- new CoordRec((float) 4.98, (float) 42.8571),
- new CoordRec((float) 9.7419, (float) 19.0476),
- new CoordRec((float) 19.2657, (float) 4.7619),
- new CoordRec((float) 33.5514, (float) 0),
- new CoordRec((float) 43.0752, (float) 0),
- new CoordRec((float) 57.361, (float) 4.7619),
- new CoordRec((float) 66.8848, (float) 19.0476),
- new CoordRec((float) 71.6467, (float) 42.8571),
- new CoordRec((float) 71.6467, (float) 57.1429),
- new CoordRec((float) 66.8848, (float) 80.9524),
- new CoordRec((float) 57.361, (float) 95.2381),
- new CoordRec((float) 43.0752, (float) 100),
- new CoordRec((float) 33.5514, (float) 100),
-};
-
-static final StrokeRec char48[] = {
- new StrokeRec(17, char48_stroke0),
-};
-
-/* char: 49 '1' */
-
-static final CoordRec char49_stroke0[] = {
- new CoordRec((float) 11.82, (float) 80.9524),
- new CoordRec((float) 21.3438, (float) 85.7143),
- new CoordRec((float) 35.6295, (float) 100),
- new CoordRec((float) 35.6295, (float) 0),
-};
-
-static final StrokeRec char49[] = {
- new StrokeRec(4, char49_stroke0),
-};
-
-/* char: 50 '2' */
-
-static final CoordRec char50_stroke0[] = {
- new CoordRec((float) 10.1819, (float) 76.1905),
- new CoordRec((float) 10.1819, (float) 80.9524),
- new CoordRec((float) 14.9438, (float) 90.4762),
- new CoordRec((float) 19.7057, (float) 95.2381),
- new CoordRec((float) 29.2295, (float) 100),
- new CoordRec((float) 48.2771, (float) 100),
- new CoordRec((float) 57.801, (float) 95.2381),
- new CoordRec((float) 62.5629, (float) 90.4762),
- new CoordRec((float) 67.3248, (float) 80.9524),
- new CoordRec((float) 67.3248, (float) 71.4286),
- new CoordRec((float) 62.5629, (float) 61.9048),
- new CoordRec((float) 53.039, (float) 47.619),
- new CoordRec((float) 5.42, (float) 0),
- new CoordRec((float) 72.0867, (float) 0),
-};
-
-static final StrokeRec char50[] = {
- new StrokeRec(14, char50_stroke0),
-};
-
-/* char: 51 '3' */
-
-static final CoordRec char51_stroke0[] = {
- new CoordRec((float) 14.5238, (float) 100),
- new CoordRec((float) 66.9048, (float) 100),
- new CoordRec((float) 38.3333, (float) 61.9048),
- new CoordRec((float) 52.619, (float) 61.9048),
- new CoordRec((float) 62.1429, (float) 57.1429),
- new CoordRec((float) 66.9048, (float) 52.381),
- new CoordRec((float) 71.6667, (float) 38.0952),
- new CoordRec((float) 71.6667, (float) 28.5714),
- new CoordRec((float) 66.9048, (float) 14.2857),
- new CoordRec((float) 57.381, (float) 4.7619),
- new CoordRec((float) 43.0952, (float) 0),
- new CoordRec((float) 28.8095, (float) 0),
- new CoordRec((float) 14.5238, (float) 4.7619),
- new CoordRec((float) 9.7619, (float) 9.5238),
- new CoordRec((float) 5, (float) 19.0476),
-};
-
-static final StrokeRec char51[] = {
- new StrokeRec(15, char51_stroke0),
-};
-
-/* char: 52 '4' */
-
-static final CoordRec char52_stroke0[] = {
- new CoordRec((float) 51.499, (float) 100),
- new CoordRec((float) 3.88, (float) 33.3333),
- new CoordRec((float) 75.3086, (float) 33.3333),
-};
-
-static final CoordRec char52_stroke1[] = {
- new CoordRec((float) 51.499, (float) 100),
- new CoordRec((float) 51.499, (float) 0),
-};
-
-static final StrokeRec char52[] = {
- new StrokeRec(3, char52_stroke0),
- new StrokeRec(2, char52_stroke1),
-};
-
-/* char: 53 '5' */
-
-static final CoordRec char53_stroke0[] = {
- new CoordRec((float) 62.0029, (float) 100),
- new CoordRec((float) 14.3838, (float) 100),
- new CoordRec((float) 9.6219, (float) 57.1429),
- new CoordRec((float) 14.3838, (float) 61.9048),
- new CoordRec((float) 28.6695, (float) 66.6667),
- new CoordRec((float) 42.9552, (float) 66.6667),
- new CoordRec((float) 57.241, (float) 61.9048),
- new CoordRec((float) 66.7648, (float) 52.381),
- new CoordRec((float) 71.5267, (float) 38.0952),
- new CoordRec((float) 71.5267, (float) 28.5714),
- new CoordRec((float) 66.7648, (float) 14.2857),
- new CoordRec((float) 57.241, (float) 4.7619),
- new CoordRec((float) 42.9552, (float) 0),
- new CoordRec((float) 28.6695, (float) 0),
- new CoordRec((float) 14.3838, (float) 4.7619),
- new CoordRec((float) 9.6219, (float) 9.5238),
- new CoordRec((float) 4.86, (float) 19.0476),
-};
-
-static final StrokeRec char53[] = {
- new StrokeRec(17, char53_stroke0),
-};
-
-/* char: 54 '6' */
-
-static final CoordRec char54_stroke0[] = {
- new CoordRec((float) 62.7229, (float) 85.7143),
- new CoordRec((float) 57.961, (float) 95.2381),
- new CoordRec((float) 43.6752, (float) 100),
- new CoordRec((float) 34.1514, (float) 100),
- new CoordRec((float) 19.8657, (float) 95.2381),
- new CoordRec((float) 10.3419, (float) 80.9524),
- new CoordRec((float) 5.58, (float) 57.1429),
- new CoordRec((float) 5.58, (float) 33.3333),
- new CoordRec((float) 10.3419, (float) 14.2857),
- new CoordRec((float) 19.8657, (float) 4.7619),
- new CoordRec((float) 34.1514, (float) 0),
- new CoordRec((float) 38.9133, (float) 0),
- new CoordRec((float) 53.199, (float) 4.7619),
- new CoordRec((float) 62.7229, (float) 14.2857),
- new CoordRec((float) 67.4848, (float) 28.5714),
- new CoordRec((float) 67.4848, (float) 33.3333),
- new CoordRec((float) 62.7229, (float) 47.619),
- new CoordRec((float) 53.199, (float) 57.1429),
- new CoordRec((float) 38.9133, (float) 61.9048),
- new CoordRec((float) 34.1514, (float) 61.9048),
- new CoordRec((float) 19.8657, (float) 57.1429),
- new CoordRec((float) 10.3419, (float) 47.619),
- new CoordRec((float) 5.58, (float) 33.3333),
-};
-
-static final StrokeRec char54[] = {
- new StrokeRec(23, char54_stroke0),
-};
-
-/* char: 55 '7' */
-
-static final CoordRec char55_stroke0[] = {
- new CoordRec((float) 72.2267, (float) 100),
- new CoordRec((float) 24.6076, (float) 0),
-};
-
-static final CoordRec char55_stroke1[] = {
- new CoordRec((float) 5.56, (float) 100),
- new CoordRec((float) 72.2267, (float) 100),
-};
-
-static final StrokeRec char55[] = {
- new StrokeRec(2, char55_stroke0),
- new StrokeRec(2, char55_stroke1),
-};
-
-/* char: 56 '8' */
-
-static final CoordRec char56_stroke0[] = {
- new CoordRec((float) 29.4095, (float) 100),
- new CoordRec((float) 15.1238, (float) 95.2381),
- new CoordRec((float) 10.3619, (float) 85.7143),
- new CoordRec((float) 10.3619, (float) 76.1905),
- new CoordRec((float) 15.1238, (float) 66.6667),
- new CoordRec((float) 24.6476, (float) 61.9048),
- new CoordRec((float) 43.6952, (float) 57.1429),
- new CoordRec((float) 57.981, (float) 52.381),
- new CoordRec((float) 67.5048, (float) 42.8571),
- new CoordRec((float) 72.2667, (float) 33.3333),
- new CoordRec((float) 72.2667, (float) 19.0476),
- new CoordRec((float) 67.5048, (float) 9.5238),
- new CoordRec((float) 62.7429, (float) 4.7619),
- new CoordRec((float) 48.4571, (float) 0),
- new CoordRec((float) 29.4095, (float) 0),
- new CoordRec((float) 15.1238, (float) 4.7619),
- new CoordRec((float) 10.3619, (float) 9.5238),
- new CoordRec((float) 5.6, (float) 19.0476),
- new CoordRec((float) 5.6, (float) 33.3333),
- new CoordRec((float) 10.3619, (float) 42.8571),
- new CoordRec((float) 19.8857, (float) 52.381),
- new CoordRec((float) 34.1714, (float) 57.1429),
- new CoordRec((float) 53.219, (float) 61.9048),
- new CoordRec((float) 62.7429, (float) 66.6667),
- new CoordRec((float) 67.5048, (float) 76.1905),
- new CoordRec((float) 67.5048, (float) 85.7143),
- new CoordRec((float) 62.7429, (float) 95.2381),
- new CoordRec((float) 48.4571, (float) 100),
- new CoordRec((float) 29.4095, (float) 100),
-};
-
-static final StrokeRec char56[] = {
- new StrokeRec(29, char56_stroke0),
-};
-
-/* char: 57 '9' */
-
-static final CoordRec char57_stroke0[] = {
- new CoordRec((float) 68.5048, (float) 66.6667),
- new CoordRec((float) 63.7429, (float) 52.381),
- new CoordRec((float) 54.219, (float) 42.8571),
- new CoordRec((float) 39.9333, (float) 38.0952),
- new CoordRec((float) 35.1714, (float) 38.0952),
- new CoordRec((float) 20.8857, (float) 42.8571),
- new CoordRec((float) 11.3619, (float) 52.381),
- new CoordRec((float) 6.6, (float) 66.6667),
- new CoordRec((float) 6.6, (float) 71.4286),
- new CoordRec((float) 11.3619, (float) 85.7143),
- new CoordRec((float) 20.8857, (float) 95.2381),
- new CoordRec((float) 35.1714, (float) 100),
- new CoordRec((float) 39.9333, (float) 100),
- new CoordRec((float) 54.219, (float) 95.2381),
- new CoordRec((float) 63.7429, (float) 85.7143),
- new CoordRec((float) 68.5048, (float) 66.6667),
- new CoordRec((float) 68.5048, (float) 42.8571),
- new CoordRec((float) 63.7429, (float) 19.0476),
- new CoordRec((float) 54.219, (float) 4.7619),
- new CoordRec((float) 39.9333, (float) 0),
- new CoordRec((float) 30.4095, (float) 0),
- new CoordRec((float) 16.1238, (float) 4.7619),
- new CoordRec((float) 11.3619, (float) 14.2857),
-};
-
-static final StrokeRec char57[] = {
- new StrokeRec(23, char57_stroke0),
-};
-
-/* char: 58 ':' */
-
-static final CoordRec char58_stroke0[] = {
- new CoordRec((float) 14.0819, (float) 66.6667),
- new CoordRec((float) 9.32, (float) 61.9048),
- new CoordRec((float) 14.0819, (float) 57.1429),
- new CoordRec((float) 18.8438, (float) 61.9048),
- new CoordRec((float) 14.0819, (float) 66.6667),
-};
-
-static final CoordRec char58_stroke1[] = {
- new CoordRec((float) 14.0819, (float) 9.5238),
- new CoordRec((float) 9.32, (float) 4.7619),
- new CoordRec((float) 14.0819, (float) 0),
- new CoordRec((float) 18.8438, (float) 4.7619),
- new CoordRec((float) 14.0819, (float) 9.5238),
-};
-
-static final StrokeRec char58[] = {
- new StrokeRec(5, char58_stroke0),
- new StrokeRec(5, char58_stroke1),
-};
-
-/* char: 59 ';' */
-
-static final CoordRec char59_stroke0[] = {
- new CoordRec((float) 12.9619, (float) 66.6667),
- new CoordRec((float) 8.2, (float) 61.9048),
- new CoordRec((float) 12.9619, (float) 57.1429),
- new CoordRec((float) 17.7238, (float) 61.9048),
- new CoordRec((float) 12.9619, (float) 66.6667),
-};
-
-static final CoordRec char59_stroke1[] = {
- new CoordRec((float) 17.7238, (float) 4.7619),
- new CoordRec((float) 12.9619, (float) 0),
- new CoordRec((float) 8.2, (float) 4.7619),
- new CoordRec((float) 12.9619, (float) 9.5238),
- new CoordRec((float) 17.7238, (float) 4.7619),
- new CoordRec((float) 17.7238, (float) -4.7619),
- new CoordRec((float) 12.9619, (float) -14.2857),
- new CoordRec((float) 8.2, (float) -19.0476),
-};
-
-static final StrokeRec char59[] = {
- new StrokeRec(5, char59_stroke0),
- new StrokeRec(8, char59_stroke1),
-};
-
-/* char: 60 '<' */
-
-static final CoordRec char60_stroke0[] = {
- new CoordRec((float) 79.2505, (float) 85.7143),
- new CoordRec((float) 3.06, (float) 42.8571),
- new CoordRec((float) 79.2505, (float) 0),
-};
-
-static final StrokeRec char60[] = {
- new StrokeRec(3, char60_stroke0),
-};
-
-/* char: 61 '=' */
-
-static final CoordRec char61_stroke0[] = {
- new CoordRec((float) 5.7, (float) 57.1429),
- new CoordRec((float) 91.4143, (float) 57.1429),
-};
-
-static final CoordRec char61_stroke1[] = {
- new CoordRec((float) 5.7, (float) 28.5714),
- new CoordRec((float) 91.4143, (float) 28.5714),
-};
-
-static final StrokeRec char61[] = {
- new StrokeRec(2, char61_stroke0),
- new StrokeRec(2, char61_stroke1),
-};
-
-/* char: 62 '>' */
-
-static final CoordRec char62_stroke0[] = {
- new CoordRec((float) 2.78, (float) 85.7143),
- new CoordRec((float) 78.9705, (float) 42.8571),
- new CoordRec((float) 2.78, (float) 0),
-};
-
-static final StrokeRec char62[] = {
- new StrokeRec(3, char62_stroke0),
-};
-
-/* char: 63 '?' */
-
-static final CoordRec char63_stroke0[] = {
- new CoordRec((float) 8.42, (float) 76.1905),
- new CoordRec((float) 8.42, (float) 80.9524),
- new CoordRec((float) 13.1819, (float) 90.4762),
- new CoordRec((float) 17.9438, (float) 95.2381),
- new CoordRec((float) 27.4676, (float) 100),
- new CoordRec((float) 46.5152, (float) 100),
- new CoordRec((float) 56.039, (float) 95.2381),
- new CoordRec((float) 60.801, (float) 90.4762),
- new CoordRec((float) 65.5629, (float) 80.9524),
- new CoordRec((float) 65.5629, (float) 71.4286),
- new CoordRec((float) 60.801, (float) 61.9048),
- new CoordRec((float) 56.039, (float) 57.1429),
- new CoordRec((float) 36.9914, (float) 47.619),
- new CoordRec((float) 36.9914, (float) 33.3333),
-};
-
-static final CoordRec char63_stroke1[] = {
- new CoordRec((float) 36.9914, (float) 9.5238),
- new CoordRec((float) 32.2295, (float) 4.7619),
- new CoordRec((float) 36.9914, (float) 0),
- new CoordRec((float) 41.7533, (float) 4.7619),
- new CoordRec((float) 36.9914, (float) 9.5238),
-};
-
-static final StrokeRec char63[] = {
- new StrokeRec(14, char63_stroke0),
- new StrokeRec(5, char63_stroke1),
-};
-
-/* char: 64 '@' */
-
-static final CoordRec char64_stroke0[] = {
- new CoordRec((float) 49.2171, (float) 52.381),
- new CoordRec((float) 39.6933, (float) 57.1429),
- new CoordRec((float) 30.1695, (float) 57.1429),
- new CoordRec((float) 25.4076, (float) 47.619),
- new CoordRec((float) 25.4076, (float) 42.8571),
- new CoordRec((float) 30.1695, (float) 33.3333),
- new CoordRec((float) 39.6933, (float) 33.3333),
- new CoordRec((float) 49.2171, (float) 38.0952),
-};
-
-static final CoordRec char64_stroke1[] = {
- new CoordRec((float) 49.2171, (float) 57.1429),
- new CoordRec((float) 49.2171, (float) 38.0952),
- new CoordRec((float) 53.979, (float) 33.3333),
- new CoordRec((float) 63.5029, (float) 33.3333),
- new CoordRec((float) 68.2648, (float) 42.8571),
- new CoordRec((float) 68.2648, (float) 47.619),
- new CoordRec((float) 63.5029, (float) 61.9048),
- new CoordRec((float) 53.979, (float) 71.4286),
- new CoordRec((float) 39.6933, (float) 76.1905),
- new CoordRec((float) 34.9314, (float) 76.1905),
- new CoordRec((float) 20.6457, (float) 71.4286),
- new CoordRec((float) 11.1219, (float) 61.9048),
- new CoordRec((float) 6.36, (float) 47.619),
- new CoordRec((float) 6.36, (float) 42.8571),
- new CoordRec((float) 11.1219, (float) 28.5714),
- new CoordRec((float) 20.6457, (float) 19.0476),
- new CoordRec((float) 34.9314, (float) 14.2857),
- new CoordRec((float) 39.6933, (float) 14.2857),
- new CoordRec((float) 53.979, (float) 19.0476),
-};
-
-static final StrokeRec char64[] = {
- new StrokeRec(8, char64_stroke0),
- new StrokeRec(19, char64_stroke1),
-};
-
-/* char: 65 'A' */
-
-static final CoordRec char65_stroke0[] = {
- new CoordRec((float) 40.5952, (float) 100),
- new CoordRec((float) 2.5, (float) 0),
-};
-
-static final CoordRec char65_stroke1[] = {
- new CoordRec((float) 40.5952, (float) 100),
- new CoordRec((float) 78.6905, (float) 0),
-};
-
-static final CoordRec char65_stroke2[] = {
- new CoordRec((float) 16.7857, (float) 33.3333),
- new CoordRec((float) 64.4048, (float) 33.3333),
-};
-
-static final StrokeRec char65[] = {
- new StrokeRec(2, char65_stroke0),
- new StrokeRec(2, char65_stroke1),
- new StrokeRec(2, char65_stroke2),
-};
-
-/* char: 66 'B' */
-
-static final CoordRec char66_stroke0[] = {
- new CoordRec((float) 11.42, (float) 100),
- new CoordRec((float) 11.42, (float) 0),
-};
-
-static final CoordRec char66_stroke1[] = {
- new CoordRec((float) 11.42, (float) 100),
- new CoordRec((float) 54.2771, (float) 100),
- new CoordRec((float) 68.5629, (float) 95.2381),
- new CoordRec((float) 73.3248, (float) 90.4762),
- new CoordRec((float) 78.0867, (float) 80.9524),
- new CoordRec((float) 78.0867, (float) 71.4286),
- new CoordRec((float) 73.3248, (float) 61.9048),
- new CoordRec((float) 68.5629, (float) 57.1429),
- new CoordRec((float) 54.2771, (float) 52.381),
-};
-
-static final CoordRec char66_stroke2[] = {
- new CoordRec((float) 11.42, (float) 52.381),
- new CoordRec((float) 54.2771, (float) 52.381),
- new CoordRec((float) 68.5629, (float) 47.619),
- new CoordRec((float) 73.3248, (float) 42.8571),
- new CoordRec((float) 78.0867, (float) 33.3333),
- new CoordRec((float) 78.0867, (float) 19.0476),
- new CoordRec((float) 73.3248, (float) 9.5238),
- new CoordRec((float) 68.5629, (float) 4.7619),
- new CoordRec((float) 54.2771, (float) 0),
- new CoordRec((float) 11.42, (float) 0),
-};
-
-static final StrokeRec char66[] = {
- new StrokeRec(2, char66_stroke0),
- new StrokeRec(9, char66_stroke1),
- new StrokeRec(10, char66_stroke2),
-};
-
-/* char: 67 'C' */
-
-static final CoordRec char67_stroke0[] = {
- new CoordRec((float) 78.0886, (float) 76.1905),
- new CoordRec((float) 73.3267, (float) 85.7143),
- new CoordRec((float) 63.8029, (float) 95.2381),
- new CoordRec((float) 54.279, (float) 100),
- new CoordRec((float) 35.2314, (float) 100),
- new CoordRec((float) 25.7076, (float) 95.2381),
- new CoordRec((float) 16.1838, (float) 85.7143),
- new CoordRec((float) 11.4219, (float) 76.1905),
- new CoordRec((float) 6.66, (float) 61.9048),
- new CoordRec((float) 6.66, (float) 38.0952),
- new CoordRec((float) 11.4219, (float) 23.8095),
- new CoordRec((float) 16.1838, (float) 14.2857),
- new CoordRec((float) 25.7076, (float) 4.7619),
- new CoordRec((float) 35.2314, (float) 0),
- new CoordRec((float) 54.279, (float) 0),
- new CoordRec((float) 63.8029, (float) 4.7619),
- new CoordRec((float) 73.3267, (float) 14.2857),
- new CoordRec((float) 78.0886, (float) 23.8095),
-};
-
-static final StrokeRec char67[] = {
- new StrokeRec(18, char67_stroke0),
-};
-
-/* char: 68 'D' */
-
-static final CoordRec char68_stroke0[] = {
- new CoordRec((float) 11.96, (float) 100),
- new CoordRec((float) 11.96, (float) 0),
-};
-
-static final CoordRec char68_stroke1[] = {
- new CoordRec((float) 11.96, (float) 100),
- new CoordRec((float) 45.2933, (float) 100),
- new CoordRec((float) 59.579, (float) 95.2381),
- new CoordRec((float) 69.1029, (float) 85.7143),
- new CoordRec((float) 73.8648, (float) 76.1905),
- new CoordRec((float) 78.6267, (float) 61.9048),
- new CoordRec((float) 78.6267, (float) 38.0952),
- new CoordRec((float) 73.8648, (float) 23.8095),
- new CoordRec((float) 69.1029, (float) 14.2857),
- new CoordRec((float) 59.579, (float) 4.7619),
- new CoordRec((float) 45.2933, (float) 0),
- new CoordRec((float) 11.96, (float) 0),
-};
-
-static final StrokeRec char68[] = {
- new StrokeRec(2, char68_stroke0),
- new StrokeRec(12, char68_stroke1),
-};
-
-/* char: 69 'E' */
-
-static final CoordRec char69_stroke0[] = {
- new CoordRec((float) 11.42, (float) 100),
- new CoordRec((float) 11.42, (float) 0),
-};
-
-static final CoordRec char69_stroke1[] = {
- new CoordRec((float) 11.42, (float) 100),
- new CoordRec((float) 73.3248, (float) 100),
-};
-
-static final CoordRec char69_stroke2[] = {
- new CoordRec((float) 11.42, (float) 52.381),
- new CoordRec((float) 49.5152, (float) 52.381),
-};
-
-static final CoordRec char69_stroke3[] = {
- new CoordRec((float) 11.42, (float) 0),
- new CoordRec((float) 73.3248, (float) 0),
-};
-
-static final StrokeRec char69[] = {
- new StrokeRec(2, char69_stroke0),
- new StrokeRec(2, char69_stroke1),
- new StrokeRec(2, char69_stroke2),
- new StrokeRec(2, char69_stroke3),
-};
-
-/* char: 70 'F' */
-
-static final CoordRec char70_stroke0[] = {
- new CoordRec((float) 11.42, (float) 100),
- new CoordRec((float) 11.42, (float) 0),
-};
-
-static final CoordRec char70_stroke1[] = {
- new CoordRec((float) 11.42, (float) 100),
- new CoordRec((float) 73.3248, (float) 100),
-};
-
-static final CoordRec char70_stroke2[] = {
- new CoordRec((float) 11.42, (float) 52.381),
- new CoordRec((float) 49.5152, (float) 52.381),
-};
-
-static final StrokeRec char70[] = {
- new StrokeRec(2, char70_stroke0),
- new StrokeRec(2, char70_stroke1),
- new StrokeRec(2, char70_stroke2),
-};
-
-/* char: 71 'G' */
-
-static final CoordRec char71_stroke0[] = {
- new CoordRec((float) 78.4886, (float) 76.1905),
- new CoordRec((float) 73.7267, (float) 85.7143),
- new CoordRec((float) 64.2029, (float) 95.2381),
- new CoordRec((float) 54.679, (float) 100),
- new CoordRec((float) 35.6314, (float) 100),
- new CoordRec((float) 26.1076, (float) 95.2381),
- new CoordRec((float) 16.5838, (float) 85.7143),
- new CoordRec((float) 11.8219, (float) 76.1905),
- new CoordRec((float) 7.06, (float) 61.9048),
- new CoordRec((float) 7.06, (float) 38.0952),
- new CoordRec((float) 11.8219, (float) 23.8095),
- new CoordRec((float) 16.5838, (float) 14.2857),
- new CoordRec((float) 26.1076, (float) 4.7619),
- new CoordRec((float) 35.6314, (float) 0),
- new CoordRec((float) 54.679, (float) 0),
- new CoordRec((float) 64.2029, (float) 4.7619),
- new CoordRec((float) 73.7267, (float) 14.2857),
- new CoordRec((float) 78.4886, (float) 23.8095),
- new CoordRec((float) 78.4886, (float) 38.0952),
-};
-
-static final CoordRec char71_stroke1[] = {
- new CoordRec((float) 54.679, (float) 38.0952),
- new CoordRec((float) 78.4886, (float) 38.0952),
-};
-
-static final StrokeRec char71[] = {
- new StrokeRec(19, char71_stroke0),
- new StrokeRec(2, char71_stroke1),
-};
-
-/* char: 72 'H' */
-
-static final CoordRec char72_stroke0[] = {
- new CoordRec((float) 11.42, (float) 100),
- new CoordRec((float) 11.42, (float) 0),
-};
-
-static final CoordRec char72_stroke1[] = {
- new CoordRec((float) 78.0867, (float) 100),
- new CoordRec((float) 78.0867, (float) 0),
-};
-
-static final CoordRec char72_stroke2[] = {
- new CoordRec((float) 11.42, (float) 52.381),
- new CoordRec((float) 78.0867, (float) 52.381),
-};
-
-static final StrokeRec char72[] = {
- new StrokeRec(2, char72_stroke0),
- new StrokeRec(2, char72_stroke1),
- new StrokeRec(2, char72_stroke2),
-};
-
-/* char: 73 'I' */
-
-static final CoordRec char73_stroke0[] = {
- new CoordRec((float) 10.86, (float) 100),
- new CoordRec((float) 10.86, (float) 0),
-};
-
-static final StrokeRec char73[] = {
- new StrokeRec(2, char73_stroke0),
-};
-
-/* char: 74 'J' */
-
-static final CoordRec char74_stroke0[] = {
- new CoordRec((float) 50.119, (float) 100),
- new CoordRec((float) 50.119, (float) 23.8095),
- new CoordRec((float) 45.3571, (float) 9.5238),
- new CoordRec((float) 40.5952, (float) 4.7619),
- new CoordRec((float) 31.0714, (float) 0),
- new CoordRec((float) 21.5476, (float) 0),
- new CoordRec((float) 12.0238, (float) 4.7619),
- new CoordRec((float) 7.2619, (float) 9.5238),
- new CoordRec((float) 2.5, (float) 23.8095),
- new CoordRec((float) 2.5, (float) 33.3333),
-};
-
-static final StrokeRec char74[] = {
- new StrokeRec(10, char74_stroke0),
-};
-
-/* char: 75 'K' */
-
-static final CoordRec char75_stroke0[] = {
- new CoordRec((float) 11.28, (float) 100),
- new CoordRec((float) 11.28, (float) 0),
-};
-
-static final CoordRec char75_stroke1[] = {
- new CoordRec((float) 77.9467, (float) 100),
- new CoordRec((float) 11.28, (float) 33.3333),
-};
-
-static final CoordRec char75_stroke2[] = {
- new CoordRec((float) 35.0895, (float) 57.1429),
- new CoordRec((float) 77.9467, (float) 0),
-};
-
-static final StrokeRec char75[] = {
- new StrokeRec(2, char75_stroke0),
- new StrokeRec(2, char75_stroke1),
- new StrokeRec(2, char75_stroke2),
-};
-
-/* char: 76 'L' */
-
-static final CoordRec char76_stroke0[] = {
- new CoordRec((float) 11.68, (float) 100),
- new CoordRec((float) 11.68, (float) 0),
-};
-
-static final CoordRec char76_stroke1[] = {
- new CoordRec((float) 11.68, (float) 0),
- new CoordRec((float) 68.8229, (float) 0),
-};
-
-static final StrokeRec char76[] = {
- new StrokeRec(2, char76_stroke0),
- new StrokeRec(2, char76_stroke1),
-};
-
-/* char: 77 'M' */
-
-static final CoordRec char77_stroke0[] = {
- new CoordRec((float) 10.86, (float) 100),
- new CoordRec((float) 10.86, (float) 0),
-};
-
-static final CoordRec char77_stroke1[] = {
- new CoordRec((float) 10.86, (float) 100),
- new CoordRec((float) 48.9552, (float) 0),
-};
-
-static final CoordRec char77_stroke2[] = {
- new CoordRec((float) 87.0505, (float) 100),
- new CoordRec((float) 48.9552, (float) 0),
-};
-
-static final CoordRec char77_stroke3[] = {
- new CoordRec((float) 87.0505, (float) 100),
- new CoordRec((float) 87.0505, (float) 0),
-};
-
-static final StrokeRec char77[] = {
- new StrokeRec(2, char77_stroke0),
- new StrokeRec(2, char77_stroke1),
- new StrokeRec(2, char77_stroke2),
- new StrokeRec(2, char77_stroke3),
-};
-
-/* char: 78 'N' */
-
-static final CoordRec char78_stroke0[] = {
- new CoordRec((float) 11.14, (float) 100),
- new CoordRec((float) 11.14, (float) 0),
-};
-
-static final CoordRec char78_stroke1[] = {
- new CoordRec((float) 11.14, (float) 100),
- new CoordRec((float) 77.8067, (float) 0),
-};
-
-static final CoordRec char78_stroke2[] = {
- new CoordRec((float) 77.8067, (float) 100),
- new CoordRec((float) 77.8067, (float) 0),
-};
-
-static final StrokeRec char78[] = {
- new StrokeRec(2, char78_stroke0),
- new StrokeRec(2, char78_stroke1),
- new StrokeRec(2, char78_stroke2),
-};
-
-/* char: 79 'O' */
-
-static final CoordRec char79_stroke0[] = {
- new CoordRec((float) 34.8114, (float) 100),
- new CoordRec((float) 25.2876, (float) 95.2381),
- new CoordRec((float) 15.7638, (float) 85.7143),
- new CoordRec((float) 11.0019, (float) 76.1905),
- new CoordRec((float) 6.24, (float) 61.9048),
- new CoordRec((float) 6.24, (float) 38.0952),
- new CoordRec((float) 11.0019, (float) 23.8095),
- new CoordRec((float) 15.7638, (float) 14.2857),
- new CoordRec((float) 25.2876, (float) 4.7619),
- new CoordRec((float) 34.8114, (float) 0),
- new CoordRec((float) 53.859, (float) 0),
- new CoordRec((float) 63.3829, (float) 4.7619),
- new CoordRec((float) 72.9067, (float) 14.2857),
- new CoordRec((float) 77.6686, (float) 23.8095),
- new CoordRec((float) 82.4305, (float) 38.0952),
- new CoordRec((float) 82.4305, (float) 61.9048),
- new CoordRec((float) 77.6686, (float) 76.1905),
- new CoordRec((float) 72.9067, (float) 85.7143),
- new CoordRec((float) 63.3829, (float) 95.2381),
- new CoordRec((float) 53.859, (float) 100),
- new CoordRec((float) 34.8114, (float) 100),
-};
-
-static final StrokeRec char79[] = {
- new StrokeRec(21, char79_stroke0),
-};
-
-/* char: 80 'P' */
-
-static final CoordRec char80_stroke0[] = {
- new CoordRec((float) 12.1, (float) 100),
- new CoordRec((float) 12.1, (float) 0),
-};
-
-static final CoordRec char80_stroke1[] = {
- new CoordRec((float) 12.1, (float) 100),
- new CoordRec((float) 54.9571, (float) 100),
- new CoordRec((float) 69.2429, (float) 95.2381),
- new CoordRec((float) 74.0048, (float) 90.4762),
- new CoordRec((float) 78.7667, (float) 80.9524),
- new CoordRec((float) 78.7667, (float) 66.6667),
- new CoordRec((float) 74.0048, (float) 57.1429),
- new CoordRec((float) 69.2429, (float) 52.381),
- new CoordRec((float) 54.9571, (float) 47.619),
- new CoordRec((float) 12.1, (float) 47.619),
-};
-
-static final StrokeRec char80[] = {
- new StrokeRec(2, char80_stroke0),
- new StrokeRec(10, char80_stroke1),
-};
-
-/* char: 81 'Q' */
-
-static final CoordRec char81_stroke0[] = {
- new CoordRec((float) 33.8714, (float) 100),
- new CoordRec((float) 24.3476, (float) 95.2381),
- new CoordRec((float) 14.8238, (float) 85.7143),
- new CoordRec((float) 10.0619, (float) 76.1905),
- new CoordRec((float) 5.3, (float) 61.9048),
- new CoordRec((float) 5.3, (float) 38.0952),
- new CoordRec((float) 10.0619, (float) 23.8095),
- new CoordRec((float) 14.8238, (float) 14.2857),
- new CoordRec((float) 24.3476, (float) 4.7619),
- new CoordRec((float) 33.8714, (float) 0),
- new CoordRec((float) 52.919, (float) 0),
- new CoordRec((float) 62.4429, (float) 4.7619),
- new CoordRec((float) 71.9667, (float) 14.2857),
- new CoordRec((float) 76.7286, (float) 23.8095),
- new CoordRec((float) 81.4905, (float) 38.0952),
- new CoordRec((float) 81.4905, (float) 61.9048),
- new CoordRec((float) 76.7286, (float) 76.1905),
- new CoordRec((float) 71.9667, (float) 85.7143),
- new CoordRec((float) 62.4429, (float) 95.2381),
- new CoordRec((float) 52.919, (float) 100),
- new CoordRec((float) 33.8714, (float) 100),
-};
-
-static final CoordRec char81_stroke1[] = {
- new CoordRec((float) 48.1571, (float) 19.0476),
- new CoordRec((float) 76.7286, (float) -9.5238),
-};
-
-static final StrokeRec char81[] = {
- new StrokeRec(21, char81_stroke0),
- new StrokeRec(2, char81_stroke1),
-};
-
-/* char: 82 'R' */
-
-static final CoordRec char82_stroke0[] = {
- new CoordRec((float) 11.68, (float) 100),
- new CoordRec((float) 11.68, (float) 0),
-};
-
-static final CoordRec char82_stroke1[] = {
- new CoordRec((float) 11.68, (float) 100),
- new CoordRec((float) 54.5371, (float) 100),
- new CoordRec((float) 68.8229, (float) 95.2381),
- new CoordRec((float) 73.5848, (float) 90.4762),
- new CoordRec((float) 78.3467, (float) 80.9524),
- new CoordRec((float) 78.3467, (float) 71.4286),
- new CoordRec((float) 73.5848, (float) 61.9048),
- new CoordRec((float) 68.8229, (float) 57.1429),
- new CoordRec((float) 54.5371, (float) 52.381),
- new CoordRec((float) 11.68, (float) 52.381),
-};
-
-static final CoordRec char82_stroke2[] = {
- new CoordRec((float) 45.0133, (float) 52.381),
- new CoordRec((float) 78.3467, (float) 0),
-};
-
-static final StrokeRec char82[] = {
- new StrokeRec(2, char82_stroke0),
- new StrokeRec(10, char82_stroke1),
- new StrokeRec(2, char82_stroke2),
-};
-
-/* char: 83 'S' */
-
-static final CoordRec char83_stroke0[] = {
- new CoordRec((float) 74.6667, (float) 85.7143),
- new CoordRec((float) 65.1429, (float) 95.2381),
- new CoordRec((float) 50.8571, (float) 100),
- new CoordRec((float) 31.8095, (float) 100),
- new CoordRec((float) 17.5238, (float) 95.2381),
- new CoordRec((float) 8, (float) 85.7143),
- new CoordRec((float) 8, (float) 76.1905),
- new CoordRec((float) 12.7619, (float) 66.6667),
- new CoordRec((float) 17.5238, (float) 61.9048),
- new CoordRec((float) 27.0476, (float) 57.1429),
- new CoordRec((float) 55.619, (float) 47.619),
- new CoordRec((float) 65.1429, (float) 42.8571),
- new CoordRec((float) 69.9048, (float) 38.0952),
- new CoordRec((float) 74.6667, (float) 28.5714),
- new CoordRec((float) 74.6667, (float) 14.2857),
- new CoordRec((float) 65.1429, (float) 4.7619),
- new CoordRec((float) 50.8571, (float) 0),
- new CoordRec((float) 31.8095, (float) 0),
- new CoordRec((float) 17.5238, (float) 4.7619),
- new CoordRec((float) 8, (float) 14.2857),
-};
-
-static final StrokeRec char83[] = {
- new StrokeRec(20, char83_stroke0),
-};
-
-/* char: 84 'T' */
-
-static final CoordRec char84_stroke0[] = {
- new CoordRec((float) 35.6933, (float) 100),
- new CoordRec((float) 35.6933, (float) 0),
-};
-
-static final CoordRec char84_stroke1[] = {
- new CoordRec((float) 2.36, (float) 100),
- new CoordRec((float) 69.0267, (float) 100),
-};
-
-static final StrokeRec char84[] = {
- new StrokeRec(2, char84_stroke0),
- new StrokeRec(2, char84_stroke1),
-};
-
-/* char: 85 'U' */
-
-static final CoordRec char85_stroke0[] = {
- new CoordRec((float) 11.54, (float) 100),
- new CoordRec((float) 11.54, (float) 28.5714),
- new CoordRec((float) 16.3019, (float) 14.2857),
- new CoordRec((float) 25.8257, (float) 4.7619),
- new CoordRec((float) 40.1114, (float) 0),
- new CoordRec((float) 49.6352, (float) 0),
- new CoordRec((float) 63.921, (float) 4.7619),
- new CoordRec((float) 73.4448, (float) 14.2857),
- new CoordRec((float) 78.2067, (float) 28.5714),
- new CoordRec((float) 78.2067, (float) 100),
-};
-
-static final StrokeRec char85[] = {
- new StrokeRec(10, char85_stroke0),
-};
-
-/* char: 86 'V' */
-
-static final CoordRec char86_stroke0[] = {
- new CoordRec((float) 2.36, (float) 100),
- new CoordRec((float) 40.4552, (float) 0),
-};
-
-static final CoordRec char86_stroke1[] = {
- new CoordRec((float) 78.5505, (float) 100),
- new CoordRec((float) 40.4552, (float) 0),
-};
-
-static final StrokeRec char86[] = {
- new StrokeRec(2, char86_stroke0),
- new StrokeRec(2, char86_stroke1),
-};
-
-/* char: 87 'W' */
-
-static final CoordRec char87_stroke0[] = {
- new CoordRec((float) 2.22, (float) 100),
- new CoordRec((float) 26.0295, (float) 0),
-};
-
-static final CoordRec char87_stroke1[] = {
- new CoordRec((float) 49.839, (float) 100),
- new CoordRec((float) 26.0295, (float) 0),
-};
-
-static final CoordRec char87_stroke2[] = {
- new CoordRec((float) 49.839, (float) 100),
- new CoordRec((float) 73.6486, (float) 0),
-};
-
-static final CoordRec char87_stroke3[] = {
- new CoordRec((float) 97.4581, (float) 100),
- new CoordRec((float) 73.6486, (float) 0),
-};
-
-static final StrokeRec char87[] = {
- new StrokeRec(2, char87_stroke0),
- new StrokeRec(2, char87_stroke1),
- new StrokeRec(2, char87_stroke2),
- new StrokeRec(2, char87_stroke3),
-};
-
-/* char: 88 'X' */
-
-static final CoordRec char88_stroke0[] = {
- new CoordRec((float) 2.5, (float) 100),
- new CoordRec((float) 69.1667, (float) 0),
-};
-
-static final CoordRec char88_stroke1[] = {
- new CoordRec((float) 69.1667, (float) 100),
- new CoordRec((float) 2.5, (float) 0),
-};
-
-static final StrokeRec char88[] = {
- new StrokeRec(2, char88_stroke0),
- new StrokeRec(2, char88_stroke1),
-};
-
-/* char: 89 'Y' */
-
-static final CoordRec char89_stroke0[] = {
- new CoordRec((float) 1.52, (float) 100),
- new CoordRec((float) 39.6152, (float) 52.381),
- new CoordRec((float) 39.6152, (float) 0),
-};
-
-static final CoordRec char89_stroke1[] = {
- new CoordRec((float) 77.7105, (float) 100),
- new CoordRec((float) 39.6152, (float) 52.381),
-};
-
-static final StrokeRec char89[] = {
- new StrokeRec(3, char89_stroke0),
- new StrokeRec(2, char89_stroke1),
-};
-
-/* char: 90 'Z' */
-
-static final CoordRec char90_stroke0[] = {
- new CoordRec((float) 69.1667, (float) 100),
- new CoordRec((float) 2.5, (float) 0),
-};
-
-static final CoordRec char90_stroke1[] = {
- new CoordRec((float) 2.5, (float) 100),
- new CoordRec((float) 69.1667, (float) 100),
-};
-
-static final CoordRec char90_stroke2[] = {
- new CoordRec((float) 2.5, (float) 0),
- new CoordRec((float) 69.1667, (float) 0),
-};
-
-static final StrokeRec char90[] = {
- new StrokeRec(2, char90_stroke0),
- new StrokeRec(2, char90_stroke1),
- new StrokeRec(2, char90_stroke2),
-};
-
-/* char: 91 '[' */
-
-static final CoordRec char91_stroke0[] = {
- new CoordRec((float) 7.78, (float) 119.048),
- new CoordRec((float) 7.78, (float) -33.3333),
-};
-
-static final CoordRec char91_stroke1[] = {
- new CoordRec((float) 12.5419, (float) 119.048),
- new CoordRec((float) 12.5419, (float) -33.3333),
-};
-
-static final CoordRec char91_stroke2[] = {
- new CoordRec((float) 7.78, (float) 119.048),
- new CoordRec((float) 41.1133, (float) 119.048),
-};
-
-static final CoordRec char91_stroke3[] = {
- new CoordRec((float) 7.78, (float) -33.3333),
- new CoordRec((float) 41.1133, (float) -33.3333),
-};
-
-static final StrokeRec char91[] = {
- new StrokeRec(2, char91_stroke0),
- new StrokeRec(2, char91_stroke1),
- new StrokeRec(2, char91_stroke2),
- new StrokeRec(2, char91_stroke3),
-};
-
-/* char: 92 '\' */
-
-static final CoordRec char92_stroke0[] = {
- new CoordRec((float) 5.84, (float) 100),
- new CoordRec((float) 72.5067, (float) -14.2857),
-};
-
-static final StrokeRec char92[] = {
- new StrokeRec(2, char92_stroke0),
-};
-
-/* char: 93 ']' */
-
-static final CoordRec char93_stroke0[] = {
- new CoordRec((float) 33.0114, (float) 119.048),
- new CoordRec((float) 33.0114, (float) -33.3333),
-};
-
-static final CoordRec char93_stroke1[] = {
- new CoordRec((float) 37.7733, (float) 119.048),
- new CoordRec((float) 37.7733, (float) -33.3333),
-};
-
-static final CoordRec char93_stroke2[] = {
- new CoordRec((float) 4.44, (float) 119.048),
- new CoordRec((float) 37.7733, (float) 119.048),
-};
-
-static final CoordRec char93_stroke3[] = {
- new CoordRec((float) 4.44, (float) -33.3333),
- new CoordRec((float) 37.7733, (float) -33.3333),
-};
-
-static final StrokeRec char93[] = {
- new StrokeRec(2, char93_stroke0),
- new StrokeRec(2, char93_stroke1),
- new StrokeRec(2, char93_stroke2),
- new StrokeRec(2, char93_stroke3),
-};
-
-/* char: 94 '^' */
-
-static final CoordRec char94_stroke0[] = {
- new CoordRec((float) 44.0752, (float) 109.524),
- new CoordRec((float) 5.98, (float) 42.8571),
-};
-
-static final CoordRec char94_stroke1[] = {
- new CoordRec((float) 44.0752, (float) 109.524),
- new CoordRec((float) 82.1705, (float) 42.8571),
-};
-
-static final StrokeRec char94[] = {
- new StrokeRec(2, char94_stroke0),
- new StrokeRec(2, char94_stroke1),
-};
-
-/* char: 95 '_' */
-
-static final CoordRec char95_stroke0[] = {
- new CoordRec((float)-1.1, (float) -33.3333),
- new CoordRec((float) 103.662, (float) -33.3333),
- new CoordRec((float) 103.662, (float) -28.5714),
- new CoordRec((float)-1.1, (float) -28.5714),
- new CoordRec((float)-1.1, (float) -33.3333),
-};
-
-static final StrokeRec char95[] = {
- new StrokeRec(5, char95_stroke0),
-};
-
-/* char: 96 '`' */
-
-static final CoordRec char96_stroke0[] = {
- new CoordRec((float) 33.0219, (float) 100),
- new CoordRec((float) 56.8314, (float) 71.4286),
-};
-
-static final CoordRec char96_stroke1[] = {
- new CoordRec((float) 33.0219, (float) 100),
- new CoordRec((float) 28.26, (float) 95.2381),
- new CoordRec((float) 56.8314, (float) 71.4286),
-};
-
-static final StrokeRec char96[] = {
- new StrokeRec(2, char96_stroke0),
- new StrokeRec(3, char96_stroke1),
-};
-
-/* char: 97 'a' */
-
-static final CoordRec char97_stroke0[] = {
- new CoordRec((float) 63.8229, (float) 66.6667),
- new CoordRec((float) 63.8229, (float) 0),
-};
-
-static final CoordRec char97_stroke1[] = {
- new CoordRec((float) 63.8229, (float) 52.381),
- new CoordRec((float) 54.299, (float) 61.9048),
- new CoordRec((float) 44.7752, (float) 66.6667),
- new CoordRec((float) 30.4895, (float) 66.6667),
- new CoordRec((float) 20.9657, (float) 61.9048),
- new CoordRec((float) 11.4419, (float) 52.381),
- new CoordRec((float) 6.68, (float) 38.0952),
- new CoordRec((float) 6.68, (float) 28.5714),
- new CoordRec((float) 11.4419, (float) 14.2857),
- new CoordRec((float) 20.9657, (float) 4.7619),
- new CoordRec((float) 30.4895, (float) 0),
- new CoordRec((float) 44.7752, (float) 0),
- new CoordRec((float) 54.299, (float) 4.7619),
- new CoordRec((float) 63.8229, (float) 14.2857),
-};
-
-static final StrokeRec char97[] = {
- new StrokeRec(2, char97_stroke0),
- new StrokeRec(14, char97_stroke1),
-};
-
-/* char: 98 'b' */
-
-static final CoordRec char98_stroke0[] = {
- new CoordRec((float) 8.76, (float) 100),
- new CoordRec((float) 8.76, (float) 0),
-};
-
-static final CoordRec char98_stroke1[] = {
- new CoordRec((float) 8.76, (float) 52.381),
- new CoordRec((float) 18.2838, (float) 61.9048),
- new CoordRec((float) 27.8076, (float) 66.6667),
- new CoordRec((float) 42.0933, (float) 66.6667),
- new CoordRec((float) 51.6171, (float) 61.9048),
- new CoordRec((float) 61.141, (float) 52.381),
- new CoordRec((float) 65.9029, (float) 38.0952),
- new CoordRec((float) 65.9029, (float) 28.5714),
- new CoordRec((float) 61.141, (float) 14.2857),
- new CoordRec((float) 51.6171, (float) 4.7619),
- new CoordRec((float) 42.0933, (float) 0),
- new CoordRec((float) 27.8076, (float) 0),
- new CoordRec((float) 18.2838, (float) 4.7619),
- new CoordRec((float) 8.76, (float) 14.2857),
-};
-
-static final StrokeRec char98[] = {
- new StrokeRec(2, char98_stroke0),
- new StrokeRec(14, char98_stroke1),
-};
-
-/* char: 99 'c' */
-
-static final CoordRec char99_stroke0[] = {
- new CoordRec((float) 62.6629, (float) 52.381),
- new CoordRec((float) 53.139, (float) 61.9048),
- new CoordRec((float) 43.6152, (float) 66.6667),
- new CoordRec((float) 29.3295, (float) 66.6667),
- new CoordRec((float) 19.8057, (float) 61.9048),
- new CoordRec((float) 10.2819, (float) 52.381),
- new CoordRec((float) 5.52, (float) 38.0952),
- new CoordRec((float) 5.52, (float) 28.5714),
- new CoordRec((float) 10.2819, (float) 14.2857),
- new CoordRec((float) 19.8057, (float) 4.7619),
- new CoordRec((float) 29.3295, (float) 0),
- new CoordRec((float) 43.6152, (float) 0),
- new CoordRec((float) 53.139, (float) 4.7619),
- new CoordRec((float) 62.6629, (float) 14.2857),
-};
-
-static final StrokeRec char99[] = {
- new StrokeRec(14, char99_stroke0),
-};
-
-/* char: 100 'd' */
-
-static final CoordRec char100_stroke0[] = {
- new CoordRec((float) 61.7829, (float) 100),
- new CoordRec((float) 61.7829, (float) 0),
-};
-
-static final CoordRec char100_stroke1[] = {
- new CoordRec((float) 61.7829, (float) 52.381),
- new CoordRec((float) 52.259, (float) 61.9048),
- new CoordRec((float) 42.7352, (float) 66.6667),
- new CoordRec((float) 28.4495, (float) 66.6667),
- new CoordRec((float) 18.9257, (float) 61.9048),
- new CoordRec((float) 9.4019, (float) 52.381),
- new CoordRec((float) 4.64, (float) 38.0952),
- new CoordRec((float) 4.64, (float) 28.5714),
- new CoordRec((float) 9.4019, (float) 14.2857),
- new CoordRec((float) 18.9257, (float) 4.7619),
- new CoordRec((float) 28.4495, (float) 0),
- new CoordRec((float) 42.7352, (float) 0),
- new CoordRec((float) 52.259, (float) 4.7619),
- new CoordRec((float) 61.7829, (float) 14.2857),
-};
-
-static final StrokeRec char100[] = {
- new StrokeRec(2, char100_stroke0),
- new StrokeRec(14, char100_stroke1),
-};
-
-/* char: 101 'e' */
-
-static final CoordRec char101_stroke0[] = {
- new CoordRec((float) 5.72, (float) 38.0952),
- new CoordRec((float) 62.8629, (float) 38.0952),
- new CoordRec((float) 62.8629, (float) 47.619),
- new CoordRec((float) 58.101, (float) 57.1429),
- new CoordRec((float) 53.339, (float) 61.9048),
- new CoordRec((float) 43.8152, (float) 66.6667),
- new CoordRec((float) 29.5295, (float) 66.6667),
- new CoordRec((float) 20.0057, (float) 61.9048),
- new CoordRec((float) 10.4819, (float) 52.381),
- new CoordRec((float) 5.72, (float) 38.0952),
- new CoordRec((float) 5.72, (float) 28.5714),
- new CoordRec((float) 10.4819, (float) 14.2857),
- new CoordRec((float) 20.0057, (float) 4.7619),
- new CoordRec((float) 29.5295, (float) 0),
- new CoordRec((float) 43.8152, (float) 0),
- new CoordRec((float) 53.339, (float) 4.7619),
- new CoordRec((float) 62.8629, (float) 14.2857),
-};
-
-static final StrokeRec char101[] = {
- new StrokeRec(17, char101_stroke0),
-};
-
-/* char: 102 'f' */
-
-static final CoordRec char102_stroke0[] = {
- new CoordRec((float) 38.7752, (float) 100),
- new CoordRec((float) 29.2514, (float) 100),
- new CoordRec((float) 19.7276, (float) 95.2381),
- new CoordRec((float) 14.9657, (float) 80.9524),
- new CoordRec((float) 14.9657, (float) 0),
-};
-
-static final CoordRec char102_stroke1[] = {
- new CoordRec((float) 0.68, (float) 66.6667),
- new CoordRec((float) 34.0133, (float) 66.6667),
-};
-
-static final StrokeRec char102[] = {
- new StrokeRec(5, char102_stroke0),
- new StrokeRec(2, char102_stroke1),
-};
-
-/* char: 103 'g' */
-
-static final CoordRec char103_stroke0[] = {
- new CoordRec((float) 62.5029, (float) 66.6667),
- new CoordRec((float) 62.5029, (float) -9.5238),
- new CoordRec((float) 57.741, (float) -23.8095),
- new CoordRec((float) 52.979, (float) -28.5714),
- new CoordRec((float) 43.4552, (float) -33.3333),
- new CoordRec((float) 29.1695, (float) -33.3333),
- new CoordRec((float) 19.6457, (float) -28.5714),
-};
-
-static final CoordRec char103_stroke1[] = {
- new CoordRec((float) 62.5029, (float) 52.381),
- new CoordRec((float) 52.979, (float) 61.9048),
- new CoordRec((float) 43.4552, (float) 66.6667),
- new CoordRec((float) 29.1695, (float) 66.6667),
- new CoordRec((float) 19.6457, (float) 61.9048),
- new CoordRec((float) 10.1219, (float) 52.381),
- new CoordRec((float) 5.36, (float) 38.0952),
- new CoordRec((float) 5.36, (float) 28.5714),
- new CoordRec((float) 10.1219, (float) 14.2857),
- new CoordRec((float) 19.6457, (float) 4.7619),
- new CoordRec((float) 29.1695, (float) 0),
- new CoordRec((float) 43.4552, (float) 0),
- new CoordRec((float) 52.979, (float) 4.7619),
- new CoordRec((float) 62.5029, (float) 14.2857),
-};
-
-static final StrokeRec char103[] = {
- new StrokeRec(7, char103_stroke0),
- new StrokeRec(14, char103_stroke1),
-};
-
-/* char: 104 'h' */
-
-static final CoordRec char104_stroke0[] = {
- new CoordRec((float) 9.6, (float) 100),
- new CoordRec((float) 9.6, (float) 0),
-};
-
-static final CoordRec char104_stroke1[] = {
- new CoordRec((float) 9.6, (float) 47.619),
- new CoordRec((float) 23.8857, (float) 61.9048),
- new CoordRec((float) 33.4095, (float) 66.6667),
- new CoordRec((float) 47.6952, (float) 66.6667),
- new CoordRec((float) 57.219, (float) 61.9048),
- new CoordRec((float) 61.981, (float) 47.619),
- new CoordRec((float) 61.981, (float) 0),
-};
-
-static final StrokeRec char104[] = {
- new StrokeRec(2, char104_stroke0),
- new StrokeRec(7, char104_stroke1),
-};
-
-/* char: 105 'i' */
-
-static final CoordRec char105_stroke0[] = {
- new CoordRec((float) 10.02, (float) 100),
- new CoordRec((float) 14.7819, (float) 95.2381),
- new CoordRec((float) 19.5438, (float) 100),
- new CoordRec((float) 14.7819, (float) 104.762),
- new CoordRec((float) 10.02, (float) 100),
-};
-
-static final CoordRec char105_stroke1[] = {
- new CoordRec((float) 14.7819, (float) 66.6667),
- new CoordRec((float) 14.7819, (float) 0),
-};
-
-static final StrokeRec char105[] = {
- new StrokeRec(5, char105_stroke0),
- new StrokeRec(2, char105_stroke1),
-};
-
-/* char: 106 'j' */
-
-static final CoordRec char106_stroke0[] = {
- new CoordRec((float) 17.3876, (float) 100),
- new CoordRec((float) 22.1495, (float) 95.2381),
- new CoordRec((float) 26.9114, (float) 100),
- new CoordRec((float) 22.1495, (float) 104.762),
- new CoordRec((float) 17.3876, (float) 100),
-};
-
-static final CoordRec char106_stroke1[] = {
- new CoordRec((float) 22.1495, (float) 66.6667),
- new CoordRec((float) 22.1495, (float) -14.2857),
- new CoordRec((float) 17.3876, (float) -28.5714),
- new CoordRec((float) 7.8638, (float) -33.3333),
- new CoordRec((float)-1.66, (float) -33.3333),
-};
-
-static final StrokeRec char106[] = {
- new StrokeRec(5, char106_stroke0),
- new StrokeRec(5, char106_stroke1),
-};
-
-/* char: 107 'k' */
-
-static final CoordRec char107_stroke0[] = {
- new CoordRec((float) 9.6, (float) 100),
- new CoordRec((float) 9.6, (float) 0),
-};
-
-static final CoordRec char107_stroke1[] = {
- new CoordRec((float) 57.219, (float) 66.6667),
- new CoordRec((float) 9.6, (float) 19.0476),
-};
-
-static final CoordRec char107_stroke2[] = {
- new CoordRec((float) 28.6476, (float) 38.0952),
- new CoordRec((float) 61.981, (float) 0),
-};
-
-static final StrokeRec char107[] = {
- new StrokeRec(2, char107_stroke0),
- new StrokeRec(2, char107_stroke1),
- new StrokeRec(2, char107_stroke2),
-};
-
-/* char: 108 'l' */
-
-static final CoordRec char108_stroke0[] = {
- new CoordRec((float) 10.02, (float) 100),
- new CoordRec((float) 10.02, (float) 0),
-};
-
-static final StrokeRec char108[] = {
- new StrokeRec(2, char108_stroke0),
-};
-
-/* char: 109 'm' */
-
-static final CoordRec char109_stroke0[] = {
- new CoordRec((float) 9.6, (float) 66.6667),
- new CoordRec((float) 9.6, (float) 0),
-};
-
-static final CoordRec char109_stroke1[] = {
- new CoordRec((float) 9.6, (float) 47.619),
- new CoordRec((float) 23.8857, (float) 61.9048),
- new CoordRec((float) 33.4095, (float) 66.6667),
- new CoordRec((float) 47.6952, (float) 66.6667),
- new CoordRec((float) 57.219, (float) 61.9048),
- new CoordRec((float) 61.981, (float) 47.619),
- new CoordRec((float) 61.981, (float) 0),
-};
-
-static final CoordRec char109_stroke2[] = {
- new CoordRec((float) 61.981, (float) 47.619),
- new CoordRec((float) 76.2667, (float) 61.9048),
- new CoordRec((float) 85.7905, (float) 66.6667),
- new CoordRec((float) 100.076, (float) 66.6667),
- new CoordRec((float) 109.6, (float) 61.9048),
- new CoordRec((float) 114.362, (float) 47.619),
- new CoordRec((float) 114.362, (float) 0),
-};
-
-static final StrokeRec char109[] = {
- new StrokeRec(2, char109_stroke0),
- new StrokeRec(7, char109_stroke1),
- new StrokeRec(7, char109_stroke2),
-};
-
-/* char: 110 'n' */
-
-static final CoordRec char110_stroke0[] = {
- new CoordRec((float) 9.18, (float) 66.6667),
- new CoordRec((float) 9.18, (float) 0),
-};
-
-static final CoordRec char110_stroke1[] = {
- new CoordRec((float) 9.18, (float) 47.619),
- new CoordRec((float) 23.4657, (float) 61.9048),
- new CoordRec((float) 32.9895, (float) 66.6667),
- new CoordRec((float) 47.2752, (float) 66.6667),
- new CoordRec((float) 56.799, (float) 61.9048),
- new CoordRec((float) 61.561, (float) 47.619),
- new CoordRec((float) 61.561, (float) 0),
-};
-
-static final StrokeRec char110[] = {
- new StrokeRec(2, char110_stroke0),
- new StrokeRec(7, char110_stroke1),
-};
-
-/* char: 111 'o' */
-
-static final CoordRec char111_stroke0[] = {
- new CoordRec((float) 28.7895, (float) 66.6667),
- new CoordRec((float) 19.2657, (float) 61.9048),
- new CoordRec((float) 9.7419, (float) 52.381),
- new CoordRec((float) 4.98, (float) 38.0952),
- new CoordRec((float) 4.98, (float) 28.5714),
- new CoordRec((float) 9.7419, (float) 14.2857),
- new CoordRec((float) 19.2657, (float) 4.7619),
- new CoordRec((float) 28.7895, (float) 0),
- new CoordRec((float) 43.0752, (float) 0),
- new CoordRec((float) 52.599, (float) 4.7619),
- new CoordRec((float) 62.1229, (float) 14.2857),
- new CoordRec((float) 66.8848, (float) 28.5714),
- new CoordRec((float) 66.8848, (float) 38.0952),
- new CoordRec((float) 62.1229, (float) 52.381),
- new CoordRec((float) 52.599, (float) 61.9048),
- new CoordRec((float) 43.0752, (float) 66.6667),
- new CoordRec((float) 28.7895, (float) 66.6667),
-};
-
-static final StrokeRec char111[] = {
- new StrokeRec(17, char111_stroke0),
-};
-
-/* char: 112 'p' */
-
-static final CoordRec char112_stroke0[] = {
- new CoordRec((float) 9.46, (float) 66.6667),
- new CoordRec((float) 9.46, (float) -33.3333),
-};
-
-static final CoordRec char112_stroke1[] = {
- new CoordRec((float) 9.46, (float) 52.381),
- new CoordRec((float) 18.9838, (float) 61.9048),
- new CoordRec((float) 28.5076, (float) 66.6667),
- new CoordRec((float) 42.7933, (float) 66.6667),
- new CoordRec((float) 52.3171, (float) 61.9048),
- new CoordRec((float) 61.841, (float) 52.381),
- new CoordRec((float) 66.6029, (float) 38.0952),
- new CoordRec((float) 66.6029, (float) 28.5714),
- new CoordRec((float) 61.841, (float) 14.2857),
- new CoordRec((float) 52.3171, (float) 4.7619),
- new CoordRec((float) 42.7933, (float) 0),
- new CoordRec((float) 28.5076, (float) 0),
- new CoordRec((float) 18.9838, (float) 4.7619),
- new CoordRec((float) 9.46, (float) 14.2857),
-};
-
-static final StrokeRec char112[] = {
- new StrokeRec(2, char112_stroke0),
- new StrokeRec(14, char112_stroke1),
-};
-
-/* char: 113 'q' */
-
-static final CoordRec char113_stroke0[] = {
- new CoordRec((float) 61.9829, (float) 66.6667),
- new CoordRec((float) 61.9829, (float) -33.3333),
-};
-
-static final CoordRec char113_stroke1[] = {
- new CoordRec((float) 61.9829, (float) 52.381),
- new CoordRec((float) 52.459, (float) 61.9048),
- new CoordRec((float) 42.9352, (float) 66.6667),
- new CoordRec((float) 28.6495, (float) 66.6667),
- new CoordRec((float) 19.1257, (float) 61.9048),
- new CoordRec((float) 9.6019, (float) 52.381),
- new CoordRec((float) 4.84, (float) 38.0952),
- new CoordRec((float) 4.84, (float) 28.5714),
- new CoordRec((float) 9.6019, (float) 14.2857),
- new CoordRec((float) 19.1257, (float) 4.7619),
- new CoordRec((float) 28.6495, (float) 0),
- new CoordRec((float) 42.9352, (float) 0),
- new CoordRec((float) 52.459, (float) 4.7619),
- new CoordRec((float) 61.9829, (float) 14.2857),
-};
-
-static final StrokeRec char113[] = {
- new StrokeRec(2, char113_stroke0),
- new StrokeRec(14, char113_stroke1),
-};
-
-/* char: 114 'r' */
-
-static final CoordRec char114_stroke0[] = {
- new CoordRec((float) 9.46, (float) 66.6667),
- new CoordRec((float) 9.46, (float) 0),
-};
-
-static final CoordRec char114_stroke1[] = {
- new CoordRec((float) 9.46, (float) 38.0952),
- new CoordRec((float) 14.2219, (float) 52.381),
- new CoordRec((float) 23.7457, (float) 61.9048),
- new CoordRec((float) 33.2695, (float) 66.6667),
- new CoordRec((float) 47.5552, (float) 66.6667),
-};
-
-static final StrokeRec char114[] = {
- new StrokeRec(2, char114_stroke0),
- new StrokeRec(5, char114_stroke1),
-};
-
-/* char: 115 's' */
-
-static final CoordRec char115_stroke0[] = {
- new CoordRec((float) 57.081, (float) 52.381),
- new CoordRec((float) 52.319, (float) 61.9048),
- new CoordRec((float) 38.0333, (float) 66.6667),
- new CoordRec((float) 23.7476, (float) 66.6667),
- new CoordRec((float) 9.4619, (float) 61.9048),
- new CoordRec((float) 4.7, (float) 52.381),
- new CoordRec((float) 9.4619, (float) 42.8571),
- new CoordRec((float) 18.9857, (float) 38.0952),
- new CoordRec((float) 42.7952, (float) 33.3333),
- new CoordRec((float) 52.319, (float) 28.5714),
- new CoordRec((float) 57.081, (float) 19.0476),
- new CoordRec((float) 57.081, (float) 14.2857),
- new CoordRec((float) 52.319, (float) 4.7619),
- new CoordRec((float) 38.0333, (float) 0),
- new CoordRec((float) 23.7476, (float) 0),
- new CoordRec((float) 9.4619, (float) 4.7619),
- new CoordRec((float) 4.7, (float) 14.2857),
-};
-
-static final StrokeRec char115[] = {
- new StrokeRec(17, char115_stroke0),
-};
-
-/* char: 116 't' */
-
-static final CoordRec char116_stroke0[] = {
- new CoordRec((float) 14.8257, (float) 100),
- new CoordRec((float) 14.8257, (float) 19.0476),
- new CoordRec((float) 19.5876, (float) 4.7619),
- new CoordRec((float) 29.1114, (float) 0),
- new CoordRec((float) 38.6352, (float) 0),
-};
-
-static final CoordRec char116_stroke1[] = {
- new CoordRec((float) 0.54, (float) 66.6667),
- new CoordRec((float) 33.8733, (float) 66.6667),
-};
-
-static final StrokeRec char116[] = {
- new StrokeRec(5, char116_stroke0),
- new StrokeRec(2, char116_stroke1),
-};
-
-/* char: 117 'u' */
-
-static final CoordRec char117_stroke0[] = {
- new CoordRec((float) 9.46, (float) 66.6667),
- new CoordRec((float) 9.46, (float) 19.0476),
- new CoordRec((float) 14.2219, (float) 4.7619),
- new CoordRec((float) 23.7457, (float) 0),
- new CoordRec((float) 38.0314, (float) 0),
- new CoordRec((float) 47.5552, (float) 4.7619),
- new CoordRec((float) 61.841, (float) 19.0476),
-};
-
-static final CoordRec char117_stroke1[] = {
- new CoordRec((float) 61.841, (float) 66.6667),
- new CoordRec((float) 61.841, (float) 0),
-};
-
-static final StrokeRec char117[] = {
- new StrokeRec(7, char117_stroke0),
- new StrokeRec(2, char117_stroke1),
-};
-
-/* char: 118 'v' */
-
-static final CoordRec char118_stroke0[] = {
- new CoordRec((float) 1.8, (float) 66.6667),
- new CoordRec((float) 30.3714, (float) 0),
-};
-
-static final CoordRec char118_stroke1[] = {
- new CoordRec((float) 58.9429, (float) 66.6667),
- new CoordRec((float) 30.3714, (float) 0),
-};
-
-static final StrokeRec char118[] = {
- new StrokeRec(2, char118_stroke0),
- new StrokeRec(2, char118_stroke1),
-};
-
-/* char: 119 'w' */
-
-static final CoordRec char119_stroke0[] = {
- new CoordRec((float) 2.5, (float) 66.6667),
- new CoordRec((float) 21.5476, (float) 0),
-};
-
-static final CoordRec char119_stroke1[] = {
- new CoordRec((float) 40.5952, (float) 66.6667),
- new CoordRec((float) 21.5476, (float) 0),
-};
-
-static final CoordRec char119_stroke2[] = {
- new CoordRec((float) 40.5952, (float) 66.6667),
- new CoordRec((float) 59.6429, (float) 0),
-};
-
-static final CoordRec char119_stroke3[] = {
- new CoordRec((float) 78.6905, (float) 66.6667),
- new CoordRec((float) 59.6429, (float) 0),
-};
-
-static final StrokeRec char119[] = {
- new StrokeRec(2, char119_stroke0),
- new StrokeRec(2, char119_stroke1),
- new StrokeRec(2, char119_stroke2),
- new StrokeRec(2, char119_stroke3),
-};
-
-/* char: 120 'x' */
-
-static final CoordRec char120_stroke0[] = {
- new CoordRec((float) 1.66, (float) 66.6667),
- new CoordRec((float) 54.041, (float) 0),
-};
-
-static final CoordRec char120_stroke1[] = {
- new CoordRec((float) 54.041, (float) 66.6667),
- new CoordRec((float) 1.66, (float) 0),
-};
-
-static final StrokeRec char120[] = {
- new StrokeRec(2, char120_stroke0),
- new StrokeRec(2, char120_stroke1),
-};
-
-/* char: 121 'y' */
-
-static final CoordRec char121_stroke0[] = {
- new CoordRec((float) 6.5619, (float) 66.6667),
- new CoordRec((float) 35.1333, (float) 0),
-};
-
-static final CoordRec char121_stroke1[] = {
- new CoordRec((float) 63.7048, (float) 66.6667),
- new CoordRec((float) 35.1333, (float) 0),
- new CoordRec((float) 25.6095, (float) -19.0476),
- new CoordRec((float) 16.0857, (float) -28.5714),
- new CoordRec((float) 6.5619, (float) -33.3333),
- new CoordRec((float) 1.8, (float) -33.3333),
-};
-
-static final StrokeRec char121[] = {
- new StrokeRec(2, char121_stroke0),
- new StrokeRec(6, char121_stroke1),
-};
-
-/* char: 122 'z' */
-
-static final CoordRec char122_stroke0[] = {
- new CoordRec((float) 56.821, (float) 66.6667),
- new CoordRec((float) 4.44, (float) 0),
-};
-
-static final CoordRec char122_stroke1[] = {
- new CoordRec((float) 4.44, (float) 66.6667),
- new CoordRec((float) 56.821, (float) 66.6667),
-};
-
-static final CoordRec char122_stroke2[] = {
- new CoordRec((float) 4.44, (float) 0),
- new CoordRec((float) 56.821, (float) 0),
-};
-
-static final StrokeRec char122[] = {
- new StrokeRec(2, char122_stroke0),
- new StrokeRec(2, char122_stroke1),
- new StrokeRec(2, char122_stroke2),
-};
-
-/* char: 123 '{' */
-
-static final CoordRec char123_stroke0[] = {
- new CoordRec((float) 31.1895, (float) 119.048),
- new CoordRec((float) 21.6657, (float) 114.286),
- new CoordRec((float) 16.9038, (float) 109.524),
- new CoordRec((float) 12.1419, (float) 100),
- new CoordRec((float) 12.1419, (float) 90.4762),
- new CoordRec((float) 16.9038, (float) 80.9524),
- new CoordRec((float) 21.6657, (float) 76.1905),
- new CoordRec((float) 26.4276, (float) 66.6667),
- new CoordRec((float) 26.4276, (float) 57.1429),
- new CoordRec((float) 16.9038, (float) 47.619),
-};
-
-static final CoordRec char123_stroke1[] = {
- new CoordRec((float) 21.6657, (float) 114.286),
- new CoordRec((float) 16.9038, (float) 104.762),
- new CoordRec((float) 16.9038, (float) 95.2381),
- new CoordRec((float) 21.6657, (float) 85.7143),
- new CoordRec((float) 26.4276, (float) 80.9524),
- new CoordRec((float) 31.1895, (float) 71.4286),
- new CoordRec((float) 31.1895, (float) 61.9048),
- new CoordRec((float) 26.4276, (float) 52.381),
- new CoordRec((float) 7.38, (float) 42.8571),
- new CoordRec((float) 26.4276, (float) 33.3333),
- new CoordRec((float) 31.1895, (float) 23.8095),
- new CoordRec((float) 31.1895, (float) 14.2857),
- new CoordRec((float) 26.4276, (float) 4.7619),
- new CoordRec((float) 21.6657, (float) 0),
- new CoordRec((float) 16.9038, (float) -9.5238),
- new CoordRec((float) 16.9038, (float) -19.0476),
- new CoordRec((float) 21.6657, (float) -28.5714),
-};
-
-static final CoordRec char123_stroke2[] = {
- new CoordRec((float) 16.9038, (float) 38.0952),
- new CoordRec((float) 26.4276, (float) 28.5714),
- new CoordRec((float) 26.4276, (float) 19.0476),
- new CoordRec((float) 21.6657, (float) 9.5238),
- new CoordRec((float) 16.9038, (float) 4.7619),
- new CoordRec((float) 12.1419, (float) -4.7619),
- new CoordRec((float) 12.1419, (float) -14.2857),
- new CoordRec((float) 16.9038, (float) -23.8095),
- new CoordRec((float) 21.6657, (float) -28.5714),
- new CoordRec((float) 31.1895, (float) -33.3333),
-};
-
-static final StrokeRec char123[] = {
- new StrokeRec(10, char123_stroke0),
- new StrokeRec(17, char123_stroke1),
- new StrokeRec(10, char123_stroke2),
-};
-
-/* char: 124 '|' */
-
-static final CoordRec char124_stroke0[] = {
- new CoordRec((float) 11.54, (float) 119.048),
- new CoordRec((float) 11.54, (float) -33.3333),
-};
-
-static final StrokeRec char124[] = {
- new StrokeRec(2, char124_stroke0),
-};
-
-/* char: 125 '}' */
-
-static final CoordRec char125_stroke0[] = {
- new CoordRec((float) 9.18, (float) 119.048),
- new CoordRec((float) 18.7038, (float) 114.286),
- new CoordRec((float) 23.4657, (float) 109.524),
- new CoordRec((float) 28.2276, (float) 100),
- new CoordRec((float) 28.2276, (float) 90.4762),
- new CoordRec((float) 23.4657, (float) 80.9524),
- new CoordRec((float) 18.7038, (float) 76.1905),
- new CoordRec((float) 13.9419, (float) 66.6667),
- new CoordRec((float) 13.9419, (float) 57.1429),
- new CoordRec((float) 23.4657, (float) 47.619),
-};
-
-static final CoordRec char125_stroke1[] = {
- new CoordRec((float) 18.7038, (float) 114.286),
- new CoordRec((float) 23.4657, (float) 104.762),
- new CoordRec((float) 23.4657, (float) 95.2381),
- new CoordRec((float) 18.7038, (float) 85.7143),
- new CoordRec((float) 13.9419, (float) 80.9524),
- new CoordRec((float) 9.18, (float) 71.4286),
- new CoordRec((float) 9.18, (float) 61.9048),
- new CoordRec((float) 13.9419, (float) 52.381),
- new CoordRec((float) 32.9895, (float) 42.8571),
- new CoordRec((float) 13.9419, (float) 33.3333),
- new CoordRec((float) 9.18, (float) 23.8095),
- new CoordRec((float) 9.18, (float) 14.2857),
- new CoordRec((float) 13.9419, (float) 4.7619),
- new CoordRec((float) 18.7038, (float) 0),
- new CoordRec((float) 23.4657, (float) -9.5238),
- new CoordRec((float) 23.4657, (float) -19.0476),
- new CoordRec((float) 18.7038, (float) -28.5714),
-};
-
-static final CoordRec char125_stroke2[] = {
- new CoordRec((float) 23.4657, (float) 38.0952),
- new CoordRec((float) 13.9419, (float) 28.5714),
- new CoordRec((float) 13.9419, (float) 19.0476),
- new CoordRec((float) 18.7038, (float) 9.5238),
- new CoordRec((float) 23.4657, (float) 4.7619),
- new CoordRec((float) 28.2276, (float) -4.7619),
- new CoordRec((float) 28.2276, (float) -14.2857),
- new CoordRec((float) 23.4657, (float) -23.8095),
- new CoordRec((float) 18.7038, (float) -28.5714),
- new CoordRec((float) 9.18, (float) -33.3333),
-};
-
-static final StrokeRec char125[] = {
- new StrokeRec(10, char125_stroke0),
- new StrokeRec(17, char125_stroke1),
- new StrokeRec(10, char125_stroke2),
-};
-
-/* char: 126 '~' */
-
-static final CoordRec char126_stroke0[] = {
- new CoordRec((float) 2.92, (float) 28.5714),
- new CoordRec((float) 2.92, (float) 38.0952),
- new CoordRec((float) 7.6819, (float) 52.381),
- new CoordRec((float) 17.2057, (float) 57.1429),
- new CoordRec((float) 26.7295, (float) 57.1429),
- new CoordRec((float) 36.2533, (float) 52.381),
- new CoordRec((float) 55.301, (float) 38.0952),
- new CoordRec((float) 64.8248, (float) 33.3333),
- new CoordRec((float) 74.3486, (float) 33.3333),
- new CoordRec((float) 83.8724, (float) 38.0952),
- new CoordRec((float) 88.6343, (float) 47.619),
-};
-
-static final CoordRec char126_stroke1[] = {
- new CoordRec((float) 2.92, (float) 38.0952),
- new CoordRec((float) 7.6819, (float) 47.619),
- new CoordRec((float) 17.2057, (float) 52.381),
- new CoordRec((float) 26.7295, (float) 52.381),
- new CoordRec((float) 36.2533, (float) 47.619),
- new CoordRec((float) 55.301, (float) 33.3333),
- new CoordRec((float) 64.8248, (float) 28.5714),
- new CoordRec((float) 74.3486, (float) 28.5714),
- new CoordRec((float) 83.8724, (float) 33.3333),
- new CoordRec((float) 88.6343, (float) 47.619),
- new CoordRec((float) 88.6343, (float) 57.1429),
-};
-
-static final StrokeRec char126[] = {
- new StrokeRec(11, char126_stroke0),
- new StrokeRec(11, char126_stroke1),
-};
-
-/* char: 127 */
-
-static final CoordRec char127_stroke0[] = {
- new CoordRec((float) 52.381, (float) 100),
- new CoordRec((float) 14.2857, (float) -33.3333),
-};
-
-static final CoordRec char127_stroke1[] = {
- new CoordRec((float) 28.5714, (float) 66.6667),
- new CoordRec((float) 14.2857, (float) 61.9048),
- new CoordRec((float) 4.7619, (float) 52.381),
- new CoordRec((float) 0, (float) 38.0952),
- new CoordRec((float) 0, (float) 23.8095),
- new CoordRec((float) 4.7619, (float) 14.2857),
- new CoordRec((float) 14.2857, (float) 4.7619),
- new CoordRec((float) 28.5714, (float) 0),
- new CoordRec((float) 38.0952, (float) 0),
- new CoordRec((float) 52.381, (float) 4.7619),
- new CoordRec((float) 61.9048, (float) 14.2857),
- new CoordRec((float) 66.6667, (float) 28.5714),
- new CoordRec((float) 66.6667, (float) 42.8571),
- new CoordRec((float) 61.9048, (float) 52.381),
- new CoordRec((float) 52.381, (float) 61.9048),
- new CoordRec((float) 38.0952, (float) 66.6667),
- new CoordRec((float) 28.5714, (float) 66.6667),
-};
-
-static final StrokeRec char127[] = {
- new StrokeRec(2, char127_stroke0),
- new StrokeRec(17, char127_stroke1),
-};
-
-static final StrokeCharRec chars[] = {
- new StrokeCharRec( 0, /* char0 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char1 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char2 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char3 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char4 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char5 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char6 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char7 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char8 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char9 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char10 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char11 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char12 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char13 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char14 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char15 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char16 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char17 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char18 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char19 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char20 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char21 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char22 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char23 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char24 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char25 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char26 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char27 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char28 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char29 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char30 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char31 */ null, (float) 0, (float) 0 ),
- new StrokeCharRec( 0, /* char32 */ null, (float) 52.381, (float) 104.762 ),
- new StrokeCharRec( 2, char33, (float) 13.3819, (float) 26.6238 ),
- new StrokeCharRec( 2, char34, (float) 23.0676, (float) 51.4352 ),
- new StrokeCharRec( 4, char35, (float) 36.5333, (float) 79.4886 ),
- new StrokeCharRec( 3, char36, (float) 38.1533, (float) 76.2067 ),
- new StrokeCharRec( 3, char37, (float) 49.2171, (float) 96.5743 ),
- new StrokeCharRec( 1, char38, (float) 53.599, (float) 101.758 ),
- new StrokeCharRec( 1, char39, (float) 4.44, (float) 13.62 ),
- new StrokeCharRec( 1, char40, (float) 21.8657, (float) 47.1733 ),
- new StrokeCharRec( 1, char41, (float) 24.3276, (float) 47.5333 ),
- new StrokeCharRec( 3, char42, (float) 30.7695, (float) 59.439 ),
- new StrokeCharRec( 2, char43, (float) 48.8371, (float) 97.2543 ),
- new StrokeCharRec( 1, char44, (float) 13.5219, (float) 26.0638 ),
- new StrokeCharRec( 1, char45, (float) 50.2371, (float) 100.754 ),
- new StrokeCharRec( 1, char46, (float) 13.1019, (float) 26.4838 ),
- new StrokeCharRec( 1, char47, (float) 40.5733, (float) 82.1067 ),
- new StrokeCharRec( 1, char48, (float) 38.3133, (float) 77.0667 ),
- new StrokeCharRec( 1, char49, (float) 30.8676, (float) 66.5295 ),
- new StrokeCharRec( 1, char50, (float) 38.7533, (float) 77.6467 ),
- new StrokeCharRec( 1, char51, (float) 38.3333, (float) 77.0467 ),
- new StrokeCharRec( 2, char52, (float) 37.2133, (float) 80.1686 ),
- new StrokeCharRec( 1, char53, (float) 38.1933, (float) 77.6867 ),
- new StrokeCharRec( 1, char54, (float) 34.1514, (float) 73.8048 ),
- new StrokeCharRec( 2, char55, (float) 38.8933, (float) 77.2267 ),
- new StrokeCharRec( 1, char56, (float) 38.9333, (float) 77.6667 ),
- new StrokeCharRec( 1, char57, (float) 39.9333, (float) 74.0648 ),
- new StrokeCharRec( 2, char58, (float) 14.0819, (float) 26.2238 ),
- new StrokeCharRec( 2, char59, (float) 12.9619, (float) 26.3038 ),
- new StrokeCharRec( 1, char60, (float) 41.1552, (float) 81.6105 ),
- new StrokeCharRec( 2, char61, (float) 48.5571, (float) 97.2543 ),
- new StrokeCharRec( 1, char62, (float) 40.8752, (float) 81.6105 ),
- new StrokeCharRec( 2, char63, (float) 36.9914, (float) 73.9029 ),
- new StrokeCharRec( 2, char64, (float) 34.9314, (float) 74.3648 ),
- new StrokeCharRec( 3, char65, (float) 40.5952, (float) 80.4905 ),
- new StrokeCharRec( 3, char66, (float) 44.7533, (float) 83.6267 ),
- new StrokeCharRec( 1, char67, (float) 39.9933, (float) 84.4886 ),
- new StrokeCharRec( 2, char68, (float) 45.2933, (float) 85.2867 ),
- new StrokeCharRec( 4, char69, (float) 39.9914, (float) 78.1848 ),
- new StrokeCharRec( 3, char70, (float) 39.9914, (float) 78.7448 ),
- new StrokeCharRec( 2, char71, (float) 40.3933, (float) 89.7686 ),
- new StrokeCharRec( 3, char72, (float) 44.7533, (float) 89.0867 ),
- new StrokeCharRec( 1, char73, (float) 10.86, (float) 21.3 ),
- new StrokeCharRec( 1, char74, (float) 31.0714, (float) 59.999 ),
- new StrokeCharRec( 3, char75, (float) 44.6133, (float) 79.3267 ),
- new StrokeCharRec( 2, char76, (float) 40.2514, (float) 71.3229 ),
- new StrokeCharRec( 4, char77, (float) 48.9552, (float) 97.2105 ),
- new StrokeCharRec( 3, char78, (float) 44.4733, (float) 88.8067 ),
- new StrokeCharRec( 1, char79, (float) 44.3352, (float) 88.8305 ),
- new StrokeCharRec( 2, char80, (float) 45.4333, (float) 85.6667 ),
- new StrokeCharRec( 2, char81, (float) 43.3952, (float) 88.0905 ),
- new StrokeCharRec( 3, char82, (float) 45.0133, (float) 82.3667 ),
- new StrokeCharRec( 1, char83, (float) 41.3333, (float) 80.8267 ),
- new StrokeCharRec( 2, char84, (float) 35.6933, (float) 71.9467 ),
- new StrokeCharRec( 1, char85, (float) 44.8733, (float) 89.4867 ),
- new StrokeCharRec( 2, char86, (float) 40.4552, (float) 81.6105 ),
- new StrokeCharRec( 4, char87, (float) 49.839, (float) 100.518 ),
- new StrokeCharRec( 2, char88, (float) 35.8333, (float) 72.3667 ),
- new StrokeCharRec( 2, char89, (float) 39.6152, (float) 79.6505 ),
- new StrokeCharRec( 3, char90, (float) 35.8333, (float) 73.7467 ),
- new StrokeCharRec( 4, char91, (float) 22.0657, (float) 46.1133 ),
- new StrokeCharRec( 1, char92, (float) 39.1733, (float) 78.2067 ),
- new StrokeCharRec( 4, char93, (float) 23.4876, (float) 46.3933 ),
- new StrokeCharRec( 2, char94, (float) 44.0752, (float) 90.2305 ),
- new StrokeCharRec( 1, char95, (float) 51.281, (float) 104.062 ),
- new StrokeCharRec( 2, char96, (float) 42.5457, (float) 83.5714 ),
- new StrokeCharRec( 2, char97, (float) 35.2514, (float) 66.6029 ),
- new StrokeCharRec( 2, char98, (float) 37.3314, (float) 70.4629 ),
- new StrokeCharRec( 1, char99, (float) 34.0914, (float) 68.9229 ),
- new StrokeCharRec( 2, char100, (float) 33.2114, (float) 70.2629 ),
- new StrokeCharRec( 1, char101, (float) 34.2914, (float) 68.5229 ),
- new StrokeCharRec( 2, char102, (float) 14.9657, (float) 38.6552 ),
- new StrokeCharRec( 2, char103, (float) 33.9314, (float) 70.9829 ),
- new StrokeCharRec( 2, char104, (float) 33.4095, (float) 71.021 ),
- new StrokeCharRec( 2, char105, (float) 14.7819, (float) 28.8638 ),
- new StrokeCharRec( 2, char106, (float) 17.3876, (float) 36.2314 ),
- new StrokeCharRec( 3, char107, (float) 33.4095, (float) 62.521 ),
- new StrokeCharRec( 1, char108, (float) 10.02, (float) 19.34 ),
- new StrokeCharRec( 3, char109, (float) 61.981, (float) 123.962 ),
- new StrokeCharRec( 2, char110, (float) 32.9895, (float) 70.881 ),
- new StrokeCharRec( 1, char111, (float) 33.5514, (float) 71.7448 ),
- new StrokeCharRec( 2, char112, (float) 38.0314, (float) 70.8029 ),
- new StrokeCharRec( 2, char113, (float) 33.4114, (float) 70.7429 ),
- new StrokeCharRec( 2, char114, (float) 23.7457, (float) 49.4952 ),
- new StrokeCharRec( 1, char115, (float) 28.5095, (float) 62.321 ),
- new StrokeCharRec( 2, char116, (float) 14.8257, (float) 39.3152 ),
- new StrokeCharRec( 2, char117, (float) 33.2695, (float) 71.161 ),
- new StrokeCharRec( 2, char118, (float) 30.3714, (float) 60.6029 ),
- new StrokeCharRec( 4, char119, (float) 40.5952, (float) 80.4905 ),
- new StrokeCharRec( 2, char120, (float) 25.4695, (float) 56.401 ),
- new StrokeCharRec( 2, char121, (float) 35.1333, (float) 66.0648 ),
- new StrokeCharRec( 3, char122, (float) 28.2495, (float) 61.821 ),
- new StrokeCharRec( 3, char123, (float) 21.6657, (float) 41.6295 ),
- new StrokeCharRec( 1, char124, (float) 11.54, (float) 23.78 ),
- new StrokeCharRec( 3, char125, (float) 18.7038, (float) 41.4695 ),
- new StrokeCharRec( 2, char126, (float) 45.7771, (float) 91.2743 ),
- new StrokeCharRec( 2, char127, (float) 33.3333, (float) 66.6667 ),
-};
-
-static final StrokeFontRec glutStrokeRoman = new StrokeFontRec( "Roman", 128, chars, (float) 119.048, (float) -33.3333 );
-}
diff --git a/src/classes/com/sun/opengl/util/Gamma.java b/src/classes/com/sun/opengl/util/Gamma.java
deleted file mode 100755
index 8be4f4edf..000000000
--- a/src/classes/com/sun/opengl/util/Gamma.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import com.sun.opengl.impl.*;
-
-/** Provides control over the primary display's gamma, brightness and
- contrast controls via the hardware gamma ramp tables. Not
- supported on all platforms or graphics hardware. <P>
-
- Thanks to the LWJGL project for illustrating how to access gamma
- control on the various platforms.
-*/
-
-public class Gamma {
- private Gamma() {}
-
- /**
- * Sets the gamma, brightness, and contrast of the current main
- * display. This functionality is not available on all platforms and
- * graphics hardware. Returns true if the settings were successfully
- * changed, false if not. This method may return false for some
- * values of the incoming arguments even on hardware which does
- * support the underlying functionality. <P>
- *
- * If this method returns true, the display settings will
- * automatically be reset to their original values upon JVM exit
- * (assuming the JVM does not crash); if the user wishes to change
- * the display settings back to normal ahead of time, use {@link
- * #resetDisplayGamma resetDisplayGamma}(). It is recommended to
- * call {@link #resetDisplayGamma resetDisplayGamma} before calling
- * e.g. <code>System.exit()</code> from the application rather than
- * rely on the shutdown hook functionality due to inevitable race
- * conditions and unspecified behavior during JVM teardown. <P>
- *
- * This method may be called multiple times during the application's
- * execution, but calling {@link #resetDisplayGamma
- * resetDisplayGamma} will only reset the settings to the values
- * before the first call to this method. <P>
- *
- * @param gamma The gamma value, typically > 1.0 (default values
- * vary, but typically roughly 1.0)
- * @param brightness The brightness value between -1.0 and 1.0,
- * inclusive (default values vary, but typically 0)
- * @param contrast The contrast, greater than 0.0 (default values
- * vary, but typically 1)
- * @return true if gamma settings were successfully changed, false
- * if not
- * @throws IllegalArgumentException if any of the parameters were
- * out-of-bounds
- */
- public static boolean setDisplayGamma(float gamma, float brightness, float contrast) throws IllegalArgumentException {
- return GLDrawableFactoryImpl.getFactoryImpl().setDisplayGamma(gamma, brightness, contrast);
- }
-
- /**
- * Resets the gamma, brightness and contrast values for the primary
- * display to their original values before {@link #setDisplayGamma
- * setDisplayGamma} was called the first time. {@link
- * #setDisplayGamma setDisplayGamma} must be called before calling
- * this method or an unspecified exception will be thrown. While it
- * is not explicitly required that this method be called before
- * exiting, calling it is recommended because of the inevitable
- * unspecified behavior during JVM teardown.
- */
- public static void resetDisplayGamma() {
- GLDrawableFactoryImpl.getFactoryImpl().resetDisplayGamma();
- }
-}
diff --git a/src/classes/com/sun/opengl/util/ImageUtil.java b/src/classes/com/sun/opengl/util/ImageUtil.java
deleted file mode 100755
index f8981bd36..000000000
--- a/src/classes/com/sun/opengl/util/ImageUtil.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import java.awt.*;
-import java.awt.image.*;
-
-/** Utilities for dealing with images. */
-
-public class ImageUtil {
- private ImageUtil() {}
-
- /** Flips the supplied BufferedImage vertically. This is often a
- necessary conversion step to display a Java2D image correctly
- with OpenGL and vice versa. */
- public static void flipImageVertically(BufferedImage image) {
- WritableRaster raster = image.getRaster();
- Object scanline1 = null;
- Object scanline2 = null;
-
- for (int i = 0; i < image.getHeight() / 2; i++) {
- scanline1 = raster.getDataElements(0, i, image.getWidth(), 1, scanline1);
- scanline2 = raster.getDataElements(0, image.getHeight() - i - 1, image.getWidth(), 1, scanline2);
- raster.setDataElements(0, i, image.getWidth(), 1, scanline2);
- raster.setDataElements(0, image.getHeight() - i - 1, image.getWidth(), 1, scanline1);
- }
- }
-
- /**
- * Creates a <code>BufferedImage</code> with a pixel format compatible with the graphics
- * environment. The returned image can thus benefit from hardware accelerated operations
- * in Java2D API.
- *
- * @param width The width of the image to be created
- * @param height The height of the image to be created
- *
- * @return A instance of <code>BufferedImage</code> with a type compatible with the graphics card.
- */
- public static BufferedImage createCompatibleImage(int width, int height) {
- GraphicsConfiguration configuration =
- GraphicsEnvironment.getLocalGraphicsEnvironment().
- getDefaultScreenDevice().getDefaultConfiguration();
- return configuration.createCompatibleImage(width, height);
- }
-
- /**
- * Creates a thumbnail from an image. A thumbnail is a scaled down version of the original picture.
- * This method will retain the width to height ratio of the original picture and return a new
- * instance of <code>BufferedImage</code>. The original picture is not modified.
- *
- * @param image The original image to sample down
- * @param thumbWidth The width of the thumbnail to be created
- *
- * @throws IllegalArgumentException If thumbWidth is greater than image.getWidth()
- *
- * @return A thumbnail with the requested width or the original picture if thumbWidth = image.getWidth()
- */
- public static BufferedImage createThumbnail(BufferedImage image, int thumbWidth) {
- // Thanks to Romain Guy for this utility
- if (thumbWidth > image.getWidth()) {
- throw new IllegalArgumentException("Thumbnail width must be greater than image width");
- }
-
- if (thumbWidth == image.getWidth()) {
- return image;
- }
-
- float ratio = (float) image.getWidth() / (float) image.getHeight();
- int width = image.getWidth();
- BufferedImage thumb = image;
-
- do {
- width /= 2;
- if (width < thumbWidth) {
- width = thumbWidth;
- }
-
- BufferedImage temp = createCompatibleImage(width, (int) (width / ratio));
- Graphics2D g2 = temp.createGraphics();
- g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
- RenderingHints.VALUE_INTERPOLATION_BILINEAR);
- g2.drawImage(thumb, 0, 0, temp.getWidth(), temp.getHeight(), null);
- g2.dispose();
- thumb = temp;
- } while (width != thumbWidth);
-
- return thumb;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/JOGLAppletLauncher.java b/src/classes/com/sun/opengl/util/JOGLAppletLauncher.java
deleted file mode 100755
index c82aaf9c6..000000000
--- a/src/classes/com/sun/opengl/util/JOGLAppletLauncher.java
+++ /dev/null
@@ -1,1080 +0,0 @@
-/* This java class is distributed under the BSD license.
- *
- * Copyright 2005 Lilian Chamontin.
- * contact lilian.chamontin at f r e e . f r
- */
-
-/*
- * Portions Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.util;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Label;
-import java.awt.Panel;
-import java.applet.Applet;
-import java.applet.AppletStub;
-import java.applet.AppletContext;
-import java.io.*;
-import java.net.*;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.*;
-import java.text.*;
-import java.util.*;
-import java.util.jar.*;
-import javax.swing.*;
-
-import javax.media.opengl.*;
-
-
-/** This class enables deployment of high-end applets which use OpenGL
- * for 3D graphics via JOGL and (optionally) OpenAL for spatialized
- * audio via JOAL. The applet being deployed may be either signed or
- * unsigned; if it is unsigned, it runs inside the security sandbox,
- * and if it is signed, the user receives a security dialog to accept
- * the certificate for the applet as well as for JOGL and JOAL. <P>
- *
- * The steps for deploying such applets are straightforward. First,
- * the "archive" parameter to the applet tag must contain jogl.jar
- * and gluegen-rt.jar, as well as any jar files associated with your
- * applet (in this case, "your_applet.jar"). <P>
- *
- * Second, the codebase directory on the server, which contains the
- * applet's jar files, must also contain jogl.jar, gluegen-rt.jar,
- * and all of the jogl-natives-*.jar and gluegen-rt-natives-*.jar
- * files from the standard JOGL and GlueGen runtime distributions
- * (provided in jogl-[version]-webstart.zip from the <a
- * href="http://jogl.dev.java.net/servlets/ProjectDocumentList">JOGL
- * release builds</a> and gluegen-rt-[version]-webstart.zip from the
- * <a
- * href="http://gluegen.dev.java.net/servlets/ProjectDocumentList">GlueGen
- * runtime release builds</a>). Note that the codebase of the applet
- * is currently the location from which the JOGL native library used
- * by the applet is downloaded. All of the JOGL and GlueGen-related
- * jars must be signed by the same entity, which is typically Sun
- * Microsystems, Inc. <P>
- *
- * To deploy an applet using both JOGL and JOAL, simply add joal.jar
- * to the list of jars in the archive tag of the applet, and put
- * joal.jar and the joal-natives-*.jar signed jars into the same
- * codebase directory on the web server. These signed jars are
- * supplied in the joal-[version]-webstart.zip archive from the <a
- * href="http://joal.dev.java.net/servlets/ProjectDocumentList">JOAL
- * release builds</a>. <P>
- *
- * Sample applet code:
- * <pre>
- * &lt;applet code="com.sun.opengl.util.JOGLAppletLauncher"
- * width=600
- * height=400
- * codebase="/lib"
- * archive="jogl.jar,gluegen-rt.jar,your_applet.jar"&gt;
- * &lt;param name="subapplet.classname" VALUE="untrusted.JOGLApplet"&gt;
- * &lt;param name="subapplet.displayname" VALUE="My JOGL Applet"&gt;
- * &lt;param name="progressbar" value="true"&gt;
- * &lt;param name="cache_archive" VALUE="jogl.jar,gluegen-rt.jar,your_applet.jar"&gt;
- * &lt;param name="cache_archive_ex" VALUE="jogl.jar;preload,gluegen-rt.jar;preload,your_applet.jar;preload"&gt;
- * &lt;/applet&gt;
- * </pre>
- * <p>
- *
- * There are some limitations with this approach. It is not possible
- * to specify e.g. -Dsun.java2d.noddraw=true or
- * -Dsun.java2d.opengl=true for better control over the Java2D
- * pipeline as it is with Java Web Start. However, the
- * JOGLAppletLauncher tries to force the use of
- * -Dsun.java2d.noddraw=true on Windows platforms for best robustness
- * by detecting if it has not been set and asking the user whether it
- * can update the Java Plug-In configuration automatically. If the
- * user agrees to this, a browser restart is required in order for the
- * change to take effect, though it is permanent for subsequent
- * browser restarts. <P>
- *
- * The behavior of the noddraw-related dialog box can be changed via
- * two applet parameters. The <CODE>jogl.silent.noddraw.check</CODE>
- * parameter, if set to <CODE>"true"</CODE>, silences the two dialog
- * boxes associated with this check, forcing it to always be performed
- * and deployment.properties to be silently updated if necessary
- * (unless the user previously saw such a dialog box and dismissed it
- * by saying "No, Don't Ask Again"). The noddraw check can be disabled
- * completely by setting the <CODE>jogl.disable.noddraw.check</CODE>
- * applet parameter to <CODE>"true"</CODE>. <P>
- *
- * The JOGL (and optionally JOAL) natives are cached in the user's
- * home directory (the value of the "user.home" system property in
- * Java) under the directory .jogl_ext. The Java Plug-In is
- * responsible for performing all other jar caching. If the JOGL
- * installation is updated on the server, the .jogl_ext cache will
- * automatically be updated. <p>
- *
- * This technique requires that JOGL has not been installed in to the
- * JRE under e.g. jre/lib/ext. If problems are seen when deploying
- * this applet launcher, the first question to ask the end user is
- * whether jogl.jar and any associated DLLs, .so's, etc. are installed
- * directly in to the JRE. The applet launcher has been tested
- * primarily under Mozilla, Firefox and Internet Explorer; there may
- * be problems when running under, for example, Opera. <p>
- *
- * It has been discovered that the Talkback agent in Mozilla / Firefox
- * has bad interactions with OpenGL applets. For highest performance,
- * we recommend disabling the Talkback agent; find talkback.exe, run
- * it, and follow the directions for turning it off. Please see
- * <a href="http://www.javagaming.org/forums/index.php?topic=12200.30">this
- * thread</a> on the javagaming.org forums and
- * <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=326381">this
- * thread</a> on the Mozilla bug reporting database. <p>
- *
- * @author Lilian Chamontin
- * @author Kenneth Russell
- */
-public class JOGLAppletLauncher extends Applet {
- static {
- try {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- } catch (Exception ignore) {
- }
- }
-
- // metadata for native libraries
- private static class NativeLibInfo {
- private String osName;
- private String osArch;
- private String osNameAndArchPair;
- private String nativePrefix;
- private String nativeSuffix;
-
- public NativeLibInfo(String osName, String osArch, String osNameAndArchPair, String nativePrefix, String nativeSuffix) {
- this.osName = osName;
- this.osArch = osArch;
- this.osNameAndArchPair = osNameAndArchPair;
- this.nativePrefix = nativePrefix;
- this.nativeSuffix = nativeSuffix;
- }
-
- public boolean matchesOSAndArch(String osName, String osArch) {
- if (osName.toLowerCase().startsWith(this.osName)) {
- if ((this.osArch == null) ||
- (osArch.toLowerCase().equals(this.osArch))) {
- return true;
- }
- }
- return false;
- }
-
- public boolean matchesNativeLib(String fileName) {
- if (fileName.toLowerCase().endsWith(nativeSuffix)) {
- return true;
- }
- return false;
- }
-
- public String formatNativeJarName(String nativeJarPattern) {
- return MessageFormat.format(nativeJarPattern, new Object[] { osNameAndArchPair });
- }
-
- public String getNativeLibName(String baseName) {
- return nativePrefix + baseName + nativeSuffix;
- }
-
- public boolean isMacOS() {
- return (osName.equals("mac"));
- }
-
- public boolean mayNeedDRIHack() {
- return (!isMacOS() && !osName.equals("win"));
- }
- }
-
- private static final NativeLibInfo[] allNativeLibInfo = {
- new NativeLibInfo("win", "x86", "windows-i586", "", ".dll"),
- new NativeLibInfo("win", "amd64", "windows-amd64", "", ".dll"),
- new NativeLibInfo("win", "x86_64","windows-amd64", "", ".dll"),
- new NativeLibInfo("mac", "ppc", "macosx-ppc", "lib", ".jnilib"),
- new NativeLibInfo("mac", "i386", "macosx-universal", "lib", ".jnilib"),
- new NativeLibInfo("linux", "i386", "linux-i586", "lib", ".so"),
- new NativeLibInfo("linux", "x86", "linux-i586", "lib", ".so"),
- new NativeLibInfo("linux", "amd64", "linux-amd64", "lib", ".so"),
- new NativeLibInfo("linux", "x86_64","linux-amd64", "lib", ".so"),
- new NativeLibInfo("sunos", "sparc", "solaris-sparc", "lib", ".so"),
- new NativeLibInfo("sunos", "sparcv9","solaris-sparcv9", "lib", ".so"),
- new NativeLibInfo("sunos", "x86", "solaris-i586", "lib", ".so"),
- new NativeLibInfo("sunos", "amd64", "solaris-amd64", "lib", ".so"),
- new NativeLibInfo("sunos", "x86_64","solaris-amd64", "lib", ".so")
- };
-
- private NativeLibInfo nativeLibInfo;
- // Library names computed once the jar comes down.
- // The signatures of these native libraries are checked before
- // installing them.
- private String[] nativeLibNames;
-
- /** The applet we have to start */
- private Applet subApplet;
-
- private String subAppletClassName; // from applet PARAM
- private String subAppletDisplayName; // from applet PARAM
- /** URL string to an image used while installing */
- private String subAppletImageName; // from applet PARAM
-
- private String installDirectory; // (defines a private directory for native libs)
-
- private JPanel loaderPanel = new JPanel(new BorderLayout());
-
- private JProgressBar progressBar = new JProgressBar(0,100);
-
- private boolean isInitOk = false;
-
- /** false once start() has been invoked */
- private boolean firstStart = true;
-
- /** true if start() has passed successfully */
- private boolean joglStarted = false;
-
- /** Indicates whether JOAL is present */
- private boolean haveJOAL = false;
-
- // Helpers for question about whether to update deployment.properties
- private static final String JRE_PREFIX = "deployment.javapi.jre.";
- private static final String NODDRAW_PROP = "-Dsun.java2d.noddraw=true";
- private static final String DONT_ASK = ".dont_ask";
-
- public JOGLAppletLauncher() {
- }
-
- private static String md2Hash(String str) {
- // Helps hash the jars in the "archive" tag into a hex value to
- // avoid having too-long path names in the install directory's
- // path name but also to have unique directories for each
- // different archive set used (also meaning for each class loader
- // loading something via the JOGLAppletLauncher) -- note that this
- // is somewhat dependent on the Sun implementation of applets and
- // their class loaders
- MessageDigest md2 = null;
- try {
- md2 = MessageDigest.getInstance("MD2");
- } catch (NoSuchAlgorithmException e) {
- return "";
- }
- byte[] digest = md2.digest(str.getBytes());
- if (digest == null || (digest.length == 0))
- return "";
- StringBuffer res = new StringBuffer();
- for (int i = 0; i < digest.length; i++) {
- res.append(Integer.toHexString(digest[i] & 0xFF));
- }
- return res.toString();
- }
-
- /** Applet initialization */
- public void init() {
-
- this.subAppletClassName = getParameter("subapplet.classname");
- if (subAppletClassName == null){
- displayError("Init failed : Missing subapplet.classname argument");
- return;
- }
- this.subAppletDisplayName = getParameter("subapplet.displayname");
- if (subAppletDisplayName == null){
- subAppletDisplayName = "Applet";
- }
-
- this.subAppletImageName = getParameter("subapplet.image");
-
- initLoaderLayout();
- validate();
-
- String extForm = getCodeBase().toExternalForm();
- String codeBase = extForm.substring(extForm.indexOf(":") + 3); // minus http:// or https://
-
- this.installDirectory = codeBase.replace(':', '_')
- .replace('.', '_').replace('/', '_').replace('~','_') // clean up the name
- + md2Hash(getParameter("archive")); // make it unique across different applet class loaders
-
- String osName = System.getProperty("os.name");
- String osArch = System.getProperty("os.arch");
- if (checkOSAndArch(osName, osArch)) {
- this.isInitOk = true;
- } else {
- displayError("Init failed : Unsupported os / arch ( " + osName + " / " + osArch + " )");
- }
- }
-
- private void displayMessage(final String message){
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- progressBar.setString(message);
- }
- });
- }
-
- private void displayError(final String errorMessage){
- // Print message to Java console too in case it's truncated in the applet's display
- System.err.println(errorMessage);
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- progressBar.setString("Error : " + errorMessage);
- }
- });
- }
-
- private void setProgress(final int value) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- progressBar.setValue(value);
- }
- });
- }
-
- private void initLoaderLayout(){
- setLayout(new BorderLayout());
- progressBar.setBorderPainted(true);
- progressBar.setStringPainted(true);
- progressBar.setString("Loading...");
- boolean includeImage = false;
- ImageIcon image = null;
- if (subAppletImageName != null){
- try {
- image = new ImageIcon(new URL(subAppletImageName));
- includeImage = true;
- } catch (MalformedURLException ex) {
- ex.printStackTrace();
- // not blocking
- }
- }
- if (includeImage){
- add(loaderPanel, BorderLayout.SOUTH);
- loaderPanel.add(new JLabel(image), BorderLayout.CENTER);
- loaderPanel.add(progressBar, BorderLayout.SOUTH);
- } else {
- add(loaderPanel, BorderLayout.SOUTH);
- loaderPanel.add(progressBar, BorderLayout.CENTER);
- }
- }
-
-
- /** start asynchroneous loading of libraries if needed */
- public void start(){
- if (isInitOk){
- if (firstStart) {
- firstStart = false;
- String userHome = System.getProperty("user.home");
-
- try {
- // We need to load in the jogl package so that we can query the version information
- ClassLoader classloader = getClass().getClassLoader();
- classloader.loadClass("javax.media.opengl.GL");
- Package p = Package.getPackage("javax.media.opengl");
-
- String installDirName = userHome + File.separator + ".jogl_ext"
- + File.separator + installDirectory + File.separator + p.getImplementationVersion().replace(':', '_');
-
- final File installDir = new File(installDirName);
-
- Thread refresher = new Thread() {
- public void run() {
- refreshJOGL(installDir);
- }
- };
- refresher.setPriority(Thread.NORM_PRIORITY - 1);
- refresher.start();
- }
- catch (ClassNotFoundException e) {
- System.err.println("Unable to load javax.media.opengl package");
- System.exit(0);
- }
-
- } else if (joglStarted) {
- checkNoDDrawAndUpdateDeploymentProperties();
- // we have to start again the applet (start can be called multiple times,
- // e.g once per tabbed browsing
- subApplet.start();
- }
- }
- }
-
- public void stop(){
- if (subApplet != null){
- subApplet.stop();
- }
- }
-
- public void destroy(){
- if (subApplet != null){
- subApplet.destroy();
- }
- }
-
-
- /** Helper method to make it easier to call methods on the
- sub-applet from JavaScript. */
- public Applet getSubApplet() {
- return subApplet;
- }
-
- private boolean checkOSAndArch(String osName, String osArch) {
- for (int i = 0; i < allNativeLibInfo.length; i++) {
- NativeLibInfo info = allNativeLibInfo[i];
- if (info.matchesOSAndArch(osName, osArch)) {
- nativeLibInfo = info;
- return true;
- }
- }
- return false;
- }
-
- // Get a "boolean" parameter, assuming that anything non-null aside
- // from "false" is true
- private boolean getBooleanParameter(String parameterName) {
- String val = getParameter(parameterName);
- if (val == null)
- return false;
- return !val.toLowerCase().equals("false");
- }
-
- private void checkNoDDrawAndUpdateDeploymentProperties() {
- if (getBooleanParameter("jogl.disable.noddraw.check"))
- return;
- if (System.getProperty("os.name").toLowerCase().startsWith("windows") &&
- !"true".equalsIgnoreCase(System.getProperty("sun.java2d.noddraw"))) {
- if (!SwingUtilities.isEventDispatchThread()) {
- try {
- SwingUtilities.invokeAndWait(new Runnable() {
- public void run() {
- updateDeploymentPropertiesImpl();
- }
- });
- } catch (Exception e) {
- }
- } else {
- updateDeploymentPropertiesImpl();
- }
- }
- }
-
- private void updateDeploymentPropertiesImpl() {
- String userHome = System.getProperty("user.home");
- File dontAskFile = new File(userHome + File.separator + ".jogl_ext" +
- File.separator + DONT_ASK);
- if (dontAskFile.exists())
- return; // User asked us not to prompt again
-
- int option = 0;
-
- if (!getBooleanParameter("jogl.silent.noddraw.check")) {
- option = JOptionPane.showOptionDialog(null,
- "For best robustness of JOGL applets on Windows,\n" +
- "we recommend disabling Java2D's use of DirectDraw.\n" +
- "This setting will affect all applets, but is unlikely\n" +
- "to slow other applets down significantly. May we update\n" +
- "your deployment.properties to turn off DirectDraw for\n" +
- "applets? You can change this back later if necessary\n" +
- "using the Java Control Panel, Java tab, under Java\n" +
- "Applet Runtime Settings.",
- "Update deployment.properties?",
- JOptionPane.YES_NO_CANCEL_OPTION,
- JOptionPane.QUESTION_MESSAGE,
- null,
- new Object[] {
- "Yes",
- "No",
- "No, Don't Ask Again"
- },
- "Yes");
- }
-
- if (option < 0 ||
- option == 1)
- return; // No
-
- if (option == 2) {
- try {
- dontAskFile.createNewFile();
- } catch (IOException e) {
- }
- return; // No, Don't Ask Again
- }
-
- try {
- // Must update deployment.properties
- File propsDir = new File(System.getProperty("user.home") + File.separator +
- "Application Data/Sun/Java/Deployment");
- if (!propsDir.exists())
- // Don't know what's going on or how to set this permanently
- return;
-
- File propsFile = new File(propsDir, "deployment.properties");
- if (!propsFile.exists())
- // Don't know what's going on or how to set this permanently
- return;
-
- Properties props = new Properties();
- InputStream input = new BufferedInputStream(new FileInputStream(propsFile));
- props.load(input);
- input.close();
- // Search through the keys looking for JRE versions
- Set/*<String>*/ jreVersions = new HashSet/*<String>*/();
- for (Iterator/*<String>*/ iter = props.keySet().iterator(); iter.hasNext(); ) {
- String key = (String) iter.next();
- if (key.startsWith(JRE_PREFIX)) {
- int idx = key.lastIndexOf(".");
- if (idx >= 0 && idx > JRE_PREFIX.length()) {
- String jreVersion = key.substring(JRE_PREFIX.length(), idx);
- jreVersions.add(jreVersion);
- }
- }
- }
-
- // Make sure the currently-running JRE shows up in this set to
- // avoid repeated displays of the dialog. It might not in some
- // upgrade scenarios where there was a pre-existing
- // deployment.properties and the new Java Control Panel hasn't
- // been run yet.
- jreVersions.add(System.getProperty("java.version"));
-
- // OK, now that we know all JRE versions covered by the
- // deployment.properties, check out the args for each and update
- // them
- for (Iterator/*<String>*/ iter = jreVersions.iterator(); iter.hasNext(); ) {
- String version = (String) iter.next();
- String argKey = JRE_PREFIX + version + ".args";
- String argVal = props.getProperty(argKey);
- if (argVal == null) {
- argVal = NODDRAW_PROP;
- } else if (argVal.indexOf(NODDRAW_PROP) < 0) {
- argVal = argVal + " " + NODDRAW_PROP;
- }
- props.setProperty(argKey, argVal);
- }
-
- OutputStream output = new BufferedOutputStream(new FileOutputStream(propsFile));
- props.store(output, null);
- output.close();
-
- if (!getBooleanParameter("jogl.silent.noddraw.check")) {
- // Tell user we're done
- JOptionPane.showMessageDialog(null,
- "For best robustness, we recommend you now exit and\n" +
- "restart your web browser. (Note: clicking \"OK\" will\n" +
- "not exit your browser.)",
- "Browser Restart Recommended",
- JOptionPane.INFORMATION_MESSAGE);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- /** This method is executed from outside the Event Dispatch Thread, and installs
- * the required native libraries in the local folder.
- */
- private void refreshJOGL(final File installDir) {
- try {
- Class subAppletClass = Class.forName(subAppletClassName);
- // this will block until the applet jar is downloaded
- } catch (ClassNotFoundException cnfe){
- displayError("Start failed : class not found : " + subAppletClassName);
- return;
- }
-
- if (!installDir.exists()){
- if (!installDir.mkdirs()) {
- displayError("Unable to create directories for target: " + installDir);
- return;
- }
- }
-
- // See whether JOAL is present
- try {
- Class alClass = Class.forName("net.java.games.joal.AL", false, this.getClass().getClassLoader());
- haveJOAL = true;
- // Note: it seems that some JRE implementations can throw
- // SecurityException as well as ClassNotFoundException, at least
- // if the OpenAL classes are not present and the web server
- // redirects elsewhere
- } catch (Exception e) {
- }
-
- String[] nativeJarNames = new String[] {
- nativeLibInfo.formatNativeJarName("jogl-natives-{0}.jar"),
- nativeLibInfo.formatNativeJarName("gluegen-rt-natives-{0}.jar"),
- (haveJOAL ? nativeLibInfo.formatNativeJarName("joal-natives-{0}.jar") : null)
- };
-
- for (int n = 0; n < nativeJarNames.length; n++) {
- String nativeJarName = nativeJarNames[n];
-
- if (nativeJarName == null)
- continue;
-
- URL nativeLibURL;
- URLConnection urlConnection;
- String path = getCodeBase().toExternalForm() + nativeJarName;
- try {
- nativeLibURL = new URL(path);
- urlConnection = nativeLibURL.openConnection();
- } catch (Exception e){
- e.printStackTrace();
- displayError("Couldn't access the native lib URL : " + path);
- return;
- }
-
- // the timestamp used to determine if we have to download the native jar again
- // don't rely on the OS's timestamp to cache this
- long lastModified = getTimestamp(installDir, nativeJarName, urlConnection.getLastModified());
- if (lastModified != urlConnection.getLastModified()) {
- displayMessage("Updating local version of the native libraries");
- // first download the full jar locally
- File localJarFile = new File(installDir, nativeJarName);
- try {
- saveNativesJarLocally(localJarFile, urlConnection);
- } catch (IOException ioe) {
- ioe.printStackTrace();
- displayError("Unable to install the native file locally");
- return;
- }
-
- try {
- JarFile jf = new JarFile(localJarFile);
-
- // Iterate the entries finding all candidate libraries that need
- // to have their signatures verified
- if (!findNativeEntries(jf)) {
- displayError("native libraries not found in jar file");
- return;
- }
-
- byte[] buf = new byte[8192];
-
- // Go back and verify the signatures
- for (int i = 0; i < nativeLibNames.length; i++) {
- JarEntry entry = jf.getJarEntry(nativeLibNames[i]);
- if (entry == null) {
- displayError("error looking up jar entry " + nativeLibNames[i]);
- return;
- }
- if (!checkNativeCertificates(jf, entry, buf)) {
- displayError("Native library " + nativeLibNames[i] + " isn't properly signed or has other errors");
- return;
- }
- }
-
- // Now install the native library files
- setProgress(0);
- for (int i = 0; i < nativeLibNames.length; i++) {
- displayMessage("Installing native files from " + nativeJarName);
- if (!installFile(installDir, jf, nativeLibNames[i], buf)) {
- return;
- }
- int percent = (100 * (i + 1) / nativeLibNames.length);
- setProgress(percent);
- }
-
- // At this point we can delete the jar file we just downloaded
- jf.close();
- localJarFile.delete();
-
- // If installation succeeded, write a timestamp for all of the
- // files to be checked next time
- try {
- File timestampFile = new File(installDir, getTimestampFileName(nativeJarName));
- timestampFile.delete();
- BufferedWriter writer = new BufferedWriter(new FileWriter(timestampFile));
- writer.write("" + urlConnection.getLastModified());
- writer.flush();
- writer.close();
- } catch (Exception e) {
- displayError("Error writing time stamp for native libraries");
- return;
- }
-
- } catch (Exception e) {
- displayError("Error opening jar file " + localJarFile.getName() + " for reading");
- return;
- }
- }
- }
-
- loadNativesAndStart(installDir);
- }
-
- private String getTimestampFileName(String nativeJarName) {
- return "timestamp-" + nativeJarName.replace('.', '-');
- }
-
- private long getTimestamp(File installDir, String nativeJarName, long timestamp) {
- // Avoid returning valid value if timestamp file doesn't exist
- try {
- String timestampName = getTimestampFileName(nativeJarName);
- BufferedReader reader = new BufferedReader(new FileReader(new File(installDir, timestampName)));
- try {
- StreamTokenizer tokenizer = new StreamTokenizer(reader);
- // Avoid screwing up by not being able to read full longs
- tokenizer.resetSyntax();
- tokenizer.wordChars('0', '9');
- tokenizer.wordChars('-', '-');
- tokenizer.nextToken();
- String tok = tokenizer.sval;
- if (tok != null) {
- return Long.parseLong(tok);
- }
- } catch (Exception e) {
- } finally {
- reader.close();
- }
- } catch (Exception e) {
- }
- return ((timestamp == 0) ? 1 : 0);
- }
-
- private void saveNativesJarLocally(File localJarFile,
- URLConnection urlConnection) throws IOException {
- BufferedOutputStream out = null;;
- InputStream in = null;
- displayMessage("Downloading native library");
- setProgress(0);
- try {
- out = new BufferedOutputStream(new
- FileOutputStream(localJarFile));
- int totalLength = urlConnection.getContentLength();
- in = urlConnection.getInputStream();
- byte[] buffer = new byte[1024];
- int len;
- int sum = 0;
- while ( (len = in.read(buffer)) > 0) {
- out.write(buffer, 0, len);
- sum += len;
- int percent = (100 * sum / totalLength);
- setProgress(percent);
- }
- out.close();
- in.close();
- } finally {
- // close the files
- if (out != null) {
- try {
- out.close();
- } catch (IOException ignore) {
- }
- }
- if (in != null) {
- try {
- in.close();
- } catch (IOException ignore) {
- }
- }
- }
- }
-
- private boolean findNativeEntries(JarFile jf) {
- List list = new ArrayList();
- Enumeration e = jf.entries();
- while (e.hasMoreElements()) {
- JarEntry entry = (JarEntry) e.nextElement();
- if (nativeLibInfo.matchesNativeLib(entry.getName())) {
- list.add(entry.getName());
- }
- }
- if (list.isEmpty()) {
- return false;
- }
- nativeLibNames = (String[]) list.toArray(new String[0]);
- return true;
- }
-
- /** checking the native certificates with the jogl ones (all must match)*/
- private boolean checkNativeCertificates(JarFile jar, JarEntry entry, byte[] buf){
- // API states that we must read all of the data from the entry's
- // InputStream in order to be able to get its certificates
- try {
- InputStream is = jar.getInputStream(entry);
- int totalLength = (int) entry.getSize();
- int len;
- while ((len = is.read(buf)) > 0) {
- }
- is.close();
- Certificate[] nativeCerts = entry.getCertificates();
- // locate the JOGL certificates
- Certificate[] joglCerts = GLDrawableFactory.class.getProtectionDomain().
- getCodeSource().getCertificates();
-
- if (nativeCerts == null || nativeCerts.length == 0) {
- return false;
- }
- int checked = 0;
- for (int i = 0; i < joglCerts.length; i++) {
- for (int j = 0; j < nativeCerts.length; j++) {
- if (nativeCerts[j].equals(joglCerts[i])){
- checked++;
- break;
- }
- }
- }
- return (checked == joglCerts.length);
- } catch (Exception e) {
- return false;
- }
- }
-
- private boolean installFile(File installDir,
- JarFile jar,
- String fileName,
- byte[] buf) {
- try {
- JarEntry entry = jar.getJarEntry(fileName);
- if (entry == null) {
- displayError("Error finding native library " + fileName);
- return false;
- }
- InputStream is = jar.getInputStream(entry);
- int totalLength = (int) entry.getSize();
- BufferedOutputStream out = null;
- File outputFile = new File(installDir, fileName);
- boolean exists = false;
- try {
- exists = outputFile.exists();
- out = new BufferedOutputStream(new FileOutputStream(outputFile));
- } catch (Exception e) {
- if (exists) {
- // It's possible the files were updated on the web server
- // but we still have them loaded in this process; skip this
- // update
- return true;
- } else {
- displayError("Error opening file " + fileName + " for writing");
- return false;
- }
- }
- int len;
- try {
- while ( (len = is.read(buf)) > 0) {
- out.write(buf, 0, len);
- }
- } catch (IOException ioe) {
- displayError("Error writing file " + fileName + " to disk");
- ioe.printStackTrace();
- outputFile.delete();
- return false;
- }
- out.flush();
- out.close();
- is.close();
- return true;
- } catch (Exception e2) {
- e2.printStackTrace();
- displayError("Error writing file " + fileName + " to disk");
- return false;
- }
- }
-
- /** last step before launch : System.load() the natives and init()/start() the child applet */
- private void loadNativesAndStart(final File nativeLibDir) {
- // back to the EDT
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- displayMessage("Loading native libraries");
-
- // disable JOGL and GlueGen runtime library loading from elsewhere
- com.sun.opengl.impl.NativeLibLoader.disableLoading();
- com.sun.gluegen.runtime.NativeLibLoader.disableLoading();
-
- // Open GlueGen runtime library optimistically. Note that
- // currently we do not need this on any platform except X11
- // ones, because JOGL doesn't use the GlueGen NativeLibrary
- // class anywhere except the DRIHack class, but if for
- // example we add JOAL support then we will need this on
- // every platform.
- loadLibrary(nativeLibDir, "gluegen-rt");
-
- Class driHackClass = null;
- if (nativeLibInfo.mayNeedDRIHack()) {
- // Run the DRI hack
- try {
- driHackClass = Class.forName("com.sun.opengl.impl.x11.DRIHack");
- driHackClass.getMethod("begin", new Class[] {}).invoke(null, new Object[] {});
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- // Load core JOGL native library
- loadLibrary(nativeLibDir, "jogl");
-
- if (nativeLibInfo.mayNeedDRIHack()) {
- // End DRI hack
- try {
- driHackClass.getMethod("end", new Class[] {}).invoke(null, new Object[] {});
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- if (!nativeLibInfo.isMacOS()) { // borrowed from NativeLibLoader
- // Must pre-load JAWT on all non-Mac platforms to
- // ensure references from jogl_awt shared object
- // will succeed since JAWT shared object isn't in
- // default library path
- try {
- System.loadLibrary("jawt");
- } catch (UnsatisfiedLinkError ex) {
- // Accessibility technologies load JAWT themselves; safe to continue
- // as long as JAWT is loaded by any loader
- if (ex.getMessage().indexOf("already loaded") == -1) {
- displayError("Unable to load JAWT");
- throw ex;
- }
- }
- }
-
- // Load AWT-specific native code
- loadLibrary(nativeLibDir, "jogl_awt");
-
- if (haveJOAL) {
- // Turn off the System.loadLibrary call of the joal_native
- // library. It will still need to load the OpenAL library
- // internally via another mechanism.
- try {
- Class c = Class.forName("net.java.games.joal.impl.NativeLibLoader");
- c.getMethod("disableLoading", new Class[] {}).invoke(null, new Object[] {});
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- // Append the installed native library directory to
- // java.library.path. This is the most convenient way to
- // make this directory available to the NativeLibrary code,
- // which needs it for loading OpenAL if present.
- String javaLibPath = System.getProperty("java.library.path");
- String absPath = nativeLibDir.getAbsolutePath();
- boolean shouldSet = false;
- if (javaLibPath == null) {
- javaLibPath = absPath;
- shouldSet = true;
- } else if (javaLibPath.indexOf(absPath) < 0) {
- javaLibPath = javaLibPath + File.pathSeparator + absPath;
- shouldSet = true;
- }
- if (shouldSet) {
- System.setProperty("java.library.path", javaLibPath);
- }
-
- // Load core JOAL native library
- loadLibrary(nativeLibDir, "joal_native");
- }
-
- displayMessage("Starting applet " + subAppletDisplayName);
-
- // start the subapplet
- startSubApplet();
- }
- });
- }
-
- private void loadLibrary(File installDir, String libName) {
- String nativeLibName = nativeLibInfo.getNativeLibName(libName);
- try {
- System.load(new File(installDir, nativeLibName).getPath());
- } catch (UnsatisfiedLinkError ex) {
- // Note: if we have loaded this particular copy of the
- // JOGL-related native library in another class loader, the
- // steps taken above to ensure the installation directory name
- // was unique have failed. We can't continue properly in this
- // case, so just print and re-throw the exception.
- ex.printStackTrace();
- throw ex;
- }
- }
-
- /** The true start of the sub applet (invoked in the EDT) */
- private void startSubApplet(){
- try {
- subApplet = (Applet)Class.forName(subAppletClassName).newInstance();
- subApplet.setStub(new AppletStubProxy());
- } catch (ClassNotFoundException cnfe) {
- cnfe.printStackTrace();
- displayError("Class not found (" + subAppletClassName + ")");
- return;
- } catch (Exception ex) {
- ex.printStackTrace();
- displayError("Unable to start " + subAppletDisplayName);
- return;
- }
-
- add(subApplet, BorderLayout.CENTER);
-
- try {
- subApplet.init();
- remove(loaderPanel);
- validate();
- checkNoDDrawAndUpdateDeploymentProperties();
- subApplet.start();
- joglStarted = true;
- } catch (Exception ex){
- ex.printStackTrace();
- }
-
- }
-
- /** a proxy to allow the subApplet to work like a real applet */
- class AppletStubProxy implements AppletStub {
- public boolean isActive() {
- return JOGLAppletLauncher.this.isActive();
- }
-
- public URL getDocumentBase() {
- return JOGLAppletLauncher.this.getDocumentBase();
- }
-
- public URL getCodeBase() {
- return JOGLAppletLauncher.this.getCodeBase();
- }
-
- public String getParameter(String name) {
- return JOGLAppletLauncher.this.getParameter(name);
- }
-
- public AppletContext getAppletContext() {
- return JOGLAppletLauncher.this.getAppletContext();
- }
-
- public void appletResize(int width, int height) {
- JOGLAppletLauncher.this.resize(width, height);
- }
- }
-}
-
diff --git a/src/classes/com/sun/opengl/util/Screenshot.java b/src/classes/com/sun/opengl/util/Screenshot.java
deleted file mode 100755
index 4a98efecd..000000000
--- a/src/classes/com/sun/opengl/util/Screenshot.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.util;
-
-import java.awt.image.*;
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import javax.imageio.*;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-/** Utilities for taking screenshots of OpenGL applications. */
-
-public class Screenshot {
- private Screenshot() {}
-
- /**
- * Takes a fast screenshot of the current OpenGL drawable to a Targa
- * file. Requires the OpenGL context for the desired drawable to be
- * current. Takes the screenshot from the last assigned read buffer,
- * or the OpenGL default read buffer if none has been specified by
- * the user (GL_FRONT for single-buffered configurations and GL_BACK
- * for double-buffered configurations). This is the fastest
- * mechanism for taking a screenshot of an application. Contributed
- * by Carsten Weisse of Bytonic Software (http://bytonic.de/). <p>
- *
- * No alpha channel is written with this variant.
- *
- * @param file the file to write containing the screenshot
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- * @throws IOException if an I/O error occurred while writing the
- * file
- */
- public static void writeToTargaFile(File file,
- int width,
- int height) throws GLException, IOException {
- writeToTargaFile(file, width, height, false);
- }
-
- /**
- * Takes a fast screenshot of the current OpenGL drawable to a Targa
- * file. Requires the OpenGL context for the desired drawable to be
- * current. Takes the screenshot from the last assigned read buffer,
- * or the OpenGL default read buffer if none has been specified by
- * the user (GL_FRONT for single-buffered configurations and GL_BACK
- * for double-buffered configurations). This is the fastest
- * mechanism for taking a screenshot of an application. Contributed
- * by Carsten Weisse of Bytonic Software (http://bytonic.de/).
- *
- * @param file the file to write containing the screenshot
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- * @param alpha whether the alpha channel should be saved. If true,
- * requires GL_EXT_abgr extension to be present.
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- * @throws IOException if an I/O error occurred while writing the
- * file
- */
- public static void writeToTargaFile(File file,
- int width,
- int height,
- boolean alpha) throws GLException, IOException {
- writeToTargaFile(file, 0, 0, width, height, alpha);
- }
-
- /**
- * Takes a fast screenshot of the current OpenGL drawable to a Targa
- * file. Requires the OpenGL context for the desired drawable to be
- * current. Takes the screenshot from the last assigned read buffer,
- * or the OpenGL default read buffer if none has been specified by
- * the user (GL_FRONT for single-buffered configurations and GL_BACK
- * for double-buffered configurations). This is the fastest
- * mechanism for taking a screenshot of an application. Contributed
- * by Carsten Weisse of Bytonic Software (http://bytonic.de/).
- *
- * @param file the file to write containing the screenshot
- * @param x the starting x coordinate of the screenshot, measured from the lower-left
- * @param y the starting y coordinate of the screenshot, measured from the lower-left
- * @param width the width of the desired screenshot area
- * @param height the height of the desired screenshot area
- * @param alpha whether the alpha channel should be saved. If true,
- * requires GL_EXT_abgr extension to be present.
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- * @throws IOException if an I/O error occurred while writing the
- * file
- */
- public static void writeToTargaFile(File file,
- int x,
- int y,
- int width,
- int height,
- boolean alpha) throws GLException, IOException {
- if (alpha) {
- checkExtABGR();
- }
-
- TGAWriter writer = new TGAWriter();
- writer.open(file, width, height, alpha);
- ByteBuffer bgr = writer.getImageData();
-
- GL gl = GLU.getCurrentGL();
-
- // Set up pixel storage modes
- PixelStorageModes psm = new PixelStorageModes();
- psm.save(gl);
-
- int readbackType = (alpha ? GL.GL_ABGR_EXT : GL.GL_BGR);
-
- // read the BGR values into the image buffer
- gl.glReadPixels(x, y, width, height, readbackType,
- GL.GL_UNSIGNED_BYTE, bgr);
-
- // Restore pixel storage modes
- psm.restore(gl);
-
- // close the file
- writer.close();
- }
-
- /**
- * Takes a screenshot of the current OpenGL drawable to a
- * BufferedImage. Requires the OpenGL context for the desired
- * drawable to be current. Takes the screenshot from the last
- * assigned read buffer, or the OpenGL default read buffer if none
- * has been specified by the user (GL_FRONT for single-buffered
- * configurations and GL_BACK for double-buffered configurations).
- * Note that the scanlines of the resulting image are flipped
- * vertically in order to correctly match the OpenGL contents, which
- * takes time and is therefore not as fast as the Targa screenshot
- * function. <P>
- *
- * No alpha channel is read back with this variant.
- *
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- */
- public static BufferedImage readToBufferedImage(int width,
- int height) throws GLException {
- return readToBufferedImage(width, height, false);
- }
-
- /**
- * Takes a screenshot of the current OpenGL drawable to a
- * BufferedImage. Requires the OpenGL context for the desired
- * drawable to be current. Takes the screenshot from the last
- * assigned read buffer, or the OpenGL default read buffer if none
- * has been specified by the user (GL_FRONT for single-buffered
- * configurations and GL_BACK for double-buffered configurations).
- * Note that the scanlines of the resulting image are flipped
- * vertically in order to correctly match the OpenGL contents, which
- * takes time and is therefore not as fast as the Targa screenshot
- * function.
- *
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- * @param alpha whether the alpha channel should be read back. If
- * true, requires GL_EXT_abgr extension to be present.
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- */
- public static BufferedImage readToBufferedImage(int width,
- int height,
- boolean alpha) throws GLException {
- return readToBufferedImage(0, 0, width, height, alpha);
- }
-
- /**
- * Takes a screenshot of the current OpenGL drawable to a
- * BufferedImage. Requires the OpenGL context for the desired
- * drawable to be current. Takes the screenshot from the last
- * assigned read buffer, or the OpenGL default read buffer if none
- * has been specified by the user (GL_FRONT for single-buffered
- * configurations and GL_BACK for double-buffered configurations).
- * Note that the scanlines of the resulting image are flipped
- * vertically in order to correctly match the OpenGL contents, which
- * takes time and is therefore not as fast as the Targa screenshot
- * function.
- *
- * @param x the starting x coordinate of the screenshot, measured from the lower-left
- * @param y the starting y coordinate of the screenshot, measured from the lower-left
- * @param width the width of the desired screenshot area
- * @param height the height of the desired screenshot area
- * @param alpha whether the alpha channel should be read back. If
- * true, requires GL_EXT_abgr extension to be present.
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- */
- public static BufferedImage readToBufferedImage(int x,
- int y,
- int width,
- int height,
- boolean alpha) throws GLException {
- int bufImgType = (alpha ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_3BYTE_BGR);
- int readbackType = (alpha ? GL.GL_ABGR_EXT : GL.GL_BGR);
-
- if (alpha) {
- checkExtABGR();
- }
-
- // Allocate necessary storage
- BufferedImage image = new BufferedImage(width, height, bufImgType);
-
- GL gl = GLU.getCurrentGL();
-
- // Set up pixel storage modes
- PixelStorageModes psm = new PixelStorageModes();
- psm.save(gl);
-
- // read the BGR values into the image
- gl.glReadPixels(x, y, width, height, readbackType,
- GL.GL_UNSIGNED_BYTE,
- ByteBuffer.wrap(((DataBufferByte) image.getRaster().getDataBuffer()).getData()));
-
- // Restore pixel storage modes
- psm.restore(gl);
-
- // Must flip BufferedImage vertically for correct results
- ImageUtil.flipImageVertically(image);
- return image;
- }
-
- /**
- * Takes a screenshot of the current OpenGL drawable to the
- * specified file on disk using the ImageIO package. Requires the
- * OpenGL context for the desired drawable to be current. Takes the
- * screenshot from the last assigned read buffer, or the OpenGL
- * default read buffer if none has been specified by the user
- * (GL_FRONT for single-buffered configurations and GL_BACK for
- * double-buffered configurations). This is not the fastest
- * mechanism for taking a screenshot but may be more convenient than
- * others for getting images for consumption by other packages. The
- * file format is inferred from the suffix of the given file. <P>
- *
- * No alpha channel is saved with this variant.
- *
- * @param file the file to write containing the screenshot
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- *
- * @throws IOException if an I/O error occurred or if the file could
- * not be written to disk due to the requested file format being
- * unsupported by ImageIO
- */
- public static void writeToFile(File file,
- int width,
- int height) throws IOException, GLException {
- writeToFile(file, width, height, false);
- }
-
- /**
- * Takes a screenshot of the current OpenGL drawable to the
- * specified file on disk using the ImageIO package. Requires the
- * OpenGL context for the desired drawable to be current. Takes the
- * screenshot from the last assigned read buffer, or the OpenGL
- * default read buffer if none has been specified by the user
- * (GL_FRONT for single-buffered configurations and GL_BACK for
- * double-buffered configurations). This is not the fastest
- * mechanism for taking a screenshot but may be more convenient than
- * others for getting images for consumption by other packages. The
- * file format is inferred from the suffix of the given file. <P>
- *
- * Note that some file formats, in particular JPEG, can not handle
- * an alpha channel properly. If the "alpha" argument is specified
- * as true for such a file format it will be silently ignored.
- *
- * @param file the file to write containing the screenshot
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- * @param alpha whether an alpha channel should be saved. If true,
- * requires GL_EXT_abgr extension to be present.
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- *
- * @throws IOException if an I/O error occurred or if the file could
- * not be written to disk due to the requested file format being
- * unsupported by ImageIO
- */
- public static void writeToFile(File file,
- int width,
- int height,
- boolean alpha) throws IOException, GLException {
- writeToFile(file, 0, 0, width, height, alpha);
- }
-
- /**
- * Takes a screenshot of the current OpenGL drawable to the
- * specified file on disk using the ImageIO package. Requires the
- * OpenGL context for the desired drawable to be current. Takes the
- * screenshot from the last assigned read buffer, or the OpenGL
- * default read buffer if none has been specified by the user
- * (GL_FRONT for single-buffered configurations and GL_BACK for
- * double-buffered configurations). This is not the fastest
- * mechanism for taking a screenshot but may be more convenient than
- * others for getting images for consumption by other packages. The
- * file format is inferred from the suffix of the given file. <P>
- *
- * Note that some file formats, in particular JPEG, can not handle
- * an alpha channel properly. If the "alpha" argument is specified
- * as true for such a file format it will be silently ignored.
- *
- * @param file the file to write containing the screenshot
- * @param x the starting x coordinate of the screenshot, measured from the lower-left
- * @param y the starting y coordinate of the screenshot, measured from the lower-left
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- * @param alpha whether an alpha channel should be saved. If true,
- * requires GL_EXT_abgr extension to be present.
- *
- * @throws GLException if an OpenGL context was not current or
- * another OpenGL-related error occurred
- *
- * @throws IOException if an I/O error occurred or if the file could
- * not be written to disk due to the requested file format being
- * unsupported by ImageIO
- */
- public static void writeToFile(File file,
- int x,
- int y,
- int width,
- int height,
- boolean alpha) throws IOException, GLException {
- String fileSuffix = FileUtil.getFileSuffix(file);
- if (alpha && (fileSuffix.equals("jpg") || fileSuffix.equals("jpeg"))) {
- // JPEGs can't deal properly with alpha channels
- alpha = false;
- }
-
- BufferedImage image = readToBufferedImage(x, y, width, height, alpha);
- if (!ImageIO.write(image, fileSuffix, file)) {
- throw new IOException("Unsupported file format " + fileSuffix);
- }
- }
-
- private static int glGetInteger(GL gl, int pname, int[] tmp) {
- gl.glGetIntegerv(pname, tmp, 0);
- return tmp[0];
- }
-
- private static void checkExtABGR() {
- GL gl = GLU.getCurrentGL();
- if (!gl.isExtensionAvailable("GL_EXT_abgr")) {
- throw new IllegalArgumentException("Saving alpha channel requires GL_EXT_abgr");
- }
- }
-
- static class PixelStorageModes {
- int packAlignment;
- int packRowLength;
- int packSkipRows;
- int packSkipPixels;
- int packSwapBytes;
- int[] tmp = new int[1];
-
- void save(GL gl) {
- packAlignment = glGetInteger(gl, GL.GL_PACK_ALIGNMENT, tmp);
- packRowLength = glGetInteger(gl, GL.GL_PACK_ROW_LENGTH, tmp);
- packSkipRows = glGetInteger(gl, GL.GL_PACK_SKIP_ROWS, tmp);
- packSkipPixels = glGetInteger(gl, GL.GL_PACK_SKIP_PIXELS, tmp);
- packSwapBytes = glGetInteger(gl, GL.GL_PACK_SWAP_BYTES, tmp);
-
- gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1);
- gl.glPixelStorei(GL.GL_PACK_ROW_LENGTH, 0);
- gl.glPixelStorei(GL.GL_PACK_SKIP_ROWS, 0);
- gl.glPixelStorei(GL.GL_PACK_SKIP_PIXELS, 0);
- gl.glPixelStorei(GL.GL_PACK_SWAP_BYTES, 0);
- }
-
- void restore(GL gl) {
- gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, packAlignment);
- gl.glPixelStorei(GL.GL_PACK_ROW_LENGTH, packRowLength);
- gl.glPixelStorei(GL.GL_PACK_SKIP_ROWS, packSkipRows);
- gl.glPixelStorei(GL.GL_PACK_SKIP_PIXELS, packSkipPixels);
- gl.glPixelStorei(GL.GL_PACK_SWAP_BYTES, packSwapBytes);
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/util/StreamUtil.java b/src/classes/com/sun/opengl/util/StreamUtil.java
deleted file mode 100755
index c7a32d737..000000000
--- a/src/classes/com/sun/opengl/util/StreamUtil.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-import java.io.*;
-
-/** Utilities for dealing with streams. */
-
-public class StreamUtil {
- private StreamUtil() {}
-
- public static byte[] readAll(InputStream in) throws IOException {
- in = new BufferedInputStream(in);
- int avail = in.available();
- byte[] data = new byte[avail];
- int numRead = 0;
- int pos = 0;
- do {
- if (pos + avail > data.length) {
- byte[] newData = new byte[pos + avail];
- System.arraycopy(data, 0, newData, 0, pos);
- data = newData;
- }
- numRead = in.read(data, pos, avail);
- if (numRead >= 0) {
- pos += numRead;
- }
- avail = in.available();
- } while (avail > 0 && numRead >= 0);
- if (pos != data.length) {
- byte[] newData = new byte[pos];
- System.arraycopy(data, 0, newData, 0, pos);
- data = newData;
- }
- return data;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/StrokeCharRec.java b/src/classes/com/sun/opengl/util/StrokeCharRec.java
deleted file mode 100644
index 5c6f14b6c..000000000
--- a/src/classes/com/sun/opengl/util/StrokeCharRec.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
-
-/* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
-
-class StrokeCharRec {
- int num_strokes;
- StrokeRec[] stroke;
- float center;
- float right;
-
- StrokeCharRec(int num_strokes,
- StrokeRec[] stroke,
- float center,
- float right) {
- this.num_strokes = num_strokes;
- this.stroke = stroke;
- this.center = center;
- this.right = right;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/StrokeFontRec.java b/src/classes/com/sun/opengl/util/StrokeFontRec.java
deleted file mode 100644
index 825bed7c5..000000000
--- a/src/classes/com/sun/opengl/util/StrokeFontRec.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
-
-/* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
-
-class StrokeFontRec {
- String name;
- int num_chars;
- StrokeCharRec[] ch;
- float top;
- float bottom;
-
- StrokeFontRec(String name,
- int num_chars,
- StrokeCharRec[] ch,
- float top,
- float bottom) {
- this.name = name;
- this.num_chars = num_chars;
- this.ch = ch;
- this.top = top;
- this.bottom = bottom;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/StrokeRec.java b/src/classes/com/sun/opengl/util/StrokeRec.java
deleted file mode 100644
index ed5bec48f..000000000
--- a/src/classes/com/sun/opengl/util/StrokeRec.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util;
-
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
-
-/* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
-
-class StrokeRec {
- int num_coords;
- CoordRec[] coord;
-
- StrokeRec(int num_coords,
- CoordRec[] coord) {
- this.num_coords = num_coords;
- this.coord = coord;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/TGAWriter.java b/src/classes/com/sun/opengl/util/TGAWriter.java
deleted file mode 100755
index aafc7b47e..000000000
--- a/src/classes/com/sun/opengl/util/TGAWriter.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.util;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-
-/**
- * Utility class which helps take fast screenshots of OpenGL rendering
- * results into Targa-format files. Used by the {@link
- * com.sun.opengl.util.Screenshot Screenshot} class; can also be used
- * in conjunction with the {@link com.sun.opengl.util.TileRenderer
- * TileRenderer} class. <P>
- */
-
-public class TGAWriter {
- private static final int TARGA_HEADER_SIZE = 18;
-
- private FileChannel ch;
- private ByteBuffer buf;
-
- /** Constructor for the TGAWriter. */
- public TGAWriter() {
- }
-
- /**
- * Opens the specified Targa file for writing, overwriting any
- * existing file, and sets up the header of the file expecting the
- * data to be filled in before closing it.
- *
- * @param file the file to write containing the screenshot
- * @param width the width of the current drawable
- * @param height the height of the current drawable
- * @param alpha whether the alpha channel should be saved. If true,
- * requires GL_EXT_abgr extension to be present.
- *
- * @throws IOException if an I/O error occurred while writing the
- * file
- */
- public void open(File file,
- int width,
- int height,
- boolean alpha) throws IOException {
- RandomAccessFile out = new RandomAccessFile(file, "rw");
- ch = out.getChannel();
- int pixelSize = (alpha ? 32 : 24);
- int numChannels = (alpha ? 4 : 3);
-
- int fileLength = TARGA_HEADER_SIZE + width * height * numChannels;
- out.setLength(fileLength);
- MappedByteBuffer image = ch.map(FileChannel.MapMode.READ_WRITE, 0, fileLength);
-
- // write the TARGA header
- image.put(0, (byte) 0).put(1, (byte) 0);
- image.put(2, (byte) 2); // uncompressed type
- image.put(12, (byte) (width & 0xFF)); // width
- image.put(13, (byte) (width >> 8)); // width
- image.put(14, (byte) (height & 0xFF)); // height
- image.put(15, (byte) (height >> 8)); // height
- image.put(16, (byte) pixelSize); // pixel size
-
- // go to image data position
- image.position(TARGA_HEADER_SIZE);
- // jogl needs a sliced buffer
- buf = image.slice();
- }
-
- /**
- * Returns the ByteBuffer corresponding to the data for the image.
- * This must be filled in with data in either BGR or BGRA format
- * depending on whether an alpha channel was specified during
- * open().
- */
- public ByteBuffer getImageData() {
- return buf;
- }
-
- public void close() throws IOException {
- // close the file channel
- ch.close();
- buf = null;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/TileRenderer.java b/src/classes/com/sun/opengl/util/TileRenderer.java
deleted file mode 100755
index 982ea4a16..000000000
--- a/src/classes/com/sun/opengl/util/TileRenderer.java
+++ /dev/null
@@ -1,600 +0,0 @@
-package com.sun.opengl.util;
-
-import java.awt.Dimension;
-import java.nio.Buffer;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-/**
- * A fairly direct port of Brian Paul's tile rendering library, found
- * at <a href = "http://www.mesa3d.org/brianp/TR.html">
- * http://www.mesa3d.org/brianp/TR.html </a> . I've java-fied it, but
- * the functionality is the same.
- *
- * Original code Copyright (C) 1997-2005 Brian Paul. Licensed under
- * BSD-compatible terms with permission of the author. See LICENSE.txt
- * for license information.
- *
- * @author ryanm
- */
-public class TileRenderer
-{
- private static final int DEFAULT_TILE_WIDTH = 256;
-
- private static final int DEFAULT_TILE_HEIGHT = 256;
-
- private static final int DEFAULT_TILE_BORDER = 0;
-
- //
- // Enumeration flags for accessing variables
- //
- // @author ryanm
- //
-
- /**
- * The width of a tile
- */
- public static final int TR_TILE_WIDTH = 0;
- /**
- * The height of a tile
- */
- public static final int TR_TILE_HEIGHT = 1;
- /**
- * The width of the border around the tiles
- */
- public static final int TR_TILE_BORDER = 2;
- /**
- * The width of the final image
- */
- public static final int TR_IMAGE_WIDTH = 3;
- /**
- * The height of the final image
- */
- public static final int TR_IMAGE_HEIGHT = 4;
- /**
- * The number of rows of tiles
- */
- public static final int TR_ROWS = 5;
- /**
- * The number of columns of tiles
- */
- public static final int TR_COLUMNS = 6;
- /**
- * The current row number
- */
- public static final int TR_CURRENT_ROW = 7;
- /**
- * The current column number
- */
- public static final int TR_CURRENT_COLUMN = 8;
- /**
- * The width of the current tile
- */
- public static final int TR_CURRENT_TILE_WIDTH = 9;
- /**
- * The height of the current tile
- */
- public static final int TR_CURRENT_TILE_HEIGHT = 10;
- /**
- * The order that the rows are traversed
- */
- public static final int TR_ROW_ORDER = 11;
-
-
- /**
- * Indicates we are traversing rows from the top to the bottom
- */
- public static final int TR_TOP_TO_BOTTOM = 1;
-
- /**
- * Indicates we are traversing rows from the bottom to the top
- */
- public static final int TR_BOTTOM_TO_TOP = 2;
-
- /* Final image parameters */
- private Dimension imageSize = new Dimension();
-
- private int imageFormat, imageType;
-
- private Buffer imageBuffer;
-
- /* Tile parameters */
- private Dimension tileSize = new Dimension();
-
- private Dimension tileSizeNB = new Dimension();
-
- private int tileBorder;
-
- private int tileFormat, tileType;
-
- private Buffer tileBuffer;
-
- /* Projection parameters */
- private boolean perspective;
-
- private double left;
-
- private double right;
-
- private double bottom;
-
- private double top;
-
- private double near;
-
- private double far;
-
- /* Misc */
- private int rowOrder;
-
- private int rows, columns;
-
- private int currentTile;
-
- private int currentTileWidth, currentTileHeight;
-
- private int currentRow, currentColumn;
-
- private int[] viewportSave = new int[ 4 ];
-
- /**
- * Creates a new TileRenderer object
- */
- public TileRenderer()
- {
- tileSize.width = DEFAULT_TILE_WIDTH;
- tileSize.height = DEFAULT_TILE_HEIGHT;
- tileBorder = DEFAULT_TILE_BORDER;
- rowOrder = TR_BOTTOM_TO_TOP;
- currentTile = -1;
- }
-
- /**
- * Sets up the number of rows and columns needed
- */
- private void setup()
- {
- columns = ( imageSize.width + tileSizeNB.width - 1 ) / tileSizeNB.width;
- rows = ( imageSize.height + tileSizeNB.height - 1 ) / tileSizeNB.height;
- currentTile = 0;
-
- assert columns >= 0;
- assert rows >= 0;
- }
-
- /**
- * Sets the size of the tiles to use in rendering. The actual
- * effective size of the tile depends on the border size, ie (
- * width - 2*border ) * ( height - 2 * border )
- *
- * @param width
- * The width of the tiles. Must not be larger than the GL
- * context
- * @param height
- * The height of the tiles. Must not be larger than the
- * GL context
- * @param border
- * The width of the borders on each tile. This is needed
- * to avoid artifacts when rendering lines or points with
- * thickness > 1.
- */
- public void setTileSize( int width, int height, int border )
- {
- assert ( border >= 0 );
- assert ( width >= 1 );
- assert ( height >= 1 );
- assert ( width >= 2 * border );
- assert ( height >= 2 * border );
-
- tileBorder = border;
- tileSize.width = width;
- tileSize.height = height;
- tileSizeNB.width = width - 2 * border;
- tileSizeNB.height = height - 2 * border;
- setup();
- }
-
- /**
- * Specify a buffer the tiles to be copied to. This is not
- * necessary for the creation of the final image, but useful if you
- * want to inspect each tile in turn.
- *
- * @param format
- * Interpreted as in glReadPixels
- * @param type
- * Interpreted as in glReadPixels
- * @param image
- * The buffer itself. Must be large enough to contain a
- * tile, minus any borders
- */
- public void setTileBuffer( int format, int type, Buffer image )
- {
- tileFormat = format;
- tileType = type;
- tileBuffer = image;
- }
-
- /**
- * Sets the desired size of the final image
- *
- * @param width
- * The width of the final image
- * @param height
- * The height of the final image
- */
- public void setImageSize( int width, int height )
- {
- imageSize.width = width;
- imageSize.height = height;
- setup();
- }
-
- /**
- * Sets the buffer in which to store the final image
- *
- * @param format
- * Interpreted as in glReadPixels
- * @param type
- * Interpreted as in glReadPixels
- * @param image
- * the buffer itself, must be large enough to hold the
- * final image
- */
- public void setImageBuffer( int format, int type, Buffer image )
- {
- imageFormat = format;
- imageType = type;
- imageBuffer = image;
- }
-
- /**
- * Gets the parameters of this TileRenderer object
- *
- * @param param
- * The parameter that is to be retrieved
- * @return the value of the parameter
- */
- public int getParam( int param )
- {
- switch (param) {
- case TR_TILE_WIDTH:
- return tileSize.width;
- case TR_TILE_HEIGHT:
- return tileSize.height;
- case TR_TILE_BORDER:
- return tileBorder;
- case TR_IMAGE_WIDTH:
- return imageSize.width;
- case TR_IMAGE_HEIGHT:
- return imageSize.height;
- case TR_ROWS:
- return rows;
- case TR_COLUMNS:
- return columns;
- case TR_CURRENT_ROW:
- if( currentTile < 0 )
- return -1;
- else
- return currentRow;
- case TR_CURRENT_COLUMN:
- if( currentTile < 0 )
- return -1;
- else
- return currentColumn;
- case TR_CURRENT_TILE_WIDTH:
- return currentTileWidth;
- case TR_CURRENT_TILE_HEIGHT:
- return currentTileHeight;
- case TR_ROW_ORDER:
- return rowOrder;
- default:
- throw new IllegalArgumentException("Invalid enumerant as argument");
- }
- }
-
- /**
- * Sets the order of row traversal
- *
- * @param order
- * The row traversal order, must be
- * eitherTR_TOP_TO_BOTTOM or TR_BOTTOM_TO_TOP
- */
- public void setRowOrder( int order )
- {
- if (order == TR_TOP_TO_BOTTOM || order == TR_BOTTOM_TO_TOP) {
- rowOrder = order;
- } else {
- throw new IllegalArgumentException("Must pass TR_TOP_TO_BOTTOM or TR_BOTTOM_TO_TOP");
- }
- }
-
- /**
- * Sets the context to use an orthographic projection. Must be
- * called before rendering the first tile
- *
- * @param left
- * As in glOrtho
- * @param right
- * As in glOrtho
- * @param bottom
- * As in glOrtho
- * @param top
- * As in glOrtho
- * @param zNear
- * As in glOrtho
- * @param zFar
- * As in glOrtho
- */
- public void trOrtho( double left, double right, double bottom, double top, double zNear,
- double zFar )
- {
- this.perspective = false;
- this.left = left;
- this.right = right;
- this.bottom = bottom;
- this.top = top;
- this.near = zNear;
- this.far = zFar;
- }
-
- /**
- * Sets the perspective projection frustrum. Must be called before
- * rendering the first tile
- *
- * @param left
- * As in glFrustrum
- * @param right
- * As in glFrustrum
- * @param bottom
- * As in glFrustrum
- * @param top
- * As in glFrustrum
- * @param zNear
- * As in glFrustrum
- * @param zFar
- * As in glFrustrum
- */
- public void trFrustum( double left, double right, double bottom, double top, double zNear,
- double zFar )
- {
- this.perspective = true;
- this.left = left;
- this.right = right;
- this.bottom = bottom;
- this.top = top;
- this.near = zNear;
- this.far = zFar;
- }
-
- /**
- * Convenient way to specify a perspective projection
- *
- * @param fovy
- * As in gluPerspective
- * @param aspect
- * As in gluPerspective
- * @param zNear
- * As in gluPerspective
- * @param zFar
- * As in gluPerspective
- */
- public void trPerspective( double fovy, double aspect, double zNear, double zFar )
- {
- double xmin, xmax, ymin, ymax;
- ymax = zNear * Math.tan( fovy * 3.14159265 / 360.0 );
- ymin = -ymax;
- xmin = ymin * aspect;
- xmax = ymax * aspect;
- trFrustum( xmin, xmax, ymin, ymax, zNear, zFar );
- }
-
- /**
- * Begins rendering a tile. The projection matrix stack should be
- * left alone after calling this
- *
- * @param gl
- * The gl context
- */
- public void beginTile( GL gl )
- {
- if (currentTile <= 0) {
- setup();
- /*
- * Save user's viewport, will be restored after last tile
- * rendered
- */
- gl.glGetIntegerv( GL.GL_VIEWPORT, viewportSave, 0 );
- }
-
- /* which tile (by row and column) we're about to render */
- if (rowOrder == TR_BOTTOM_TO_TOP) {
- currentRow = currentTile / columns;
- currentColumn = currentTile % columns;
- } else {
- currentRow = rows - ( currentTile / columns ) - 1;
- currentColumn = currentTile % columns;
- }
- assert ( currentRow < rows );
- assert ( currentColumn < columns );
-
- int border = tileBorder;
-
- int th, tw;
-
- /* Compute actual size of this tile with border */
- if (currentRow < rows - 1) {
- th = tileSize.height;
- } else {
- th = imageSize.height - ( rows - 1 ) * ( tileSizeNB.height ) + 2 * border;
- }
-
- if (currentColumn < columns - 1) {
- tw = tileSize.width;
- } else {
- tw = imageSize.width - ( columns - 1 ) * ( tileSizeNB.width ) + 2 * border;
- }
-
- /* Save tile size, with border */
- currentTileWidth = tw;
- currentTileHeight = th;
-
- gl.glViewport( 0, 0, tw, th );
-
- /* save current matrix mode */
- int[] matrixMode = new int[ 1 ];
- gl.glGetIntegerv( GL.GL_MATRIX_MODE, matrixMode, 0 );
- gl.glMatrixMode( GL.GL_PROJECTION );
- gl.glLoadIdentity();
-
- /* compute projection parameters */
- double l =
- left + ( right - left ) * ( currentColumn * tileSizeNB.width - border )
- / imageSize.width;
- double r = l + ( right - left ) * tw / imageSize.width;
- double b =
- bottom + ( top - bottom ) * ( currentRow * tileSizeNB.height - border )
- / imageSize.height;
- double t = b + ( top - bottom ) * th / imageSize.height;
-
- if( perspective ) {
- gl.glFrustum( l, r, b, t, near, far );
- } else {
- gl.glOrtho( l, r, b, t, near, far );
- }
-
- /* restore user's matrix mode */
- gl.glMatrixMode( matrixMode[ 0 ] );
- }
-
- /**
- * Must be called after rendering the scene
- *
- * @param gl
- * the gl context
- * @return true if there are more tiles to be rendered, false if
- * the final image is complete
- */
- public boolean endTile( GL gl )
- {
- int[] prevRowLength = new int[ 1 ], prevSkipRows = new int[ 1 ], prevSkipPixels = new int[ 1 ], prevAlignment =
- new int[ 1 ];
-
- assert ( currentTile >= 0 );
-
- // be sure OpenGL rendering is finished
- gl.glFlush();
-
- // save current glPixelStore values
- gl.glGetIntegerv( GL.GL_PACK_ROW_LENGTH, prevRowLength, 0 );
- gl.glGetIntegerv( GL.GL_PACK_SKIP_ROWS, prevSkipRows, 0 );
- gl.glGetIntegerv( GL.GL_PACK_SKIP_PIXELS, prevSkipPixels, 0 );
- gl.glGetIntegerv( GL.GL_PACK_ALIGNMENT, prevAlignment, 0 );
-
- if( tileBuffer != null ) {
- int srcX = tileBorder;
- int srcY = tileBorder;
- int srcWidth = tileSizeNB.width;
- int srcHeight = tileSizeNB.height;
- gl.glReadPixels( srcX, srcY, srcWidth, srcHeight, tileFormat, tileType, tileBuffer );
- }
-
- if( imageBuffer != null ) {
- int srcX = tileBorder;
- int srcY = tileBorder;
- int srcWidth = currentTileWidth - 2 * tileBorder;
- int srcHeight = currentTileHeight - 2 * tileBorder;
- int destX = tileSizeNB.width * currentColumn;
- int destY = tileSizeNB.height * currentRow;
-
- /* setup pixel store for glReadPixels */
- gl.glPixelStorei( GL.GL_PACK_ROW_LENGTH, imageSize.width );
- gl.glPixelStorei( GL.GL_PACK_SKIP_ROWS, destY );
- gl.glPixelStorei( GL.GL_PACK_SKIP_PIXELS, destX );
- gl.glPixelStorei( GL.GL_PACK_ALIGNMENT, 1 );
-
- /* read the tile into the final image */
- gl.glReadPixels( srcX, srcY, srcWidth, srcHeight, imageFormat, imageType, imageBuffer );
- }
-
- /* restore previous glPixelStore values */
- gl.glPixelStorei( GL.GL_PACK_ROW_LENGTH, prevRowLength[ 0 ] );
- gl.glPixelStorei( GL.GL_PACK_SKIP_ROWS, prevSkipRows[ 0 ] );
- gl.glPixelStorei( GL.GL_PACK_SKIP_PIXELS, prevSkipPixels[ 0 ] );
- gl.glPixelStorei( GL.GL_PACK_ALIGNMENT, prevAlignment[ 0 ] );
-
- /* increment tile counter, return 1 if more tiles left to render */
- currentTile++;
- if( currentTile >= rows * columns ) {
- /* restore user's viewport */
- gl.glViewport( viewportSave[ 0 ], viewportSave[ 1 ], viewportSave[ 2 ], viewportSave[ 3 ] );
- currentTile = -1; /* all done */
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * Tile rendering causes problems with using glRasterPos3f, so you
- * should use this replacement instead
- *
- * @param x
- * As in glRasterPos3f
- * @param y
- * As in glRasterPos3f
- * @param z
- * As in glRasterPos3f
- * @param gl
- * The gl context
- * @param glu
- * A GLU object
- */
- public void trRasterPos3f( float x, float y, float z, GL gl, GLU glu )
- {
- if (currentTile < 0) {
- /* not doing tile rendering right now. Let OpenGL do this. */
- gl.glRasterPos3f( x, y, z );
- } else {
- double[] modelview = new double[ 16 ], proj = new double[ 16 ];
- int[] viewport = new int[ 4 ];
- double[] win = new double[3];
-
- /* Get modelview, projection and viewport */
- gl.glGetDoublev( GL.GL_MODELVIEW_MATRIX, modelview, 0 );
- gl.glGetDoublev( GL.GL_PROJECTION_MATRIX, proj, 0 );
- viewport[ 0 ] = 0;
- viewport[ 1 ] = 0;
- viewport[ 2 ] = currentTileWidth;
- viewport[ 3 ] = currentTileHeight;
-
- /* Project object coord to window coordinate */
- if( glu.gluProject( x, y, z, modelview, 0, proj, 0, viewport, 0, win, 0 ) ) {
-
- /* set raster pos to window coord (0,0) */
- gl.glMatrixMode( GL.GL_MODELVIEW );
- gl.glPushMatrix();
- gl.glLoadIdentity();
- gl.glMatrixMode( GL.GL_PROJECTION );
- gl.glPushMatrix();
- gl.glLoadIdentity();
- gl.glOrtho( 0.0, currentTileWidth, 0.0, currentTileHeight, 0.0, 1.0 );
- gl.glRasterPos3d( 0.0, 0.0, -win[ 2 ] );
-
- /*
- * Now use empty bitmap to adjust raster position to
- * (winX,winY)
- */
- {
- byte[] bitmap = { 0 };
- gl.glBitmap( 1, 1, 0.0f, 0.0f, ( float ) win[ 0 ], ( float ) win[ 1 ], bitmap , 0 );
- }
-
- /* restore original matrices */
- gl.glPopMatrix(); /* proj */
- gl.glMatrixMode( GL.GL_MODELVIEW );
- gl.glPopMatrix();
- }
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/util/j2d/Overlay.java b/src/classes/com/sun/opengl/util/j2d/Overlay.java
deleted file mode 100755
index 6b7ac4b9b..000000000
--- a/src/classes/com/sun/opengl/util/j2d/Overlay.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.j2d;
-
-import java.awt.Graphics2D;
-
-import javax.media.opengl.*;
-import com.sun.opengl.util.texture.*;
-
-/** Provides a Java 2D overlay on top of an arbitrary GLDrawable,
- making it easier to do things like draw text and images on top of
- an OpenGL scene while still maintaining reasonably good
- efficiency. */
-
-public class Overlay {
- private GLDrawable drawable;
- private TextureRenderer renderer;
- private boolean contentsLost;
-
- /** Creates a new Java 2D overlay on top of the specified
- GLDrawable. */
- public Overlay(GLDrawable drawable) {
- this.drawable = drawable;
- }
-
- /** Creates a {@link java.awt.Graphics2D Graphics2D} instance for
- rendering into the overlay. The returned object should be
- disposed of using the normal {@link java.awt.Graphics#dispose()
- Graphics.dispose()} method once it is no longer being used.
-
- @return a new {@link java.awt.Graphics2D Graphics2D} object for
- rendering into the backing store of this renderer
- */
- public Graphics2D createGraphics() {
- // Validate the size of the renderer against the current size of
- // the drawable
- validateRenderer();
- return renderer.createGraphics();
- }
-
- /** Indicates whether the Java 2D contents of the overlay were lost
- since the last time {@link #createGraphics} was called. This
- method should be called immediately after calling {@link
- #createGraphics} to see whether the entire contents of the
- overlay need to be redrawn or just the region the application is
- interested in updating.
-
- @return whether the contents of the overlay were lost since the
- last render
- */
- public boolean contentsLost() {
- return contentsLost;
- }
-
- /** Marks the given region of the overlay as dirty. This region, and
- any previously set dirty regions, will be automatically
- synchronized with the underlying Texture during the next {@link
- #draw draw} or {@link #drawAll drawAll} operation, at which
- point the dirty region will be cleared. It is not necessary for
- an OpenGL context to be current when this method is called.
-
- @param x the x coordinate (in Java 2D coordinates -- relative to
- upper left) of the region to update
- @param y the y coordinate (in Java 2D coordinates -- relative to
- upper left) of the region to update
- @param width the width of the region to update
- @param height the height of the region to update
-
- @throws GLException If an OpenGL context is not current when this method is called */
- public void markDirty(int x, int y, int width, int height) {
- renderer.markDirty(x, y, width, height);
- }
-
- /** Draws the entire contents of the overlay on top of the OpenGL
- drawable. This is a convenience method which encapsulates all
- portions of the rendering process; if this method is used,
- {@link #beginRendering}, {@link #endRendering}, etc. should not
- be used. This method should be called while the OpenGL context
- for the drawable is current, and after your OpenGL scene has
- been rendered.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void drawAll() throws GLException {
- beginRendering();
- draw(0, 0, drawable.getWidth(), drawable.getHeight());
- endRendering();
- }
-
- /** Begins the OpenGL rendering process for the overlay. This is
- separated out so advanced applications can render independent
- pieces of the overlay to different portions of the drawable.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void beginRendering() throws GLException {
- renderer.beginOrthoRendering(drawable.getWidth(), drawable.getHeight());
- }
-
- /** Ends the OpenGL rendering process for the overlay. This is
- separated out so advanced applications can render independent
- pieces of the overlay to different portions of the drawable.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void endRendering() throws GLException {
- renderer.endOrthoRendering();
- }
-
- /** Draws the specified sub-rectangle of the overlay on top of the
- OpenGL drawable. {@link #beginRendering} and {@link
- #endRendering} must be used in conjunction with this method to
- achieve proper rendering results. This method should be called
- while the OpenGL context for the drawable is current, and after
- your OpenGL scene has been rendered.
-
- @param x the lower-left x coordinate (relative to the lower left
- of the overlay) of the rectangle to draw
- @param y the lower-left y coordinate (relative to the lower left
- of the overlay) of the rectangle to draw
- @param width the width of the rectangle to draw
- @param height the height of the rectangle to draw
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void draw(int x, int y, int width, int height) throws GLException {
- draw(x, y, x, y, width, height);
- }
-
- /** Draws the specified sub-rectangle of the overlay at the
- specified x and y coordinate on top of the OpenGL drawable.
- {@link #beginRendering} and {@link #endRendering} must be used
- in conjunction with this method to achieve proper rendering
- results. This method should be called while the OpenGL context
- for the drawable is current, and after your OpenGL scene has
- been rendered.
-
- @param screenx the on-screen x coordinate at which to draw the rectangle
- @param screeny the on-screen y coordinate (relative to lower left) at
- which to draw the rectangle
- @param overlayx the x coordinate of the pixel in the overlay of
- the lower left portion of the rectangle to draw
- @param overlayy the y coordinate of the pixel in the overlay
- (relative to lower left) of the lower left portion of the
- rectangle to draw
- @param width the width of the rectangle to draw
- @param height the height of the rectangle to draw
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void draw(int screenx, int screeny,
- int overlayx, int overlayy,
- int width, int height) throws GLException {
- renderer.drawOrthoRect(screenx, screeny,
- overlayx, overlayy,
- width, height);
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void validateRenderer() {
- if (renderer == null) {
- renderer = new TextureRenderer(drawable.getWidth(),
- drawable.getHeight(),
- true);
- contentsLost = true;
- } else if (renderer.getWidth() != drawable.getWidth() ||
- renderer.getHeight() != drawable.getHeight()) {
- renderer.setSize(drawable.getWidth(), drawable.getHeight());
- contentsLost = true;
- } else {
- contentsLost = false;
- }
- }
-}
diff --git a/src/classes/com/sun/opengl/util/j2d/TextRenderer.java b/src/classes/com/sun/opengl/util/j2d/TextRenderer.java
deleted file mode 100755
index c8493affa..000000000
--- a/src/classes/com/sun/opengl/util/j2d/TextRenderer.java
+++ /dev/null
@@ -1,1931 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-package com.sun.opengl.util.j2d;
-
-import com.sun.opengl.impl.*;
-import com.sun.opengl.impl.packrect.*;
-import com.sun.opengl.util.*;
-import com.sun.opengl.util.texture.*;
-
-import java.awt.AlphaComposite;
-import java.awt.Color;
-import java.awt.Composite;
-
-// For debugging purposes
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Point;
-import java.awt.RenderingHints;
-import java.awt.event.*;
-import java.awt.font.*;
-import java.awt.geom.*;
-
-import java.nio.*;
-
-import java.text.*;
-
-import java.util.*;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-
-
-/** Renders bitmapped Java 2D text into an OpenGL window with high
- performance, full Unicode support, and a simple API. Performs
- appropriate caching of text rendering results in an OpenGL texture
- internally to avoid repeated font rasterization. The caching is
- completely automatic, does not require any user intervention, and
- has no visible controls in the public API. <P>
-
- Using the {@link TextRenderer TextRenderer} is simple. Add a
- "<code>TextRenderer renderer;</code>" field to your {@link
- javax.media.opengl.GLEventListener GLEventListener}. In your {@link
- javax.media.opengl.GLEventListener#init init} method, add:
-
- <PRE>
- renderer = new TextRenderer(new Font("SansSerif", Font.BOLD, 36));
- </PRE>
-
- <P> In the {@link javax.media.opengl.GLEventListener#display display} method of your
- {@link javax.media.opengl.GLEventListener GLEventListener}, add:
- <PRE>
- renderer.beginRendering(drawable.getWidth(), drawable.getHeight());
- // optionally set the color
- renderer.setColor(1.0f, 0.2f, 0.2f, 0.8f);
- renderer.draw("Text to draw", xPosition, yPosition);
- // ... more draw commands, color changes, etc.
- renderer.endRendering();
- </PRE>
-
- Unless you are sharing textures and display lists between OpenGL
- contexts, you do not need to call the {@link #dispose dispose}
- method of the TextRenderer; the OpenGL resources it uses
- internally will be cleaned up automatically when the OpenGL
- context is destroyed. <P>
-
- <b>Note</b> that the TextRenderer may cause the vertex and texture
- coordinate array buffer bindings to change, or to be unbound. This
- is important to note if you are using Vertex Buffer Objects (VBOs)
- in your application. <P>
-
- Internally, the renderer uses a rectangle packing algorithm to
- pack both glyphs and full Strings' rendering results (which are
- variable size) onto a larger OpenGL texture. The internal backing
- store is maintained using a {@link
- com.sun.opengl.util.j2d.TextureRenderer TextureRenderer}. A least
- recently used (LRU) algorithm is used to discard previously
- rendered strings; the specific algorithm is undefined, but is
- currently implemented by flushing unused Strings' rendering
- results every few hundred rendering cycles, where a rendering
- cycle is defined as a pair of calls to {@link #beginRendering
- beginRendering} / {@link #endRendering endRendering}.
-
- @author John Burkey
- @author Kenneth Russell
-*/
-public class TextRenderer {
- private static final boolean DEBUG = Debug.debug("TextRenderer");
-
- // These are occasionally useful for more in-depth debugging
- private static final boolean DISABLE_GLYPH_CACHE = false;
- private static final boolean DRAW_BBOXES = false;
-
- static final int kSize = 256;
-
- // Every certain number of render cycles, flush the strings which
- // haven't been used recently
- private static final int CYCLES_PER_FLUSH = 100;
-
- // The amount of vertical dead space on the backing store before we
- // force a compaction
- private static final float MAX_VERTICAL_FRAGMENTATION = 0.7f;
- static final int kQuadsPerBuffer = 100;
- static final int kCoordsPerVertVerts = 3;
- static final int kCoordsPerVertTex = 2;
- static final int kVertsPerQuad = 4;
- static final int kTotalBufferSizeVerts = kQuadsPerBuffer * kVertsPerQuad;
- static final int kTotalBufferSizeCoordsVerts = kQuadsPerBuffer * kVertsPerQuad * kCoordsPerVertVerts;
- static final int kTotalBufferSizeCoordsTex = kQuadsPerBuffer * kVertsPerQuad * kCoordsPerVertTex;
- static final int kTotalBufferSizeBytesVerts = kTotalBufferSizeCoordsVerts * 4;
- static final int kTotalBufferSizeBytesTex = kTotalBufferSizeCoordsTex * 4;
- static final int kSizeInBytes_OneVertices_VertexData = kCoordsPerVertVerts * 4;
- static final int kSizeInBytes_OneVertices_TexData = kCoordsPerVertTex * 4;
- private Font font;
- private boolean antialiased;
- private boolean useFractionalMetrics;
-
- // Whether we're attempting to use automatic mipmap generation support
- private boolean mipmap;
- private RectanglePacker packer;
- private boolean haveMaxSize;
- private RenderDelegate renderDelegate;
- private TextureRenderer cachedBackingStore;
- private Graphics2D cachedGraphics;
- private FontRenderContext cachedFontRenderContext;
- private Map /*<String,Rect>*/ stringLocations = new HashMap /*<String,Rect>*/();
- private GlyphProducer mGlyphProducer;
-
- private int numRenderCycles;
-
- // Need to keep track of whether we're in a beginRendering() /
- // endRendering() cycle so we can re-enter the exact same state if
- // we have to reallocate the backing store
- private boolean inBeginEndPair;
- private boolean isOrthoMode;
- private int beginRenderingWidth;
- private int beginRenderingHeight;
- private boolean beginRenderingDepthTestDisabled;
-
- // For resetting the color after disposal of the old backing store
- private boolean haveCachedColor;
- private float cachedR;
- private float cachedG;
- private float cachedB;
- private float cachedA;
- private Color cachedColor;
- private boolean needToResetColor;
-
- // For debugging only
- private Frame dbgFrame;
-
- // Debugging purposes only
- private boolean debugged;
- Pipelined_QuadRenderer mPipelinedQuadRenderer;
-
- //emzic: added boolean flag
- private boolean useVertexArrays = true;
-
- //emzic: added boolean flag
- private boolean isExtensionAvailable_GL_VERSION_1_5;
- private boolean checkFor_isExtensionAvailable_GL_VERSION_1_5;
-
- // Whether GL_LINEAR filtering is enabled for the backing store
- private boolean smoothing = true;
-
- /** Creates a new TextRenderer with the given font, using no
- antialiasing or fractional metrics, and the default
- RenderDelegate. Equivalent to <code>TextRenderer(font, false,
- false)</code>.
-
- @param font the font to render with
- */
- public TextRenderer(Font font) {
- this(font, false, false, null, false);
- }
-
- /** Creates a new TextRenderer with the given font, using no
- antialiasing or fractional metrics, and the default
- RenderDelegate. If <CODE>mipmap</CODE> is true, attempts to use
- OpenGL's automatic mipmap generation for better smoothing when
- rendering the TextureRenderer's contents at a distance.
- Equivalent to <code>TextRenderer(font, false, false)</code>.
-
- @param font the font to render with
- @param mipmap whether to attempt use of automatic mipmap generation
- */
- public TextRenderer(Font font, boolean mipmap) {
- this(font, false, false, null, mipmap);
- }
-
- /** Creates a new TextRenderer with the given Font, specified font
- properties, and default RenderDelegate. The
- <code>antialiased</code> and <code>useFractionalMetrics</code>
- flags provide control over the same properties at the Java 2D
- level. No mipmap support is requested. Equivalent to
- <code>TextRenderer(font, antialiased, useFractionalMetrics,
- null)</code>.
-
- @param font the font to render with
- @param antialiased whether to use antialiased fonts
- @param useFractionalMetrics whether to use fractional font
- metrics at the Java 2D level
- */
- public TextRenderer(Font font, boolean antialiased,
- boolean useFractionalMetrics) {
- this(font, antialiased, useFractionalMetrics, null, false);
- }
-
- /** Creates a new TextRenderer with the given Font, specified font
- properties, and given RenderDelegate. The
- <code>antialiased</code> and <code>useFractionalMetrics</code>
- flags provide control over the same properties at the Java 2D
- level. The <code>renderDelegate</code> provides more control
- over the text rendered. No mipmap support is requested.
-
- @param font the font to render with
- @param antialiased whether to use antialiased fonts
- @param useFractionalMetrics whether to use fractional font
- metrics at the Java 2D level
- @param renderDelegate the render delegate to use to draw the
- text's bitmap, or null to use the default one
- */
- public TextRenderer(Font font, boolean antialiased,
- boolean useFractionalMetrics, RenderDelegate renderDelegate) {
- this(font, antialiased, useFractionalMetrics, renderDelegate, false);
- }
-
- /** Creates a new TextRenderer with the given Font, specified font
- properties, and given RenderDelegate. The
- <code>antialiased</code> and <code>useFractionalMetrics</code>
- flags provide control over the same properties at the Java 2D
- level. The <code>renderDelegate</code> provides more control
- over the text rendered. If <CODE>mipmap</CODE> is true, attempts
- to use OpenGL's automatic mipmap generation for better smoothing
- when rendering the TextureRenderer's contents at a distance.
-
- @param font the font to render with
- @param antialiased whether to use antialiased fonts
- @param useFractionalMetrics whether to use fractional font
- metrics at the Java 2D level
- @param renderDelegate the render delegate to use to draw the
- text's bitmap, or null to use the default one
- @param mipmap whether to attempt use of automatic mipmap generation
- */
- public TextRenderer(Font font, boolean antialiased,
- boolean useFractionalMetrics, RenderDelegate renderDelegate,
- boolean mipmap) {
- this.font = font;
- this.antialiased = antialiased;
- this.useFractionalMetrics = useFractionalMetrics;
- this.mipmap = mipmap;
-
- // FIXME: consider adjusting the size based on font size
- // (it will already automatically resize if necessary)
- packer = new RectanglePacker(new Manager(), kSize, kSize);
-
- if (renderDelegate == null) {
- renderDelegate = new DefaultRenderDelegate();
- }
-
- this.renderDelegate = renderDelegate;
-
- mGlyphProducer = new GlyphProducer(font.getNumGlyphs());
- }
-
- /** Returns the bounding rectangle of the given String, assuming it
- was rendered at the origin. See {@link #getBounds(CharSequence)
- getBounds(CharSequence)}. */
- public Rectangle2D getBounds(String str) {
- return getBounds((CharSequence) str);
- }
-
- /** Returns the bounding rectangle of the given CharSequence,
- assuming it was rendered at the origin. The coordinate system of
- the returned rectangle is Java 2D's, with increasing Y
- coordinates in the downward direction. The relative coordinate
- (0, 0) in the returned rectangle corresponds to the baseline of
- the leftmost character of the rendered string, in similar
- fashion to the results returned by, for example, {@link
- java.awt.font.GlyphVector#getVisualBounds}. Most applications
- will use only the width and height of the returned Rectangle for
- the purposes of centering or justifying the String. It is not
- specified which Java 2D bounds ({@link
- java.awt.font.GlyphVector#getVisualBounds getVisualBounds},
- {@link java.awt.font.GlyphVector#getPixelBounds getPixelBounds},
- etc.) the returned bounds correspond to, although every effort
- is made to ensure an accurate bound. */
- public Rectangle2D getBounds(CharSequence str) {
- // FIXME: this should be more optimized and use the glyph cache
- Rect r = null;
-
- if ((r = (Rect) stringLocations.get(str)) != null) {
- TextData data = (TextData) r.getUserData();
-
- // Reconstitute the Java 2D results based on the cached values
- return new Rectangle2D.Double(-data.origin().x, -data.origin().y,
- r.w(), r.h());
- }
-
- // Must return a Rectangle compatible with the layout algorithm --
- // must be idempotent
- return normalize(renderDelegate.getBounds(str, font,
- getFontRenderContext()));
- }
-
- /** Returns the Font this renderer is using. */
- public Font getFont() {
- return font;
- }
-
- /** Returns a FontRenderContext which can be used for external
- text-related size computations. This object should be considered
- transient and may become invalidated between {@link
- #beginRendering beginRendering} / {@link #endRendering
- endRendering} pairs. */
- public FontRenderContext getFontRenderContext() {
- if (cachedFontRenderContext == null) {
- cachedFontRenderContext = getGraphics2D().getFontRenderContext();
- }
-
- return cachedFontRenderContext;
- }
-
- /** Begins rendering with this {@link TextRenderer TextRenderer}
- into the current OpenGL drawable, pushing the projection and
- modelview matrices and some state bits and setting up a
- two-dimensional orthographic projection with (0, 0) as the
- lower-left coordinate and (width, height) as the upper-right
- coordinate. Binds and enables the internal OpenGL texture
- object, sets the texture environment mode to GL_MODULATE, and
- changes the current color to the last color set with this
- TextRenderer via {@link #setColor setColor}. This method
- disables the depth test and is equivalent to
- beginRendering(width, height, true).
-
- @param width the width of the current on-screen OpenGL drawable
- @param height the height of the current on-screen OpenGL drawable
- @throws javax.media.opengl.GLException If an OpenGL context is not current when this method is called
- */
- public void beginRendering(int width, int height) throws GLException {
- beginRendering(width, height, true);
- }
-
- /** Begins rendering with this {@link TextRenderer TextRenderer}
- into the current OpenGL drawable, pushing the projection and
- modelview matrices and some state bits and setting up a
- two-dimensional orthographic projection with (0, 0) as the
- lower-left coordinate and (width, height) as the upper-right
- coordinate. Binds and enables the internal OpenGL texture
- object, sets the texture environment mode to GL_MODULATE, and
- changes the current color to the last color set with this
- TextRenderer via {@link #setColor setColor}. Disables the depth
- test if the disableDepthTest argument is true.
-
- @param width the width of the current on-screen OpenGL drawable
- @param height the height of the current on-screen OpenGL drawable
- @param disableDepthTest whether to disable the depth test
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void beginRendering(int width, int height, boolean disableDepthTest)
- throws GLException {
- beginRendering(true, width, height, disableDepthTest);
- }
-
- /** Begins rendering of 2D text in 3D with this {@link TextRenderer
- TextRenderer} into the current OpenGL drawable. Assumes the end
- user is responsible for setting up the modelview and projection
- matrices, and will render text using the {@link #draw3D draw3D}
- method. This method pushes some OpenGL state bits, binds and
- enables the internal OpenGL texture object, sets the texture
- environment mode to GL_MODULATE, and changes the current color
- to the last color set with this TextRenderer via {@link
- #setColor setColor}.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void begin3DRendering() throws GLException {
- beginRendering(false, 0, 0, false);
- }
-
- /** Changes the current color of this TextRenderer to the supplied
- one. The default color is opaque white.
-
- @param color the new color to use for rendering text
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void setColor(Color color) throws GLException {
- boolean noNeedForFlush = (haveCachedColor && (cachedColor != null) &&
- color.equals(cachedColor));
-
- if (!noNeedForFlush) {
- flushGlyphPipeline();
- }
-
- getBackingStore().setColor(color);
- haveCachedColor = true;
- cachedColor = color;
- }
-
- /** Changes the current color of this TextRenderer to the supplied
- one, where each component ranges from 0.0f - 1.0f. The alpha
- component, if used, does not need to be premultiplied into the
- color channels as described in the documentation for {@link
- com.sun.opengl.util.texture.Texture Texture}, although
- premultiplied colors are used internally. The default color is
- opaque white.
-
- @param r the red component of the new color
- @param g the green component of the new color
- @param b the blue component of the new color
- @param a the alpha component of the new color, 0.0f = completely
- transparent, 1.0f = completely opaque
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void setColor(float r, float g, float b, float a)
- throws GLException {
- boolean noNeedForFlush = (haveCachedColor && (cachedColor == null) &&
- (r == cachedR) && (g == cachedG) && (b == cachedB) &&
- (a == cachedA));
-
- if (!noNeedForFlush) {
- flushGlyphPipeline();
- }
-
- getBackingStore().setColor(r, g, b, a);
- haveCachedColor = true;
- cachedR = r;
- cachedG = g;
- cachedB = b;
- cachedA = a;
- cachedColor = null;
- }
-
- /** Draws the supplied CharSequence at the desired location using
- the renderer's current color. The baseline of the leftmost
- character is at position (x, y) specified in OpenGL coordinates,
- where the origin is at the lower-left of the drawable and the Y
- coordinate increases in the upward direction.
-
- @param str the string to draw
- @param x the x coordinate at which to draw
- @param y the y coordinate at which to draw
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void draw(CharSequence str, int x, int y) throws GLException {
- draw3D(str, x, y, 0, 1);
- }
-
- /** Draws the supplied String at the desired location using the
- renderer's current color. See {@link #draw(CharSequence, int,
- int) draw(CharSequence, int, int)}. */
- public void draw(String str, int x, int y) throws GLException {
- draw3D(str, x, y, 0, 1);
- }
-
- /** Draws the supplied CharSequence at the desired 3D location using
- the renderer's current color. The baseline of the leftmost
- character is placed at position (x, y, z) in the current
- coordinate system.
-
- @param str the string to draw
- @param x the x coordinate at which to draw
- @param y the y coordinate at which to draw
- @param z the z coordinate at which to draw
- @param scaleFactor a uniform scale factor applied to the width and height of the drawn rectangle
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void draw3D(CharSequence str, float x, float y, float z,
- float scaleFactor) {
- internal_draw3D(str, x, y, z, scaleFactor);
- }
-
- /** Draws the supplied String at the desired 3D location using the
- renderer's current color. See {@link #draw3D(CharSequence,
- float, float, float, float) draw3D(CharSequence, float, float,
- float, float)}. */
- public void draw3D(String str, float x, float y, float z, float scaleFactor) {
- internal_draw3D(str, x, y, z, scaleFactor);
- }
-
- /** Returns the pixel width of the given character. */
- public float getCharWidth(char inChar) {
- return mGlyphProducer.getGlyphPixelWidth(inChar);
- }
-
- /** Causes the TextRenderer to flush any internal caches it may be
- maintaining and draw its rendering results to the screen. This
- should be called after each call to draw() if you are setting
- OpenGL state such as the modelview matrix between calls to
- draw(). */
- public void flush() {
- flushGlyphPipeline();
- }
-
- /** Ends a render cycle with this {@link TextRenderer TextRenderer}.
- Restores the projection and modelview matrices as well as
- several OpenGL state bits. Should be paired with {@link
- #beginRendering beginRendering}.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void endRendering() throws GLException {
- endRendering(true);
- }
-
- /** Ends a 3D render cycle with this {@link TextRenderer TextRenderer}.
- Restores several OpenGL state bits. Should be paired with {@link
- #begin3DRendering begin3DRendering}.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void end3DRendering() throws GLException {
- endRendering(false);
- }
-
- /** Disposes of all resources this TextRenderer is using. It is not
- valid to use the TextRenderer after this method is called.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void dispose() throws GLException {
- packer.dispose();
- packer = null;
- cachedBackingStore = null;
- cachedGraphics = null;
- cachedFontRenderContext = null;
-
- if (dbgFrame != null) {
- dbgFrame.dispose();
- }
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private static Rectangle2D preNormalize(Rectangle2D src) {
- // Need to round to integer coordinates
- // Also give ourselves a little slop around the reported
- // bounds of glyphs because it looks like neither the visual
- // nor the pixel bounds works perfectly well
- int minX = (int) Math.floor(src.getMinX()) - 1;
- int minY = (int) Math.floor(src.getMinY()) - 1;
- int maxX = (int) Math.ceil(src.getMaxX()) + 1;
- int maxY = (int) Math.ceil(src.getMaxY()) + 1;
- return new Rectangle2D.Double(minX, minY, maxX - minX, maxY - minY);
- }
-
-
- private Rectangle2D normalize(Rectangle2D src) {
- // Give ourselves a boundary around each entity on the backing
- // store in order to prevent bleeding of nearby Strings due to
- // the fact that we use linear filtering
-
- // NOTE that this boundary is quite heuristic and is related
- // to how far away in 3D we may view the text --
- // heuristically, 1.5% of the font's height
- int boundary = (int) Math.max(1, 0.015 * font.getSize());
-
- return new Rectangle2D.Double((int) Math.floor(src.getMinX() - boundary),
- (int) Math.floor(src.getMinY() - boundary),
- (int) Math.ceil(src.getWidth() + 2 * boundary),
- (int) Math.ceil(src.getHeight()) + 2 * boundary);
- }
-
- private TextureRenderer getBackingStore() {
- TextureRenderer renderer = (TextureRenderer) packer.getBackingStore();
-
- if (renderer != cachedBackingStore) {
- // Backing store changed since last time; discard any cached Graphics2D
- if (cachedGraphics != null) {
- cachedGraphics.dispose();
- cachedGraphics = null;
- cachedFontRenderContext = null;
- }
-
- cachedBackingStore = renderer;
- }
-
- return cachedBackingStore;
- }
-
- private Graphics2D getGraphics2D() {
- TextureRenderer renderer = getBackingStore();
-
- if (cachedGraphics == null) {
- cachedGraphics = renderer.createGraphics();
-
- // Set up composite, font and rendering hints
- cachedGraphics.setComposite(AlphaComposite.Src);
- cachedGraphics.setColor(Color.WHITE);
- cachedGraphics.setFont(font);
- cachedGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
- (antialiased ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON
- : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF));
- cachedGraphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
- (useFractionalMetrics
- ? RenderingHints.VALUE_FRACTIONALMETRICS_ON
- : RenderingHints.VALUE_FRACTIONALMETRICS_OFF));
- }
-
- return cachedGraphics;
- }
-
- private void beginRendering(boolean ortho, int width, int height,
- boolean disableDepthTestForOrtho) {
- if (DEBUG && !debugged) {
- debug();
- }
-
- inBeginEndPair = true;
- isOrthoMode = ortho;
- beginRenderingWidth = width;
- beginRenderingHeight = height;
- beginRenderingDepthTestDisabled = disableDepthTestForOrtho;
-
- if (ortho) {
- getBackingStore().beginOrthoRendering(width, height,
- disableDepthTestForOrtho);
- } else {
- getBackingStore().begin3DRendering();
- }
-
- GL gl = GLU.getCurrentGL();
-
- // Push client attrib bits used by the pipelined quad renderer
- gl.glPushClientAttrib((int) GL.GL_ALL_CLIENT_ATTRIB_BITS);
-
- if (!haveMaxSize) {
- // Query OpenGL for the maximum texture size and set it in the
- // RectanglePacker to keep it from expanding too large
- int[] sz = new int[1];
- gl.glGetIntegerv(GL.GL_MAX_TEXTURE_SIZE, sz, 0);
- packer.setMaxSize(sz[0], sz[0]);
- haveMaxSize = true;
- }
-
- if (needToResetColor && haveCachedColor) {
- if (cachedColor == null) {
- getBackingStore().setColor(cachedR, cachedG, cachedB, cachedA);
- } else {
- getBackingStore().setColor(cachedColor);
- }
-
- needToResetColor = false;
- }
-
- // Disable future attempts to use mipmapping if TextureRenderer
- // doesn't support it
- if (mipmap && !getBackingStore().isUsingAutoMipmapGeneration()) {
- if (DEBUG) {
- System.err.println("Disabled mipmapping in TextRenderer");
- }
-
- mipmap = false;
- }
- }
-
- /**
- * emzic: here the call to glBindBuffer crashes on certain graphicscard/driver combinations
- * this is why the ugly try-catch block has been added, which falls back to the old textrenderer
- *
- * @param ortho
- * @throws GLException
- */
- private void endRendering(boolean ortho) throws GLException {
- flushGlyphPipeline();
-
- inBeginEndPair = false;
-
- GL gl = GLU.getCurrentGL();
-
- // Pop client attrib bits used by the pipelined quad renderer
- gl.glPopClientAttrib();
-
- // The OpenGL spec is unclear about whether this changes the
- // buffer bindings, so preemptively zero out the GL_ARRAY_BUFFER
- // binding
- if (is15Available(gl)) {
- try {
- gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
- } catch (Exception e) {
- isExtensionAvailable_GL_VERSION_1_5 = false;
- }
- }
-
- if (ortho) {
- getBackingStore().endOrthoRendering();
- } else {
- getBackingStore().end3DRendering();
- }
-
- if (++numRenderCycles >= CYCLES_PER_FLUSH) {
- numRenderCycles = 0;
-
- if (DEBUG) {
- System.err.println("Clearing unused entries in endRendering()");
- }
-
- clearUnusedEntries();
- }
- }
-
- private void clearUnusedEntries() {
- final java.util.List deadRects = new ArrayList /*<Rect>*/();
-
- // Iterate through the contents of the backing store, removing
- // text strings that haven't been used recently
- packer.visit(new RectVisitor() {
- public void visit(Rect rect) {
- TextData data = (TextData) rect.getUserData();
-
- if (data.used()) {
- data.clearUsed();
- } else {
- deadRects.add(rect);
- }
- }
- });
-
- for (Iterator iter = deadRects.iterator(); iter.hasNext();) {
- Rect r = (Rect) iter.next();
- packer.remove(r);
- stringLocations.remove(((TextData) r.getUserData()).string());
-
- int unicodeToClearFromCache = ((TextData) r.getUserData()).unicodeID;
-
- if (unicodeToClearFromCache > 0) {
- mGlyphProducer.clearCacheEntry(unicodeToClearFromCache);
- }
-
- // if (DEBUG) {
- // Graphics2D g = getGraphics2D();
- // g.setComposite(AlphaComposite.Clear);
- // g.fillRect(r.x(), r.y(), r.w(), r.h());
- // g.setComposite(AlphaComposite.Src);
- // }
- }
-
- // If we removed dead rectangles this cycle, try to do a compaction
- float frag = packer.verticalFragmentationRatio();
-
- if (!deadRects.isEmpty() && (frag > MAX_VERTICAL_FRAGMENTATION)) {
- if (DEBUG) {
- System.err.println(
- "Compacting TextRenderer backing store due to vertical fragmentation " +
- frag);
- }
-
- packer.compact();
- }
-
- if (DEBUG) {
- getBackingStore().markDirty(0, 0, getBackingStore().getWidth(),
- getBackingStore().getHeight());
- }
- }
-
- private void internal_draw3D(CharSequence str, float x, float y, float z,
- float scaleFactor) {
- List/*<Glyph>*/ glyphs = mGlyphProducer.getGlyphs(str);
- for (Iterator iter = glyphs.iterator(); iter.hasNext(); ) {
- Glyph glyph = (Glyph) iter.next();
- float advance = glyph.draw3D(x, y, z, scaleFactor);
- x += advance * scaleFactor;
- }
- }
-
- private void flushGlyphPipeline() {
- if (mPipelinedQuadRenderer != null) {
- mPipelinedQuadRenderer.draw();
- }
- }
-
- private void draw3D_ROBUST(CharSequence str, float x, float y, float z,
- float scaleFactor) {
- String curStr;
- if (str instanceof String) {
- curStr = (String) str;
- } else {
- curStr = str.toString();
- }
-
- // Look up the string on the backing store
- Rect rect = (Rect) stringLocations.get(curStr);
-
- if (rect == null) {
- // Rasterize this string and place it on the backing store
- Graphics2D g = getGraphics2D();
- Rectangle2D origBBox = preNormalize(renderDelegate.getBounds(curStr, font, getFontRenderContext()));
- Rectangle2D bbox = normalize(origBBox);
- Point origin = new Point((int) -bbox.getMinX(),
- (int) -bbox.getMinY());
- rect = new Rect(0, 0, (int) bbox.getWidth(),
- (int) bbox.getHeight(),
- new TextData(curStr, origin, origBBox, -1));
-
- packer.add(rect);
- stringLocations.put(curStr, rect);
-
- // Re-fetch the Graphics2D in case the addition of the rectangle
- // caused the old backing store to be thrown away
- g = getGraphics2D();
-
- // OK, should now have an (x, y) for this rectangle; rasterize
- // the String
- int strx = rect.x() + origin.x;
- int stry = rect.y() + origin.y;
-
- // Clear out the area we're going to draw into
- g.setComposite(AlphaComposite.Clear);
- g.fillRect(rect.x(), rect.y(), rect.w(), rect.h());
- g.setComposite(AlphaComposite.Src);
-
- // Draw the string
- renderDelegate.draw(g, curStr, strx, stry);
-
- if (DRAW_BBOXES) {
- TextData data = (TextData) rect.getUserData();
- // Draw a bounding box on the backing store
- g.drawRect(strx - data.origOriginX(),
- stry - data.origOriginY(),
- (int) data.origRect().getWidth(),
- (int) data.origRect().getHeight());
- g.drawRect(strx - data.origin().x,
- stry - data.origin().y,
- rect.w(),
- rect.h());
- }
-
- // Mark this region of the TextureRenderer as dirty
- getBackingStore().markDirty(rect.x(), rect.y(), rect.w(),
- rect.h());
- }
-
- // OK, now draw the portion of the backing store to the screen
- TextureRenderer renderer = getBackingStore();
-
- // NOTE that the rectangles managed by the packer have their
- // origin at the upper-left but the TextureRenderer's origin is
- // at its lower left!!!
- TextData data = (TextData) rect.getUserData();
- data.markUsed();
-
- Rectangle2D origRect = data.origRect();
-
- // Align the leftmost point of the baseline to the (x, y, z) coordinate requested
- renderer.draw3DRect(x - (scaleFactor * data.origOriginX()),
- y - (scaleFactor * ((float) origRect.getHeight() - data.origOriginY())), z,
- rect.x() + (data.origin().x - data.origOriginX()),
- renderer.getHeight() - rect.y() - (int) origRect.getHeight() -
- (data.origin().y - data.origOriginY()),
- (int) origRect.getWidth(), (int) origRect.getHeight(), scaleFactor);
- }
-
- //----------------------------------------------------------------------
- // Debugging functionality
- //
- private void debug() {
- dbgFrame = new Frame("TextRenderer Debug Output");
-
- GLCanvas dbgCanvas = new GLCanvas(new GLCapabilities(), null,
- GLContext.getCurrent(), null);
- dbgCanvas.addGLEventListener(new DebugListener(dbgFrame));
- dbgFrame.add(dbgCanvas);
-
- final FPSAnimator anim = new FPSAnimator(dbgCanvas, 10);
- dbgFrame.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- // Run this on another thread than the AWT event queue to
- // make sure the call to Animator.stop() completes before
- // exiting
- new Thread(new Runnable() {
- public void run() {
- anim.stop();
- }
- }).start();
- }
- });
- dbgFrame.setSize(kSize, kSize);
- dbgFrame.setVisible(true);
- anim.start();
- debugged = true;
- }
-
- /** Class supporting more full control over the process of rendering
- the bitmapped text. Allows customization of whether the backing
- store text bitmap is full-color or intensity only, the size of
- each individual rendered text rectangle, and the contents of
- each individual rendered text string. The default implementation
- of this interface uses an intensity-only texture, a
- closely-cropped rectangle around the text, and renders text
- using the color white, which is modulated by the set color
- during the rendering process. */
- public static interface RenderDelegate {
- /** Indicates whether the backing store of this TextRenderer
- should be intensity-only (the default) or full-color. */
- public boolean intensityOnly();
-
- /** Computes the bounds of the given String relative to the
- origin. */
- public Rectangle2D getBounds(String str, Font font,
- FontRenderContext frc);
-
- /** Computes the bounds of the given character sequence relative
- to the origin. */
- public Rectangle2D getBounds(CharSequence str, Font font,
- FontRenderContext frc);
-
- /** Computes the bounds of the given GlyphVector, already
- assumed to have been created for a particular Font,
- relative to the origin. */
- public Rectangle2D getBounds(GlyphVector gv, FontRenderContext frc);
-
- /** Render the passed character sequence at the designated
- location using the supplied Graphics2D instance. The
- surrounding region will already have been cleared to the RGB
- color (0, 0, 0) with zero alpha. The initial drawing context
- of the passed Graphics2D will be set to use
- AlphaComposite.Src, the color white, the Font specified in the
- TextRenderer's constructor, and the rendering hints specified
- in the TextRenderer constructor. Changes made by the end user
- may be visible in successive calls to this method, but are not
- guaranteed to be preserved. Implementors of this method
- should reset the Graphics2D's state to that desired each time
- this method is called, in particular those states which are
- not the defaults. */
- public void draw(Graphics2D graphics, String str, int x, int y);
-
- /** Render the passed GlyphVector at the designated location using
- the supplied Graphics2D instance. The surrounding region will
- already have been cleared to the RGB color (0, 0, 0) with zero
- alpha. The initial drawing context of the passed Graphics2D
- will be set to use AlphaComposite.Src, the color white, the
- Font specified in the TextRenderer's constructor, and the
- rendering hints specified in the TextRenderer constructor.
- Changes made by the end user may be visible in successive
- calls to this method, but are not guaranteed to be preserved.
- Implementors of this method should reset the Graphics2D's
- state to that desired each time this method is called, in
- particular those states which are not the defaults. */
- public void drawGlyphVector(Graphics2D graphics, GlyphVector str,
- int x, int y);
- }
-
- private static class CharSequenceIterator implements CharacterIterator {
- CharSequence mSequence;
- int mLength;
- int mCurrentIndex;
-
- CharSequenceIterator() {
- }
-
- CharSequenceIterator(CharSequence sequence) {
- initFromCharSequence(sequence);
- }
-
- public void initFromCharSequence(CharSequence sequence) {
- mSequence = sequence;
- mLength = mSequence.length();
- mCurrentIndex = 0;
- }
-
- public char last() {
- mCurrentIndex = Math.max(0, mLength - 1);
-
- return current();
- }
-
- public char current() {
- if ((mLength == 0) || (mCurrentIndex >= mLength)) {
- return CharacterIterator.DONE;
- }
-
- return mSequence.charAt(mCurrentIndex);
- }
-
- public char next() {
- mCurrentIndex++;
-
- return current();
- }
-
- public char previous() {
- mCurrentIndex = Math.max(mCurrentIndex - 1, 0);
-
- return current();
- }
-
- public char setIndex(int position) {
- mCurrentIndex = position;
-
- return current();
- }
-
- public int getBeginIndex() {
- return 0;
- }
-
- public int getEndIndex() {
- return mLength;
- }
-
- public int getIndex() {
- return mCurrentIndex;
- }
-
- public Object clone() {
- CharSequenceIterator iter = new CharSequenceIterator(mSequence);
- iter.mCurrentIndex = mCurrentIndex;
-
- return iter;
- }
-
- public char first() {
- if (mLength == 0) {
- return CharacterIterator.DONE;
- }
-
- mCurrentIndex = 0;
-
- return current();
- }
- }
-
- // Data associated with each rectangle of text
- static class TextData {
- // Back-pointer to String this TextData describes, if it
- // represents a String rather than a single glyph
- private String str;
-
- // If this TextData represents a single glyph, this is its
- // unicode ID
- int unicodeID;
-
- // The following must be defined and used VERY precisely. This is
- // the offset from the upper-left corner of this rectangle (Java
- // 2D coordinate system) at which the string must be rasterized in
- // order to fit within the rectangle -- the leftmost point of the
- // baseline.
- private Point origin;
-
- // This represents the pre-normalized rectangle, which fits
- // within the rectangle on the backing store. We keep a
- // one-pixel border around entries on the backing store to
- // prevent bleeding of adjacent letters when using GL_LINEAR
- // filtering for rendering. The origin of this rectangle is
- // equivalent to the origin above.
- private Rectangle2D origRect;
-
- private boolean used; // Whether this text was used recently
-
- TextData(String str, Point origin, Rectangle2D origRect, int unicodeID) {
- this.str = str;
- this.origin = origin;
- this.origRect = origRect;
- this.unicodeID = unicodeID;
- }
-
- String string() {
- return str;
- }
-
- Point origin() {
- return origin;
- }
-
- // The following three methods are used to locate the glyph
- // within the expanded rectangle coming from normalize()
- int origOriginX() {
- return (int) -origRect.getMinX();
- }
-
- int origOriginY() {
- return (int) -origRect.getMinY();
- }
-
- Rectangle2D origRect() {
- return origRect;
- }
-
- boolean used() {
- return used;
- }
-
- void markUsed() {
- used = true;
- }
-
- void clearUsed() {
- used = false;
- }
- }
-
- class Manager implements BackingStoreManager {
- private Graphics2D g;
-
- public Object allocateBackingStore(int w, int h) {
- // FIXME: should consider checking Font's attributes to see
- // whether we're likely to need to support a full RGBA backing
- // store (i.e., non-default Paint, foreground color, etc.), but
- // for now, let's just be more efficient
- TextureRenderer renderer;
-
- if (renderDelegate.intensityOnly()) {
- renderer = TextureRenderer.createAlphaOnlyRenderer(w, h, mipmap);
- } else {
- renderer = new TextureRenderer(w, h, true, mipmap);
- }
- renderer.setSmoothing(smoothing);
-
- if (DEBUG) {
- System.err.println(" TextRenderer allocating backing store " +
- w + " x " + h);
- }
-
- return renderer;
- }
-
- public void deleteBackingStore(Object backingStore) {
- ((TextureRenderer) backingStore).dispose();
- }
-
- public boolean preExpand(Rect cause, int attemptNumber) {
- // Only try this one time; clear out potentially obsolete entries
- // NOTE: this heuristic and the fact that it clears the used bit
- // of all entries seems to cause cycling of entries in some
- // situations, where the backing store becomes small compared to
- // the amount of text on the screen (see the TextFlow demo) and
- // the entries continually cycle in and out of the backing
- // store, decreasing performance. If we added a little age
- // information to the entries, and only cleared out entries
- // above a certain age, this behavior would be eliminated.
- // However, it seems the system usually stabilizes itself, so
- // for now we'll just keep things simple. Note that if we don't
- // clear the used bit here, the backing store tends to increase
- // very quickly to its maximum size, at least with the TextFlow
- // demo when the text is being continually re-laid out.
- if (attemptNumber == 0) {
- if (DEBUG) {
- System.err.println(
- "Clearing unused entries in preExpand(): attempt number " +
- attemptNumber);
- }
-
- if (inBeginEndPair) {
- // Draw any outstanding glyphs
- flush();
- }
-
- clearUnusedEntries();
-
- return true;
- }
-
- return false;
- }
-
- public void additionFailed(Rect cause, int attemptNumber) {
- // Heavy hammer -- might consider doing something different
- packer.clear();
- stringLocations.clear();
- mGlyphProducer.clearAllCacheEntries();
-
- if (DEBUG) {
- System.err.println(
- " *** Cleared all text because addition failed ***");
- }
- }
-
- public void beginMovement(Object oldBackingStore, Object newBackingStore) {
- // Exit the begin / end pair if necessary
- if (inBeginEndPair) {
- // Draw any outstanding glyphs
- flush();
-
- GL gl = GLU.getCurrentGL();
-
- // Pop client attrib bits used by the pipelined quad renderer
- gl.glPopClientAttrib();
-
- // The OpenGL spec is unclear about whether this changes the
- // buffer bindings, so preemptively zero out the GL_ARRAY_BUFFER
- // binding
- if (is15Available(gl)) {
- try {
- gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
- } catch (Exception e) {
- isExtensionAvailable_GL_VERSION_1_5 = false;
- }
- }
-
- if (isOrthoMode) {
- ((TextureRenderer) oldBackingStore).endOrthoRendering();
- } else {
- ((TextureRenderer) oldBackingStore).end3DRendering();
- }
- }
-
- TextureRenderer newRenderer = (TextureRenderer) newBackingStore;
- g = newRenderer.createGraphics();
- }
-
- public void move(Object oldBackingStore, Rect oldLocation,
- Object newBackingStore, Rect newLocation) {
- TextureRenderer oldRenderer = (TextureRenderer) oldBackingStore;
- TextureRenderer newRenderer = (TextureRenderer) newBackingStore;
-
- if (oldRenderer == newRenderer) {
- // Movement on the same backing store -- easy case
- g.copyArea(oldLocation.x(), oldLocation.y(), oldLocation.w(),
- oldLocation.h(), newLocation.x() - oldLocation.x(),
- newLocation.y() - oldLocation.y());
- } else {
- // Need to draw from the old renderer's image into the new one
- Image img = oldRenderer.getImage();
- g.drawImage(img, newLocation.x(), newLocation.y(),
- newLocation.x() + newLocation.w(),
- newLocation.y() + newLocation.h(), oldLocation.x(),
- oldLocation.y(), oldLocation.x() + oldLocation.w(),
- oldLocation.y() + oldLocation.h(), null);
- }
- }
-
- public void endMovement(Object oldBackingStore, Object newBackingStore) {
- g.dispose();
-
- // Sync the whole surface
- TextureRenderer newRenderer = (TextureRenderer) newBackingStore;
- newRenderer.markDirty(0, 0, newRenderer.getWidth(),
- newRenderer.getHeight());
-
- // Re-enter the begin / end pair if necessary
- if (inBeginEndPair) {
- if (isOrthoMode) {
- ((TextureRenderer) newBackingStore).beginOrthoRendering(beginRenderingWidth,
- beginRenderingHeight, beginRenderingDepthTestDisabled);
- } else {
- ((TextureRenderer) newBackingStore).begin3DRendering();
- }
-
- // Push client attrib bits used by the pipelined quad renderer
- GL gl = GLU.getCurrentGL();
- gl.glPushClientAttrib((int) GL.GL_ALL_CLIENT_ATTRIB_BITS);
-
- if (haveCachedColor) {
- if (cachedColor == null) {
- ((TextureRenderer) newBackingStore).setColor(cachedR,
- cachedG, cachedB, cachedA);
- } else {
- ((TextureRenderer) newBackingStore).setColor(cachedColor);
- }
- }
- } else {
- needToResetColor = true;
- }
- }
- }
-
- public static class DefaultRenderDelegate implements RenderDelegate {
- public boolean intensityOnly() {
- return true;
- }
-
- public Rectangle2D getBounds(CharSequence str, Font font,
- FontRenderContext frc) {
- return getBounds(font.createGlyphVector(frc,
- new CharSequenceIterator(str)),
- frc);
- }
-
- public Rectangle2D getBounds(String str, Font font,
- FontRenderContext frc) {
- return getBounds(font.createGlyphVector(frc, str), frc);
- }
-
- public Rectangle2D getBounds(GlyphVector gv, FontRenderContext frc) {
- return gv.getVisualBounds();
- }
-
- public void drawGlyphVector(Graphics2D graphics, GlyphVector str,
- int x, int y) {
- graphics.drawGlyphVector(str, x, y);
- }
-
- public void draw(Graphics2D graphics, String str, int x, int y) {
- graphics.drawString(str, x, y);
- }
- }
-
- //----------------------------------------------------------------------
- // Glyph-by-glyph rendering support
- //
-
- // A temporary to prevent excessive garbage creation
- private char[] singleUnicode = new char[1];
-
- /** A Glyph represents either a single unicode glyph or a
- substring of characters to be drawn. The reason for the dual
- behavior is so that we can take in a sequence of unicode
- characters and partition them into runs of individual glyphs,
- but if we encounter complex text and/or unicode sequences we
- don't understand, we can render them using the
- string-by-string method. <P>
-
- Glyphs need to be able to re-upload themselves to the backing
- store on demand as we go along in the render sequence.
- */
-
- class Glyph {
- // If this Glyph represents an individual unicode glyph, this
- // is its unicode ID. If it represents a String, this is -1.
- private int unicodeID;
- // If the above field isn't -1, then these fields are used.
- // The glyph code in the font
- private int glyphCode;
- // The GlyphProducer which created us
- private GlyphProducer producer;
- // The advance of this glyph
- private float advance;
- // The GlyphVector for this single character; this is passed
- // in during construction but cleared during the upload
- // process
- private GlyphVector singleUnicodeGlyphVector;
- // The rectangle of this glyph on the backing store, or null
- // if it has been cleared due to space pressure
- private Rect glyphRectForTextureMapping;
- // If this Glyph represents a String, this is the sequence of
- // characters
- private String str;
- // Whether we need a valid advance when rendering this string
- // (i.e., whether it has other single glyphs coming after it)
- private boolean needAdvance;
-
- // Creates a Glyph representing an individual Unicode character
- public Glyph(int unicodeID,
- int glyphCode,
- float advance,
- GlyphVector singleUnicodeGlyphVector,
- GlyphProducer producer) {
- this.unicodeID = unicodeID;
- this.glyphCode = glyphCode;
- this.advance = advance;
- this.singleUnicodeGlyphVector = singleUnicodeGlyphVector;
- this.producer = producer;
- }
-
- // Creates a Glyph representing a sequence of characters, with
- // an indication of whether additional single glyphs are being
- // rendered after it
- public Glyph(String str, boolean needAdvance) {
- this.str = str;
- this.needAdvance = needAdvance;
- }
-
- /** Returns this glyph's unicode ID */
- public int getUnicodeID() {
- return unicodeID;
- }
-
- /** Returns this glyph's (font-specific) glyph code */
- public int getGlyphCode() {
- return glyphCode;
- }
-
- /** Returns the advance for this glyph */
- public float getAdvance() {
- return advance;
- }
-
- /** Draws this glyph and returns the (x) advance for this glyph */
- public float draw3D(float inX, float inY, float z, float scaleFactor) {
- if (str != null) {
- draw3D_ROBUST(str, inX, inY, z, scaleFactor);
- if (!needAdvance) {
- return 0;
- }
- // Compute and return the advance for this string
- GlyphVector gv = font.createGlyphVector(getFontRenderContext(), str);
- float totalAdvance = 0;
- for (int i = 0; i < gv.getNumGlyphs(); i++) {
- totalAdvance += gv.getGlyphMetrics(i).getAdvance();
- }
- return totalAdvance;
- }
-
- // This is the code path taken for individual glyphs
- if (glyphRectForTextureMapping == null) {
- upload();
- }
-
- try {
- if (mPipelinedQuadRenderer == null) {
- mPipelinedQuadRenderer = new Pipelined_QuadRenderer();
- }
-
- TextureRenderer renderer = getBackingStore();
- // Handles case where NPOT texture is used for backing store
- TextureCoords wholeImageTexCoords = renderer.getTexture().getImageTexCoords();
- float xScale = wholeImageTexCoords.right();
- float yScale = wholeImageTexCoords.bottom();
-
- Rect rect = glyphRectForTextureMapping;
- TextData data = (TextData) rect.getUserData();
- data.markUsed();
-
- Rectangle2D origRect = data.origRect();
-
- float x = inX - (scaleFactor * data.origOriginX());
- float y = inY - (scaleFactor * ((float) origRect.getHeight() - data.origOriginY()));
-
- int texturex = rect.x() + (data.origin().x - data.origOriginX());
- int texturey = renderer.getHeight() - rect.y() - (int) origRect.getHeight() -
- (data.origin().y - data.origOriginY());
- int width = (int) origRect.getWidth();
- int height = (int) origRect.getHeight();
-
- float tx1 = xScale * (float) texturex / (float) renderer.getWidth();
- float ty1 = yScale * (1.0f -
- ((float) texturey / (float) renderer.getHeight()));
- float tx2 = xScale * (float) (texturex + width) / (float) renderer.getWidth();
- float ty2 = yScale * (1.0f -
- ((float) (texturey + height) / (float) renderer.getHeight()));
-
- mPipelinedQuadRenderer.glTexCoord2f(tx1, ty1);
- mPipelinedQuadRenderer.glVertex3f(x, y, z);
- mPipelinedQuadRenderer.glTexCoord2f(tx2, ty1);
- mPipelinedQuadRenderer.glVertex3f(x + (width * scaleFactor), y,
- z);
- mPipelinedQuadRenderer.glTexCoord2f(tx2, ty2);
- mPipelinedQuadRenderer.glVertex3f(x + (width * scaleFactor),
- y + (height * scaleFactor), z);
- mPipelinedQuadRenderer.glTexCoord2f(tx1, ty2);
- mPipelinedQuadRenderer.glVertex3f(x,
- y + (height * scaleFactor), z);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return advance;
- }
-
- /** Notifies this glyph that it's been cleared out of the cache */
- public void clear() {
- glyphRectForTextureMapping = null;
- }
-
- private void upload() {
- GlyphVector gv = getGlyphVector();
- Rectangle2D origBBox = preNormalize(renderDelegate.getBounds(gv, getFontRenderContext()));
- Rectangle2D bbox = normalize(origBBox);
- Point origin = new Point((int) -bbox.getMinX(),
- (int) -bbox.getMinY());
- Rect rect = new Rect(0, 0, (int) bbox.getWidth(),
- (int) bbox.getHeight(),
- new TextData(null, origin, origBBox, unicodeID));
- packer.add(rect);
- glyphRectForTextureMapping = rect;
- Graphics2D g = getGraphics2D();
- // OK, should now have an (x, y) for this rectangle; rasterize
- // the glyph
- int strx = rect.x() + origin.x;
- int stry = rect.y() + origin.y;
-
- // Clear out the area we're going to draw into
- g.setComposite(AlphaComposite.Clear);
- g.fillRect(rect.x(), rect.y(), rect.w(), rect.h());
- g.setComposite(AlphaComposite.Src);
-
- // Draw the string
- renderDelegate.drawGlyphVector(g, gv, strx, stry);
-
- if (DRAW_BBOXES) {
- TextData data = (TextData) rect.getUserData();
- // Draw a bounding box on the backing store
- g.drawRect(strx - data.origOriginX(),
- stry - data.origOriginY(),
- (int) data.origRect().getWidth(),
- (int) data.origRect().getHeight());
- g.drawRect(strx - data.origin().x,
- stry - data.origin().y,
- rect.w(),
- rect.h());
- }
-
- // Mark this region of the TextureRenderer as dirty
- getBackingStore().markDirty(rect.x(), rect.y(), rect.w(),
- rect.h());
- // Re-register ourselves with our producer
- producer.register(this);
- }
-
- private GlyphVector getGlyphVector() {
- GlyphVector gv = singleUnicodeGlyphVector;
- if (gv != null) {
- singleUnicodeGlyphVector = null; // Don't need this anymore
- return gv;
- }
- singleUnicode[0] = (char) unicodeID;
- return font.createGlyphVector(getFontRenderContext(), singleUnicode);
- }
- }
-
- class GlyphProducer {
- final int undefined = -2;
- FontRenderContext fontRenderContext;
- List/*<Glyph>*/ glyphsOutput = new ArrayList/*<Glyph>*/();
- // The mapping from unicode character to font-specific glyph ID
- int[] unicodes2Glyphs;
- // The mapping from glyph ID to Glyph
- Glyph[] glyphCache;
- // We re-use this for each incoming string
- CharSequenceIterator iter = new CharSequenceIterator();
-
- GlyphProducer(int fontLengthInGlyphs) {
- unicodes2Glyphs = new int[512];
- glyphCache = new Glyph[fontLengthInGlyphs];
- clearAllCacheEntries();
- }
-
- public List/*<Glyph>*/ getGlyphs(CharSequence inString) {
- glyphsOutput.clear();
- iter.initFromCharSequence(inString);
- GlyphVector fullRunGlyphVector = font.createGlyphVector(getFontRenderContext(),
- iter);
- boolean complex = (fullRunGlyphVector.getLayoutFlags() != 0);
- if (complex || DISABLE_GLYPH_CACHE) {
- // Punt to the robust version of the renderer
- glyphsOutput.add(new Glyph(inString.toString(), false));
- return glyphsOutput;
- }
-
- int lengthInGlyphs = fullRunGlyphVector.getNumGlyphs();
- int i = 0;
- while (i < lengthInGlyphs) {
- Glyph glyph = getGlyph(inString, fullRunGlyphVector, i);
- if (glyph != null) {
- glyphsOutput.add(glyph);
- i++;
- } else {
- // Assemble a run of characters that don't fit in
- // the cache
- StringBuffer buf = new StringBuffer();
- while (i < lengthInGlyphs &&
- getGlyph(inString, fullRunGlyphVector, i) == null) {
- buf.append(inString.charAt(i++));
- }
- glyphsOutput.add(new Glyph(buf.toString(),
- // Any more glyphs after this run?
- i < lengthInGlyphs));
- }
- }
- return glyphsOutput;
- }
-
- public void clearCacheEntry(int unicodeID) {
- int glyphID = unicodes2Glyphs[unicodeID];
- if (glyphID != undefined) {
- Glyph glyph = glyphCache[glyphID];
- if (glyph != null) {
- glyph.clear();
- }
- glyphCache[glyphID] = null;
- }
- unicodes2Glyphs[unicodeID] = undefined;
- }
-
- public void clearAllCacheEntries() {
- for (int i = 0; i < unicodes2Glyphs.length; i++) {
- clearCacheEntry(i);
- }
- }
-
- public void register(Glyph glyph) {
- unicodes2Glyphs[glyph.getUnicodeID()] = glyph.getGlyphCode();
- glyphCache[glyph.getGlyphCode()] = glyph;
- }
-
- public float getGlyphPixelWidth(char unicodeID) {
- Glyph glyph = getGlyph(unicodeID);
- if (glyph != null) {
- return glyph.getAdvance();
- }
-
- // Have to do this the hard / uncached way
- singleUnicode[0] = unicodeID;
- GlyphVector gv = font.createGlyphVector(fontRenderContext,
- singleUnicode);
- return gv.getGlyphMetrics(0).getAdvance();
- }
-
- // Returns a glyph object for this single glyph. Returns null
- // if the unicode or glyph ID would be out of bounds of the
- // glyph cache.
- private Glyph getGlyph(CharSequence inString,
- GlyphVector fullRunGlyphVector,
- int index) {
- char unicodeID = inString.charAt(index);
-
- if (unicodeID >= unicodes2Glyphs.length) {
- return null;
- }
-
- int glyphID = unicodes2Glyphs[unicodeID];
- if (glyphID != undefined) {
- return glyphCache[glyphID];
- }
-
- // Must fabricate the glyph
- singleUnicode[0] = unicodeID;
- GlyphVector gv = font.createGlyphVector(getFontRenderContext(), singleUnicode);
- return getGlyph(unicodeID, gv, fullRunGlyphVector.getGlyphMetrics(index));
- }
-
- // It's unclear whether this variant might produce less
- // optimal results than if we can see the entire GlyphVector
- // for the incoming string
- private Glyph getGlyph(int unicodeID) {
- if (unicodeID >= unicodes2Glyphs.length) {
- return null;
- }
-
- int glyphID = unicodes2Glyphs[unicodeID];
- if (glyphID != undefined) {
- return glyphCache[glyphID];
- }
- singleUnicode[0] = (char) unicodeID;
- GlyphVector gv = font.createGlyphVector(getFontRenderContext(), singleUnicode);
- return getGlyph(unicodeID, gv, gv.getGlyphMetrics(0));
- }
-
- private Glyph getGlyph(int unicodeID,
- GlyphVector singleUnicodeGlyphVector,
- GlyphMetrics metrics) {
- int glyphCode = singleUnicodeGlyphVector.getGlyphCode(0);
- // Have seen huge glyph codes (65536) coming out of some fonts in some Unicode situations
- if (glyphCode >= glyphCache.length) {
- return null;
- }
- Glyph glyph = new Glyph(unicodeID,
- glyphCode,
- metrics.getAdvance(),
- singleUnicodeGlyphVector,
- this);
- register(glyph);
- return glyph;
- }
- }
-
- class Pipelined_QuadRenderer {
- int mOutstandingGlyphsVerticesPipeline = 0;
- FloatBuffer mTexCoords;
- FloatBuffer mVertCoords;
- boolean usingVBOs;
- int mVBO_For_ResuableTileVertices;
- int mVBO_For_ResuableTileTexCoords;
-
- Pipelined_QuadRenderer() {
- GL gl = GLU.getCurrentGL();
- mVertCoords = BufferUtil.newFloatBuffer(kTotalBufferSizeCoordsVerts);
- mTexCoords = BufferUtil.newFloatBuffer(kTotalBufferSizeCoordsTex);
-
- usingVBOs = is15Available(gl);
-
- if (usingVBOs) {
- try {
- int[] vbos = new int[2];
- gl.glGenBuffers(2, IntBuffer.wrap(vbos));
-
- mVBO_For_ResuableTileVertices = vbos[0];
- mVBO_For_ResuableTileTexCoords = vbos[1];
-
- gl.glBindBuffer(GL.GL_ARRAY_BUFFER,
- mVBO_For_ResuableTileVertices);
- gl.glBufferData(GL.GL_ARRAY_BUFFER, kTotalBufferSizeBytesVerts,
- null, GL.GL_STREAM_DRAW); // stream draw because this is a single quad use pipeline
-
- gl.glBindBuffer(GL.GL_ARRAY_BUFFER,
- mVBO_For_ResuableTileTexCoords);
- gl.glBufferData(GL.GL_ARRAY_BUFFER, kTotalBufferSizeBytesTex,
- null, GL.GL_STREAM_DRAW); // stream draw because this is a single quad use pipeline
- } catch (Exception e) {
- isExtensionAvailable_GL_VERSION_1_5 = false;
- usingVBOs = false;
- }
- }
- }
-
- public void glTexCoord2f(float v, float v1) {
- mTexCoords.put(v);
- mTexCoords.put(v1);
- }
-
- public void glVertex3f(float inX, float inY, float inZ) {
- mVertCoords.put(inX);
- mVertCoords.put(inY);
- mVertCoords.put(inZ);
-
- mOutstandingGlyphsVerticesPipeline++;
-
- if (mOutstandingGlyphsVerticesPipeline >= kTotalBufferSizeVerts) {
- this.draw();
- }
- }
-
- private void draw() {
- if (useVertexArrays) {
- drawVertexArrays();
- } else {
- drawIMMEDIATE();
- }
- }
-
- private void drawVertexArrays() {
- if (mOutstandingGlyphsVerticesPipeline > 0) {
- GL gl = GLU.getCurrentGL();
-
- TextureRenderer renderer = getBackingStore();
- Texture texture = renderer.getTexture(); // triggers texture uploads. Maybe this should be more obvious?
-
- mVertCoords.rewind();
- mTexCoords.rewind();
-
- gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
-
- if (usingVBOs) {
- gl.glBindBuffer(GL.GL_ARRAY_BUFFER,
- mVBO_For_ResuableTileVertices);
- gl.glBufferSubData(GL.GL_ARRAY_BUFFER, 0,
- mOutstandingGlyphsVerticesPipeline * kSizeInBytes_OneVertices_VertexData,
- mVertCoords); // upload only the new stuff
- gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
- } else {
- gl.glVertexPointer(3, GL.GL_FLOAT, 0, mVertCoords);
- }
-
- gl.glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY);
-
- if (usingVBOs) {
- gl.glBindBuffer(GL.GL_ARRAY_BUFFER,
- mVBO_For_ResuableTileTexCoords);
- gl.glBufferSubData(GL.GL_ARRAY_BUFFER, 0,
- mOutstandingGlyphsVerticesPipeline * kSizeInBytes_OneVertices_TexData,
- mTexCoords); // upload only the new stuff
- gl.glTexCoordPointer(2, GL.GL_FLOAT, 0, 0);
- } else {
- gl.glTexCoordPointer(2, GL.GL_FLOAT, 0, mTexCoords);
- }
-
- gl.glDrawArrays(GL.GL_QUADS, 0,
- mOutstandingGlyphsVerticesPipeline);
-
- mVertCoords.rewind();
- mTexCoords.rewind();
- mOutstandingGlyphsVerticesPipeline = 0;
- }
- }
-
- private void drawIMMEDIATE() {
- if (mOutstandingGlyphsVerticesPipeline > 0) {
- TextureRenderer renderer = getBackingStore();
- Texture texture = renderer.getTexture(); // triggers texture uploads. Maybe this should be more obvious?
-
- GL gl = GLU.getCurrentGL();
- gl.glBegin(GL.GL_QUADS);
-
- try {
- int numberOfQuads = mOutstandingGlyphsVerticesPipeline / 4;
- mVertCoords.rewind();
- mTexCoords.rewind();
-
- for (int i = 0; i < numberOfQuads; i++) {
- gl.glTexCoord2f(mTexCoords.get(), mTexCoords.get());
- gl.glVertex3f(mVertCoords.get(), mVertCoords.get(),
- mVertCoords.get());
-
- gl.glTexCoord2f(mTexCoords.get(), mTexCoords.get());
- gl.glVertex3f(mVertCoords.get(), mVertCoords.get(),
- mVertCoords.get());
-
- gl.glTexCoord2f(mTexCoords.get(), mTexCoords.get());
- gl.glVertex3f(mVertCoords.get(), mVertCoords.get(),
- mVertCoords.get());
-
- gl.glTexCoord2f(mTexCoords.get(), mTexCoords.get());
- gl.glVertex3f(mVertCoords.get(), mVertCoords.get(),
- mVertCoords.get());
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- gl.glEnd();
- mVertCoords.rewind();
- mTexCoords.rewind();
- mOutstandingGlyphsVerticesPipeline = 0;
- }
- }
- }
- }
-
- class DebugListener implements GLEventListener {
- private GLU glu = new GLU();
- private Frame frame;
-
- DebugListener(Frame frame) {
- this.frame = frame;
- }
-
- public void display(GLAutoDrawable drawable) {
- GL gl = drawable.getGL();
- gl.glClear(GL.GL_DEPTH_BUFFER_BIT | GL.GL_COLOR_BUFFER_BIT);
-
- if (packer == null) {
- return;
- }
-
- TextureRenderer rend = getBackingStore();
- final int w = rend.getWidth();
- final int h = rend.getHeight();
- rend.beginOrthoRendering(w, h);
- rend.drawOrthoRect(0, 0);
- rend.endOrthoRendering();
-
- if ((frame.getWidth() != w) || (frame.getHeight() != h)) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- frame.setSize(w, h);
- }
- });
- }
- }
-
- // Unused methods
- public void init(GLAutoDrawable drawable) {
- }
-
- public void reshape(GLAutoDrawable drawable, int x, int y, int width,
- int height) {
- }
-
- public void displayChanged(GLAutoDrawable drawable,
- boolean modeChanged, boolean deviceChanged) {
- }
- }
-
- /**
- * Sets whether vertex arrays are being used internally for
- * rendering, or whether text is rendered using the OpenGL
- * immediate mode commands. This is provided as a concession for
- * certain graphics cards which have poor vertex array
- * performance. Defaults to true.
- */
- public void setUseVertexArrays(boolean useVertexArrays) {
- this.useVertexArrays = useVertexArrays;
- }
-
- /**
- * Indicates whether vertex arrays are being used internally for
- * rendering, or whether text is rendered using the OpenGL
- * immediate mode commands. Defaults to true.
- */
- public boolean getUseVertexArrays() {
- return useVertexArrays;
- }
-
- /**
- * Sets whether smoothing (i.e., GL_LINEAR filtering) is enabled
- * in the backing TextureRenderer of this TextRenderer. A few
- * graphics cards do not behave well when this is enabled,
- * resulting in fuzzy text. Defaults to true.
- */
- public void setSmoothing(boolean smoothing) {
- this.smoothing = smoothing;
- getBackingStore().setSmoothing(smoothing);
- }
-
- /**
- * Indicates whether smoothing is enabled in the backing
- * TextureRenderer of this TextRenderer. A few graphics cards do
- * not behave well when this is enabled, resulting in fuzzy text.
- * Defaults to true.
- */
- public boolean getSmoothing() {
- return smoothing;
- }
-
- private boolean is15Available(GL gl) {
- if (!checkFor_isExtensionAvailable_GL_VERSION_1_5) {
- isExtensionAvailable_GL_VERSION_1_5 = gl.isExtensionAvailable("GL_VERSION_1_5");
- checkFor_isExtensionAvailable_GL_VERSION_1_5 = true;
- }
- return isExtensionAvailable_GL_VERSION_1_5;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/j2d/TextureRenderer.java b/src/classes/com/sun/opengl/util/j2d/TextureRenderer.java
deleted file mode 100755
index 4ca3d03e0..000000000
--- a/src/classes/com/sun/opengl/util/j2d/TextureRenderer.java
+++ /dev/null
@@ -1,695 +0,0 @@
-/*
- * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.j2d;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Rectangle;
-import java.awt.image.*;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-import com.sun.opengl.util.texture.*;
-
-/** Provides the ability to render into an OpenGL {@link
- com.sun.opengl.util.texture.Texture Texture} using the Java 2D
- APIs. This renderer class uses an internal Java 2D image (of
- unspecified type) for its backing store and flushes portions of
- that image to an OpenGL texture on demand. The resulting OpenGL
- texture can then be mapped on to a polygon for display. */
-
-public class TextureRenderer {
- // For now, we supply only a BufferedImage back-end for this
- // renderer. In theory we could use the Java 2D/JOGL bridge to fully
- // accelerate the rendering paths, but there are restrictions on
- // what work can be done where; for example, Graphics2D-related work
- // must not be done on the Queue Flusher Thread, but JOGL's
- // OpenGL-related work must be. This implies that the user's code
- // would need to be split up into multiple callbacks run from the
- // appropriate threads, which would be somewhat unfortunate.
-
- // Whether we have an alpha channel in the (RGB/A) backing store
- private boolean alpha;
-
- // Whether we're using only a GL_INTENSITY backing store
- private boolean intensity;
-
- // Whether we're attempting to use automatic mipmap generation support
- private boolean mipmap;
-
- // Whether smoothing is enabled for the OpenGL texture (switching
- // between GL_LINEAR and GL_NEAREST filtering)
- private boolean smoothing = true;
- private boolean smoothingChanged;
-
- // The backing store itself
- private BufferedImage image;
-
- private Texture texture;
- private TextureData textureData;
- private boolean mustReallocateTexture;
- private Rectangle dirtyRegion;
-
- private GLU glu = new GLU();
-
- // Current color
- private float r = 1.0f;
- private float g = 1.0f;
- private float b = 1.0f;
- private float a = 1.0f;
-
- /** Creates a new renderer with backing store of the specified width
- and height. If <CODE>alpha</CODE> is true, allocates an alpha
- channel in the backing store image. No mipmap support is
- requested.
-
- @param width the width of the texture to render into
- @param height the height of the texture to render into
- @param alpha whether to allocate an alpha channel for the texture
- */
- public TextureRenderer(int width, int height, boolean alpha) {
- this(width, height, alpha, false);
- }
-
- /** Creates a new renderer with backing store of the specified width
- and height. If <CODE>alpha</CODE> is true, allocates an alpha channel in the
- backing store image. If <CODE>mipmap</CODE> is true, attempts to use OpenGL's
- automatic mipmap generation for better smoothing when rendering
- the TextureRenderer's contents at a distance.
-
- @param width the width of the texture to render into
- @param height the height of the texture to render into
- @param alpha whether to allocate an alpha channel for the texture
- @param mipmap whether to attempt use of automatic mipmap generation
- */
- public TextureRenderer(int width, int height, boolean alpha, boolean mipmap) {
- this(width, height, alpha, false, mipmap);
- }
-
- // Internal constructor to avoid confusion since alpha only makes
- // sense when intensity is not set
- private TextureRenderer(int width, int height, boolean alpha, boolean intensity, boolean mipmap) {
- this.alpha = alpha;
- this.intensity = intensity;
- this.mipmap = mipmap;
- init(width, height);
- }
-
- /** Creates a new renderer with a special kind of backing store
- which acts only as an alpha channel. No mipmap support is
- requested. Internally, this associates a GL_INTENSITY OpenGL
- texture with the backing store. */
- public static TextureRenderer createAlphaOnlyRenderer(int width, int height) {
- return createAlphaOnlyRenderer(width, height, false);
- }
-
- /** Creates a new renderer with a special kind of backing store
- which acts only as an alpha channel. If <CODE>mipmap</CODE> is
- true, attempts to use OpenGL's automatic mipmap generation for
- better smoothing when rendering the TextureRenderer's contents
- at a distance. Internally, this associates a GL_INTENSITY OpenGL
- texture with the backing store. */
- public static TextureRenderer createAlphaOnlyRenderer(int width, int height, boolean mipmap) {
- return new TextureRenderer(width, height, false, true, mipmap);
- }
-
- /** Returns the width of the backing store of this renderer.
-
- @return the width of the backing store of this renderer
- */
- public int getWidth() {
- return image.getWidth();
- }
-
- /** Returns the height of the backing store of this renderer.
-
- @return the height of the backing store of this renderer
- */
- public int getHeight() {
- return image.getHeight();
- }
-
- /** Returns the size of the backing store of this renderer in a
- newly-allocated {@link java.awt.Dimension Dimension} object.
-
- @return the size of the backing store of this renderer
- */
- public Dimension getSize() {
- return getSize(null);
- }
-
- /** Returns the size of the backing store of this renderer. Uses the
- {@link java.awt.Dimension Dimension} object if one is supplied,
- or allocates a new one if null is passed.
-
- @param d a {@link java.awt.Dimension Dimension} object in which
- to store the results, or null to allocate a new one
-
- @return the size of the backing store of this renderer
- */
- public Dimension getSize(Dimension d) {
- if (d == null)
- d = new Dimension();
- d.setSize(image.getWidth(), image.getHeight());
- return d;
- }
-
- /** Sets the size of the backing store of this renderer. This may
- cause the OpenGL texture object associated with this renderer to
- be invalidated; it is not recommended to cache this texture
- object outside this class but to instead call {@link #getTexture
- getTexture} when it is needed.
-
- @param width the new width of the backing store of this renderer
- @param height the new height of the backing store of this renderer
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void setSize(int width, int height) throws GLException {
- init(width, height);
- }
-
- /** Sets the size of the backing store of this renderer. This may
- cause the OpenGL texture object associated with this renderer to
- be invalidated.
-
- @param d the new size of the backing store of this renderer
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void setSize(Dimension d) throws GLException {
- setSize(d.width, d.height);
- }
-
- /** Sets whether smoothing is enabled for the OpenGL texture; if so,
- uses GL_LINEAR interpolation for the minification and
- magnification filters. Defaults to true. Changes to this setting
- will not take effect until the next call to {@link
- #beginOrthoRendering beginOrthoRendering}.
-
- @param smoothing whether smoothing is enabled for the OpenGL texture
- */
- public void setSmoothing(boolean smoothing) {
- this.smoothing = smoothing;
- smoothingChanged = true;
- }
-
- /** Returns whether smoothing is enabled for the OpenGL texture; see
- {@link #setSmoothing setSmoothing}. Defaults to true.
-
- @return whether smoothing is enabled for the OpenGL texture
- */
- public boolean getSmoothing() {
- return smoothing;
- }
-
- /** Creates a {@link java.awt.Graphics2D Graphics2D} instance for
- rendering to the backing store of this renderer. The returned
- object should be disposed of using the normal {@link
- java.awt.Graphics#dispose() Graphics.dispose()} method once it
- is no longer being used.
-
- @return a new {@link java.awt.Graphics2D Graphics2D} object for
- rendering into the backing store of this renderer
- */
- public Graphics2D createGraphics() {
- return image.createGraphics();
- }
-
- /** Returns the underlying Java 2D {@link java.awt.Image Image}
- being rendered into. */
- public Image getImage() {
- return image;
- }
-
- /** Marks the given region of the TextureRenderer as dirty. This
- region, and any previously set dirty regions, will be
- automatically synchronized with the underlying Texture during
- the next {@link #getTexture getTexture} operation, at which
- point the dirty region will be cleared. It is not necessary for
- an OpenGL context to be current when this method is called.
-
- @param x the x coordinate (in Java 2D coordinates -- relative to
- upper left) of the region to update
- @param y the y coordinate (in Java 2D coordinates -- relative to
- upper left) of the region to update
- @param width the width of the region to update
- @param height the height of the region to update
- */
- public void markDirty(int x, int y, int width, int height) {
- Rectangle curRegion = new Rectangle(x, y, width, height);
- if (dirtyRegion == null) {
- dirtyRegion = curRegion;
- } else {
- dirtyRegion.add(curRegion);
- }
- }
-
- /** Returns the underlying OpenGL Texture object associated with
- this renderer, synchronizing any dirty regions of the
- TextureRenderer with the underlying OpenGL texture.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public Texture getTexture() throws GLException {
- if (dirtyRegion != null) {
- sync(dirtyRegion.x, dirtyRegion.y, dirtyRegion.width, dirtyRegion.height);
- dirtyRegion = null;
- }
-
- ensureTexture();
- return texture;
- }
-
- /** Disposes all resources associated with this renderer. It is not
- valid to use this renderer after calling this method.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void dispose() throws GLException {
- if (texture != null) {
- texture.dispose();
- texture = null;
- }
- if (image != null) {
- image.flush();
- image = null;
- }
- }
-
- /** Convenience method which assists in rendering portions of the
- OpenGL texture to the screen, if the application intends to draw
- them as a flat overlay on to the screen. Pushes OpenGL state
- bits (GL_ENABLE_BIT, GL_DEPTH_BUFFER_BIT and GL_TRANSFORM_BIT);
- disables the depth test, back-face culling, and lighting;
- enables the texture in this renderer; and sets up the viewing
- matrices for orthographic rendering where the coordinates go
- from (0, 0) at the lower left to (width, height) at the upper
- right. Equivalent to beginOrthoRendering(width, height, true).
- {@link #endOrthoRendering} must be used in conjunction with this
- method to restore all OpenGL states.
-
- @param width the width of the current on-screen OpenGL drawable
- @param height the height of the current on-screen OpenGL drawable
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void beginOrthoRendering(int width, int height) throws GLException {
- beginOrthoRendering(width, height, true);
- }
-
- /** Convenience method which assists in rendering portions of the
- OpenGL texture to the screen, if the application intends to draw
- them as a flat overlay on to the screen. Pushes OpenGL state
- bits (GL_ENABLE_BIT, GL_DEPTH_BUFFER_BIT and GL_TRANSFORM_BIT);
- disables the depth test (if the "disableDepthTest" argument is
- true), back-face culling, and lighting; enables the texture in
- this renderer; and sets up the viewing matrices for orthographic
- rendering where the coordinates go from (0, 0) at the lower left
- to (width, height) at the upper right. {@link
- #endOrthoRendering} must be used in conjunction with this method
- to restore all OpenGL states.
-
- @param width the width of the current on-screen OpenGL drawable
- @param height the height of the current on-screen OpenGL drawable
- @param disableDepthTest whether the depth test should be disabled
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void beginOrthoRendering(int width, int height, boolean disableDepthTest) throws GLException {
- beginRendering(true, width, height, disableDepthTest);
- }
-
- /** Convenience method which assists in rendering portions of the
- OpenGL texture to the screen as 2D quads in 3D space. Pushes
- OpenGL state (GL_ENABLE_BIT); disables lighting; and enables the
- texture in this renderer. Unlike {@link #beginOrthoRendering
- beginOrthoRendering}, does not modify the depth test, back-face
- culling, lighting, or the modelview or projection matrices. The
- user is responsible for setting up the view matrices for correct
- results of {@link #draw3DRect draw3DRect}. {@link
- #end3DRendering} must be used in conjunction with this method to
- restore all OpenGL states.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void begin3DRendering() throws GLException {
- beginRendering(false, 0, 0, false);
- }
-
- /** Changes the color of the polygons, and therefore the drawn
- images, this TextureRenderer produces. Use of this method is
- optional. The TextureRenderer uses the GL_MODULATE texture
- environment mode, which causes the portions of the rendered
- texture to be multiplied by the color of the rendered
- polygons. The polygon color can be varied to achieve effects
- like tinting of the overall output or fading in and out by
- changing the alpha of the color. <P>
-
- Each component ranges from 0.0f - 1.0f. The alpha component, if
- used, does not need to be premultiplied into the color channels
- as described in the documentation for {@link
- com.sun.opengl.util.texture.Texture Texture}, although
- premultiplied colors are used internally. The default color is
- opaque white.
-
- @param r the red component of the new color
- @param g the green component of the new color
- @param b the blue component of the new color
- @param a the alpha component of the new color, 0.0f = completely
- transparent, 1.0f = completely opaque
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void setColor(float r, float g, float b, float a) throws GLException {
- GL gl = GLU.getCurrentGL();
- this.r = r * a;
- this.g = g * a;
- this.b = b * a;
- this.a = a;
-
- gl.glColor4f(this.r, this.g, this.b, this.a);
- }
-
- private float[] compArray;
- /** Changes the current color of this TextureRenderer to the
- supplied one. The default color is opaque white. See {@link
- #setColor(float,float,float,float) setColor} for more details.
-
- @param color the new color to use for rendering
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void setColor(Color color) throws GLException {
- // Get color's RGBA components as floats in the range [0,1].
- if (compArray == null) {
- compArray = new float[4];
- }
- color.getRGBComponents(compArray);
- setColor(compArray[0], compArray[1], compArray[2], compArray[3]);
- }
-
- /** Draws an orthographically projected rectangle containing all of
- the underlying texture to the specified location on the
- screen. All (x, y) coordinates are specified relative to the
- lower left corner of either the texture image or the current
- OpenGL drawable. This method is equivalent to
- <code>drawOrthoRect(screenx, screeny, 0, 0, getWidth(),
- getHeight());</code>.
-
- @param screenx the on-screen x coordinate at which to draw the rectangle
- @param screeny the on-screen y coordinate (relative to lower left) at
- which to draw the rectangle
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void drawOrthoRect(int screenx, int screeny) throws GLException {
- drawOrthoRect(screenx, screeny, 0, 0, getWidth(), getHeight());
- }
-
- /** Draws an orthographically projected rectangle of the underlying
- texture to the specified location on the screen. All (x, y)
- coordinates are specified relative to the lower left corner of
- either the texture image or the current OpenGL drawable.
-
- @param screenx the on-screen x coordinate at which to draw the rectangle
- @param screeny the on-screen y coordinate (relative to lower left) at
- which to draw the rectangle
- @param texturex the x coordinate of the pixel in the texture of
- the lower left portion of the rectangle to draw
- @param texturey the y coordinate of the pixel in the texture
- (relative to lower left) of the lower left portion of the
- rectangle to draw
- @param width the width of the rectangle to draw
- @param height the height of the rectangle to draw
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void drawOrthoRect(int screenx, int screeny,
- int texturex, int texturey,
- int width, int height) throws GLException {
- draw3DRect(screenx, screeny, 0, texturex, texturey, width, height, 1);
- }
-
- /** Draws a rectangle of the underlying texture to the specified 3D
- location. In the current coordinate system, the lower left
- corner of the rectangle is placed at (x, y, z), and the upper
- right corner is placed at (x + width * scaleFactor, y + height *
- scaleFactor, z). The lower left corner of the sub-rectangle of
- the texture is (texturex, texturey) and the upper right corner
- is (texturex + width, texturey + height). For back-face culling
- purposes, the rectangle is drawn with counterclockwise
- orientation of the vertices when viewed from the front.
-
- @param x the x coordinate at which to draw the rectangle
- @param y the y coordinate at which to draw the rectangle
- @param z the z coordinate at which to draw the rectangle
- @param texturex the x coordinate of the pixel in the texture of
- the lower left portion of the rectangle to draw
- @param texturey the y coordinate of the pixel in the texture
- (relative to lower left) of the lower left portion of the
- rectangle to draw
- @param width the width in texels of the rectangle to draw
- @param height the height in texels of the rectangle to draw
- @param scaleFactor the scale factor to apply (multiplicatively)
- to the size of the drawn rectangle
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void draw3DRect(float x, float y, float z,
- int texturex, int texturey,
- int width, int height,
- float scaleFactor) throws GLException {
- GL gl = GLU.getCurrentGL();
- Texture texture = getTexture();
- TextureCoords coords = texture.getSubImageTexCoords(texturex, texturey,
- texturex + width,
- texturey + height);
- gl.glBegin(GL.GL_QUADS);
- gl.glTexCoord2f(coords.left(), coords.bottom());
- gl.glVertex3f(x, y, z);
- gl.glTexCoord2f(coords.right(), coords.bottom());
- gl.glVertex3f(x + width * scaleFactor, y, z);
- gl.glTexCoord2f(coords.right(), coords.top());
- gl.glVertex3f(x + width * scaleFactor, y + height * scaleFactor, z);
- gl.glTexCoord2f(coords.left(), coords.top());
- gl.glVertex3f(x, y + height * scaleFactor, z);
- gl.glEnd();
- }
-
- /** Convenience method which assists in rendering portions of the
- OpenGL texture to the screen, if the application intends to draw
- them as a flat overlay on to the screen. Must be used if {@link
- #beginOrthoRendering} is used to set up the rendering stage for
- this overlay.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void endOrthoRendering() throws GLException {
- endRendering(true);
- }
-
- /** Convenience method which assists in rendering portions of the
- OpenGL texture to the screen as 2D quads in 3D space. Must be
- used if {@link #begin3DRendering} is used to set up the
- rendering stage for this overlay.
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- public void end3DRendering() throws GLException {
- endRendering(false);
- }
-
- /** Indicates whether automatic mipmap generation is in use for this
- TextureRenderer. The result of this method may change from true
- to false if it is discovered during allocation of the
- TextureRenderer's backing store that automatic mipmap generation
- is not supported at the OpenGL level. */
- public boolean isUsingAutoMipmapGeneration() {
- return mipmap;
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void beginRendering(boolean ortho, int width, int height, boolean disableDepthTestForOrtho) {
- GL gl = GLU.getCurrentGL();
- int attribBits =
- GL.GL_ENABLE_BIT | GL.GL_TEXTURE_BIT | GL.GL_COLOR_BUFFER_BIT |
- (ortho ? (GL.GL_DEPTH_BUFFER_BIT | GL.GL_TRANSFORM_BIT) : 0);
- gl.glPushAttrib(attribBits);
- gl.glDisable(GL.GL_LIGHTING);
- if (ortho) {
- if (disableDepthTestForOrtho) {
- gl.glDisable(GL.GL_DEPTH_TEST);
- }
- gl.glDisable(GL.GL_CULL_FACE);
- gl.glMatrixMode(GL.GL_PROJECTION);
- gl.glPushMatrix();
- gl.glLoadIdentity();
- glu.gluOrtho2D(0, width, 0, height);
- gl.glMatrixMode(GL.GL_MODELVIEW);
- gl.glPushMatrix();
- gl.glLoadIdentity();
- gl.glMatrixMode(GL.GL_TEXTURE);
- gl.glPushMatrix();
- gl.glLoadIdentity();
- }
- gl.glEnable(GL.GL_BLEND);
- gl.glBlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA);
- Texture texture = getTexture();
- texture.enable();
- texture.bind();
- gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);
- // Change polygon color to last saved
- gl.glColor4f(r, g, b, a);
- if (smoothingChanged) {
- smoothingChanged = false;
- if (smoothing) {
- texture.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
- if (mipmap) {
- texture.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR_MIPMAP_LINEAR);
- } else {
- texture.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
- }
- } else {
- texture.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
- texture.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
- }
- }
- }
-
- private void endRendering(boolean ortho) {
- GL gl = GLU.getCurrentGL();
- Texture texture = getTexture();
- texture.disable();
- if (ortho) {
- gl.glMatrixMode(GL.GL_PROJECTION);
- gl.glPopMatrix();
- gl.glMatrixMode(GL.GL_MODELVIEW);
- gl.glPopMatrix();
- gl.glMatrixMode(GL.GL_TEXTURE);
- gl.glPopMatrix();
- }
- gl.glPopAttrib();
- }
-
- private void init(int width, int height) {
- // Discard previous BufferedImage if any
- if (image != null) {
- image.flush();
- image = null;
- }
-
- // Infer the internal format if not an intensity texture
- int internalFormat = (intensity ? GL.GL_INTENSITY : 0);
- int imageType =
- (intensity ? BufferedImage.TYPE_BYTE_GRAY :
- (alpha ? BufferedImage.TYPE_INT_ARGB_PRE : BufferedImage.TYPE_INT_RGB));
- image = new BufferedImage(width, height, imageType);
- // Always realllocate the TextureData associated with this
- // BufferedImage; it's just a reference to the contents but we
- // need it in order to update sub-regions of the underlying
- // texture
- textureData = new TextureData(internalFormat, 0, mipmap, image);
- // For now, always reallocate the underlying OpenGL texture when
- // the backing store size changes
- mustReallocateTexture = true;
- }
-
- /** Synchronizes the specified region of the backing store down to
- the underlying OpenGL texture. If {@link #markDirty markDirty}
- is used instead to indicate the regions that are out of sync,
- this method does not need to be called.
-
- @param x the x coordinate (in Java 2D coordinates -- relative to
- upper left) of the region to update
- @param y the y coordinate (in Java 2D coordinates -- relative to
- upper left) of the region to update
- @param width the width of the region to update
- @param height the height of the region to update
-
- @throws GLException If an OpenGL context is not current when this method is called
- */
- private void sync(int x, int y, int width, int height) throws GLException {
- // Force allocation if necessary
- boolean canSkipUpdate = ensureTexture();
-
- if (!canSkipUpdate) {
- // Update specified region.
- // NOTE that because BufferedImage-based TextureDatas now don't
- // do anything to their contents, the coordinate systems for
- // OpenGL and Java 2D actually line up correctly for
- // updateSubImage calls, so we don't need to do any argument
- // conversion here (i.e., flipping the Y coordinate).
- texture.updateSubImage(textureData, 0, x, y, x, y, width, height);
- }
- }
-
- // Returns true if the texture was newly allocated, false if not
- private boolean ensureTexture() {
- if (mustReallocateTexture) {
- if (texture != null) {
- texture.dispose();
- texture = null;
- }
- mustReallocateTexture = false;
- }
-
- if (texture == null) {
- texture = TextureIO.newTexture(textureData);
- if (mipmap && !texture.isUsingAutoMipmapGeneration()) {
- // Only try this once
- texture.dispose();
- mipmap = false;
- textureData.setMipmap(false);
- texture = TextureIO.newTexture(textureData);
- }
-
- if (!smoothing) {
- // The TextureIO classes default to GL_LINEAR filtering
- texture.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
- texture.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
- }
- return true;
- }
-
- return false;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/texture/Texture.java b/src/classes/com/sun/opengl/util/texture/Texture.java
deleted file mode 100755
index f4a0a8be2..000000000
--- a/src/classes/com/sun/opengl/util/texture/Texture.java
+++ /dev/null
@@ -1,1021 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.util.texture;
-
-import java.nio.*;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-import com.sun.opengl.impl.*;
-import com.sun.opengl.util.texture.spi.*;
-
-/**
- * Represents an OpenGL texture object. Contains convenience routines
- * for enabling/disabling OpenGL texture state, binding this texture,
- * and computing texture coordinates for both the entire image as well
- * as a sub-image.
- *
- * <p><a name="nonpow2"><b>Non-power-of-two restrictions</b></a>
- * <br> When creating an OpenGL texture object, the Texture class will
- * attempt to leverage the <a
- * href="http://www.opengl.org/registry/specs/ARB/texture_non_power_of_two.txt">GL_ARB_texture_non_power_of_two</a>
- * and <a
- * href="http://www.opengl.org/registry/specs/ARB/texture_rectangle.txt">GL_ARB_texture_rectangle</a>
- * extensions (in that order) whenever possible. If neither extension
- * is available, the Texture class will simply upload a non-pow2-sized
- * image into a standard pow2-sized texture (without any special
- * scaling). Since the choice of extension (or whether one is used at
- * all) depends on the user's machine configuration, developers are
- * recommended to use {@link #getImageTexCoords} and {@link
- * #getSubImageTexCoords}, as those methods will calculate the
- * appropriate texture coordinates for the situation.
- *
- * <p>One caveat in this approach is that certain texture wrap modes
- * (e.g. <code>GL_REPEAT</code>) are not legal when the GL_ARB_texture_rectangle
- * extension is in use. Another issue to be aware of is that in the
- * default pow2 scenario, if the original image does not have pow2
- * dimensions, then wrapping may not work as one might expect since
- * the image does not extend to the edges of the pow2 texture. If
- * texture wrapping is important, it is recommended to use only
- * pow2-sized images with the Texture class.
- *
- * <p><a name="perftips"><b>Performance Tips</b></a>
- * <br> For best performance, try to avoid calling {@link #enable} /
- * {@link #bind} / {@link #disable} any more than necessary. For
- * example, applications using many Texture objects in the same scene
- * may want to reduce the number of calls to both {@link #enable} and
- * {@link #disable}. To do this it is necessary to call {@link
- * #getTarget} to make sure the OpenGL texture target is the same for
- * all of the Texture objects in use; non-power-of-two textures using
- * the GL_ARB_texture_rectangle extension use a different target than
- * power-of-two textures using the GL_TEXTURE_2D target. Note that
- * when switching between textures it is necessary to call {@link
- * #bind}, but when drawing many triangles all using the same texture,
- * for best performance only one call to {@link #bind} should be made.
- *
- * <p><a name="premult"><b>Alpha premultiplication and blending</b></a>
- * <br> The mathematically correct way to perform blending in OpenGL
- * (with the SrcOver "source over destination" mode, or any other
- * Porter-Duff rule) is to use "premultiplied color components", which
- * means the R/G/ B color components have already been multiplied by
- * the alpha value. To make things easier for developers, the Texture
- * class will automatically convert non-premultiplied image data into
- * premultiplied data when storing it into an OpenGL texture. As a
- * result, it is important to use the correct blending function; for
- * example, the SrcOver rule is expressed as:
-<pre>
- gl.glBlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA);
-</pre>
- * Also, when using a texture function like <code>GL_MODULATE</code> where
- * the current color plays a role, it is important to remember to make
- * sure that the color is specified in a premultiplied form, for
- * example:
-<pre>
- float a = ...;
- float r = r * a;
- float g = g * a;
- float b = b * a;
- gl.glColor4f(r, g, b, a);
-</pre>
- *
- * For reference, here is a list of the Porter-Duff compositing rules
- * and the associated OpenGL blend functions (source and destination
- * factors) to use in the face of premultiplied alpha:
- *
-<CENTER>
-<TABLE WIDTH="75%">
-<TR> <TD> Rule <TD> Source <TD> Dest
-<TR> <TD> Clear <TD> GL_ZERO <TD> GL_ZERO
-<TR> <TD> Src <TD> GL_ONE <TD> GL_ZERO
-<TR> <TD> SrcOver <TD> GL_ONE <TD> GL_ONE_MINUS_SRC_ALPHA
-<TR> <TD> DstOver <TD> GL_ONE_MINUS_DST_ALPHA <TD> GL_ONE
-<TR> <TD> SrcIn <TD> GL_DST_ALPHA <TD> GL_ZERO
-<TR> <TD> DstIn <TD> GL_ZERO <TD> GL_SRC_ALPHA
-<TR> <TD> SrcOut <TD> GL_ONE_MINUS_DST_ALPHA <TD> GL_ZERO
-<TR> <TD> DstOut <TD> GL_ZERO <TD> GL_ONE_MINUS_SRC_ALPHA
-<TR> <TD> Dst <TD> GL_ZERO <TD> GL_ONE
-<TR> <TD> SrcAtop <TD> GL_DST_ALPHA <TD> GL_ONE_MINUS_SRC_ALPHA
-<TR> <TD> DstAtop <TD> GL_ONE_MINUS_DST_ALPHA <TD> GL_SRC_ALPHA
-<TR> <TD> AlphaXor <TD> GL_ONE_MINUS_DST_ALPHA <TD> GL_ONE_MINUS_SRC_ALPHA
-</TABLE>
-</CENTER>
- *
- * @author Chris Campbell
- * @author Kenneth Russell
- */
-public class Texture {
- /** The GL target type. */
- private int target;
- /** The GL texture ID. */
- private int texID;
- /** The width of the texture. */
- private int texWidth;
- /** The height of the texture. */
- private int texHeight;
- /** The width of the image. */
- private int imgWidth;
- /** The height of the image. */
- private int imgHeight;
- /** The original aspect ratio of the image, before any rescaling
- that might have occurred due to using the GLU mipmap routines. */
- private float aspectRatio;
- /** Indicates whether the TextureData requires a vertical flip of
- the texture coords. */
- private boolean mustFlipVertically;
- /** Indicates whether we're using automatic mipmap generation
- support (GL_GENERATE_MIPMAP). */
- private boolean usingAutoMipmapGeneration;
-
- /** The texture coordinates corresponding to the entire image. */
- private TextureCoords coords;
-
- /** An estimate of the amount of texture memory this texture consumes. */
- private int estimatedMemorySize;
-
- private static final boolean DEBUG = Debug.debug("Texture");
- private static final boolean VERBOSE = Debug.verbose();
-
- // For testing alternate code paths on more capable hardware
- private static final boolean disableNPOT = Debug.isPropertyDefined("jogl.texture.nonpot");
- private static final boolean disableTexRect = Debug.isPropertyDefined("jogl.texture.notexrect");
-
- // For now make Texture constructor package-private to limit the
- // number of public APIs we commit to
- Texture(TextureData data) throws GLException {
- GL gl = GLU.getCurrentGL();
- texID = createTextureID(gl);
-
- updateImage(data);
- }
-
- // Constructor for use when creating e.g. cube maps, where there is
- // no initial texture data
- Texture(int target) throws GLException {
- GL gl = GLU.getCurrentGL();
- texID = createTextureID(gl);
- this.target = target;
- }
-
- /**
- * Enables this texture's target (e.g., GL_TEXTURE_2D) in the
- * current GL context's state. This method is a shorthand equivalent
- * of the following OpenGL code:
-<pre>
- gl.glEnable(texture.getTarget());
-</pre>
- *
- * See the <a href="#perftips">performance tips</a> above for hints
- * on how to maximize performance when using many Texture objects.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void enable() throws GLException {
- GLU.getCurrentGL().glEnable(target);
- }
-
- /**
- * Disables this texture's target (e.g., GL_TEXTURE_2D) in the
- * current GL context's state. This method is a shorthand equivalent
- * of the following OpenGL code:
-<pre>
- gl.glDisable(texture.getTarget());
-</pre>
- *
- * See the <a href="#perftips">performance tips</a> above for hints
- * on how to maximize performance when using many Texture objects.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void disable() throws GLException {
- GLU.getCurrentGL().glDisable(target);
- }
-
- /**
- * Binds this texture to the current GL context. This method is a
- * shorthand equivalent of the following OpenGL code:
-<pre>
- gl.glBindTexture(texture.getTarget(), texture.getTextureObject());
-</pre>
- *
- * See the <a href="#perftips">performance tips</a> above for hints
- * on how to maximize performance when using many Texture objects.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void bind() throws GLException {
- GLU.getCurrentGL().glBindTexture(target, texID);
- }
-
- /**
- * Disposes the native resources used by this texture object.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void dispose() throws GLException {
- GLU.getCurrentGL().glDeleteTextures(1, new int[] {texID}, 0);
- texID = 0;
- }
-
- /**
- * Returns the OpenGL "target" of this texture.
- *
- * @return the OpenGL target of this texture
- * @see javax.media.opengl.GL#GL_TEXTURE_2D
- * @see javax.media.opengl.GL#GL_TEXTURE_RECTANGLE_ARB
- */
- public int getTarget() {
- return target;
- }
-
- /**
- * Returns the width of the allocated OpenGL texture in pixels.
- * Note that the texture width will be greater than or equal to the
- * width of the image contained within.
- *
- * @return the width of the texture
- */
- public int getWidth() {
- return texWidth;
- }
-
- /**
- * Returns the height of the allocated OpenGL texture in pixels.
- * Note that the texture height will be greater than or equal to the
- * height of the image contained within.
- *
- * @return the height of the texture
- */
- public int getHeight() {
- return texHeight;
- }
-
- /**
- * Returns the width of the image contained within this texture.
- * Note that for non-power-of-two textures in particular this may
- * not be equal to the result of {@link #getWidth}. It is
- * recommended that applications call {@link #getImageTexCoords} and
- * {@link #getSubImageTexCoords} rather than using this API
- * directly.
- *
- * @return the width of the image
- */
- public int getImageWidth() {
- return imgWidth;
- }
-
- /**
- * Returns the height of the image contained within this texture.
- * Note that for non-power-of-two textures in particular this may
- * not be equal to the result of {@link #getHeight}. It is
- * recommended that applications call {@link #getImageTexCoords} and
- * {@link #getSubImageTexCoords} rather than using this API
- * directly.
- *
- * @return the height of the image
- */
- public int getImageHeight() {
- return imgHeight;
- }
-
- /**
- * Returns the original aspect ratio of the image, defined as (image
- * width) / (image height), before any scaling that might have
- * occurred as a result of using the GLU mipmap routines.
- */
- public float getAspectRatio() {
- return aspectRatio;
- }
-
- /**
- * Returns the set of texture coordinates corresponding to the
- * entire image. If the TextureData indicated that the texture
- * coordinates must be flipped vertically, the returned
- * TextureCoords will take that into account.
- *
- * @return the texture coordinates corresponding to the entire image
- */
- public TextureCoords getImageTexCoords() {
- return coords;
- }
-
- /**
- * Returns the set of texture coordinates corresponding to the
- * specified sub-image. The (x1, y1) and (x2, y2) points are
- * specified in terms of pixels starting from the lower-left of the
- * image. (x1, y1) should specify the lower-left corner of the
- * sub-image and (x2, y2) the upper-right corner of the sub-image.
- * If the TextureData indicated that the texture coordinates must be
- * flipped vertically, the returned TextureCoords will take that
- * into account; this should not be handled by the end user in the
- * specification of the y1 and y2 coordinates.
- *
- * @return the texture coordinates corresponding to the specified sub-image
- */
- public TextureCoords getSubImageTexCoords(int x1, int y1, int x2, int y2) {
- if (target == GL.GL_TEXTURE_RECTANGLE_ARB) {
- if (mustFlipVertically) {
- return new TextureCoords(x1, texHeight - y1, x2, texHeight - y2);
- } else {
- return new TextureCoords(x1, y1, x2, y2);
- }
- } else {
- float tx1 = (float)x1 / (float)texWidth;
- float ty1 = (float)y1 / (float)texHeight;
- float tx2 = (float)x2 / (float)texWidth;
- float ty2 = (float)y2 / (float)texHeight;
- if (mustFlipVertically) {
- float yMax = (float) imgHeight / (float) texHeight;
- return new TextureCoords(tx1, yMax - ty1, tx2, yMax - ty2);
- } else {
- return new TextureCoords(tx1, ty1, tx2, ty2);
- }
- }
- }
-
- /**
- * Updates the entire content area of this texture using the data in
- * the given image.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void updateImage(TextureData data) throws GLException {
- updateImage(data, 0);
- }
-
- /**
- * Indicates whether this texture's texture coordinates must be
- * flipped vertically in order to properly display the texture. This
- * is handled automatically by {@link #getImageTexCoords
- * getImageTexCoords} and {@link #getSubImageTexCoords
- * getSubImageTexCoords}, but applications may generate or otherwise
- * produce texture coordinates which must be corrected.
- */
- public boolean getMustFlipVertically() {
- return mustFlipVertically;
- }
-
- /**
- * Updates the content area of the specified target of this texture
- * using the data in the given image. In general this is intended
- * for construction of cube maps.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void updateImage(TextureData data, int target) throws GLException {
- GL gl = GLU.getCurrentGL();
-
- imgWidth = data.getWidth();
- imgHeight = data.getHeight();
- aspectRatio = (float) imgWidth / (float) imgHeight;
- mustFlipVertically = data.getMustFlipVertically();
-
- int texTarget = 0;
- int texParamTarget = this.target;
-
- // See whether we have automatic mipmap generation support
- boolean haveAutoMipmapGeneration =
- (gl.isExtensionAvailable("GL_VERSION_1_4") ||
- gl.isExtensionAvailable("GL_SGIS_generate_mipmap"));
-
- // Indicate to the TextureData what functionality is available
- data.setHaveEXTABGR(gl.isExtensionAvailable("GL_EXT_abgr"));
- data.setHaveGL12(gl.isExtensionAvailable("GL_VERSION_1_2"));
-
- // Note that automatic mipmap generation doesn't work for
- // GL_ARB_texture_rectangle
- if ((!isPowerOfTwo(imgWidth) || !isPowerOfTwo(imgHeight)) &&
- !haveNPOT(gl)) {
- haveAutoMipmapGeneration = false;
- }
-
- boolean expandingCompressedTexture = false;
- if (data.getMipmap() && !haveAutoMipmapGeneration) {
- // GLU always scales the texture's dimensions to be powers of
- // two. It also doesn't really matter exactly what the texture
- // width and height are because the texture coords are always
- // between 0.0 and 1.0.
- imgWidth = nextPowerOfTwo(imgWidth);
- imgHeight = nextPowerOfTwo(imgHeight);
- texWidth = imgWidth;
- texHeight = imgHeight;
- texTarget = GL.GL_TEXTURE_2D;
- } else if ((isPowerOfTwo(imgWidth) && isPowerOfTwo(imgHeight)) ||
- haveNPOT(gl)) {
- if (DEBUG) {
- if (isPowerOfTwo(imgWidth) && isPowerOfTwo(imgHeight)) {
- System.err.println("Power-of-two texture");
- } else {
- System.err.println("Using GL_ARB_texture_non_power_of_two");
- }
- }
-
- texWidth = imgWidth;
- texHeight = imgHeight;
- texTarget = GL.GL_TEXTURE_2D;
- } else if (haveTexRect(gl) && !data.isDataCompressed()) {
- // GL_ARB_texture_rectangle does not work for compressed textures
- if (DEBUG) {
- System.err.println("Using GL_ARB_texture_rectangle");
- }
-
- texWidth = imgWidth;
- texHeight = imgHeight;
- texTarget = GL.GL_TEXTURE_RECTANGLE_ARB;
- } else {
- // If we receive non-power-of-two compressed texture data and
- // don't have true hardware support for compressed textures, we
- // can fake this support by producing an empty "compressed"
- // texture image, using glCompressedTexImage2D with that to
- // allocate the texture, and glCompressedTexSubImage2D with the
- // incoming data.
- if (data.isDataCompressed()) {
- if (data.getMipmapData() != null) {
-
- // We don't currently support expanding of compressed,
- // mipmapped non-power-of-two textures to the nearest power
- // of two; the obvious port of the non-mipmapped code didn't
- // work
- throw new GLException("Mipmapped non-power-of-two compressed textures only supported on OpenGL 2.0 hardware (GL_ARB_texture_non_power_of_two)");
- }
-
- expandingCompressedTexture = true;
- }
-
- if (DEBUG) {
- System.err.println("Expanding texture to power-of-two dimensions");
- }
-
- if (data.getBorder() != 0) {
- throw new RuntimeException("Scaling up a non-power-of-two texture which has a border won't work");
- }
- texWidth = nextPowerOfTwo(imgWidth);
- texHeight = nextPowerOfTwo(imgHeight);
- texTarget = GL.GL_TEXTURE_2D;
- }
-
- texParamTarget = texTarget;
- setImageSize(imgWidth, imgHeight, texTarget);
-
- if (target != 0) {
- // Allow user to override auto detection and skip bind step (for
- // cubemap construction)
- texTarget = target;
- if (this.target == 0) {
- throw new GLException("Override of target failed; no target specified yet");
- }
- texParamTarget = this.target;
- gl.glBindTexture(texParamTarget, texID);
- } else {
- gl.glBindTexture(texTarget, texID);
- }
-
- if (data.getMipmap() && !haveAutoMipmapGeneration) {
- int[] align = new int[1];
- gl.glGetIntegerv(GL.GL_UNPACK_ALIGNMENT, align, 0); // save alignment
- gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, data.getAlignment());
-
- if (data.isDataCompressed()) {
- throw new GLException("May not request mipmap generation for compressed textures");
- }
-
- try {
- GLU glu = new GLU();
- glu.gluBuild2DMipmaps(texTarget, data.getInternalFormat(),
- data.getWidth(), data.getHeight(),
- data.getPixelFormat(), data.getPixelType(), data.getBuffer());
- } finally {
- gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, align[0]); // restore alignment
- }
- } else {
- checkCompressedTextureExtensions(data);
- Buffer[] mipmapData = data.getMipmapData();
- if (mipmapData != null) {
- int width = texWidth;
- int height = texHeight;
- for (int i = 0; i < mipmapData.length; i++) {
- if (data.isDataCompressed()) {
- // Need to use glCompressedTexImage2D directly to allocate and fill this image
- // Avoid spurious memory allocation when possible
- gl.glCompressedTexImage2D(texTarget, i, data.getInternalFormat(),
- width, height, data.getBorder(),
- mipmapData[i].remaining(), mipmapData[i]);
- } else {
- // Allocate texture image at this level
- gl.glTexImage2D(texTarget, i, data.getInternalFormat(),
- width, height, data.getBorder(),
- data.getPixelFormat(), data.getPixelType(), null);
- updateSubImageImpl(data, texTarget, i, 0, 0, 0, 0, data.getWidth(), data.getHeight());
- }
-
- width = Math.max(width / 2, 1);
- height = Math.max(height / 2, 1);
- }
- } else {
- if (data.isDataCompressed()) {
- if (!expandingCompressedTexture) {
- // Need to use glCompressedTexImage2D directly to allocate and fill this image
- // Avoid spurious memory allocation when possible
- gl.glCompressedTexImage2D(texTarget, 0, data.getInternalFormat(),
- texWidth, texHeight, data.getBorder(),
- data.getBuffer().capacity(), data.getBuffer());
- } else {
- ByteBuffer buf = DDSImage.allocateBlankBuffer(texWidth,
- texHeight,
- data.getInternalFormat());
- gl.glCompressedTexImage2D(texTarget, 0, data.getInternalFormat(),
- texWidth, texHeight, data.getBorder(),
- buf.capacity(), buf);
- updateSubImageImpl(data, texTarget, 0, 0, 0, 0, 0, data.getWidth(), data.getHeight());
- }
- } else {
- if (data.getMipmap() && haveAutoMipmapGeneration) {
- // For now, only use hardware mipmapping for uncompressed 2D
- // textures where the user hasn't explicitly specified
- // mipmap data; don't know about interactions between
- // GL_GENERATE_MIPMAP and glCompressedTexImage2D
- gl.glTexParameteri(texParamTarget, GL.GL_GENERATE_MIPMAP, GL.GL_TRUE);
- usingAutoMipmapGeneration = true;
- }
-
- gl.glTexImage2D(texTarget, 0, data.getInternalFormat(),
- texWidth, texHeight, data.getBorder(),
- data.getPixelFormat(), data.getPixelType(), null);
- updateSubImageImpl(data, texTarget, 0, 0, 0, 0, 0, data.getWidth(), data.getHeight());
- }
- }
- }
-
- int minFilter = (data.getMipmap() ? GL.GL_LINEAR_MIPMAP_LINEAR : GL.GL_LINEAR);
- int magFilter = GL.GL_LINEAR;
- int wrapMode = (gl.isExtensionAvailable("GL_VERSION_1_2") ? GL.GL_CLAMP_TO_EDGE : GL.GL_CLAMP);
-
- // REMIND: figure out what to do for GL_TEXTURE_RECTANGLE_ARB
- if (texTarget != GL.GL_TEXTURE_RECTANGLE_ARB) {
- gl.glTexParameteri(texParamTarget, GL.GL_TEXTURE_MIN_FILTER, minFilter);
- gl.glTexParameteri(texParamTarget, GL.GL_TEXTURE_MAG_FILTER, magFilter);
- gl.glTexParameteri(texParamTarget, GL.GL_TEXTURE_WRAP_S, wrapMode);
- gl.glTexParameteri(texParamTarget, GL.GL_TEXTURE_WRAP_T, wrapMode);
- if (this.target == GL.GL_TEXTURE_CUBE_MAP) {
- gl.glTexParameteri(texParamTarget, GL.GL_TEXTURE_WRAP_R, wrapMode);
- }
- }
-
- // Don't overwrite target if we're loading e.g. faces of a cube
- // map
- if ((this.target == 0) ||
- (this.target == GL.GL_TEXTURE_2D) ||
- (this.target == GL.GL_TEXTURE_RECTANGLE_ARB)) {
- this.target = texTarget;
- }
-
- // This estimate will be wrong for cube maps
- estimatedMemorySize = data.getEstimatedMemorySize();
- }
-
- /**
- * Updates a subregion of the content area of this texture using the
- * given data. If automatic mipmap generation is in use (see {@link
- * #isUsingAutoMipmapGeneration isUsingAutoMipmapGeneration}),
- * updates to the base (level 0) mipmap will cause the lower-level
- * mipmaps to be regenerated, and updates to other mipmap levels
- * will be ignored. Otherwise, if automatic mipmap generation is not
- * in use, only updates the specified mipmap level and does not
- * re-generate mipmaps if they were originally produced or loaded.
- *
- * @param data the image data to be uploaded to this texture
- * @param mipmapLevel the mipmap level of the texture to set. If
- * this is non-zero and the TextureData contains mipmap data, the
- * appropriate mipmap level will be selected.
- * @param x the x offset (in pixels) relative to the lower-left corner
- * of this texture
- * @param y the y offset (in pixels) relative to the lower-left corner
- * of this texture
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void updateSubImage(TextureData data, int mipmapLevel, int x, int y) throws GLException {
- if (usingAutoMipmapGeneration && mipmapLevel != 0) {
- // When we're using mipmap generation via GL_GENERATE_MIPMAP, we
- // don't need to update other mipmap levels
- return;
- }
- bind();
- updateSubImageImpl(data, target, mipmapLevel, x, y, 0, 0, data.getWidth(), data.getHeight());
- }
-
- /**
- * Updates a subregion of the content area of this texture using the
- * specified sub-region of the given data. If automatic mipmap
- * generation is in use (see {@link #isUsingAutoMipmapGeneration
- * isUsingAutoMipmapGeneration}), updates to the base (level 0)
- * mipmap will cause the lower-level mipmaps to be regenerated, and
- * updates to other mipmap levels will be ignored. Otherwise, if
- * automatic mipmap generation is not in use, only updates the
- * specified mipmap level and does not re-generate mipmaps if they
- * were originally produced or loaded. This method is only supported
- * for uncompressed TextureData sources.
- *
- * @param data the image data to be uploaded to this texture
- * @param mipmapLevel the mipmap level of the texture to set. If
- * this is non-zero and the TextureData contains mipmap data, the
- * appropriate mipmap level will be selected.
- * @param dstx the x offset (in pixels) relative to the lower-left corner
- * of this texture where the update will be applied
- * @param dsty the y offset (in pixels) relative to the lower-left corner
- * of this texture where the update will be applied
- * @param srcx the x offset (in pixels) relative to the lower-left corner
- * of the supplied TextureData from which to fetch the update rectangle
- * @param srcy the y offset (in pixels) relative to the lower-left corner
- * of the supplied TextureData from which to fetch the update rectangle
- * @param width the width (in pixels) of the rectangle to be updated
- * @param height the height (in pixels) of the rectangle to be updated
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void updateSubImage(TextureData data, int mipmapLevel,
- int dstx, int dsty,
- int srcx, int srcy,
- int width, int height) throws GLException {
- if (data.isDataCompressed()) {
- throw new GLException("updateSubImage specifying a sub-rectangle is not supported for compressed TextureData");
- }
- if (usingAutoMipmapGeneration && mipmapLevel != 0) {
- // When we're using mipmap generation via GL_GENERATE_MIPMAP, we
- // don't need to update other mipmap levels
- return;
- }
- bind();
- updateSubImageImpl(data, target, mipmapLevel, dstx, dsty, srcx, srcy, width, height);
- }
-
- /**
- * Sets the OpenGL floating-point texture parameter for the
- * texture's target. This gives control over parameters such as
- * GL_TEXTURE_MAX_ANISOTROPY_EXT. Causes this texture to be bound to
- * the current texture state.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void setTexParameterf(int parameterName,
- float value) {
- bind();
- GL gl = GLU.getCurrentGL();
- gl.glTexParameterf(target, parameterName, value);
- }
-
- /**
- * Sets the OpenGL multi-floating-point texture parameter for the
- * texture's target. Causes this texture to be bound to the current
- * texture state.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void setTexParameterfv(int parameterName,
- FloatBuffer params) {
- bind();
- GL gl = GLU.getCurrentGL();
- gl.glTexParameterfv(target, parameterName, params);
- }
-
- /**
- * Sets the OpenGL multi-floating-point texture parameter for the
- * texture's target. Causes this texture to be bound to the current
- * texture state.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void setTexParameterfv(int parameterName,
- float[] params, int params_offset) {
- bind();
- GL gl = GLU.getCurrentGL();
- gl.glTexParameterfv(target, parameterName, params, params_offset);
- }
-
- /**
- * Sets the OpenGL integer texture parameter for the texture's
- * target. This gives control over parameters such as
- * GL_TEXTURE_WRAP_S and GL_TEXTURE_WRAP_T, which by default are set
- * to GL_CLAMP_TO_EDGE if OpenGL 1.2 is supported on the current
- * platform and GL_CLAMP if not. Causes this texture to be bound to
- * the current texture state.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void setTexParameteri(int parameterName,
- int value) {
- bind();
- GL gl = GLU.getCurrentGL();
- gl.glTexParameteri(target, parameterName, value);
- }
-
- /**
- * Sets the OpenGL multi-integer texture parameter for the texture's
- * target. Causes this texture to be bound to the current texture
- * state.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void setTexParameteriv(int parameterName,
- IntBuffer params) {
- bind();
- GL gl = GLU.getCurrentGL();
- gl.glTexParameteriv(target, parameterName, params);
- }
-
- /**
- * Sets the OpenGL multi-integer texture parameter for the texture's
- * target. Causes this texture to be bound to the current texture
- * state.
- *
- * @throws GLException if no OpenGL context was current or if any
- * OpenGL-related errors occurred
- */
- public void setTexParameteriv(int parameterName,
- int[] params, int params_offset) {
- bind();
- GL gl = GLU.getCurrentGL();
- gl.glTexParameteriv(target, parameterName, params, params_offset);
- }
-
- /**
- * Returns the underlying OpenGL texture object for this texture.
- * Most applications will not need to access this, since it is
- * handled automatically by the bind() and dispose() APIs.
- */
- public int getTextureObject() {
- return texID;
- }
-
- /** Returns an estimate of the amount of texture memory in bytes
- this Texture consumes. It should only be treated as an estimate;
- most applications should not need to query this but instead let
- the OpenGL implementation page textures in and out as
- necessary. */
- public int getEstimatedMemorySize() {
- return estimatedMemorySize;
- }
-
- /** Indicates whether this Texture is using automatic mipmap
- generation (via the OpenGL texture parameter
- GL_GENERATE_MIPMAP). This will automatically be used when
- mipmapping is requested via the TextureData and either OpenGL
- 1.4 or the GL_SGIS_generate_mipmap extension is available. If
- so, updates to the base image (mipmap level 0) will
- automatically propagate down to the lower mipmap levels. Manual
- updates of the mipmap data at these lower levels will be
- ignored. */
- public boolean isUsingAutoMipmapGeneration() {
- return usingAutoMipmapGeneration;
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- /**
- * Returns true if the given value is a power of two.
- *
- * @return true if the given value is a power of two, false otherwise
- */
- private static boolean isPowerOfTwo(int val) {
- return ((val & (val - 1)) == 0);
- }
-
- /**
- * Returns the nearest power of two that is larger than the given value.
- * If the given value is already a power of two, this method will simply
- * return that value.
- *
- * @param val the value
- * @return the next power of two
- */
- private static int nextPowerOfTwo(int val) {
- int ret = 1;
- while (ret < val) {
- ret <<= 1;
- }
- return ret;
- }
-
- /**
- * Updates the actual image dimensions; usually only called from
- * <code>updateImage</code>.
- */
- private void setImageSize(int width, int height, int target) {
- imgWidth = width;
- imgHeight = height;
- if (target == GL.GL_TEXTURE_RECTANGLE_ARB) {
- if (mustFlipVertically) {
- coords = new TextureCoords(0, imgHeight, imgWidth, 0);
- } else {
- coords = new TextureCoords(0, 0, imgWidth, imgHeight);
- }
- } else {
- if (mustFlipVertically) {
- coords = new TextureCoords(0, (float) imgHeight / (float) texHeight,
- (float) imgWidth / (float) texWidth, 0);
- } else {
- coords = new TextureCoords(0, 0,
- (float) imgWidth / (float) texWidth,
- (float) imgHeight / (float) texHeight);
- }
- }
- }
-
- private void updateSubImageImpl(TextureData data, int newTarget, int mipmapLevel,
- int dstx, int dsty,
- int srcx, int srcy, int width, int height) throws GLException {
- GL gl = GLU.getCurrentGL();
- data.setHaveEXTABGR(gl.isExtensionAvailable("GL_EXT_abgr"));
- data.setHaveGL12(gl.isExtensionAvailable("GL_VERSION_1_2"));
-
- Buffer buffer = data.getBuffer();
- if (buffer == null && data.getMipmapData() == null) {
- // Assume user just wanted to get the Texture object allocated
- return;
- }
-
- int rowlen = data.getRowLength();
- int dataWidth = data.getWidth();
- int dataHeight = data.getHeight();
- if (data.getMipmapData() != null) {
- // Compute the width, height and row length at the specified mipmap level
- // Note we do not support specification of the row length for
- // mipmapped textures at this point
- for (int i = 0; i < mipmapLevel; i++) {
- width = Math.max(width / 2, 1);
- height = Math.max(height / 2, 1);
-
- dataWidth = Math.max(dataWidth / 2, 1);
- dataHeight = Math.max(dataHeight / 2, 1);
- }
- rowlen = 0;
- buffer = data.getMipmapData()[mipmapLevel];
- }
-
- // Clip incoming rectangles to what is available both on this
- // texture and in the incoming TextureData
- if (srcx < 0) {
- width += srcx;
- srcx = 0;
- }
- if (srcy < 0) {
- height += srcy;
- srcy = 0;
- }
- // NOTE: not sure whether the following two are the correct thing to do
- if (dstx < 0) {
- width += dstx;
- dstx = 0;
- }
- if (dsty < 0) {
- height += dsty;
- dsty = 0;
- }
-
- if (srcx + width > dataWidth) {
- width = dataWidth - srcx;
- }
- if (srcy + height > dataHeight) {
- height = dataHeight - srcy;
- }
- if (dstx + width > texWidth) {
- width = texWidth - dstx;
- }
- if (dsty + height > texHeight) {
- height = texHeight - dsty;
- }
-
- checkCompressedTextureExtensions(data);
-
- if (data.isDataCompressed()) {
- gl.glCompressedTexSubImage2D(newTarget, mipmapLevel,
- dstx, dsty, width, height,
- data.getInternalFormat(),
- buffer.remaining(), buffer);
- } else {
- int[] align = new int[1];
- int[] rowLength = new int[1];
- int[] skipRows = new int[1];
- int[] skipPixels = new int[1];
- gl.glGetIntegerv(GL.GL_UNPACK_ALIGNMENT, align, 0); // save alignment
- gl.glGetIntegerv(GL.GL_UNPACK_ROW_LENGTH, rowLength, 0); // save row length
- gl.glGetIntegerv(GL.GL_UNPACK_SKIP_ROWS, skipRows, 0); // save skipped rows
- gl.glGetIntegerv(GL.GL_UNPACK_SKIP_PIXELS, skipPixels, 0); // save skipped pixels
- gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, data.getAlignment());
- if (DEBUG && VERBOSE) {
- System.out.println("Row length = " + rowlen);
- System.out.println("skip pixels = " + srcx);
- System.out.println("skip rows = " + srcy);
- System.out.println("dstx = " + dstx);
- System.out.println("dsty = " + dsty);
- System.out.println("width = " + width);
- System.out.println("height = " + height);
- }
- gl.glPixelStorei(GL.GL_UNPACK_ROW_LENGTH, rowlen);
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_ROWS, srcy);
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_PIXELS, srcx);
-
- gl.glTexSubImage2D(newTarget, mipmapLevel,
- dstx, dsty, width, height,
- data.getPixelFormat(), data.getPixelType(),
- buffer);
- gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, align[0]); // restore alignment
- gl.glPixelStorei(GL.GL_UNPACK_ROW_LENGTH, rowLength[0]); // restore row length
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_ROWS, skipRows[0]); // restore skipped rows
- gl.glPixelStorei(GL.GL_UNPACK_SKIP_PIXELS, skipPixels[0]); // restore skipped pixels
- }
- }
-
- private void checkCompressedTextureExtensions(TextureData data) {
- GL gl = GLU.getCurrentGL();
- if (data.isDataCompressed()) {
- switch (data.getInternalFormat()) {
- case GL.GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
- if (!gl.isExtensionAvailable("GL_EXT_texture_compression_s3tc") &&
- !gl.isExtensionAvailable("GL_NV_texture_compression_vtc")) {
- throw new GLException("DXTn compressed textures not supported by this graphics card");
- }
- break;
- default:
- // FIXME: should test availability of more texture
- // compression extensions here
- break;
- }
- }
- }
-
- /**
- * Creates a new texture ID.
- *
- * @param gl the GL object associated with the current OpenGL context
- * @return a new texture ID
- */
- private static int createTextureID(GL gl) {
- int[] tmp = new int[1];
- gl.glGenTextures(1, tmp, 0);
- return tmp[0];
- }
-
- // Helper routines for disabling certain codepaths
- private static boolean haveNPOT(GL gl) {
- return (!disableNPOT &&
- gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two"));
- }
-
- private static boolean haveTexRect(GL gl) {
- return (!disableTexRect &&
- TextureIO.isTexRectEnabled() &&
- gl.isExtensionAvailable("GL_ARB_texture_rectangle"));
- }
-}
diff --git a/src/classes/com/sun/opengl/util/texture/TextureCoords.java b/src/classes/com/sun/opengl/util/texture/TextureCoords.java
deleted file mode 100755
index dca1d1e01..000000000
--- a/src/classes/com/sun/opengl/util/texture/TextureCoords.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.util.texture;
-
-/** Specifies texture coordinates for a rectangular area of a
- texture. Note that some textures are inherently flipped vertically
- from OpenGL's standard coordinate system. This class takes care of
- this vertical flip so that the "bottom" and "top" coordinates may
- sometimes be reversed. From the point of view of code rendering
- textured polygons, it can always map the bottom and left texture
- coordinates from the TextureCoords to the lower left point of the
- textured polygon and achieve correct results. */
-
-public class TextureCoords {
- // These represent the lower-left point
- private float left;
- private float bottom;
- // These represent the upper-right point
- private float right;
- private float top;
-
- public TextureCoords(float left, float bottom,
- float right, float top) {
- this.left = left;
- this.bottom = bottom;
- this.right = right;
- this.top = top;
- }
-
- /** Returns the leftmost (x) texture coordinate of this
- rectangle. */
- public float left() { return left; }
-
- /** Returns the rightmost (x) texture coordinate of this
- rectangle. */
- public float right() { return right; }
-
- /** Returns the bottommost (y) texture coordinate of this
- rectangle. */
- public float bottom() { return bottom; }
-
- /** Returns the topmost (y) texture coordinate of this
- rectangle. */
- public float top() { return top; }
-}
diff --git a/src/classes/com/sun/opengl/util/texture/TextureData.java b/src/classes/com/sun/opengl/util/texture/TextureData.java
deleted file mode 100755
index 60e8c6d05..000000000
--- a/src/classes/com/sun/opengl/util/texture/TextureData.java
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.sun.opengl.util.texture;
-
-import java.awt.AlphaComposite;
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.Transparency;
-import java.awt.color.*;
-import java.awt.image.*;
-import java.nio.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.util.*;
-
-/**
- * Represents the data for an OpenGL texture. This is separated from
- * the notion of a Texture to support things like streaming in of
- * textures in a background thread without requiring an OpenGL context
- * to be current on that thread.
- *
- * @author Chris Campbell
- * @author Kenneth Russell
- */
-
-public class TextureData {
- private int width;
- private int height;
- private int border;
- private int pixelFormat;
- private int pixelType;
- private int internalFormat; // perhaps inferred from pixelFormat?
- private boolean mipmap; // indicates whether mipmaps should be generated
- // (ignored if mipmaps are supplied from the file)
- private boolean dataIsCompressed;
- private boolean mustFlipVertically; // Must flip texture coordinates
- // vertically to get OpenGL output
- // to look correct
- private Buffer buffer; // the actual data...
- private Buffer[] mipmapData; // ...or a series of mipmaps
- private Flusher flusher;
- private int rowLength;
- private int alignment; // 1, 2, or 4 bytes
- private int estimatedMemorySize;
-
- // Mechanism for lazily converting input BufferedImages with custom
- // ColorModels to standard ones for uploading to OpenGL, as well as
- // backing off from the optimizations of hoping that either
- // GL_EXT_abgr or OpenGL 1.2 are present
- private BufferedImage imageForLazyCustomConversion;
- private boolean expectingEXTABGR;
- private boolean haveEXTABGR;
- private boolean expectingGL12;
- private boolean haveGL12;
-
- private static final ColorModel rgbaColorModel =
- new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
- new int[] {8, 8, 8, 8}, true, true,
- Transparency.TRANSLUCENT,
- DataBuffer.TYPE_BYTE);
- private static final ColorModel rgbColorModel =
- new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
- new int[] {8, 8, 8, 0}, false, false,
- Transparency.OPAQUE,
- DataBuffer.TYPE_BYTE);
-
- /**
- * Constructs a new TextureData object with the specified parameters
- * and data contained in the given Buffer. The optional Flusher can
- * be used to clean up native resources associated with this
- * TextureData when processing is complete; for example, closing of
- * memory-mapped files that might otherwise require a garbage
- * collection to reclaim and close.
- *
- * @param internalFormat the OpenGL internal format for the
- * resulting texture; must be specified, may
- * not be 0
- * @param width the width in pixels of the texture
- * @param height the height in pixels of the texture
- * @param border the number of pixels of border this texture
- * data has (0 or 1)
- * @param pixelFormat the OpenGL pixel format for the
- * resulting texture; must be specified, may
- * not be 0
- * @param pixelType the OpenGL type of the pixels of the texture
- * @param mipmap indicates whether mipmaps should be
- * autogenerated (using GLU) for the resulting
- * texture. Currently if mipmap is true then
- * dataIsCompressed may not be true.
- * @param dataIsCompressed indicates whether the texture data is in
- * compressed form
- * (e.g. GL_COMPRESSED_RGB_S3TC_DXT1_EXT)
- * @param mustFlipVertically indicates whether the texture
- * coordinates must be flipped vertically
- * in order to properly display the
- * texture
- * @param buffer the buffer containing the texture data
- * @param flusher optional flusher to perform cleanup tasks
- * upon call to flush()
- *
- * @throws IllegalArgumentException if any parameters of the texture
- * data were invalid, such as requesting mipmap generation for a
- * compressed texture
- */
- public TextureData(int internalFormat,
- int width,
- int height,
- int border,
- int pixelFormat,
- int pixelType,
- boolean mipmap,
- boolean dataIsCompressed,
- boolean mustFlipVertically,
- Buffer buffer,
- Flusher flusher) throws IllegalArgumentException {
- if (mipmap && dataIsCompressed) {
- throw new IllegalArgumentException("Can not generate mipmaps for compressed textures");
- }
-
- this.width = width;
- this.height = height;
- this.border = border;
- this.pixelFormat = pixelFormat;
- this.pixelType = pixelType;
- this.internalFormat = internalFormat;
- this.mipmap = mipmap;
- this.dataIsCompressed = dataIsCompressed;
- this.mustFlipVertically = mustFlipVertically;
- this.buffer = buffer;
- this.flusher = flusher;
- alignment = 1; // FIXME: is this correct enough in all situations?
- estimatedMemorySize = estimatedMemorySize(buffer);
- }
-
- /**
- * Constructs a new TextureData object with the specified parameters
- * and data for multiple mipmap levels contained in the given array
- * of Buffers. The optional Flusher can be used to clean up native
- * resources associated with this TextureData when processing is
- * complete; for example, closing of memory-mapped files that might
- * otherwise require a garbage collection to reclaim and close.
- *
- * @param internalFormat the OpenGL internal format for the
- * resulting texture; must be specified, may
- * not be 0
- * @param width the width in pixels of the topmost mipmap
- * level of the texture
- * @param height the height in pixels of the topmost mipmap
- * level of the texture
- * @param border the number of pixels of border this texture
- * data has (0 or 1)
- * @param pixelFormat the OpenGL pixel format for the
- * resulting texture; must be specified, may
- * not be 0
- * @param pixelType the OpenGL type of the pixels of the texture
- * @param dataIsCompressed indicates whether the texture data is in
- * compressed form
- * (e.g. GL_COMPRESSED_RGB_S3TC_DXT1_EXT)
- * @param mustFlipVertically indicates whether the texture
- * coordinates must be flipped vertically
- * in order to properly display the
- * texture
- * @param mipmapData the buffers containing all mipmap levels
- * of the texture's data
- * @param flusher optional flusher to perform cleanup tasks
- * upon call to flush()
- *
- * @throws IllegalArgumentException if any parameters of the texture
- * data were invalid, such as requesting mipmap generation for a
- * compressed texture
- */
- public TextureData(int internalFormat,
- int width,
- int height,
- int border,
- int pixelFormat,
- int pixelType,
- boolean dataIsCompressed,
- boolean mustFlipVertically,
- Buffer[] mipmapData,
- Flusher flusher) throws IllegalArgumentException {
- this.width = width;
- this.height = height;
- this.border = border;
- this.pixelFormat = pixelFormat;
- this.pixelType = pixelType;
- this.internalFormat = internalFormat;
- this.dataIsCompressed = dataIsCompressed;
- this.mustFlipVertically = mustFlipVertically;
- this.mipmapData = (Buffer[]) mipmapData.clone();
- this.flusher = flusher;
- alignment = 1; // FIXME: is this correct enough in all situations?
- for (int i = 0; i < mipmapData.length; i++) {
- estimatedMemorySize += estimatedMemorySize(mipmapData[i]);
- }
- }
-
- /**
- * Constructs a new TextureData object with the specified parameters
- * and data contained in the given BufferedImage. The resulting
- * TextureData "wraps" the contents of the BufferedImage, so if a
- * modification is made to the BufferedImage between the time the
- * TextureData is constructed and when a Texture is made from the
- * TextureData, that modification will be visible in the resulting
- * Texture.
- *
- * @param internalFormat the OpenGL internal format for the
- * resulting texture; may be 0, in which case
- * it is inferred from the image's type
- * @param pixelFormat the OpenGL internal format for the
- * resulting texture; may be 0, in which case
- * it is inferred from the image's type (note:
- * this argument is currently always ignored)
- * @param mipmap indicates whether mipmaps should be
- * autogenerated (using GLU) for the resulting
- * texture
- * @param image the image containing the texture data
- */
- public TextureData(int internalFormat,
- int pixelFormat,
- boolean mipmap,
- BufferedImage image) {
- if (internalFormat == 0) {
- this.internalFormat = image.getColorModel().hasAlpha() ? GL.GL_RGBA : GL.GL_RGB;
- } else {
- this.internalFormat = internalFormat;
- }
- createFromImage(image);
- this.mipmap = mipmap;
- if (buffer != null) {
- estimatedMemorySize = estimatedMemorySize(buffer);
- } else {
- // In the lazy custom conversion case we don't yet have a buffer
- if (imageForLazyCustomConversion != null) {
- estimatedMemorySize = estimatedMemorySize(wrapImageDataBuffer(imageForLazyCustomConversion));
- }
- }
- }
-
- /** Returns the width in pixels of the texture data. */
- public int getWidth() { return width; }
- /** Returns the height in pixels of the texture data. */
- public int getHeight() { return height; }
- /** Returns the border in pixels of the texture data. */
- public int getBorder() { return border; }
- /** Returns the intended OpenGL pixel format of the texture data. */
- public int getPixelFormat() {
- if (imageForLazyCustomConversion != null) {
- if (!((expectingEXTABGR && haveEXTABGR) ||
- (expectingGL12 && haveGL12))) {
- revertPixelFormatAndType();
- }
- }
- return pixelFormat;
- }
- /** Returns the intended OpenGL pixel type of the texture data. */
- public int getPixelType() {
- if (imageForLazyCustomConversion != null) {
- if (!((expectingEXTABGR && haveEXTABGR) ||
- (expectingGL12 && haveGL12))) {
- revertPixelFormatAndType();
- }
- }
- return pixelType;
- }
- /** Returns the intended OpenGL internal format of the texture data. */
- public int getInternalFormat() { return internalFormat; }
- /** Returns whether mipmaps should be generated for the texture data. */
- public boolean getMipmap() { return mipmap; }
- /** Indicates whether the texture data is in compressed form. */
- public boolean isDataCompressed() { return dataIsCompressed; }
- /** Indicates whether the texture coordinates must be flipped
- vertically for proper display. */
- public boolean getMustFlipVertically() { return mustFlipVertically; }
- /** Returns the texture data, or null if it is specified as a set of mipmaps. */
- public Buffer getBuffer() {
- if (imageForLazyCustomConversion != null) {
- if (!((expectingEXTABGR && haveEXTABGR) ||
- (expectingGL12 && haveGL12))) {
- revertPixelFormatAndType();
- // Must present the illusion to the end user that we are simply
- // wrapping the input BufferedImage
- createFromCustom(imageForLazyCustomConversion);
- }
- }
- return buffer;
- }
- /** Returns all mipmap levels for the texture data, or null if it is
- specified as a single image. */
- public Buffer[] getMipmapData() { return mipmapData; }
- /** Returns the required byte alignment for the texture data. */
- public int getAlignment() { return alignment; }
- /** Returns the row length needed for correct GL_UNPACK_ROW_LENGTH
- specification. This is currently only supported for
- non-mipmapped, non-compressed textures. */
- public int getRowLength() { return rowLength; }
-
- /** Sets the width in pixels of the texture data. */
- public void setWidth(int width) { this.width = width; }
- /** Sets the height in pixels of the texture data. */
- public void setHeight(int height) { this.height = height; }
- /** Sets the border in pixels of the texture data. */
- public void setBorder(int border) { this.border = border; }
- /** Sets the intended OpenGL pixel format of the texture data. */
- public void setPixelFormat(int pixelFormat) { this.pixelFormat = pixelFormat; }
- /** Sets the intended OpenGL pixel type of the texture data. */
- public void setPixelType(int pixelType) { this.pixelType = pixelType; }
- /** Sets the intended OpenGL internal format of the texture data. */
- public void setInternalFormat(int internalFormat) { this.internalFormat = internalFormat; }
- /** Sets whether mipmaps should be generated for the texture data. */
- public void setMipmap(boolean mipmap) { this.mipmap = mipmap; }
- /** Sets whether the texture data is in compressed form. */
- public void setIsDataCompressed(boolean compressed) { this.dataIsCompressed = compressed; }
- /** Sets whether the texture coordinates must be flipped vertically
- for proper display. */
- public void setMustFlipVertically(boolean mustFlipVertically) { this.mustFlipVertically = mustFlipVertically; }
- /** Sets the texture data. */
- public void setBuffer(Buffer buffer) {
- this.buffer = buffer;
- estimatedMemorySize = estimatedMemorySize(buffer);
- }
- /** Sets the required byte alignment for the texture data. */
- public void setAlignment(int alignment) { this.alignment = alignment; }
- /** Sets the row length needed for correct GL_UNPACK_ROW_LENGTH
- specification. This is currently only supported for
- non-mipmapped, non-compressed textures. */
- public void setRowLength(int rowLength) { this.rowLength = rowLength; }
- /** Indicates to this TextureData whether the GL_EXT_abgr extension
- is available. Used for optimization along some code paths to
- avoid data copies. */
- public void setHaveEXTABGR(boolean haveEXTABGR) {
- this.haveEXTABGR = haveEXTABGR;
- }
- /** Indicates to this TextureData whether OpenGL version 1.2 is
- available. If not, falls back to relatively inefficient code
- paths for several input data types (several kinds of packed
- pixel formats, in particular). */
- public void setHaveGL12(boolean haveGL12) {
- this.haveGL12 = haveGL12;
- }
-
- /** Returns an estimate of the amount of memory in bytes this
- TextureData will consume once uploaded to the graphics card. It
- should only be treated as an estimate; most applications should
- not need to query this but instead let the OpenGL implementation
- page textures in and out as necessary. */
- public int getEstimatedMemorySize() {
- return estimatedMemorySize;
- }
-
- /** Flushes resources associated with this TextureData by calling
- Flusher.flush(). */
- public void flush() {
- if (flusher != null) {
- flusher.flush();
- flusher = null;
- }
- }
-
- /** Defines a callback mechanism to allow the user to explicitly
- deallocate native resources (memory-mapped files, etc.)
- associated with a particular TextureData. */
- public static interface Flusher {
- /** Flushes any native resources associated with this
- TextureData. */
- public void flush();
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void createNIOBufferFromImage(BufferedImage image) {
- buffer = wrapImageDataBuffer(image);
- }
-
- private Buffer wrapImageDataBuffer(BufferedImage image) {
- //
- // Note: Grabbing the DataBuffer will defeat Java2D's image
- // management mechanism (as of JDK 5/6, at least). This shouldn't
- // be a problem for most JOGL apps, but those that try to upload
- // the image into an OpenGL texture and then use the same image in
- // Java2D rendering might find the 2D rendering is not as fast as
- // it could be.
- //
-
- DataBuffer data = image.getRaster().getDataBuffer();
- if (data instanceof DataBufferByte) {
- return ByteBuffer.wrap(((DataBufferByte) data).getData());
- } else if (data instanceof DataBufferDouble) {
- throw new RuntimeException("DataBufferDouble rasters not supported by OpenGL");
- } else if (data instanceof DataBufferFloat) {
- return FloatBuffer.wrap(((DataBufferFloat) data).getData());
- } else if (data instanceof DataBufferInt) {
- return IntBuffer.wrap(((DataBufferInt) data).getData());
- } else if (data instanceof DataBufferShort) {
- return ShortBuffer.wrap(((DataBufferShort) data).getData());
- } else if (data instanceof DataBufferUShort) {
- return ShortBuffer.wrap(((DataBufferUShort) data).getData());
- } else {
- throw new RuntimeException("Unexpected DataBuffer type?");
- }
- }
-
- private void createFromImage(BufferedImage image) {
- pixelType = 0; // Determine from image
- mustFlipVertically = true;
-
- width = image.getWidth();
- height = image.getHeight();
-
- int scanlineStride;
- SampleModel sm = image.getRaster().getSampleModel();
- if (sm instanceof SinglePixelPackedSampleModel) {
- scanlineStride =
- ((SinglePixelPackedSampleModel)sm).getScanlineStride();
- } else if (sm instanceof MultiPixelPackedSampleModel) {
- scanlineStride =
- ((MultiPixelPackedSampleModel)sm).getScanlineStride();
- } else if (sm instanceof ComponentSampleModel) {
- scanlineStride =
- ((ComponentSampleModel)sm).getScanlineStride();
- } else {
- // This will only happen for TYPE_CUSTOM anyway
- setupLazyCustomConversion(image);
- return;
- }
-
- switch (image.getType()) {
- case BufferedImage.TYPE_INT_RGB:
- pixelFormat = GL.GL_BGRA;
- pixelType = GL.GL_UNSIGNED_INT_8_8_8_8_REV;
- rowLength = scanlineStride;
- alignment = 4;
- expectingGL12 = true;
- setupLazyCustomConversion(image);
- break;
- case BufferedImage.TYPE_INT_ARGB_PRE:
- pixelFormat = GL.GL_BGRA;
- pixelType = GL.GL_UNSIGNED_INT_8_8_8_8_REV;
- rowLength = scanlineStride;
- alignment = 4;
- expectingGL12 = true;
- setupLazyCustomConversion(image);
- break;
- case BufferedImage.TYPE_INT_BGR:
- pixelFormat = GL.GL_RGBA;
- pixelType = GL.GL_UNSIGNED_INT_8_8_8_8_REV;
- rowLength = scanlineStride;
- alignment = 4;
- expectingGL12 = true;
- setupLazyCustomConversion(image);
- break;
- case BufferedImage.TYPE_3BYTE_BGR:
- {
- // we can pass the image data directly to OpenGL only if
- // we have an integral number of pixels in each scanline
- if ((scanlineStride % 3) == 0) {
- pixelFormat = GL.GL_BGR;
- pixelType = GL.GL_UNSIGNED_BYTE;
- rowLength = scanlineStride / 3;
- alignment = 1;
- } else {
- setupLazyCustomConversion(image);
- return;
- }
- }
- break;
- case BufferedImage.TYPE_4BYTE_ABGR_PRE:
- {
- // we can pass the image data directly to OpenGL only if
- // we have an integral number of pixels in each scanline
- // and only if the GL_EXT_abgr extension is present
-
- // NOTE: disabling this code path for now as it appears it's
- // buggy at least on some NVidia drivers and doesn't perform
- // the necessary byte swapping (FIXME: needs more
- // investigation)
- if ((scanlineStride % 4) == 0 && false) {
- pixelFormat = GL.GL_ABGR_EXT;
- pixelType = GL.GL_UNSIGNED_BYTE;
- rowLength = scanlineStride / 4;
- alignment = 4;
-
- // Store a reference to the original image for later in
- // case it turns out that we don't have GL_EXT_abgr at the
- // time we're going to do the texture upload to OpenGL
- setupLazyCustomConversion(image);
- expectingEXTABGR = true;
- break;
- } else {
- setupLazyCustomConversion(image);
- return;
- }
- }
- case BufferedImage.TYPE_USHORT_565_RGB:
- pixelFormat = GL.GL_RGB;
- pixelType = GL.GL_UNSIGNED_SHORT_5_6_5;
- rowLength = scanlineStride;
- alignment = 2;
- expectingGL12 = true;
- setupLazyCustomConversion(image);
- break;
- case BufferedImage.TYPE_USHORT_555_RGB:
- pixelFormat = GL.GL_BGRA;
- pixelType = GL.GL_UNSIGNED_SHORT_1_5_5_5_REV;
- rowLength = scanlineStride;
- alignment = 2;
- expectingGL12 = true;
- setupLazyCustomConversion(image);
- break;
- case BufferedImage.TYPE_BYTE_GRAY:
- pixelFormat = GL.GL_LUMINANCE;
- pixelType = GL.GL_UNSIGNED_BYTE;
- rowLength = scanlineStride;
- alignment = 1;
- break;
- case BufferedImage.TYPE_USHORT_GRAY:
- pixelFormat = GL.GL_LUMINANCE;
- pixelType = GL.GL_UNSIGNED_SHORT;
- rowLength = scanlineStride;
- alignment = 2;
- break;
- // Note: TYPE_INT_ARGB and TYPE_4BYTE_ABGR images go down the
- // custom code path to satisfy the invariant that images with an
- // alpha channel always go down with premultiplied alpha.
- case BufferedImage.TYPE_INT_ARGB:
- case BufferedImage.TYPE_4BYTE_ABGR:
- case BufferedImage.TYPE_BYTE_BINARY:
- case BufferedImage.TYPE_BYTE_INDEXED:
- case BufferedImage.TYPE_CUSTOM:
- default:
- ColorModel cm = image.getColorModel();
- if (cm.equals(rgbColorModel)) {
- pixelFormat = GL.GL_RGB;
- pixelType = GL.GL_UNSIGNED_BYTE;
- rowLength = scanlineStride / 3;
- alignment = 1;
- } else if (cm.equals(rgbaColorModel)) {
- pixelFormat = GL.GL_RGBA;
- pixelType = GL.GL_UNSIGNED_BYTE;
- rowLength = scanlineStride / 4; // FIXME: correct?
- alignment = 4;
- } else {
- setupLazyCustomConversion(image);
- return;
- }
- break;
- }
-
- createNIOBufferFromImage(image);
- }
-
- private void setupLazyCustomConversion(BufferedImage image) {
- imageForLazyCustomConversion = image;
- boolean hasAlpha = image.getColorModel().hasAlpha();
- if (pixelFormat == 0) {
- pixelFormat = hasAlpha ? GL.GL_RGBA : GL.GL_RGB;
- }
- alignment = 1; // FIXME: do we need better?
- rowLength = width; // FIXME: correct in all cases?
-
- // Allow previously-selected pixelType (if any) to override that
- // we can infer from the DataBuffer
- DataBuffer data = image.getRaster().getDataBuffer();
- if (data instanceof DataBufferByte || isPackedInt(image)) {
- // Don't use GL_UNSIGNED_INT for BufferedImage packed int images
- if (pixelType == 0) pixelType = GL.GL_UNSIGNED_BYTE;
- } else if (data instanceof DataBufferDouble) {
- throw new RuntimeException("DataBufferDouble rasters not supported by OpenGL");
- } else if (data instanceof DataBufferFloat) {
- if (pixelType == 0) pixelType = GL.GL_FLOAT;
- } else if (data instanceof DataBufferInt) {
- // FIXME: should we support signed ints?
- if (pixelType == 0) pixelType = GL.GL_UNSIGNED_INT;
- } else if (data instanceof DataBufferShort) {
- if (pixelType == 0) pixelType = GL.GL_SHORT;
- } else if (data instanceof DataBufferUShort) {
- if (pixelType == 0) pixelType = GL.GL_UNSIGNED_SHORT;
- } else {
- throw new RuntimeException("Unexpected DataBuffer type?");
- }
- }
-
- private void createFromCustom(BufferedImage image) {
- int width = image.getWidth();
- int height = image.getHeight();
-
- // create a temporary image that is compatible with OpenGL
- boolean hasAlpha = image.getColorModel().hasAlpha();
- ColorModel cm = null;
- int dataBufferType = image.getRaster().getDataBuffer().getDataType();
- // Don't use integer components for packed int images
- if (isPackedInt(image)) {
- dataBufferType = DataBuffer.TYPE_BYTE;
- }
- if (dataBufferType == DataBuffer.TYPE_BYTE) {
- cm = hasAlpha ? rgbaColorModel : rgbColorModel;
- } else {
- if (hasAlpha) {
- cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
- null, true, true,
- Transparency.TRANSLUCENT,
- dataBufferType);
- } else {
- cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
- null, false, false,
- Transparency.OPAQUE,
- dataBufferType);
- }
- }
-
- boolean premult = cm.isAlphaPremultiplied();
- WritableRaster raster =
- cm.createCompatibleWritableRaster(width, height);
- BufferedImage texImage = new BufferedImage(cm, raster, premult, null);
-
- // copy the source image into the temporary image
- Graphics2D g = texImage.createGraphics();
- g.setComposite(AlphaComposite.Src);
- g.drawImage(image, 0, 0, null);
- g.dispose();
-
- // Wrap the buffer from the temporary image
- createNIOBufferFromImage(texImage);
- }
-
- private boolean isPackedInt(BufferedImage image) {
- int imgType = image.getType();
- return (imgType == BufferedImage.TYPE_INT_RGB ||
- imgType == BufferedImage.TYPE_INT_BGR ||
- imgType == BufferedImage.TYPE_INT_ARGB ||
- imgType == BufferedImage.TYPE_INT_ARGB_PRE);
- }
-
- private void revertPixelFormatAndType() {
- // Knowing we don't have e.g. OpenGL 1.2 functionality available,
- // and knowing we're in the process of doing the fallback code
- // path, re-infer a vanilla pixel format and type compatible with
- // OpenGL 1.1
- pixelFormat = 0;
- pixelType = 0;
- setupLazyCustomConversion(imageForLazyCustomConversion);
- }
-
- private int estimatedMemorySize(Buffer buffer) {
- if (buffer == null) {
- return 0;
- }
- int capacity = buffer.capacity();
- if (buffer instanceof ByteBuffer) {
- return capacity;
- } else if (buffer instanceof IntBuffer) {
- return capacity * BufferUtil.SIZEOF_INT;
- } else if (buffer instanceof FloatBuffer) {
- return capacity * BufferUtil.SIZEOF_FLOAT;
- } else if (buffer instanceof ShortBuffer) {
- return capacity * BufferUtil.SIZEOF_SHORT;
- } else if (buffer instanceof LongBuffer) {
- return capacity * BufferUtil.SIZEOF_LONG;
- } else if (buffer instanceof DoubleBuffer) {
- return capacity * BufferUtil.SIZEOF_DOUBLE;
- }
- throw new RuntimeException("Unexpected buffer type " +
- buffer.getClass().getName());
- }
-}
diff --git a/src/classes/com/sun/opengl/util/texture/TextureIO.java b/src/classes/com/sun/opengl/util/texture/TextureIO.java
deleted file mode 100755
index a7eb9c2d7..000000000
--- a/src/classes/com/sun/opengl/util/texture/TextureIO.java
+++ /dev/null
@@ -1,1358 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.texture;
-
-import java.awt.Graphics;
-import java.awt.image.*;
-import java.io.*;
-import java.net.*;
-import java.nio.*;
-import java.util.*;
-import javax.imageio.*;
-
-import javax.media.opengl.*;
-import javax.media.opengl.glu.*;
-import com.sun.opengl.impl.Debug;
-import com.sun.opengl.util.*;
-import com.sun.opengl.util.texture.spi.*;
-
-/** <P> Provides input and output facilities for both loading OpenGL
- textures from disk and streams as well as writing textures already
- in memory back to disk. </P>
-
- <P> The TextureIO class supports an arbitrary number of plug-in
- readers and writers via TextureProviders and TextureWriters.
- TextureProviders know how to produce TextureData objects from
- files, InputStreams and URLs. TextureWriters know how to write
- TextureData objects to disk in various file formats. The
- TextureData class represents the raw data of the texture before it
- has been converted to an OpenGL texture object. The Texture class
- represents the OpenGL texture object and provides easy facilities
- for using the texture. </P>
-
- <P> There are several built-in TextureProviders and TextureWriters
- supplied with the TextureIO implementation. The most basic
- provider uses the platform's Image I/O facilities to read in a
- BufferedImage and convert it to a texture. This is the baseline
- provider and is registered so that it is the last one consulted.
- All others are asked first to open a given file. </P>
-
- <P> There are three other providers registered by default as of
- the time of this writing. One handles SGI RGB (".sgi", ".rgb")
- images from both files and streams. One handles DirectDraw Surface
- (".dds") images read from files, though can not read these images
- from streams. One handles Targa (".tga") images read from both
- files and streams. These providers are executed in an arbitrary
- order. Some of these providers require the file's suffix to either
- be specified via the newTextureData methods or for the file to be
- named with the appropriate suffix. In general a file suffix should
- be provided to the newTexture and newTextureData methods if at all
- possible. </P>
-
- <P> Note that additional TextureProviders, if reading images from
- InputStreams, must use the mark()/reset() methods on InputStream
- when probing for e.g. magic numbers at the head of the file to
- make sure not to disturb the state of the InputStream for
- downstream TextureProviders. </P>
-
- <P> There are analogous TextureWriters provided for writing
- textures back to disk if desired. As of this writing, there are
- four TextureWriters registered by default: one for Targa files,
- one for SGI RGB files, one for DirectDraw surface (.dds) files,
- and one for ImageIO-supplied formats such as .jpg and .png. Some
- of these writers have certain limitations such as only being able
- to write out textures stored in GL_RGB or GL_RGBA format. The DDS
- writer supports fetching and writing to disk of texture data in
- DXTn compressed format. Whether this will occur is dependent on
- whether the texture's internal format is one of the DXTn
- compressed formats and whether the target file is .dds format.
-*/
-
-public class TextureIO {
- /** Constant which can be used as a file suffix to indicate a
- DirectDraw Surface file. */
- public static final String DDS = "dds";
-
- /** Constant which can be used as a file suffix to indicate an SGI
- RGB file. */
- public static final String SGI = "sgi";
-
- /** Constant which can be used as a file suffix to indicate an SGI
- RGB file. */
- public static final String SGI_RGB = "rgb";
-
- /** Constant which can be used as a file suffix to indicate a GIF
- file. */
- public static final String GIF = "gif";
-
- /** Constant which can be used as a file suffix to indicate a JPEG
- file. */
- public static final String JPG = "jpg";
-
- /** Constant which can be used as a file suffix to indicate a PNG
- file. */
- public static final String PNG = "png";
-
- /** Constant which can be used as a file suffix to indicate a Targa
- file. */
- public static final String TGA = "tga";
-
- /** Constant which can be used as a file suffix to indicate a TIFF
- file. */
- public static final String TIFF = "tiff";
-
- private static final boolean DEBUG = Debug.debug("TextureIO");
-
- // For manually disabling the use of the texture rectangle
- // extensions so you know the texture target is GL_TEXTURE_2D; this
- // is useful for shader writers (thanks to Chris Campbell for this
- // observation)
- private static boolean texRectEnabled = true;
-
- //----------------------------------------------------------------------
- // methods that *do not* require a current context
- // These methods assume RGB or RGBA textures.
- // Some texture providers may not recognize the file format unless
- // the fileSuffix is specified, so it is strongly recommended to
- // specify it wherever it is known.
- // Some texture providers may also only support one kind of input,
- // i.e., reading from a file as opposed to a stream.
-
- /**
- * Creates a TextureData from the given file. Does no OpenGL work.
- *
- * @param file the file from which to read the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @return the texture data from the file, or null if none of the
- * registered texture providers could read the file
- * @throws IOException if an error occurred while reading the file
- */
- public static TextureData newTextureData(File file,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (fileSuffix == null) {
- fileSuffix = FileUtil.getFileSuffix(file);
- }
- return newTextureDataImpl(file, 0, 0, mipmap, fileSuffix);
- }
-
- /**
- * Creates a TextureData from the given stream. Does no OpenGL work.
- *
- * @param stream the stream from which to read the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @return the texture data from the stream, or null if none of the
- * registered texture providers could read the stream
- * @throws IOException if an error occurred while reading the stream
- */
- public static TextureData newTextureData(InputStream stream,
- boolean mipmap,
- String fileSuffix) throws IOException {
- return newTextureDataImpl(stream, 0, 0, mipmap, fileSuffix);
- }
-
- /**
- * Creates a TextureData from the given URL. Does no OpenGL work.
- *
- * @param url the URL from which to read the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @return the texture data from the URL, or null if none of the
- * registered texture providers could read the URL
- * @throws IOException if an error occurred while reading the URL
- */
- public static TextureData newTextureData(URL url,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (fileSuffix == null) {
- fileSuffix = FileUtil.getFileSuffix(url.getPath());
- }
- return newTextureDataImpl(url, 0, 0, mipmap, fileSuffix);
- }
-
- /**
- * Creates a TextureData from the given BufferedImage. Does no
- * OpenGL work.
- *
- * @param image the BufferedImage containing the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture by autogenerating them
- * @return the texture data from the image
- */
- public static TextureData newTextureData(BufferedImage image,
- boolean mipmap) {
- return newTextureDataImpl(image, 0, 0, mipmap);
- }
-
- //----------------------------------------------------------------------
- // These methods make no assumption about the OpenGL internal format
- // or pixel format of the texture; they must be specified by the
- // user. It is not allowed to supply 0 (indicating no preference)
- // for either the internalFormat or the pixelFormat;
- // IllegalArgumentException will be thrown in this case.
-
- /**
- * Creates a TextureData from the given file, using the specified
- * OpenGL internal format and pixel format for the texture which
- * will eventually result. The internalFormat and pixelFormat must
- * be specified and may not be zero; to use default values, use the
- * variant of this method which does not take these arguments. Does
- * no OpenGL work.
- *
- * @param file the file from which to read the texture data
- * @param internalFormat the OpenGL internal format of the texture
- * which will eventually result from the TextureData
- * @param pixelFormat the OpenGL pixel format of the texture
- * which will eventually result from the TextureData
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @return the texture data from the file, or null if none of the
- * registered texture providers could read the file
- * @throws IllegalArgumentException if either internalFormat or
- * pixelFormat was 0
- * @throws IOException if an error occurred while reading the file
- */
- public static TextureData newTextureData(File file,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException, IllegalArgumentException {
- if ((internalFormat == 0) || (pixelFormat == 0)) {
- throw new IllegalArgumentException("internalFormat and pixelFormat must be non-zero");
- }
-
- if (fileSuffix == null) {
- fileSuffix = FileUtil.getFileSuffix(file);
- }
-
- return newTextureDataImpl(file, internalFormat, pixelFormat, mipmap, fileSuffix);
- }
-
- /**
- * Creates a TextureData from the given stream, using the specified
- * OpenGL internal format and pixel format for the texture which
- * will eventually result. The internalFormat and pixelFormat must
- * be specified and may not be zero; to use default values, use the
- * variant of this method which does not take these arguments. Does
- * no OpenGL work.
- *
- * @param stream the stream from which to read the texture data
- * @param internalFormat the OpenGL internal format of the texture
- * which will eventually result from the TextureData
- * @param pixelFormat the OpenGL pixel format of the texture
- * which will eventually result from the TextureData
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @return the texture data from the stream, or null if none of the
- * registered texture providers could read the stream
- * @throws IllegalArgumentException if either internalFormat or
- * pixelFormat was 0
- * @throws IOException if an error occurred while reading the stream
- */
- public static TextureData newTextureData(InputStream stream,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException, IllegalArgumentException {
- if ((internalFormat == 0) || (pixelFormat == 0)) {
- throw new IllegalArgumentException("internalFormat and pixelFormat must be non-zero");
- }
-
- return newTextureDataImpl(stream, internalFormat, pixelFormat, mipmap, fileSuffix);
- }
-
- /**
- * Creates a TextureData from the given URL, using the specified
- * OpenGL internal format and pixel format for the texture which
- * will eventually result. The internalFormat and pixelFormat must
- * be specified and may not be zero; to use default values, use the
- * variant of this method which does not take these arguments. Does
- * no OpenGL work.
- *
- * @param url the URL from which to read the texture data
- * @param internalFormat the OpenGL internal format of the texture
- * which will eventually result from the TextureData
- * @param pixelFormat the OpenGL pixel format of the texture
- * which will eventually result from the TextureData
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @return the texture data from the URL, or null if none of the
- * registered texture providers could read the URL
- * @throws IllegalArgumentException if either internalFormat or
- * pixelFormat was 0
- * @throws IOException if an error occurred while reading the URL
- */
- public static TextureData newTextureData(URL url,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException, IllegalArgumentException {
- if ((internalFormat == 0) || (pixelFormat == 0)) {
- throw new IllegalArgumentException("internalFormat and pixelFormat must be non-zero");
- }
-
- if (fileSuffix == null) {
- fileSuffix = FileUtil.getFileSuffix(url.getPath());
- }
-
- return newTextureDataImpl(url, internalFormat, pixelFormat, mipmap, fileSuffix);
- }
-
- /**
- * Creates a TextureData from the given BufferedImage, using the
- * specified OpenGL internal format and pixel format for the texture
- * which will eventually result. The internalFormat and pixelFormat
- * must be specified and may not be zero; to use default values, use
- * the variant of this method which does not take these
- * arguments. Does no OpenGL work.
- *
- * @param image the BufferedImage containing the texture data
- * @param internalFormat the OpenGL internal format of the texture
- * which will eventually result from the TextureData
- * @param pixelFormat the OpenGL pixel format of the texture
- * which will eventually result from the TextureData
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @return the texture data from the image
- * @throws IllegalArgumentException if either internalFormat or
- * pixelFormat was 0
- */
- public static TextureData newTextureData(BufferedImage image,
- int internalFormat,
- int pixelFormat,
- boolean mipmap) throws IllegalArgumentException {
- if ((internalFormat == 0) || (pixelFormat == 0)) {
- throw new IllegalArgumentException("internalFormat and pixelFormat must be non-zero");
- }
-
- return newTextureDataImpl(image, internalFormat, pixelFormat, mipmap);
- }
-
- //----------------------------------------------------------------------
- // methods that *do* require a current context
- //
-
- /**
- * Creates an OpenGL texture object from the specified TextureData
- * using the current OpenGL context.
- *
- * @param data the texture data to turn into an OpenGL texture
- * @throws GLException if no OpenGL context is current or if an
- * OpenGL error occurred
- * @throws IllegalArgumentException if the passed TextureData was null
- */
- public static Texture newTexture(TextureData data) throws GLException, IllegalArgumentException {
- if (data == null) {
- throw new IllegalArgumentException("Null TextureData");
- }
- return new Texture(data);
- }
-
- /**
- * Creates an OpenGL texture object from the specified file using
- * the current OpenGL context.
- *
- * @param file the file from which to read the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @throws IOException if an error occurred while reading the file
- * @throws GLException if no OpenGL context is current or if an
- * OpenGL error occurred
- */
- public static Texture newTexture(File file, boolean mipmap) throws IOException, GLException {
- TextureData data = newTextureData(file, mipmap, FileUtil.getFileSuffix(file));
- Texture texture = newTexture(data);
- data.flush();
- return texture;
- }
-
- /**
- * Creates an OpenGL texture object from the specified stream using
- * the current OpenGL context.
- *
- * @param stream the stream from which to read the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @throws IOException if an error occurred while reading the stream
- * @throws GLException if no OpenGL context is current or if an
- * OpenGL error occurred
- */
- public static Texture newTexture(InputStream stream, boolean mipmap, String fileSuffix) throws IOException, GLException {
- TextureData data = newTextureData(stream, mipmap, fileSuffix);
- Texture texture = newTexture(data);
- data.flush();
- return texture;
- }
-
- /**
- * Creates an OpenGL texture object from the specified URL using the
- * current OpenGL context.
- *
- * @param url the URL from which to read the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- * @param fileSuffix the suffix of the file name to be used as a
- * hint of the file format to the underlying
- * texture provider, or null if none and should be
- * auto-detected (some texture providers do not
- * support this)
- * @throws IOException if an error occurred while reading the URL
- * @throws GLException if no OpenGL context is current or if an
- * OpenGL error occurred
- */
- public static Texture newTexture(URL url, boolean mipmap, String fileSuffix) throws IOException, GLException {
- if (fileSuffix == null) {
- fileSuffix = FileUtil.getFileSuffix(url.getPath());
- }
- TextureData data = newTextureData(url, mipmap, fileSuffix);
- Texture texture = newTexture(data);
- data.flush();
- return texture;
- }
-
- /**
- * Creates an OpenGL texture object from the specified BufferedImage
- * using the current OpenGL context.
- *
- * @param image the BufferedImage from which to read the texture data
- * @param mipmap whether mipmaps should be produced for this
- * texture by autogenerating them
- * @throws GLException if no OpenGL context is current or if an
- * OpenGL error occurred
- */
- public static Texture newTexture(BufferedImage image, boolean mipmap) throws GLException {
- TextureData data = newTextureData(image, mipmap);
- Texture texture = newTexture(data);
- data.flush();
- return texture;
- }
-
- /**
- * Creates an OpenGL texture object associated with the given OpenGL
- * texture target using the current OpenGL context. The texture has
- * no initial data. This is used, for example, to construct cube
- * maps out of multiple TextureData objects.
- *
- * @param target the OpenGL target type, eg GL.GL_TEXTURE_2D,
- * GL.GL_TEXTURE_RECTANGLE_ARB
- *
- * @throws GLException if no OpenGL context is current or if an
- * OpenGL error occurred
- */
- public static Texture newTexture(int target) throws GLException {
- return new Texture(target);
- }
-
- /**
- * Writes the given texture to a file. The type of the file is
- * inferred from its suffix. An OpenGL context must be current in
- * order to fetch the texture data back from the OpenGL pipeline.
- * This method causes the specified Texture to be bound to the
- * GL_TEXTURE_2D state. If no suitable writer for the requested file
- * format was found, throws an IOException. <P>
- *
- * Reasonable attempts are made to produce good results in the
- * resulting images. The Targa, SGI and ImageIO writers produce
- * results in the correct vertical orientation for those file
- * formats. The DDS writer performs no vertical flip of the data,
- * even in uncompressed mode. (It is impossible to perform such a
- * vertical flip with compressed data.) Applications should keep
- * this in mind when using this routine to save textures to disk for
- * later re-loading. <P>
- *
- * Any mipmaps for the specified texture are currently discarded
- * when it is written to disk, regardless of whether the underlying
- * file format supports multiple mipmaps in a given file.
- *
- * @throws IOException if an error occurred during writing or no
- * suitable writer was found
- * @throws GLException if no OpenGL context was current or an
- * OpenGL-related error occurred
- */
- public static void write(Texture texture, File file) throws IOException, GLException {
- if (texture.getTarget() != GL.GL_TEXTURE_2D) {
- throw new GLException("Only GL_TEXTURE_2D textures are supported");
- }
-
- // First fetch the texture data
- GL gl = GLU.getCurrentGL();
-
- texture.bind();
- int internalFormat = glGetTexLevelParameteri(GL.GL_TEXTURE_2D, 0, GL.GL_TEXTURE_INTERNAL_FORMAT);
- int width = glGetTexLevelParameteri(GL.GL_TEXTURE_2D, 0, GL.GL_TEXTURE_WIDTH);
- int height = glGetTexLevelParameteri(GL.GL_TEXTURE_2D, 0, GL.GL_TEXTURE_HEIGHT);
- int border = glGetTexLevelParameteri(GL.GL_TEXTURE_2D, 0, GL.GL_TEXTURE_BORDER);
- TextureData data = null;
- if (internalFormat == GL.GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||
- internalFormat == GL.GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||
- internalFormat == GL.GL_COMPRESSED_RGBA_S3TC_DXT3_EXT ||
- internalFormat == GL.GL_COMPRESSED_RGBA_S3TC_DXT5_EXT) {
- // Fetch using glGetCompressedTexImage
- int size = glGetTexLevelParameteri(GL.GL_TEXTURE_2D, 0, GL.GL_TEXTURE_COMPRESSED_IMAGE_SIZE);
- ByteBuffer res = ByteBuffer.allocate(size);
- gl.glGetCompressedTexImage(GL.GL_TEXTURE_2D, 0, res);
- data = new TextureData(internalFormat, width, height, border, internalFormat, GL.GL_UNSIGNED_BYTE,
- false, true, true, res, null);
- } else {
- int bytesPerPixel = 0;
- int fetchedFormat = 0;
- switch (internalFormat) {
- case GL.GL_RGB:
- case GL.GL_BGR:
- case GL.GL_RGB8:
- bytesPerPixel = 3;
- fetchedFormat = GL.GL_RGB;
- break;
- case GL.GL_RGBA:
- case GL.GL_BGRA:
- case GL.GL_ABGR_EXT:
- case GL.GL_RGBA8:
- bytesPerPixel = 4;
- fetchedFormat = GL.GL_RGBA;
- break;
- default:
- throw new IOException("Unsupported texture internal format 0x" + Integer.toHexString(internalFormat));
- }
-
- // Fetch using glGetTexImage
- int packAlignment = glGetInteger(GL.GL_PACK_ALIGNMENT);
- int packRowLength = glGetInteger(GL.GL_PACK_ROW_LENGTH);
- int packSkipRows = glGetInteger(GL.GL_PACK_SKIP_ROWS);
- int packSkipPixels = glGetInteger(GL.GL_PACK_SKIP_PIXELS);
- int packSwapBytes = glGetInteger(GL.GL_PACK_SWAP_BYTES);
-
- gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1);
- gl.glPixelStorei(GL.GL_PACK_ROW_LENGTH, 0);
- gl.glPixelStorei(GL.GL_PACK_SKIP_ROWS, 0);
- gl.glPixelStorei(GL.GL_PACK_SKIP_PIXELS, 0);
- gl.glPixelStorei(GL.GL_PACK_SWAP_BYTES, 0);
-
- ByteBuffer res = ByteBuffer.allocate((width + (2 * border)) *
- (height + (2 * border)) *
- bytesPerPixel);
- if (DEBUG) {
- System.out.println("Allocated buffer of size " + res.remaining() + " for fetched image (" +
- ((fetchedFormat == GL.GL_RGB) ? "GL_RGB" : "GL_RGBA") + ")");
- }
- gl.glGetTexImage(GL.GL_TEXTURE_2D, 0, fetchedFormat, GL.GL_UNSIGNED_BYTE, res);
-
- gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, packAlignment);
- gl.glPixelStorei(GL.GL_PACK_ROW_LENGTH, packRowLength);
- gl.glPixelStorei(GL.GL_PACK_SKIP_ROWS, packSkipRows);
- gl.glPixelStorei(GL.GL_PACK_SKIP_PIXELS, packSkipPixels);
- gl.glPixelStorei(GL.GL_PACK_SWAP_BYTES, packSwapBytes);
-
- data = new TextureData(internalFormat, width, height, border, fetchedFormat, GL.GL_UNSIGNED_BYTE,
- false, false, false, res, null);
-
- if (DEBUG) {
- System.out.println("data.getPixelFormat() = " +
- ((data.getPixelFormat() == GL.GL_RGB) ? "GL_RGB" : "GL_RGBA"));
- }
- }
-
- for (Iterator iter = textureWriters.iterator(); iter.hasNext(); ) {
- TextureWriter writer = (TextureWriter) iter.next();
- if (writer.write(file, data)) {
- return;
- }
- }
-
- throw new IOException("No suitable texture writer found");
- }
-
- //----------------------------------------------------------------------
- // SPI support
- //
-
- /** Adds a TextureProvider to support reading of a new file
- format. */
- public static void addTextureProvider(TextureProvider provider) {
- // Must always add at the front so the ImageIO provider is last,
- // so we don't accidentally use it instead of a user's possibly
- // more optimal provider
- textureProviders.add(0, provider);
- }
-
- /** Adds a TextureWriter to support writing of a new file
- format. */
- public static void addTextureWriter(TextureWriter writer) {
- // Must always add at the front so the ImageIO writer is last,
- // so we don't accidentally use it instead of a user's possibly
- // more optimal writer
- textureWriters.add(0, writer);
- }
-
- //---------------------------------------------------------------------------
- // Global disabling of texture rectangle extension
- //
-
- /** Toggles the use of the GL_ARB_texture_rectangle extension by the
- TextureIO classes. By default, on hardware supporting this
- extension, the TextureIO classes may use the
- GL_ARB_texture_rectangle extension for non-power-of-two
- textures. (If the hardware supports the
- GL_ARB_texture_non_power_of_two extension, that one is
- preferred.) In some situations, for example when writing
- shaders, it is advantageous to force the texture target to
- always be GL_TEXTURE_2D in order to have one version of the
- shader, even at the expense of texture memory in the case where
- NPOT textures are not supported. This method allows the use of
- the GL_ARB_texture_rectangle extension to be turned off globally
- for this purpose. The default is that the use of the extension
- is enabled. */
- public static void setTexRectEnabled(boolean enabled) {
- texRectEnabled = enabled;
- }
-
- /** Indicates whether the GL_ARB_texture_rectangle extension is
- allowed to be used for non-power-of-two textures; see {@link
- #setTexRectEnabled setTexRectEnabled}. */
- public static boolean isTexRectEnabled() {
- return texRectEnabled;
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private static List/*<TextureProvider>*/ textureProviders = new ArrayList/*<TextureProvider>*/();
- private static List/*<TextureWriter>*/ textureWriters = new ArrayList/*<TextureWriter>*/();
-
- static {
- // ImageIO provider, the fall-back, must be the first one added
- addTextureProvider(new IIOTextureProvider());
-
- // Other special-case providers
- addTextureProvider(new DDSTextureProvider());
- addTextureProvider(new SGITextureProvider());
- addTextureProvider(new TGATextureProvider());
-
- // ImageIO writer, the fall-back, must be the first one added
- textureWriters.add(new IIOTextureWriter());
-
- // Other special-case writers
- addTextureWriter(new DDSTextureWriter());
- addTextureWriter(new SGITextureWriter());
- addTextureWriter(new TGATextureWriter());
- }
-
- // Implementation methods
- private static TextureData newTextureDataImpl(File file,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (file == null) {
- throw new IOException("File was null");
- }
-
- fileSuffix = toLowerCase(fileSuffix);
-
- for (Iterator iter = textureProviders.iterator(); iter.hasNext(); ) {
- TextureProvider provider = (TextureProvider) iter.next();
- TextureData data = provider.newTextureData(file,
- internalFormat,
- pixelFormat,
- mipmap,
- fileSuffix);
- if (data != null) {
- return data;
- }
- }
-
- throw new IOException("No suitable reader for given file");
- }
-
- private static TextureData newTextureDataImpl(InputStream stream,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (stream == null) {
- throw new IOException("Stream was null");
- }
-
- fileSuffix = toLowerCase(fileSuffix);
-
- // Note: use of BufferedInputStream works around 4764639/4892246
- if (!(stream instanceof BufferedInputStream)) {
- stream = new BufferedInputStream(stream);
- }
-
- for (Iterator iter = textureProviders.iterator(); iter.hasNext(); ) {
- TextureProvider provider = (TextureProvider) iter.next();
- TextureData data = provider.newTextureData(stream,
- internalFormat,
- pixelFormat,
- mipmap,
- fileSuffix);
- if (data != null) {
- return data;
- }
- }
-
- throw new IOException("No suitable reader for given stream");
- }
-
- private static TextureData newTextureDataImpl(URL url,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (url == null) {
- throw new IOException("URL was null");
- }
-
- fileSuffix = toLowerCase(fileSuffix);
-
- for (Iterator iter = textureProviders.iterator(); iter.hasNext(); ) {
- TextureProvider provider = (TextureProvider) iter.next();
- TextureData data = provider.newTextureData(url,
- internalFormat,
- pixelFormat,
- mipmap,
- fileSuffix);
- if (data != null) {
- return data;
- }
- }
-
- throw new IOException("No suitable reader for given URL");
- }
-
- private static TextureData newTextureDataImpl(BufferedImage image,
- int internalFormat,
- int pixelFormat,
- boolean mipmap) {
- return new TextureData(internalFormat, pixelFormat, mipmap, image);
- }
-
- //----------------------------------------------------------------------
- // Base provider - used last
- static class IIOTextureProvider implements TextureProvider {
- public TextureData newTextureData(File file,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- BufferedImage img = ImageIO.read(file);
- if (img == null) {
- return null;
- }
- if (DEBUG) {
- System.out.println("TextureIO.newTextureData(): BufferedImage type for " + file + " = " +
- img.getType());
- }
- return new TextureData(internalFormat, pixelFormat, mipmap, img);
- }
-
- public TextureData newTextureData(InputStream stream,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- BufferedImage img = ImageIO.read(stream);
- if (img == null) {
- return null;
- }
- if (DEBUG) {
- System.out.println("TextureIO.newTextureData(): BufferedImage type for stream = " +
- img.getType());
- }
- return new TextureData(internalFormat, pixelFormat, mipmap, img);
- }
-
- public TextureData newTextureData(URL url,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- InputStream stream = url.openStream();
- try {
- return newTextureData(stream, internalFormat, pixelFormat, mipmap, fileSuffix);
- } finally {
- stream.close();
- }
- }
- }
-
- //----------------------------------------------------------------------
- // DDS provider -- supports files only for now
- static class DDSTextureProvider implements TextureProvider {
- public TextureData newTextureData(File file,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (DDS.equals(fileSuffix) ||
- DDS.equals(FileUtil.getFileSuffix(file))) {
- DDSImage image = DDSImage.read(file);
- return newTextureData(image, internalFormat, pixelFormat, mipmap);
- }
-
- return null;
- }
-
- public TextureData newTextureData(InputStream stream,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (DDS.equals(fileSuffix) ||
- DDSImage.isDDSImage(stream)) {
- byte[] data = StreamUtil.readAll(stream);
- ByteBuffer buf = ByteBuffer.wrap(data);
- DDSImage image = DDSImage.read(buf);
- return newTextureData(image, internalFormat, pixelFormat, mipmap);
- }
-
- return null;
- }
-
- public TextureData newTextureData(URL url,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- InputStream stream = new BufferedInputStream(url.openStream());
- try {
- return newTextureData(stream, internalFormat, pixelFormat, mipmap, fileSuffix);
- } finally {
- stream.close();
- }
- }
-
- private TextureData newTextureData(final DDSImage image,
- int internalFormat,
- int pixelFormat,
- boolean mipmap) {
- DDSImage.ImageInfo info = image.getMipMap(0);
- if (pixelFormat == 0) {
- switch (image.getPixelFormat()) {
- case DDSImage.D3DFMT_R8G8B8:
- pixelFormat = GL.GL_RGB;
- break;
- default:
- pixelFormat = GL.GL_RGBA;
- break;
- }
- }
- if (info.isCompressed()) {
- switch (info.getCompressionFormat()) {
- case DDSImage.D3DFMT_DXT1:
- internalFormat = GL.GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
- break;
- case DDSImage.D3DFMT_DXT3:
- internalFormat = GL.GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
- break;
- case DDSImage.D3DFMT_DXT5:
- internalFormat = GL.GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
- break;
- default:
- throw new RuntimeException("Unsupported DDS compression format \"" +
- DDSImage.getCompressionFormatName(info.getCompressionFormat()) + "\"");
- }
- }
- if (internalFormat == 0) {
- switch (image.getPixelFormat()) {
- case DDSImage.D3DFMT_R8G8B8:
- pixelFormat = GL.GL_RGB;
- break;
- default:
- pixelFormat = GL.GL_RGBA;
- break;
- }
- }
- TextureData.Flusher flusher = new TextureData.Flusher() {
- public void flush() {
- image.close();
- }
- };
- TextureData data;
- if (mipmap && image.getNumMipMaps() > 0) {
- Buffer[] mipmapData = new Buffer[image.getNumMipMaps()];
- for (int i = 0; i < image.getNumMipMaps(); i++) {
- mipmapData[i] = image.getMipMap(i).getData();
- }
- data = new TextureData(internalFormat,
- info.getWidth(),
- info.getHeight(),
- 0,
- pixelFormat,
- GL.GL_UNSIGNED_BYTE,
- info.isCompressed(),
- true,
- mipmapData,
- flusher);
- } else {
- // Fix this up for the end user because we can't generate
- // mipmaps for compressed textures
- mipmap = false;
- data = new TextureData(internalFormat,
- info.getWidth(),
- info.getHeight(),
- 0,
- pixelFormat,
- GL.GL_UNSIGNED_BYTE,
- mipmap,
- info.isCompressed(),
- true,
- info.getData(),
- flusher);
- }
- return data;
- }
- }
-
- //----------------------------------------------------------------------
- // Base class for SGI RGB and TGA image providers
- static abstract class StreamBasedTextureProvider implements TextureProvider {
- public TextureData newTextureData(File file,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- InputStream inStream = new BufferedInputStream(new FileInputStream(file));
- try {
- // The SGIImage and TGAImage implementations use InputStreams
- // anyway so there isn't much point in having a separate code
- // path for files
- return newTextureData(inStream,
- internalFormat,
- pixelFormat,
- mipmap,
- ((fileSuffix != null) ? fileSuffix : FileUtil.getFileSuffix(file)));
- } finally {
- inStream.close();
- }
- }
-
- public TextureData newTextureData(URL url,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- InputStream stream = new BufferedInputStream(url.openStream());
- try {
- return newTextureData(stream, internalFormat, pixelFormat, mipmap, fileSuffix);
- } finally {
- stream.close();
- }
- }
- }
-
- //----------------------------------------------------------------------
- // SGI RGB image provider
- static class SGITextureProvider extends StreamBasedTextureProvider {
- public TextureData newTextureData(InputStream stream,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (SGI.equals(fileSuffix) ||
- SGI_RGB.equals(fileSuffix) ||
- SGIImage.isSGIImage(stream)) {
- SGIImage image = SGIImage.read(stream);
- if (pixelFormat == 0) {
- pixelFormat = image.getFormat();
- }
- if (internalFormat == 0) {
- internalFormat = image.getFormat();
- }
- return new TextureData(internalFormat,
- image.getWidth(),
- image.getHeight(),
- 0,
- pixelFormat,
- GL.GL_UNSIGNED_BYTE,
- mipmap,
- false,
- false,
- ByteBuffer.wrap(image.getData()),
- null);
- }
-
- return null;
- }
- }
-
- //----------------------------------------------------------------------
- // TGA (Targa) image provider
- static class TGATextureProvider extends StreamBasedTextureProvider {
- public TextureData newTextureData(InputStream stream,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException {
- if (TGA.equals(fileSuffix)) {
- TGAImage image = TGAImage.read(stream);
- if (pixelFormat == 0) {
- pixelFormat = image.getGLFormat();
- }
- if (internalFormat == 0) {
- internalFormat = GL.GL_RGBA8;
- }
- return new TextureData(internalFormat,
- image.getWidth(),
- image.getHeight(),
- 0,
- pixelFormat,
- GL.GL_UNSIGNED_BYTE,
- mipmap,
- false,
- false,
- image.getData(),
- null);
- }
-
- return null;
- }
- }
-
- //----------------------------------------------------------------------
- // ImageIO texture writer
- //
- static class IIOTextureWriter implements TextureWriter {
- public boolean write(File file,
- TextureData data) throws IOException {
- int pixelFormat = data.getPixelFormat();
- int pixelType = data.getPixelType();
- if ((pixelFormat == GL.GL_RGB ||
- pixelFormat == GL.GL_RGBA) &&
- (pixelType == GL.GL_BYTE ||
- pixelType == GL.GL_UNSIGNED_BYTE)) {
- // Convert TextureData to appropriate BufferedImage
- // FIXME: almost certainly not obeying correct pixel order
- BufferedImage image = new BufferedImage(data.getWidth(), data.getHeight(),
- (pixelFormat == GL.GL_RGB) ?
- BufferedImage.TYPE_3BYTE_BGR :
- BufferedImage.TYPE_4BYTE_ABGR);
- byte[] imageData = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
- ByteBuffer buf = (ByteBuffer) data.getBuffer();
- if (buf == null) {
- buf = (ByteBuffer) data.getMipmapData()[0];
- }
- buf.rewind();
- buf.get(imageData);
- buf.rewind();
-
- // Swizzle image components to be correct
- if (pixelFormat == GL.GL_RGB) {
- for (int i = 0; i < imageData.length; i += 3) {
- byte red = imageData[i + 0];
- byte blue = imageData[i + 2];
- imageData[i + 0] = blue;
- imageData[i + 2] = red;
- }
- } else {
- for (int i = 0; i < imageData.length; i += 4) {
- byte red = imageData[i + 0];
- byte green = imageData[i + 1];
- byte blue = imageData[i + 2];
- byte alpha = imageData[i + 3];
- imageData[i + 0] = alpha;
- imageData[i + 1] = blue;
- imageData[i + 2] = green;
- imageData[i + 3] = red;
- }
- }
-
- // Flip image vertically for the user's convenience
- ImageUtil.flipImageVertically(image);
-
- // Happened to notice that writing RGBA images to JPEGS is broken
- if (JPG.equals(FileUtil.getFileSuffix(file)) &&
- image.getType() == BufferedImage.TYPE_4BYTE_ABGR) {
- BufferedImage tmpImage = new BufferedImage(image.getWidth(), image.getHeight(),
- BufferedImage.TYPE_3BYTE_BGR);
- Graphics g = tmpImage.getGraphics();
- g.drawImage(image, 0, 0, null);
- g.dispose();
- image = tmpImage;
- }
-
- return ImageIO.write(image, FileUtil.getFileSuffix(file), file);
- }
-
- throw new IOException("ImageIO writer doesn't support this pixel format / type (only GL_RGB/A + bytes)");
- }
- }
-
- //----------------------------------------------------------------------
- // DDS texture writer
- //
- static class DDSTextureWriter implements TextureWriter {
- public boolean write(File file,
- TextureData data) throws IOException {
- if (DDS.equals(FileUtil.getFileSuffix(file))) {
- // See whether the DDS writer can handle this TextureData
- int pixelFormat = data.getPixelFormat();
- int pixelType = data.getPixelType();
- if (pixelType != GL.GL_BYTE &&
- pixelType != GL.GL_UNSIGNED_BYTE) {
- throw new IOException("DDS writer only supports byte / unsigned byte textures");
- }
-
- int d3dFormat = 0;
- // FIXME: some of these are probably not completely correct and would require swizzling
- switch (pixelFormat) {
- case GL.GL_RGB: d3dFormat = DDSImage.D3DFMT_R8G8B8; break;
- case GL.GL_RGBA: d3dFormat = DDSImage.D3DFMT_A8R8G8B8; break;
- case GL.GL_COMPRESSED_RGB_S3TC_DXT1_EXT: d3dFormat = DDSImage.D3DFMT_DXT1; break;
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: throw new IOException("RGBA DXT1 not yet supported");
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: d3dFormat = DDSImage.D3DFMT_DXT3; break;
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: d3dFormat = DDSImage.D3DFMT_DXT5; break;
- default: throw new IOException("Unsupported pixel format 0x" + Integer.toHexString(pixelFormat) + " by DDS writer");
- }
-
- ByteBuffer[] mipmaps = null;
- if (data.getMipmapData() != null) {
- mipmaps = new ByteBuffer[data.getMipmapData().length];
- for (int i = 0; i < mipmaps.length; i++) {
- mipmaps[i] = (ByteBuffer) data.getMipmapData()[i];
- }
- } else {
- mipmaps = new ByteBuffer[] { (ByteBuffer) data.getBuffer() };
- }
-
- DDSImage image = DDSImage.createFromData(d3dFormat,
- data.getWidth(),
- data.getHeight(),
- mipmaps);
- image.write(file);
- return true;
- }
-
- return false;
- }
- }
-
- //----------------------------------------------------------------------
- // SGI (rgb) texture writer
- //
- static class SGITextureWriter implements TextureWriter {
- public boolean write(File file,
- TextureData data) throws IOException {
- String fileSuffix = FileUtil.getFileSuffix(file);
- if (SGI.equals(fileSuffix) ||
- SGI_RGB.equals(fileSuffix)) {
- // See whether the SGI writer can handle this TextureData
- int pixelFormat = data.getPixelFormat();
- int pixelType = data.getPixelType();
- if ((pixelFormat == GL.GL_RGB ||
- pixelFormat == GL.GL_RGBA) &&
- (pixelType == GL.GL_BYTE ||
- pixelType == GL.GL_UNSIGNED_BYTE)) {
- ByteBuffer buf = ((data.getBuffer() != null) ?
- (ByteBuffer) data.getBuffer() :
- (ByteBuffer) data.getMipmapData()[0]);
- byte[] bytes;
- if (buf.hasArray()) {
- bytes = buf.array();
- } else {
- buf.rewind();
- bytes = new byte[buf.remaining()];
- buf.get(bytes);
- buf.rewind();
- }
-
- SGIImage image = SGIImage.createFromData(data.getWidth(),
- data.getHeight(),
- (pixelFormat == GL.GL_RGBA),
- bytes);
- image.write(file, false);
- return true;
- }
-
- throw new IOException("SGI writer doesn't support this pixel format / type (only GL_RGB/A + bytes)");
- }
-
- return false;
- }
- }
-
- //----------------------------------------------------------------------
- // TGA (Targa) texture writer
-
- static class TGATextureWriter implements TextureWriter {
- public boolean write(File file,
- TextureData data) throws IOException {
- if (TGA.equals(FileUtil.getFileSuffix(file))) {
- // See whether the TGA writer can handle this TextureData
- int pixelFormat = data.getPixelFormat();
- int pixelType = data.getPixelType();
- if ((pixelFormat == GL.GL_RGB ||
- pixelFormat == GL.GL_RGBA) &&
- (pixelType == GL.GL_BYTE ||
- pixelType == GL.GL_UNSIGNED_BYTE)) {
- ByteBuffer buf = ((data.getBuffer() != null) ?
- (ByteBuffer) data.getBuffer() :
- (ByteBuffer) data.getMipmapData()[0]);
- // Must reverse order of red and blue channels to get correct results
- int skip = ((pixelFormat == GL.GL_RGB) ? 3 : 4);
- for (int i = 0; i < buf.remaining(); i += skip) {
- byte red = buf.get(i + 0);
- byte blue = buf.get(i + 2);
- buf.put(i + 0, blue);
- buf.put(i + 2, red);
- }
-
- TGAImage image = TGAImage.createFromData(data.getWidth(),
- data.getHeight(),
- (pixelFormat == GL.GL_RGBA),
- false,
- ((data.getBuffer() != null) ?
- (ByteBuffer) data.getBuffer() :
- (ByteBuffer) data.getMipmapData()[0]));
- image.write(file);
- return true;
- }
-
- throw new IOException("TGA writer doesn't support this pixel format / type (only GL_RGB/A + bytes)");
- }
-
- return false;
- }
- }
-
- //----------------------------------------------------------------------
- // Helper routines
- //
-
- private static int glGetInteger(int pname) {
- int[] tmp = new int[1];
- GL gl = GLU.getCurrentGL();
- gl.glGetIntegerv(pname, tmp, 0);
- return tmp[0];
- }
-
- private static int glGetTexLevelParameteri(int target, int level, int pname) {
- int[] tmp = new int[1];
- GL gl = GLU.getCurrentGL();
- gl.glGetTexLevelParameteriv(target, 0, pname, tmp, 0);
- return tmp[0];
- }
-
- private static String toLowerCase(String arg) {
- if (arg == null) {
- return null;
- }
-
- return arg.toLowerCase();
- }
-}
diff --git a/src/classes/com/sun/opengl/util/texture/spi/DDSImage.java b/src/classes/com/sun/opengl/util/texture/spi/DDSImage.java
deleted file mode 100755
index 835025b5c..000000000
--- a/src/classes/com/sun/opengl/util/texture/spi/DDSImage.java
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.texture.spi;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-
-import javax.media.opengl.*;
-import com.sun.opengl.util.*;
-
-/** A reader and writer for DirectDraw Surface (.dds) files, which are
- used to describe textures. These files can contain multiple mipmap
- levels in one file. This class is currently minimal and does not
- support all of the possible file formats. */
-
-public class DDSImage {
-
- /** Simple class describing images and data; does not encapsulate
- image format information. User is responsible for transmitting
- that information in another way. */
-
- public static class ImageInfo {
- private ByteBuffer data;
- private int width;
- private int height;
- private boolean isCompressed;
- private int compressionFormat;
-
- public ImageInfo(ByteBuffer data, int width, int height, boolean compressed, int compressionFormat) {
- this.data = data; this.width = width; this.height = height;
- this.isCompressed = compressed; this.compressionFormat = compressionFormat;
- }
- public int getWidth() { return width; }
- public int getHeight() { return height; }
- public ByteBuffer getData() { return data; }
- public boolean isCompressed() { return isCompressed; }
- public int getCompressionFormat() {
- if (!isCompressed())
- throw new RuntimeException("Should not call unless compressed");
- return compressionFormat;
- }
- }
-
- private FileInputStream fis;
- private FileChannel chan;
- private ByteBuffer buf;
- private Header header;
-
- //
- // Selected bits in header flags
- //
-
- public static final int DDSD_CAPS = 0x00000001; // Capacities are valid
- public static final int DDSD_HEIGHT = 0x00000002; // Height is valid
- public static final int DDSD_WIDTH = 0x00000004; // Width is valid
- public static final int DDSD_PITCH = 0x00000008; // Pitch is valid
- public static final int DDSD_BACKBUFFERCOUNT = 0x00000020; // Back buffer count is valid
- public static final int DDSD_ZBUFFERBITDEPTH = 0x00000040; // Z-buffer bit depth is valid (shouldn't be used in DDSURFACEDESC2)
- public static final int DDSD_ALPHABITDEPTH = 0x00000080; // Alpha bit depth is valid
- public static final int DDSD_LPSURFACE = 0x00000800; // lpSurface is valid
- public static final int DDSD_PIXELFORMAT = 0x00001000; // ddpfPixelFormat is valid
- public static final int DDSD_MIPMAPCOUNT = 0x00020000; // Mip map count is valid
- public static final int DDSD_LINEARSIZE = 0x00080000; // dwLinearSize is valid
- public static final int DDSD_DEPTH = 0x00800000; // dwDepth is valid
-
- public static final int DDPF_ALPHAPIXELS = 0x00000001; // Alpha channel is present
- public static final int DDPF_ALPHA = 0x00000002; // Only contains alpha information
- public static final int DDPF_FOURCC = 0x00000004; // FourCC code is valid
- public static final int DDPF_PALETTEINDEXED4 = 0x00000008; // Surface is 4-bit color indexed
- public static final int DDPF_PALETTEINDEXEDTO8 = 0x00000010; // Surface is indexed into a palette which stores indices
- // into the destination surface's 8-bit palette
- public static final int DDPF_PALETTEINDEXED8 = 0x00000020; // Surface is 8-bit color indexed
- public static final int DDPF_RGB = 0x00000040; // RGB data is present
- public static final int DDPF_COMPRESSED = 0x00000080; // Surface will accept pixel data in the format specified
- // and compress it during the write
- public static final int DDPF_RGBTOYUV = 0x00000100; // Surface will accept RGB data and translate it during
- // the write to YUV data. The format of the data to be written
- // will be contained in the pixel format structure. The DDPF_RGB
- // flag will be set.
- public static final int DDPF_YUV = 0x00000200; // Pixel format is YUV - YUV data in pixel format struct is valid
- public static final int DDPF_ZBUFFER = 0x00000400; // Pixel format is a z buffer only surface
- public static final int DDPF_PALETTEINDEXED1 = 0x00000800; // Surface is 1-bit color indexed
- public static final int DDPF_PALETTEINDEXED2 = 0x00001000; // Surface is 2-bit color indexed
- public static final int DDPF_ZPIXELS = 0x00002000; // Surface contains Z information in the pixels
-
- // Selected bits in DDS capabilities flags
- public static final int DDSCAPS_TEXTURE = 0x00001000; // Can be used as a texture
- public static final int DDSCAPS_MIPMAP = 0x00400000; // Is one level of a mip-map
- public static final int DDSCAPS_COMPLEX = 0x00000008; // Complex surface structure, such as a cube map
-
- // Selected bits in DDS extended capabilities flags
- public static final int DDSCAPS2_CUBEMAP = 0x00000200;
- public static final int DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400;
- public static final int DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800;
- public static final int DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000;
- public static final int DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000;
- public static final int DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000;
- public static final int DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000;
-
- // Known pixel formats
- public static final int D3DFMT_UNKNOWN = 0;
- public static final int D3DFMT_R8G8B8 = 20;
- public static final int D3DFMT_A8R8G8B8 = 21;
- public static final int D3DFMT_X8R8G8B8 = 22;
- // The following are also valid FourCC codes
- public static final int D3DFMT_DXT1 = 0x31545844;
- public static final int D3DFMT_DXT2 = 0x32545844;
- public static final int D3DFMT_DXT3 = 0x33545844;
- public static final int D3DFMT_DXT4 = 0x34545844;
- public static final int D3DFMT_DXT5 = 0x35545844;
-
- /** Reads a DirectDraw surface from the specified file name,
- returning the resulting DDSImage.
-
- @param filename File name
- @return DDS image object
- @throws java.io.IOException if an I/O exception occurred
- */
- public static DDSImage read(String filename) throws IOException {
- return read(new File(filename));
- }
-
- /** Reads a DirectDraw surface from the specified file, returning
- the resulting DDSImage.
-
- @param file File object
- @return DDS image object
- @throws java.io.IOException if an I/O exception occurred
- */
- public static DDSImage read(File file) throws IOException {
- DDSImage image = new DDSImage();
- image.readFromFile(file);
- return image;
- }
-
- /** Reads a DirectDraw surface from the specified ByteBuffer, returning
- the resulting DDSImage.
-
- @param buf Input data
- @return DDS image object
- @throws java.io.IOException if an I/O exception occurred
- */
- public static DDSImage read(ByteBuffer buf) throws IOException {
- DDSImage image = new DDSImage();
- image.readFromBuffer(buf);
- return image;
- }
-
- /** Closes open files and resources associated with the open
- DDSImage. No other methods may be called on this object once
- this is called. */
- public void close() {
- try {
- if (chan != null) {
- chan.close();
- chan = null;
- }
- if (fis != null) {
- fis.close();
- fis = null;
- }
- buf = null;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Creates a new DDSImage from data supplied by the user. The
- * resulting DDSImage can be written to disk using the write()
- * method.
- *
- * @param d3dFormat the D3DFMT_ constant describing the data; it is
- * assumed that it is packed tightly
- * @param width the width in pixels of the topmost mipmap image
- * @param height the height in pixels of the topmost mipmap image
- * @param mipmapData the data for each mipmap level of the resulting
- * DDSImage; either only one mipmap level should
- * be specified, or they all must be
- * @throws IllegalArgumentException if the data does not match the
- * specified arguments
- * @return DDS image object
- */
- public static DDSImage createFromData(int d3dFormat,
- int width,
- int height,
- ByteBuffer[] mipmapData) throws IllegalArgumentException {
- DDSImage image = new DDSImage();
- image.initFromData(d3dFormat, width, height, mipmapData);
- return image;
- }
-
- /** Determines from the magic number whether the given InputStream
- points to a DDS image. The given InputStream must return true
- from markSupported() and support a minimum of four bytes of
- read-ahead.
-
- @param in Stream to check
- @return true if input stream is DDS image or false otherwise
- @throws java.io.IOException if an I/O exception occurred
- */
- public static boolean isDDSImage(InputStream in) throws IOException {
- if (!(in instanceof BufferedInputStream)) {
- in = new BufferedInputStream(in);
- }
- if (!in.markSupported()) {
- throw new IOException("Can not test non-destructively whether given InputStream is a DDS image");
- }
- in.mark(4);
- int magic = 0;
- for (int i = 0; i < 4; i++) {
- int tmp = in.read();
- if (tmp < 0) {
- in.reset();
- return false;
- }
- magic = ((magic >>> 8) | (tmp << 24));
- }
- in.reset();
- return (magic == MAGIC);
- }
-
- /**
- * Writes this DDSImage to the specified file name.
- * @param filename File name to write to
- * @throws java.io.IOException if an I/O exception occurred
- */
- public void write(String filename) throws IOException {
- write(new File(filename));
- }
-
- /**
- * Writes this DDSImage to the specified file name.
- * @param file File object to write to
- * @throws java.io.IOException if an I/O exception occurred
- */
- public void write(File file) throws IOException {
- FileOutputStream stream = new FileOutputStream(file);
- FileChannel chan = stream.getChannel();
- // Create ByteBuffer for header in case the start of our
- // ByteBuffer isn't actually memory-mapped
- ByteBuffer hdr = ByteBuffer.allocate(Header.writtenSize());
- hdr.order(ByteOrder.LITTLE_ENDIAN);
- header.write(hdr);
- hdr.rewind();
- chan.write(hdr);
- buf.position(Header.writtenSize());
- chan.write(buf);
- chan.force(true);
- chan.close();
- stream.close();
- }
-
- /** Test for presence/absence of surface description flags (DDSD_*)
- * @param flag DDSD_* flags set to test
- * @return true if flag present or false otherwise
- */
- public boolean isSurfaceDescFlagSet(int flag) {
- return ((header.flags & flag) != 0);
- }
-
- /** Test for presence/absence of pixel format flags (DDPF_*) */
- public boolean isPixelFormatFlagSet(int flag) {
- return ((header.pfFlags & flag) != 0);
- }
-
- /** Gets the pixel format of this texture (D3DFMT_*) based on some
- heuristics. Returns D3DFMT_UNKNOWN if could not recognize the
- pixel format. */
- public int getPixelFormat() {
- if (isCompressed()) {
- return getCompressionFormat();
- } else if (isPixelFormatFlagSet(DDPF_RGB)) {
- if (isPixelFormatFlagSet(DDPF_ALPHAPIXELS)) {
- if (getDepth() == 32 &&
- header.pfRBitMask == 0x00FF0000 &&
- header.pfGBitMask == 0x0000FF00 &&
- header.pfBBitMask == 0x000000FF &&
- header.pfABitMask == 0xFF000000) {
- return D3DFMT_A8R8G8B8;
- }
- } else {
- if (getDepth() == 24 &&
- header.pfRBitMask == 0x00FF0000 &&
- header.pfGBitMask == 0x0000FF00 &&
- header.pfBBitMask == 0x000000FF) {
- return D3DFMT_R8G8B8;
- } else if (getDepth() == 32 &&
- header.pfRBitMask == 0x00FF0000 &&
- header.pfGBitMask == 0x0000FF00 &&
- header.pfBBitMask == 0x000000FF) {
- return D3DFMT_X8R8G8B8;
- }
- }
- }
-
- return D3DFMT_UNKNOWN;
- }
-
- /**
- * Indicates whether this texture is cubemap
- * @return true if cubemap or false otherwise
- */
- public boolean isCubemap() {
- return ((header.ddsCaps1 & DDSCAPS_COMPLEX) != 0) && ((header.ddsCaps2 & DDSCAPS2_CUBEMAP) != 0);
- }
-
- /**
- * Indicates whethe this cubemap side present
- * @param side Side to test
- * @return true if side present or false otherwise
- */
- public boolean isCubemapSidePresent(int side) {
- return isCubemap() && (header.ddsCaps2 & side) != 0;
- }
-
- /** Indicates whether this texture is compressed. */
- public boolean isCompressed() {
- return (isPixelFormatFlagSet(DDPF_FOURCC));
- }
-
- /** If this surface is compressed, returns the kind of compression
- used (DXT1..DXT5). */
- public int getCompressionFormat() {
- return header.pfFourCC;
- }
-
- /** Width of the texture (or the top-most mipmap if mipmaps are
- present) */
- public int getWidth() {
- return header.width;
- }
-
- /** Height of the texture (or the top-most mipmap if mipmaps are
- present) */
- public int getHeight() {
- return header.height;
- }
-
- /** Total number of bits per pixel. Only valid if DDPF_RGB is
- present. For A8R8G8B8, would be 32. */
- public int getDepth() {
- return header.pfRGBBitCount;
- }
-
- /** Number of mip maps in the texture */
- public int getNumMipMaps() {
- if (!isSurfaceDescFlagSet(DDSD_MIPMAPCOUNT)) {
- return 0;
- }
- return header.mipMapCountOrAux;
- }
-
- /** Gets the <i>i</i>th mipmap data (0..getNumMipMaps() - 1)
- * @param map Mipmap index
- * @return Image object
- */
- public ImageInfo getMipMap(int map) {
- return getMipMap( 0, map );
- }
-
- /**
- * Gets the <i>i</i>th mipmap data (0..getNumMipMaps() - 1)
- * @param side Cubemap side or 0 for 2D texture
- * @param map Mipmap index
- * @return Image object
- */
- public ImageInfo getMipMap(int side, int map) {
- if (!isCubemap() && (side != 0)) {
- throw new RuntimeException( "Illegal side for 2D texture: " + side );
- }
- if (isCubemap() && !isCubemapSidePresent(side)) {
- throw new RuntimeException( "Illegal side, side not present: " + side );
- }
- if (getNumMipMaps() > 0 &&
- ((map < 0) || (map >= getNumMipMaps()))) {
- throw new RuntimeException("Illegal mipmap number " + map + " (0.." + (getNumMipMaps() - 1) + ")");
- }
-
- // Figure out how far to seek
- int seek = Header.writtenSize();
- if (isCubemap()) {
- seek += sideShiftInBytes(side);
- }
- for (int i = 0; i < map; i++) {
- seek += mipMapSizeInBytes(i);
- }
- buf.limit(seek + mipMapSizeInBytes(map));
- buf.position(seek);
- ByteBuffer next = buf.slice();
- buf.position(0);
- buf.limit(buf.capacity());
- return new ImageInfo(next, mipMapWidth(map), mipMapHeight(map), isCompressed(), getCompressionFormat());
- }
-
- /** Returns an array of ImageInfos corresponding to all mipmap
- levels of this DDS file.
- @return Mipmap image objects set
- */
- public ImageInfo[] getAllMipMaps() {
- return getAllMipMaps(0);
- }
-
- /**
- * Returns an array of ImageInfos corresponding to all mipmap
- * levels of this DDS file.
- * @param side Cubemap side or 0 for 2D texture
- * @return Mipmap image objects set
- */
- public ImageInfo[] getAllMipMaps( int side ) {
- int numLevels = getNumMipMaps();
- if (numLevels == 0) {
- numLevels = 1;
- }
- ImageInfo[] result = new ImageInfo[numLevels];
- for (int i = 0; i < numLevels; i++) {
- result[i] = getMipMap(side, i);
- }
- return result;
- }
-
- /** Converts e.g. DXT1 compression format constant (see {@link
- #getCompressionFormat}) into "DXT1".
- @param compressionFormat Compression format constant
- @return String format code
- */
- public static String getCompressionFormatName(int compressionFormat) {
- StringBuffer buf = new StringBuffer();
- for (int i = 0; i < 4; i++) {
- char c = (char) (compressionFormat & 0xFF);
- buf.append(c);
- compressionFormat = compressionFormat >> 8;
- }
- return buf.toString();
- }
-
- /** Allocates a temporary, empty ByteBuffer suitable for use in a
- call to glCompressedTexImage2D. This is used by the Texture
- class to expand non-power-of-two DDS compressed textures to
- power-of-two sizes on hardware not supporting OpenGL 2.0 and the
- NPOT texture extension. The specified OpenGL internal format
- must be one of GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
- GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
- GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, or
- GL_COMPRESSED_RGBA_S3TC_DXT5_EXT.
- */
- public static ByteBuffer allocateBlankBuffer(int width,
- int height,
- int openGLInternalFormat) {
- int size = width * height;
- switch (openGLInternalFormat) {
- case GL.GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
- size /= 2;
- break;
-
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
- case GL.GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
- break;
-
- default:
- throw new IllegalArgumentException("Illegal OpenGL texture internal format " +
- openGLInternalFormat);
- }
- if (size == 0)
- size = 1;
- return BufferUtil.newByteBuffer(size);
- }
-
- public void debugPrint() {
- PrintStream tty = System.err;
- tty.println("Compressed texture: " + isCompressed());
- if (isCompressed()) {
- int fmt = getCompressionFormat();
- String name = getCompressionFormatName(fmt);
- tty.println("Compression format: 0x" + Integer.toHexString(fmt) + " (" + name + ")");
- }
- tty.println("Width: " + header.width + " Height: " + header.height);
- tty.println("header.pitchOrLinearSize: " + header.pitchOrLinearSize);
- tty.println("header.pfRBitMask: 0x" + Integer.toHexString(header.pfRBitMask));
- tty.println("header.pfGBitMask: 0x" + Integer.toHexString(header.pfGBitMask));
- tty.println("header.pfBBitMask: 0x" + Integer.toHexString(header.pfBBitMask));
- tty.println("SurfaceDesc flags:");
- boolean recognizedAny = false;
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_CAPS, "DDSD_CAPS");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_HEIGHT, "DDSD_HEIGHT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_WIDTH, "DDSD_WIDTH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_PITCH, "DDSD_PITCH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_BACKBUFFERCOUNT, "DDSD_BACKBUFFERCOUNT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_ZBUFFERBITDEPTH, "DDSD_ZBUFFERBITDEPTH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_ALPHABITDEPTH, "DDSD_ALPHABITDEPTH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_LPSURFACE, "DDSD_LPSURFACE");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_PIXELFORMAT, "DDSD_PIXELFORMAT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_MIPMAPCOUNT, "DDSD_MIPMAPCOUNT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_LINEARSIZE, "DDSD_LINEARSIZE");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_DEPTH, "DDSD_DEPTH");
- if (!recognizedAny) {
- tty.println("(none)");
- }
- tty.println("Raw SurfaceDesc flags: 0x" + Integer.toHexString(header.flags));
- tty.println("Pixel format flags:");
- recognizedAny = false;
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_ALPHAPIXELS, "DDPF_ALPHAPIXELS");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_ALPHA, "DDPF_ALPHA");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_FOURCC, "DDPF_FOURCC");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_PALETTEINDEXED4, "DDPF_PALETTEINDEXED4");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_PALETTEINDEXEDTO8, "DDPF_PALETTEINDEXEDTO8");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_PALETTEINDEXED8, "DDPF_PALETTEINDEXED8");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_RGB, "DDPF_RGB");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_COMPRESSED, "DDPF_COMPRESSED");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_RGBTOYUV, "DDPF_RGBTOYUV");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_YUV, "DDPF_YUV");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_ZBUFFER, "DDPF_ZBUFFER");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_PALETTEINDEXED1, "DDPF_PALETTEINDEXED1");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_PALETTEINDEXED2, "DDPF_PALETTEINDEXED2");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_ZPIXELS, "DDPF_ZPIXELS");
- if (!recognizedAny) {
- tty.println("(none)");
- }
- tty.println("Raw pixel format flags: 0x" + Integer.toHexString(header.pfFlags));
- tty.println("Depth: " + getDepth());
- tty.println("Number of mip maps: " + getNumMipMaps());
- int fmt = getPixelFormat();
- tty.print("Pixel format: ");
- switch (fmt) {
- case D3DFMT_R8G8B8: tty.println("D3DFMT_R8G8B8"); break;
- case D3DFMT_A8R8G8B8: tty.println("D3DFMT_A8R8G8B8"); break;
- case D3DFMT_X8R8G8B8: tty.println("D3DFMT_X8R8G8B8"); break;
- case D3DFMT_DXT1: tty.println("D3DFMT_DXT1"); break;
- case D3DFMT_DXT2: tty.println("D3DFMT_DXT2"); break;
- case D3DFMT_DXT3: tty.println("D3DFMT_DXT3"); break;
- case D3DFMT_DXT4: tty.println("D3DFMT_DXT4"); break;
- case D3DFMT_DXT5: tty.println("D3DFMT_DXT5"); break;
- case D3DFMT_UNKNOWN: tty.println("D3DFMT_UNKNOWN"); break;
- default: tty.println("(unknown pixel format " + fmt + ")"); break;
- }
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private static final int MAGIC = 0x20534444;
-
- static class Header {
- int size; // size of the DDSURFACEDESC structure
- int flags; // determines what fields are valid
- int height; // height of surface to be created
- int width; // width of input surface
- int pitchOrLinearSize;
- int backBufferCountOrDepth;
- int mipMapCountOrAux; // number of mip-map levels requested (in this context)
- int alphaBitDepth; // depth of alpha buffer requested
- int reserved1; // reserved
- int surface; // pointer to the associated surface memory
- // NOTE: following two entries are from DDCOLORKEY data structure
- // Are overlaid with color for empty cubemap faces (unused in this reader)
- int colorSpaceLowValue;
- int colorSpaceHighValue;
- int destBltColorSpaceLowValue;
- int destBltColorSpaceHighValue;
- int srcOverlayColorSpaceLowValue;
- int srcOverlayColorSpaceHighValue;
- int srcBltColorSpaceLowValue;
- int srcBltColorSpaceHighValue;
- // NOTE: following entries are from DDPIXELFORMAT data structure
- // Are overlaid with flexible vertex format description of vertex
- // buffers (unused in this reader)
- int pfSize; // size of DDPIXELFORMAT structure
- int pfFlags; // pixel format flags
- int pfFourCC; // (FOURCC code)
- // Following five entries have multiple interpretations, not just
- // RGBA (but that's all we support right now)
- int pfRGBBitCount; // how many bits per pixel
- int pfRBitMask; // mask for red bits
- int pfGBitMask; // mask for green bits
- int pfBBitMask; // mask for blue bits
- int pfABitMask; // mask for alpha channel
- int ddsCaps1; // Texture and mip-map flags
- int ddsCaps2; // Advanced capabilities including cubemap support
- int ddsCapsReserved1;
- int ddsCapsReserved2;
- int textureStage; // stage in multitexture cascade
-
- void read(ByteBuffer buf) throws IOException {
- int magic = buf.getInt();
- if (magic != MAGIC) {
- throw new IOException("Incorrect magic number 0x" +
- Integer.toHexString(magic) +
- " (expected " + MAGIC + ")");
- }
-
- size = buf.getInt();
- flags = buf.getInt();
- height = buf.getInt();
- width = buf.getInt();
- pitchOrLinearSize = buf.getInt();
- backBufferCountOrDepth = buf.getInt();
- mipMapCountOrAux = buf.getInt();
- alphaBitDepth = buf.getInt();
- reserved1 = buf.getInt();
- surface = buf.getInt();
- colorSpaceLowValue = buf.getInt();
- colorSpaceHighValue = buf.getInt();
- destBltColorSpaceLowValue = buf.getInt();
- destBltColorSpaceHighValue = buf.getInt();
- srcOverlayColorSpaceLowValue = buf.getInt();
- srcOverlayColorSpaceHighValue = buf.getInt();
- srcBltColorSpaceLowValue = buf.getInt();
- srcBltColorSpaceHighValue = buf.getInt();
- pfSize = buf.getInt();
- pfFlags = buf.getInt();
- pfFourCC = buf.getInt();
- pfRGBBitCount = buf.getInt();
- pfRBitMask = buf.getInt();
- pfGBitMask = buf.getInt();
- pfBBitMask = buf.getInt();
- pfABitMask = buf.getInt();
- ddsCaps1 = buf.getInt();
- ddsCaps2 = buf.getInt();
- ddsCapsReserved1 = buf.getInt();
- ddsCapsReserved2 = buf.getInt();
- textureStage = buf.getInt();
- }
-
- // buf must be in little-endian byte order
- void write(ByteBuffer buf) {
- buf.putInt(MAGIC);
- buf.putInt(size);
- buf.putInt(flags);
- buf.putInt(height);
- buf.putInt(width);
- buf.putInt(pitchOrLinearSize);
- buf.putInt(backBufferCountOrDepth);
- buf.putInt(mipMapCountOrAux);
- buf.putInt(alphaBitDepth);
- buf.putInt(reserved1);
- buf.putInt(surface);
- buf.putInt(colorSpaceLowValue);
- buf.putInt(colorSpaceHighValue);
- buf.putInt(destBltColorSpaceLowValue);
- buf.putInt(destBltColorSpaceHighValue);
- buf.putInt(srcOverlayColorSpaceLowValue);
- buf.putInt(srcOverlayColorSpaceHighValue);
- buf.putInt(srcBltColorSpaceLowValue);
- buf.putInt(srcBltColorSpaceHighValue);
- buf.putInt(pfSize);
- buf.putInt(pfFlags);
- buf.putInt(pfFourCC);
- buf.putInt(pfRGBBitCount);
- buf.putInt(pfRBitMask);
- buf.putInt(pfGBitMask);
- buf.putInt(pfBBitMask);
- buf.putInt(pfABitMask);
- buf.putInt(ddsCaps1);
- buf.putInt(ddsCaps2);
- buf.putInt(ddsCapsReserved1);
- buf.putInt(ddsCapsReserved2);
- buf.putInt(textureStage);
- }
-
- private static int size() {
- return 124;
- }
-
- private static int pfSize() {
- return 32;
- }
-
- private static int writtenSize() {
- return 128;
- }
- }
-
- private DDSImage() {
- }
-
- private void readFromFile(File file) throws IOException {
- fis = new FileInputStream(file);
- chan = fis.getChannel();
- ByteBuffer buf = chan.map(FileChannel.MapMode.READ_ONLY,
- 0, (int) file.length());
- readFromBuffer(buf);
- }
-
- private void readFromBuffer(ByteBuffer buf) throws IOException {
- this.buf = buf;
- buf.order(ByteOrder.LITTLE_ENDIAN);
- header = new Header();
- header.read(buf);
- fixupHeader();
- }
-
- private void initFromData(int d3dFormat,
- int width,
- int height,
- ByteBuffer[] mipmapData) throws IllegalArgumentException {
- // Check size of mipmap data compared against format, width and
- // height
- int topmostMipmapSize = width * height;
- int pitchOrLinearSize = width;
- boolean isCompressed = false;
- switch (d3dFormat) {
- case D3DFMT_R8G8B8: topmostMipmapSize *= 3; pitchOrLinearSize *= 3; break;
- case D3DFMT_A8R8G8B8: topmostMipmapSize *= 4; pitchOrLinearSize *= 4; break;
- case D3DFMT_X8R8G8B8: topmostMipmapSize *= 4; pitchOrLinearSize *= 4; break;
- case D3DFMT_DXT1:
- case D3DFMT_DXT2:
- case D3DFMT_DXT3:
- case D3DFMT_DXT4:
- case D3DFMT_DXT5:
- topmostMipmapSize = computeCompressedBlockSize(width, height, 1, d3dFormat);
- pitchOrLinearSize = topmostMipmapSize;
- isCompressed = true;
- break;
- default:
- throw new IllegalArgumentException("d3dFormat must be one of the known formats");
- }
-
- // Now check the mipmaps against this size
- int curSize = topmostMipmapSize;
- int totalSize = 0;
- for (int i = 0; i < mipmapData.length; i++) {
- if (mipmapData[i].remaining() != curSize) {
- throw new IllegalArgumentException("Mipmap level " + i +
- " didn't match expected data size (expected " + curSize + ", got " +
- mipmapData[i].remaining() + ")");
- }
- curSize /= 4;
- totalSize += mipmapData[i].remaining();
- }
-
- // OK, create one large ByteBuffer to hold all of the mipmap data
- totalSize += Header.writtenSize();
- ByteBuffer buf = ByteBuffer.allocate(totalSize);
- buf.position(Header.writtenSize());
- for (int i = 0; i < mipmapData.length; i++) {
- buf.put(mipmapData[i]);
- }
- this.buf = buf;
-
- // Allocate and initialize a Header
- header = new Header();
- header.size = Header.size();
- header.flags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
- if (mipmapData.length > 1) {
- header.flags |= DDSD_MIPMAPCOUNT;
- header.mipMapCountOrAux = mipmapData.length;
- }
- header.width = width;
- header.height = height;
- if (isCompressed) {
- header.flags |= DDSD_LINEARSIZE;
- header.pfFlags |= DDPF_FOURCC;
- header.pfFourCC = d3dFormat;
- } else {
- header.flags |= DDSD_PITCH;
- // Figure out the various settings from the pixel format
- header.pfFlags |= DDPF_RGB;
- switch (d3dFormat) {
- case D3DFMT_R8G8B8: header.pfRGBBitCount = 24; break;
- case D3DFMT_A8R8G8B8: header.pfRGBBitCount = 32; header.pfFlags |= DDPF_ALPHAPIXELS; break;
- case D3DFMT_X8R8G8B8: header.pfRGBBitCount = 32; break;
- }
- header.pfRBitMask = 0x00FF0000;
- header.pfGBitMask = 0x0000FF00;
- header.pfBBitMask = 0x000000FF;
- if (d3dFormat == D3DFMT_A8R8G8B8) {
- header.pfABitMask = 0xFF000000;
- }
- }
- header.pitchOrLinearSize = pitchOrLinearSize;
- header.pfSize = Header.pfSize();
- // Not sure whether we can get away with leaving the rest of the
- // header blank
- }
-
- // Microsoft doesn't follow their own specifications and the
- // simplest conversion using the DxTex tool to e.g. a DXT3 texture
- // results in an illegal .dds file without either DDSD_PITCH or
- // DDSD_LINEARSIZE set in the header's flags. This code, adapted
- // from the DevIL library, fixes up the header in these situations.
- private void fixupHeader() {
- if (isCompressed() && !isSurfaceDescFlagSet(DDSD_LINEARSIZE)) {
- // Figure out how big the linear size should be
- int depth = header.backBufferCountOrDepth;
- if (depth == 0) {
- depth = 1;
- }
-
- header.pitchOrLinearSize = computeCompressedBlockSize(getWidth(), getHeight(), depth, getCompressionFormat());
- header.flags |= DDSD_LINEARSIZE;
- }
- }
-
- private static int computeCompressedBlockSize(int width,
- int height,
- int depth,
- int compressionFormat) {
- int blockSize = ((width + 3)/4) * ((height + 3)/4) * ((depth + 3)/4);
- switch (compressionFormat) {
- case D3DFMT_DXT1: blockSize *= 8; break;
- default: blockSize *= 16; break;
- }
- return blockSize;
- }
-
- private int mipMapWidth(int map) {
- int width = getWidth();
- for (int i = 0; i < map; i++) {
- width >>= 1;
- }
- return Math.max(width, 1);
- }
-
- private int mipMapHeight(int map) {
- int height = getHeight();
- for (int i = 0; i < map; i++) {
- height >>= 1;
- }
- return Math.max(height, 1);
- }
-
- private int mipMapSizeInBytes(int map) {
- int width = mipMapWidth(map);
- int height = mipMapHeight(map);
- if (isCompressed()) {
- int blockSize = (getCompressionFormat() == D3DFMT_DXT1 ? 8 : 16);
- return ((width+3)/4)*((height+3)/4)*blockSize;
- } else {
- return width * height * (getDepth() / 8);
- }
- }
-
- private int sideSizeInBytes() {
- int numLevels = getNumMipMaps();
- if (numLevels == 0) {
- numLevels = 1;
- }
-
- int size = 0;
- for (int i = 0; i < numLevels; i++) {
- size += mipMapSizeInBytes(i);
- }
-
- return size;
- }
-
- private int sideShiftInBytes(int side) {
- int[] sides = {
- DDSCAPS2_CUBEMAP_POSITIVEX,
- DDSCAPS2_CUBEMAP_NEGATIVEX,
- DDSCAPS2_CUBEMAP_POSITIVEY,
- DDSCAPS2_CUBEMAP_NEGATIVEY,
- DDSCAPS2_CUBEMAP_POSITIVEZ,
- DDSCAPS2_CUBEMAP_NEGATIVEZ
- };
-
- int shift = 0;
- int sideSize = sideSizeInBytes();
- for (int i = 0; i < sides.length; i++) {
- int temp = sides[i];
- if ((temp & side) != 0) {
- return shift;
- }
-
- shift += sideSize;
- }
-
- throw new RuntimeException("Illegal side: " + side);
- }
-
- private boolean printIfRecognized(PrintStream tty, int flags, int flag, String what) {
- if ((flags & flag) != 0) {
- tty.println(what);
- return true;
- }
- return false;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/texture/spi/LEDataInputStream.java b/src/classes/com/sun/opengl/util/texture/spi/LEDataInputStream.java
deleted file mode 100755
index edbb6e35e..000000000
--- a/src/classes/com/sun/opengl/util/texture/spi/LEDataInputStream.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.texture.spi;
-
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.FilterInputStream;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-
-/**
- * Little Endian Data Input Stream.
- *
- * This class implements an input stream filter to allow reading
- * of java native datatypes from an input stream which has those
- * native datatypes stored in a little endian byte order.<p>
- *
- * This is the sister class of the DataInputStream which allows
- * for reading of java native datatypes from an input stream with
- * the datatypes stored in big endian byte order.<p>
- *
- * This class implements the minimum required and calls DataInputStream
- * for some of the required methods for DataInput.<p>
- *
- * Not all methods are implemented due to lack of immediatte requirement
- * for that functionality. It is not clear if it is ever going to be
- * functionally required to be able to read UTF data in a LittleEndianManner<p>
- *
- * @author Robin Luiten
- * @version 1.1 15/Dec/1997
- */
-class LEDataInputStream extends FilterInputStream implements DataInput
-{
- /**
- * To reuse some of the non endian dependent methods from
- * DataInputStreams methods.
- */
- DataInputStream dataIn;
-
- public LEDataInputStream(InputStream in)
- {
- super(in);
- dataIn = new DataInputStream(in);
- }
-
- public void close() throws IOException
- {
- dataIn.close(); // better close as we create it.
- // this will close underlying as well.
- }
-
- public synchronized final int read(byte b[]) throws IOException
- {
- return dataIn.read(b, 0, b.length);
- }
-
- public synchronized final int read(byte b[], int off, int len) throws IOException
- {
- int rl = dataIn.read(b, off, len);
- return rl;
- }
-
- public final void readFully(byte b[]) throws IOException
- {
- dataIn.readFully(b, 0, b.length);
- }
-
- public final void readFully(byte b[], int off, int len) throws IOException
- {
- dataIn.readFully(b, off, len);
- }
-
- public final int skipBytes(int n) throws IOException
- {
- return dataIn.skipBytes(n);
- }
-
- public final boolean readBoolean() throws IOException
- {
- int ch = dataIn.read();
- if (ch < 0)
- throw new EOFException();
- return (ch != 0);
- }
-
- public final byte readByte() throws IOException
- {
- int ch = dataIn.read();
- if (ch < 0)
- throw new EOFException();
- return (byte)(ch);
- }
-
- public final int readUnsignedByte() throws IOException
- {
- int ch = dataIn.read();
- if (ch < 0)
- throw new EOFException();
- return ch;
- }
-
- public final short readShort() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- if ((ch1 | ch2) < 0)
- throw new EOFException();
- return (short)((ch1 << 0) + (ch2 << 8));
- }
-
- public final int readUnsignedShort() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- if ((ch1 | ch2) < 0)
- throw new EOFException();
- return (ch1 << 0) + (ch2 << 8);
- }
-
- public final char readChar() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- if ((ch1 | ch2) < 0)
- throw new EOFException();
- return (char)((ch1 << 0) + (ch2 << 8));
- }
-
- public final int readInt() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- int ch3 = dataIn.read();
- int ch4 = dataIn.read();
- if ((ch1 | ch2 | ch3 | ch4) < 0)
- throw new EOFException();
- return ((ch1 << 0) + (ch2 << 8) + (ch3 << 16) + (ch4 << 24));
- }
-
- public final long readLong() throws IOException
- {
- int i1 = readInt();
- int i2 = readInt();
- return ((long)(i1) & 0xFFFFFFFFL) + (i2 << 32);
- }
-
- public final float readFloat() throws IOException
- {
- return Float.intBitsToFloat(readInt());
- }
-
- public final double readDouble() throws IOException
- {
- return Double.longBitsToDouble(readLong());
- }
-
- /**
- * dont call this it is not implemented.
- * @return empty new string
- **/
- public final String readLine() throws IOException
- {
- return new String();
- }
-
- /**
- * dont call this it is not implemented
- * @return empty new string
- **/
- public final String readUTF() throws IOException
- {
- return new String();
- }
-
- /**
- * dont call this it is not implemented
- * @return empty new string
- **/
- public final static String readUTF(DataInput in) throws IOException
- {
- return new String();
- }
-}
-
diff --git a/src/classes/com/sun/opengl/util/texture/spi/SGIImage.java b/src/classes/com/sun/opengl/util/texture/spi/SGIImage.java
deleted file mode 100755
index 12523eb18..000000000
--- a/src/classes/com/sun/opengl/util/texture/spi/SGIImage.java
+++ /dev/null
@@ -1,671 +0,0 @@
-/*
- * Portions Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.texture.spi;
-
-import java.io.*;
-import javax.media.opengl.*;
-import com.sun.opengl.util.*;
-
-// Test harness
-import java.awt.image.*;
-import javax.swing.*;
-
-/** <p> Reads and writes SGI RGB/RGBA images. </p>
-
- <p> Written from <a href =
- "http://astronomy.swin.edu.au/~pbourke/dataformats/sgirgb/">Paul
- Bourke's adaptation</a> of the <a href =
- "http://astronomy.swin.edu.au/~pbourke/dataformats/sgirgb/sgiversion.html">SGI
- specification</a>. </p>
-*/
-
-public class SGIImage {
- private Header header;
- private int format;
- private byte[] data;
- // Used for decoding RLE-compressed images
- private int[] rowStart;
- private int[] rowSize;
- private int rleEnd;
- private byte[] tmpData;
- private byte[] tmpRead;
-
- private static final int MAGIC = 474;
-
- static class Header {
- short magic; // IRIS image file magic number
- // This should be decimal 474
- byte storage; // Storage format
- // 0 for uncompressed
- // 1 for RLE compression
- byte bpc; // Number of bytes per pixel channel
- // Legally 1 or 2
- short dimension; // Number of dimensions
- // Legally 1, 2, or 3
- // 1 means a single row, XSIZE long
- // 2 means a single 2D image
- // 3 means multiple 2D images
- short xsize; // X size in pixels
- short ysize; // Y size in pixels
- short zsize; // Number of channels
- // 1 indicates greyscale
- // 3 indicates RGB
- // 4 indicates RGB and Alpha
- int pixmin; // Minimum pixel value
- // This is the lowest pixel value in the image
- int pixmax; // Maximum pixel value
- // This is the highest pixel value in the image
- int dummy; // Ignored
- // Normally set to 0
- String imagename; // Image name; 80 bytes long
- // Must be null terminated, therefore at most 79 bytes
- int colormap; // Colormap ID
- // 0 - normal mode
- // 1 - dithered, 3 mits for red and green, 2 for blue, obsolete
- // 2 - index colour, obsolete
- // 3 - not an image but a colourmap
- // 404 bytes char DUMMY Ignored
- // Should be set to 0, makes the header 512 bytes.
-
- Header() {
- magic = MAGIC;
- }
-
- Header(DataInputStream in) throws IOException {
- magic = in.readShort();
- storage = in.readByte();
- bpc = in.readByte();
- dimension = in.readShort();
- xsize = in.readShort();
- ysize = in.readShort();
- zsize = in.readShort();
- pixmin = in.readInt();
- pixmax = in.readInt();
- dummy = in.readInt();
- byte[] tmpname = new byte[80];
- in.read(tmpname);
- int numChars = 0;
- while (tmpname[numChars++] != 0);
- imagename = new String(tmpname, 0, numChars);
- colormap = in.readInt();
- byte[] tmp = new byte[404];
- in.read(tmp);
- }
-
- public String toString() {
- return ("magic: " + magic +
- " storage: " + (int) storage +
- " bpc: " + (int) bpc +
- " dimension: " + dimension +
- " xsize: " + xsize +
- " ysize: " + ysize +
- " zsize: " + zsize +
- " pixmin: " + pixmin +
- " pixmax: " + pixmax +
- " imagename: " + imagename +
- " colormap: " + colormap);
- }
- }
-
- private SGIImage(Header header) {
- this.header = header;
- }
-
- /** Reads an SGI image from the specified file. */
- public static SGIImage read(String filename) throws IOException {
- return read(new FileInputStream(filename));
- }
-
- /** Reads an SGI image from the specified InputStream. */
- public static SGIImage read(InputStream in) throws IOException {
- DataInputStream dIn = new DataInputStream(new BufferedInputStream(in));
-
- Header header = new Header(dIn);
- SGIImage res = new SGIImage(header);
- res.decodeImage(dIn);
- return res;
- }
-
- /** Writes this SGIImage to the specified file name. If
- flipVertically is set, outputs the scanlines from top to bottom
- rather than the default bottom to top order. */
- public void write(String filename, boolean flipVertically) throws IOException {
- write(new File(filename), flipVertically);
- }
-
- /** Writes this SGIImage to the specified file. If flipVertically is
- set, outputs the scanlines from top to bottom rather than the
- default bottom to top order. */
- public void write(File file, boolean flipVertically) throws IOException {
- writeImage(file, data, header.xsize, header.ysize, header.zsize, flipVertically);
- }
-
- /** Creates an SGIImage from the specified data in either RGB or
- RGBA format. */
- public static SGIImage createFromData(int width,
- int height,
- boolean hasAlpha,
- byte[] data) {
- Header header = new Header();
- header.xsize = (short) width;
- header.ysize = (short) height;
- header.zsize = (short) (hasAlpha ? 4 : 3);
- SGIImage image = new SGIImage(header);
- image.data = data;
- return image;
- }
-
- /** Determines from the magic number whether the given InputStream
- points to an SGI RGB image. The given InputStream must return
- true from markSupported() and support a minimum of two bytes
- of read-ahead. */
- public static boolean isSGIImage(InputStream in) throws IOException {
- if (!(in instanceof BufferedInputStream)) {
- in = new BufferedInputStream(in);
- }
- if (!in.markSupported()) {
- throw new IOException("Can not test non-destructively whether given InputStream is an SGI RGB image");
- }
- DataInputStream dIn = new DataInputStream(in);
- dIn.mark(4);
- short magic = dIn.readShort();
- dIn.reset();
- return (magic == MAGIC);
- }
-
- /** Returns the width of the image. */
- public int getWidth() {
- return header.xsize;
- }
-
- /** Returns the height of the image. */
- public int getHeight() {
- return header.ysize;
- }
-
- /** Returns the OpenGL format for this texture; e.g. GL.GL_RGB or GL.GL_RGBA. */
- public int getFormat() {
- return format;
- }
-
- /** Returns the raw data for this texture in the correct
- (bottom-to-top) order for calls to glTexImage2D. */
- public byte[] getData() { return data; }
-
- public String toString() {
- return header.toString();
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void decodeImage(DataInputStream in) throws IOException {
- if (header.storage == 1) {
- // Read RLE compression data; row starts and sizes
- int x = header.ysize * header.zsize;
- rowStart = new int[x];
- rowSize = new int[x];
- rleEnd = 4 * 2 * x + 512;
- for (int i = 0; i < x; i++) {
- rowStart[i] = in.readInt();
- }
- for (int i = 0; i < x; i++) {
- rowSize[i] = in.readInt();
- }
- tmpRead = new byte[header.xsize * 256];
- }
- tmpData = readAll(in);
-
- int xsize = header.xsize;
- int ysize = header.ysize;
- int zsize = header.zsize;
- int lptr = 0;
-
- data = new byte[xsize * ysize * 4];
- byte[] rbuf = new byte[xsize];
- byte[] gbuf = new byte[xsize];
- byte[] bbuf = new byte[xsize];
- byte[] abuf = new byte[xsize];
- for (int y = 0; y < ysize; y++) {
- if (zsize >= 4) {
- getRow(rbuf, y, 0);
- getRow(gbuf, y, 1);
- getRow(bbuf, y, 2);
- getRow(abuf, y, 3);
- rgbatorgba(rbuf, gbuf, bbuf, abuf, data, lptr);
- } else if (zsize == 3) {
- getRow(rbuf, y, 0);
- getRow(gbuf, y, 1);
- getRow(bbuf, y, 2);
- rgbtorgba(rbuf, gbuf, bbuf, data, lptr);
- } else if (zsize == 2) {
- getRow(rbuf, y, 0);
- getRow(abuf, y, 1);
- latorgba(rbuf, abuf, data, lptr);
- } else {
- getRow(rbuf, y, 0);
- bwtorgba(rbuf, data, lptr);
- }
- lptr += 4 * xsize;
- }
- rowStart = null;
- rowSize = null;
- tmpData = null;
- tmpRead = null;
- format = GL.GL_RGBA;
- header.zsize = 4;
- }
-
- private void getRow(byte[] buf, int y, int z) {
- if (header.storage == 1) {
- int offs = rowStart[y + z * header.ysize] - rleEnd;
- System.arraycopy(tmpData, offs, tmpRead, 0, rowSize[y + z * header.ysize]);
- int iPtr = 0;
- int oPtr = 0;
- for (;;) {
- byte pixel = tmpRead[iPtr++];
- int count = (int) (pixel & 0x7F);
- if (count == 0) {
- return;
- }
- if ((pixel & 0x80) != 0) {
- while ((count--) > 0) {
- buf[oPtr++] = tmpRead[iPtr++];
- }
- } else {
- pixel = tmpRead[iPtr++];
- while ((count--) > 0) {
- buf[oPtr++] = pixel;
- }
- }
- }
- } else {
- int offs = (y * header.xsize) + (z * header.xsize * header.ysize);
- System.arraycopy(tmpData, offs, buf, 0, header.xsize);
- }
- }
-
- private void bwtorgba(byte[] b, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = b[i];
- dest[4 * i + lptr + 1] = b[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = (byte) 0xFF;
- }
- }
-
- private void latorgba(byte[] b, byte[] a, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = b[i];
- dest[4 * i + lptr + 1] = b[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = a[i];
- }
- }
-
- private void rgbtorgba(byte[] r, byte[] g, byte[] b, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = r[i];
- dest[4 * i + lptr + 1] = g[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = (byte) 0xFF;
- }
- }
-
- private void rgbatorgba(byte[] r, byte[] g, byte[] b, byte[] a, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = r[i];
- dest[4 * i + lptr + 1] = g[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = a[i];
- }
- }
-
- private static byte imgref(byte[] i,
- int x,
- int y,
- int z,
- int xs,
- int ys,
- int zs) {
- return i[(xs*ys*z)+(xs*y)+x];
- }
-
-
- private void writeHeader(DataOutputStream stream,
- int xsize, int ysize, int zsize, boolean rle) throws IOException {
- // effects: outputs the 512-byte IRIS RGB header to STREAM, using xsize,
- // ysize, and depth as the dimensions of the image. NOTE that
- // the following defaults are used:
- // STORAGE = 1 (storage format = RLE)
- // BPC = 1 (# bytes/channel)
- // DIMENSION = 3
- // PIXMIN = 0
- // PIXMAX = 255
- // IMAGENAME = <80 nulls>
- // COLORMAP = 0
- // See ftp://ftp.sgi.com/pub/sgi/SGIIMAGESPEC for more details.
-
- // write out MAGIC, STORAGE, BPC
- stream.writeShort(474);
- stream.write((rle ? 1 : 0));
- stream.write(1);
-
- // write out DIMENSION
- stream.writeShort(3);
-
- // write XSIZE, YSIZE, ZSIZE
- stream.writeShort(xsize);
- stream.writeShort(ysize);
- stream.writeShort(zsize);
-
- // write PIXMIN, PIXMAX
- stream.writeInt(0);
- stream.writeInt(255);
-
- // write DUMMY
- stream.writeInt(0);
-
- // write IMAGENAME
- for (int i = 0; i < 80; i++)
- stream.write(0);
-
- // write COLORMAP
- stream.writeInt(0);
-
- // write DUMMY (404 bytes)
- for (int i = 0; i < 404; i++)
- stream.write(0);
- }
-
- private void writeImage(File file,
- byte[] data,
- int xsize,
- int ysize,
- int zsize,
- boolean yflip) throws IOException {
- // Input data is in RGBRGBRGB or RGBARGBARGBA format; first unswizzle it
- byte[] tmpData = new byte[xsize * ysize * zsize];
- int dest = 0;
- for (int i = 0; i < zsize; i++) {
- for (int j = i; j < (xsize * ysize * zsize); j += zsize) {
- tmpData[dest++] = data[j];
- }
- }
- data = tmpData;
-
- // requires: DATA must be an array of size XSIZE * YSIZE * ZSIZE,
- // indexed in the following manner:
- // data[0] ...data[xsize-1] == first row of first channel
- // data[xsize]...data[2*xsize-1] == second row of first channel
- // ... data[(ysize - 1) * xsize]...data[(ysize * xsize) - 1] ==
- // last row of first channel
- // Later channels follow the same format.
- // *** NOTE that "first row" is defined by the BOTTOM ROW of
- // the image. That is, the origin is in the lower left corner.
- // effects: writes out an SGI image to FILE, RLE-compressed, INCLUDING
- // header, of dimensions (xsize, ysize, zsize), and containing
- // the data in DATA. If YFLIP is set, outputs the data in DATA
- // in reverse order vertically (equivalent to a flip about the
- // x axis).
-
- // Build the offset tables
- int[] starttab = new int[ysize * zsize];
- int[] lengthtab = new int[ysize * zsize];
-
- // Temporary buffer for holding RLE data.
- // Note that this makes the assumption that RLE-compressed data will
- // never exceed twice the size of the input data.
- // There are surely formal proofs about how big the RLE buffer should
- // be, as well as what the optimal look-ahead size is (i.e. don't switch
- // copy/repeat modes for less than N repeats). However, I'm going from
- // empirical evidence here; the break-even point seems to be a look-
- // ahead of 3. (That is, if the three values following this one are all
- // the same as the current value, switch to repeat mode.)
- int lookahead = 3;
- byte[] rlebuf = new byte[2 * xsize * ysize * zsize];
-
- int cur_loc = 0; // current offset location.
- int ptr = 0;
- int total_size = 0;
- int ystart = 0;
- int yincr = 1;
- int yend = ysize;
-
- if (yflip) {
- ystart = ysize - 1;
- yend = -1;
- yincr = -1;
- }
-
- boolean DEBUG = false;
-
- for (int z = 0; z < zsize; z++) {
- for (int y = ystart; y != yend; y += yincr) {
- // RLE-compress each row.
-
- int x = 0;
- byte count = 0;
- boolean repeat_mode = false;
- boolean should_switch = false;
- int start_ptr = ptr;
- int num_ptr = ptr++;
- byte repeat_val = 0;
-
- while (x < xsize) {
- // see if we should switch modes
- should_switch = false;
- if (repeat_mode) {
- if (imgref(data, x, y, z, xsize, ysize, zsize) != repeat_val) {
- should_switch = true;
- }
- } else {
- // look ahead to see if we should switch to repeat mode.
- // stay within the scanline for the lookahead
- if ((x + lookahead) < xsize) {
- should_switch = true;
- for (int i = 1; i <= lookahead; i++) {
- if (DEBUG)
- System.err.println("left side was " + ((int) imgref(data, x, y, z, xsize, ysize, zsize)) +
- ", right side was " + (int)imgref(data, x+i, y, z, xsize, ysize, zsize));
-
- if (imgref(data, x, y, z, xsize, ysize, zsize) !=
- imgref(data, x+i, y, z, xsize, ysize, zsize))
- should_switch = false;
- }
- }
- }
-
- if (should_switch || (count == 127)) {
- // update the number of elements we repeated/copied
- if (x > 0) {
- if (repeat_mode)
- rlebuf[num_ptr] = count;
- else
- rlebuf[num_ptr] = (byte) (count | 0x80);
- }
- // perform mode switch if necessary; output repeat_val if
- // switching FROM repeat mode, and set it if switching
- // TO repeat mode.
- if (repeat_mode) {
- if (should_switch)
- repeat_mode = false;
- rlebuf[ptr++] = repeat_val;
- } else {
- if (should_switch)
- repeat_mode = true;
- repeat_val = imgref(data, x, y, z, xsize, ysize, zsize);
- }
-
- if (x > 0) {
- // reset the number pointer
- num_ptr = ptr++;
- // reset number of bytes copied
- count = 0;
- }
- }
-
- // if not in repeat mode, copy element to ptr
- if (!repeat_mode) {
- rlebuf[ptr++] = imgref(data, x, y, z, xsize, ysize, zsize);
- }
- count++;
-
- if (x == xsize - 1) {
- // Need to store the number of pixels we copied/repeated.
- if (repeat_mode) {
- rlebuf[num_ptr] = count;
- // If we ended the row in repeat mode, store the
- // repeated value
- rlebuf[ptr++] = repeat_val;
- }
- else
- rlebuf[num_ptr] = (byte) (count | 0x80);
-
- // output zero counter for the last value in the row
- rlebuf[ptr++] = 0;
- }
-
- x++;
- }
- // output this row's length into the length table
- int rowlen = ptr - start_ptr;
- if (yflip)
- lengthtab[ysize*z+(ysize-y-1)] = rowlen;
- else
- lengthtab[ysize*z+y] = rowlen;
- // add to the start table, and update the current offset
- if (yflip)
- starttab[ysize*z+(ysize-y-1)] = cur_loc;
- else
- starttab[ysize*z+y] = cur_loc;
- cur_loc += rowlen;
- }
- }
-
- // Now we have the offset tables computed, as well as the RLE data.
- // Output this information to the file.
- total_size = ptr;
-
- if (DEBUG)
- System.err.println("total_size was " + total_size);
-
- DataOutputStream stream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
-
- writeHeader(stream, xsize, ysize, zsize, true);
-
- int SIZEOF_INT = 4;
- for (int i = 0; i < (ysize * zsize); i++)
- stream.writeInt(starttab[i] + 512 + (2 * ysize * zsize * SIZEOF_INT));
- for (int i = 0; i < (ysize * zsize); i++)
- stream.writeInt(lengthtab[i]);
- for (int i = 0; i < total_size; i++)
- stream.write(rlebuf[i]);
-
- stream.close();
- }
-
- private byte[] readAll(DataInputStream in) throws IOException {
- byte[] dest = new byte[16384];
- int pos = 0;
- int numRead = 0;
-
- boolean done = false;
-
- do {
- numRead = in.read(dest, pos, dest.length - pos);
- if (pos == dest.length) {
- // Resize destination buffer
- byte[] newDest = new byte[2 * dest.length];
- System.arraycopy(dest, 0, newDest, 0, pos);
- dest = newDest;
- }
- if (numRead > 0) {
- pos += numRead;
- }
-
- done = ((numRead == -1) || (in.available() == 0));
- } while (!done);
-
- // Trim destination buffer
- if (pos != dest.length) {
- byte[] finalDest = new byte[pos];
- System.arraycopy(dest, 0, finalDest, 0, pos);
- dest = finalDest;
- }
-
- return dest;
- }
-
- // Test case
- /*
- public static void main(String[] args) {
- for (int i = 0; i < args.length; i++) {
- try {
- System.out.println(args[i] + ":");
- SGIImage image = SGIImage.read(args[i]);
- System.out.println(image);
- BufferedImage img = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
- WritableRaster raster = img.getRaster();
- DataBufferByte db = (DataBufferByte) raster.getDataBuffer();
- byte[] src = image.getData();
- byte[] dest = db.getData();
- for (int j = 0; j < src.length; j += 4) {
- dest[j + 0] = src[j + 3];
- dest[j + 1] = src[j + 2];
- dest[j + 2] = src[j + 1];
- dest[j + 3] = src[j + 0];
- }
- // System.arraycopy(src, 0, dest, 0, src.length);
- ImageIcon icon = new ImageIcon(img);
- JLabel label = new JLabel();
- label.setIcon(icon);
- JFrame frame = new JFrame(args[i]);
- frame.getContentPane().add(label);
- frame.pack();
- frame.show();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- */
-}
diff --git a/src/classes/com/sun/opengl/util/texture/spi/TGAImage.java b/src/classes/com/sun/opengl/util/texture/spi/TGAImage.java
deleted file mode 100755
index 8ab095643..000000000
--- a/src/classes/com/sun/opengl/util/texture/spi/TGAImage.java
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.texture.spi;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import javax.media.opengl.*;
-import com.sun.opengl.util.*;
-
-/**
- * Targa image reader and writer adapted from sources of the <a href =
- * "http://java.sun.com/products/jimi/">Jimi</a> image I/O class library.
- *
- * <P>
- *
- * Image decoder for image data stored in TGA file format.
- * Currently only the original TGA file format is supported. This is
- * because the new TGA format has data at the end of the file, getting
- * to the end of a file in an InputStream orient environment presents
- * several difficulties which are avoided at the moment.
- *
- * <P>
- *
- * This is a simple decoder and is only setup to load a single image
- * from the input stream
- *
- * <P>
- *
- * @author Robin Luiten
- * @author Kenneth Russell
- * @version $Revision$
- */
-
-public class TGAImage {
- private Header header;
- private int format;
- private ByteBuffer data;
-
- private TGAImage(Header header) {
- this.header = header;
- }
-
- /**
- * This class reads in all of the TGA image header in addition it also
- * reads in the imageID field as it is convenient to handle that here.
- *
- * @author Robin Luiten
- * @version 1.1
- */
- public static class Header {
- /** Set of possible file format TGA types */
- public final static int TYPE_NEW = 0;
- public final static int TYPE_OLD = 1;
- public final static int TYPE_UNK = 2; // cant rewind stream so unknown for now.
-
- /** Set of possible image types in TGA file */
- public final static int NO_IMAGE = 0; // no image data
- public final static int UCOLORMAPPED = 1; // uncompressed color mapped image
- public final static int UTRUECOLOR = 2; // uncompressed true color image
- public final static int UBLACKWHITE = 3; // uncompressed black and white image
- public final static int COLORMAPPED = 9; // compressed color mapped image
- public final static int TRUECOLOR = 10; // compressed true color image
- public final static int BLACKWHITE = 11; // compressed black and white image
-
- /** Field image descriptor bitfield values definitions */
- public final static int ID_ATTRIBPERPIXEL = 0xF;
- public final static int ID_RIGHTTOLEFT = 0x10;
- public final static int ID_TOPTOBOTTOM = 0x20;
- public final static int ID_INTERLEAVE = 0xC0;
-
- /** Field image descriptor / interleave values */
- public final static int I_NOTINTERLEAVED = 0;
- public final static int I_TWOWAY = 1;
- public final static int I_FOURWAY = 2;
-
- /** Type of this TGA file format */
- private int tgaType;
-
- /** initial TGA image data fields */
- private int idLength; // byte value
- private int colorMapType; // byte value
- private int imageType; // byte value
-
- /** TGA image colour map fields */
- private int firstEntryIndex;
- private int colorMapLength;
- private byte colorMapEntrySize;
-
- /** TGA image specification fields */
- private int xOrigin;
- private int yOrigin;
- private int width;
- private int height;
- private byte pixelDepth;
- private byte imageDescriptor;
-
- private byte[] imageIDbuf;
- private String imageID;
-
- // For construction from user data
- Header() {
- tgaType = TYPE_OLD; // dont try and get footer.
- }
-
- Header(LEDataInputStream in) throws IOException {
- int ret;
-
- tgaType = TYPE_OLD; // dont try and get footer.
-
- // initial header fields
- idLength = in.readUnsignedByte();
- colorMapType = in.readUnsignedByte();
- imageType = in.readUnsignedByte();
-
- // color map header fields
- firstEntryIndex = in.readUnsignedShort();
- colorMapLength = in.readUnsignedShort();
- colorMapEntrySize = in.readByte();
-
- // TGA image specification fields
- xOrigin = in.readUnsignedShort();
- yOrigin = in.readUnsignedShort();
- width = in.readUnsignedShort();
- height = in.readUnsignedShort();
- pixelDepth = in.readByte();
- imageDescriptor = in.readByte();
-
- if (idLength > 0) {
- imageIDbuf = new byte[idLength];
- in.read(imageIDbuf, 0, idLength);
- imageID = new String(imageIDbuf, "US-ASCII");
- }
- }
-
- public int tgaType() { return tgaType; }
-
- /** initial TGA image data fields */
- public int idLength() { return idLength; }
- public int colorMapType() { return colorMapType; }
- public int imageType() { return imageType; }
-
- /** TGA image colour map fields */
- public int firstEntryIndex() { return firstEntryIndex; }
- public int colorMapLength() { return colorMapLength; }
- public byte colorMapEntrySize() { return colorMapEntrySize; }
-
- /** TGA image specification fields */
- public int xOrigin() { return xOrigin; }
- public int yOrigin() { return yOrigin; }
- public int width() { return width; }
- public int height() { return height; }
- public byte pixelDepth() { return pixelDepth; }
- public byte imageDescriptor() { return imageDescriptor; }
-
- /** bitfields in imageDescriptor */
- public byte attribPerPixel() { return (byte)(imageDescriptor & ID_ATTRIBPERPIXEL); }
- public boolean rightToLeft() { return ((imageDescriptor & ID_RIGHTTOLEFT) != 0); }
- public boolean topToBottom() { return ((imageDescriptor & ID_TOPTOBOTTOM) != 0); }
- public byte interleave() { return (byte)((imageDescriptor & ID_INTERLEAVE) >> 6); }
-
- public byte[] imageIDbuf() { return imageIDbuf; }
- public String imageID() { return imageID; }
-
- public String toString() {
- return "TGA Header " +
- " id length: " + idLength +
- " color map type: "+ colorMapType +
- " image type: "+ imageType +
- " first entry index: " + firstEntryIndex +
- " color map length: " + colorMapLength +
- " color map entry size: " + colorMapEntrySize +
- " x Origin: " + xOrigin +
- " y Origin: " + yOrigin +
- " width: "+ width +
- " height: "+ height +
- " pixel depth: "+ pixelDepth +
- " image descriptor: "+ imageDescriptor +
- (imageIDbuf == null ? "" : (" ID String: " + imageID));
- }
-
- public int size() { return 18 + idLength; }
-
- // buf must be in little-endian byte order
- private void write(ByteBuffer buf) {
- buf.put((byte) idLength);
- buf.put((byte) colorMapType);
- buf.put((byte) imageType);
- buf.putShort((short) firstEntryIndex);
- buf.putShort((short) colorMapLength);
- buf.put((byte) colorMapEntrySize);
- buf.putShort((short) xOrigin);
- buf.putShort((short) yOrigin);
- buf.putShort((short) width);
- buf.putShort((short) height);
- buf.put((byte) pixelDepth);
- buf.put((byte) imageDescriptor);
- if (idLength > 0) {
- try {
- byte[] chars = imageID.getBytes("US-ASCII");
- buf.put(chars);
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException(e);
- }
- }
- }
- }
-
-
- /**
- * Identifies the image type of the tga image data and loads
- * it into the JimiImage structure. This was taken from the
- * prototype and modified for the new Jimi structure
- */
- private void decodeImage(LEDataInputStream dIn) throws IOException {
- switch (header.imageType()) {
- case Header.UCOLORMAPPED:
- throw new IOException("TGADecoder Uncompressed Colormapped images not supported");
-
- case Header.UTRUECOLOR: // pixelDepth 15, 16, 24 and 32
- switch (header.pixelDepth) {
- case 16:
- throw new IOException("TGADecoder Compressed 16-bit True Color images not supported");
-
- case 24:
- case 32:
- decodeRGBImageU24_32(dIn);
- break;
- }
- break;
-
- case Header.UBLACKWHITE:
- throw new IOException("TGADecoder Uncompressed Grayscale images not supported");
-
- case Header.COLORMAPPED:
- throw new IOException("TGADecoder Compressed Colormapped images not supported");
-
- case Header.TRUECOLOR:
- throw new IOException("TGADecoder Compressed True Color images not supported");
-
- case Header.BLACKWHITE:
- throw new IOException("TGADecoder Compressed Grayscale images not supported");
- }
- }
-
- /**
- * This assumes that the body is for a 24 bit or 32 bit for a
- * RGB or ARGB image respectively.
- */
- private void decodeRGBImageU24_32(LEDataInputStream dIn) throws IOException {
- int i; // row index
- int j; // column index
- int y; // output row index
- int raw; // index through the raw input buffer
- int rawWidth = header.width() * (header.pixelDepth() / 8);
- byte[] rawBuf = new byte[rawWidth];
- byte[] tmpData = new byte[rawWidth * header.height()];
-
- if (header.pixelDepth() == 24) {
- format = GL.GL_BGR;
- } else {
- assert header.pixelDepth() == 32;
- format = GL.GL_BGRA;
- }
-
- for (i = 0; i < header.height(); ++i) {
- dIn.readFully(rawBuf, 0, rawWidth);
-
- if (header.topToBottom())
- y = header.height - i - 1; // range 0 to (header.height - 1)
- else
- y = i;
-
- System.arraycopy(rawBuf, 0, tmpData, y * rawWidth, rawBuf.length);
- }
-
- data = ByteBuffer.wrap(tmpData);
- }
-
- /** Returns the width of the image. */
- public int getWidth() { return header.width(); }
-
- /** Returns the height of the image. */
- public int getHeight() { return header.height(); }
-
- /** Returns the OpenGL format for this texture; e.g. GL.GL_BGR or GL.GL_BGRA. */
- public int getGLFormat() { return format; }
-
- /** Returns the raw data for this texture in the correct
- (bottom-to-top) order for calls to glTexImage2D. */
- public ByteBuffer getData() { return data; }
-
- /** Reads a Targa image from the specified file. */
- public static TGAImage read(String filename) throws IOException {
- return read(new FileInputStream(filename));
- }
-
- /** Reads a Targa image from the specified InputStream. */
- public static TGAImage read(InputStream in) throws IOException {
- LEDataInputStream dIn = new LEDataInputStream(new BufferedInputStream(in));
-
- Header header = new Header(dIn);
- TGAImage res = new TGAImage(header);
- res.decodeImage(dIn);
- return res;
- }
-
- /** Writes the image in Targa format to the specified file name. */
- public void write(String filename) throws IOException {
- write(new File(filename));
- }
-
- /** Writes the image in Targa format to the specified file. */
- public void write(File file) throws IOException {
- FileOutputStream stream = new FileOutputStream(file);
- FileChannel chan = stream.getChannel();
- ByteBuffer buf = ByteBuffer.allocate(header.size());
- buf.order(ByteOrder.LITTLE_ENDIAN);
- header.write(buf);
- buf.rewind();
- chan.write(buf);
- chan.write(data);
- data.rewind();
- chan.force(true);
- chan.close();
- stream.close();
- }
-
- /** Creates a TGAImage from data supplied by the end user. Shares
- data with the passed ByteBuffer. Assumes the data is already in
- the correct byte order for writing to disk, i.e., BGR or
- BGRA. */
- public static TGAImage createFromData(int width,
- int height,
- boolean hasAlpha,
- boolean topToBottom,
- ByteBuffer data) {
- Header header = new Header();
- header.imageType = Header.UTRUECOLOR;
- header.width = width;
- header.height = height;
- header.pixelDepth = (byte) (hasAlpha ? 32 : 24);
- header.imageDescriptor = (byte) (topToBottom ? Header.ID_TOPTOBOTTOM : 0);
- // Note ID not supported
- TGAImage ret = new TGAImage(header);
- ret.data = data;
- return ret;
- }
-}
diff --git a/src/classes/com/sun/opengl/util/texture/spi/TextureProvider.java b/src/classes/com/sun/opengl/util/texture/spi/TextureProvider.java
deleted file mode 100755
index 1c822ef02..000000000
--- a/src/classes/com/sun/opengl/util/texture/spi/TextureProvider.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.texture.spi;
-
-import java.io.*;
-import java.net.*;
-
-import com.sun.opengl.util.texture.*;
-
-/** Plug-in interface to TextureIO to support reading OpenGL textures
- from new file formats. For all methods, either internalFormat or
- pixelFormat may be 0 in which case they must be inferred as
- e.g. RGB or RGBA depending on the file contents.
-*/
-
-public interface TextureProvider {
-
- /**
- * Produces a TextureData object from a file, or returns null if the
- * file format was not supported by this TextureProvider. Does not
- * do any OpenGL-related work. The resulting TextureData can be
- * converted into an OpenGL texture in a later step.
- *
- * @param file the file from which to read the texture data
- *
- * @param internalFormat the OpenGL internal format to be used for
- * the texture, or 0 if it should be inferred
- * from the file's contents
- *
- * @param pixelFormat the OpenGL pixel format to be used for
- * the texture, or 0 if it should be inferred
- * from the file's contents
- *
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- *
- * @param fileSuffix the file suffix to be used as a hint to the
- * provider to more quickly decide whether it
- * can handle the file, or null if the
- * provider should infer the type from the
- * file's contents
- *
- * @throws IOException if an error occurred while reading the file
- */
- public TextureData newTextureData(File file,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException;
-
- /**
- * Produces a TextureData object from a stream, or returns null if
- * the file format was not supported by this TextureProvider. Does
- * not do any OpenGL-related work. The resulting TextureData can be
- * converted into an OpenGL texture in a later step.
- *
- * @param stream the stream from which to read the texture data
- *
- * @param internalFormat the OpenGL internal format to be used for
- * the texture, or 0 if it should be inferred
- * from the file's contents
- *
- * @param pixelFormat the OpenGL pixel format to be used for
- * the texture, or 0 if it should be inferred
- * from the file's contents
- *
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- *
- * @param fileSuffix the file suffix to be used as a hint to the
- * provider to more quickly decide whether it
- * can handle the file, or null if the
- * provider should infer the type from the
- * file's contents
- *
- * @throws IOException if an error occurred while reading the stream
- */
- public TextureData newTextureData(InputStream stream,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException;
-
- /**
- * Produces a TextureData object from a URL, or returns null if the
- * file format was not supported by this TextureProvider. Does not
- * do any OpenGL-related work. The resulting TextureData can be
- * converted into an OpenGL texture in a later step.
- *
- * @param url the URL from which to read the texture data
- *
- * @param internalFormat the OpenGL internal format to be used for
- * the texture, or 0 if it should be inferred
- * from the file's contents
- *
- * @param pixelFormat the OpenGL pixel format to be used for
- * the texture, or 0 if it should be inferred
- * from the file's contents
- *
- * @param mipmap whether mipmaps should be produced for this
- * texture either by autogenerating them or
- * reading them from the file. Some file formats
- * support multiple mipmaps in a single file in
- * which case those mipmaps will be used rather
- * than generating them.
- *
- * @param fileSuffix the file suffix to be used as a hint to the
- * provider to more quickly decide whether it
- * can handle the file, or null if the
- * provider should infer the type from the
- * file's contents
- *
- * @throws IOException if an error occurred while reading the URL
- */
- public TextureData newTextureData(URL url,
- int internalFormat,
- int pixelFormat,
- boolean mipmap,
- String fileSuffix) throws IOException;
-}
diff --git a/src/classes/com/sun/opengl/util/texture/spi/TextureWriter.java b/src/classes/com/sun/opengl/util/texture/spi/TextureWriter.java
deleted file mode 100755
index 423a3b3e5..000000000
--- a/src/classes/com/sun/opengl/util/texture/spi/TextureWriter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.sun.opengl.util.texture.spi;
-
-import java.io.*;
-
-import com.sun.opengl.util.texture.*;
-
-/** Plug-in interface to TextureIO to support writing OpenGL textures
- to new file formats. */
-
-public interface TextureWriter {
- /** Writes the given TextureData to the passed file. Returns true if
- this TextureWriter successfully handled the writing of the file,
- otherwise false. May throw IOException if either this writer did
- not support certain parameters of the TextureData or if an I/O
- error occurred. */
- public boolean write(File file,
- TextureData data) throws IOException;
-}
diff --git a/src/classes/javax/media/opengl/AWTGraphicsConfiguration.java b/src/classes/javax/media/opengl/AWTGraphicsConfiguration.java
deleted file mode 100644
index 25647fc62..000000000
--- a/src/classes/javax/media/opengl/AWTGraphicsConfiguration.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.awt.GraphicsConfiguration;
-
-/** A wrapper for an AWT GraphicsConfiguration allowing it to be
- handled in a toolkit-independent manner. */
-
-public class AWTGraphicsConfiguration implements AbstractGraphicsConfiguration {
- private GraphicsConfiguration config;
-
- public AWTGraphicsConfiguration(GraphicsConfiguration config) {
- this.config = config;
- }
-
- public GraphicsConfiguration getGraphicsConfiguration() {
- return config;
- }
-}
diff --git a/src/classes/javax/media/opengl/AWTGraphicsDevice.java b/src/classes/javax/media/opengl/AWTGraphicsDevice.java
deleted file mode 100644
index 98c7ef2bf..000000000
--- a/src/classes/javax/media/opengl/AWTGraphicsDevice.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.awt.GraphicsDevice;
-
-/** A wrapper for an AWT GraphicsDevice allowing it to be
- handled in a toolkit-independent manner. */
-
-public class AWTGraphicsDevice implements AbstractGraphicsDevice {
- private GraphicsDevice device;
-
- public AWTGraphicsDevice(GraphicsDevice device) {
- this.device = device;
- }
-
- public GraphicsDevice getGraphicsDevice() {
- return device;
- }
-}
diff --git a/src/classes/javax/media/opengl/AbstractGraphicsConfiguration.java b/src/classes/javax/media/opengl/AbstractGraphicsConfiguration.java
deleted file mode 100644
index 18149fb68..000000000
--- a/src/classes/javax/media/opengl/AbstractGraphicsConfiguration.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-/** A marker interface describing a graphics configuration, visual, or
- pixel format in a toolkit-independent manner. */
-
-public interface AbstractGraphicsConfiguration {
-}
diff --git a/src/classes/javax/media/opengl/AbstractGraphicsDevice.java b/src/classes/javax/media/opengl/AbstractGraphicsDevice.java
deleted file mode 100644
index 52ad9b796..000000000
--- a/src/classes/javax/media/opengl/AbstractGraphicsDevice.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-/** A marker interface describing a graphics device in a
- toolkit-independent manner. */
-
-public interface AbstractGraphicsDevice {
-}
diff --git a/src/classes/javax/media/opengl/ComponentEvents.java b/src/classes/javax/media/opengl/ComponentEvents.java
deleted file mode 100644
index bfbbb957b..000000000
--- a/src/classes/javax/media/opengl/ComponentEvents.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.awt.event.*;
-import java.beans.PropertyChangeListener;
-
-/** Factors out the listener manipulation for the events supported by
- all of the {@link GLDrawable} implementations. Provided to reduce
- clutter in the documentation for GLDrawable. */
-
-public interface ComponentEvents {
- public void addComponentListener(ComponentListener l);
- public void removeComponentListener(ComponentListener l);
- public void addFocusListener(FocusListener l);
- public void removeFocusListener(FocusListener l);
- public void addHierarchyBoundsListener(HierarchyBoundsListener l);
- public void removeHierarchyBoundsListener(HierarchyBoundsListener l);
- public void addHierarchyListener(HierarchyListener l);
- public void removeHierarchyListener(HierarchyListener l);
- public void addInputMethodListener(InputMethodListener l);
- public void removeInputMethodListener(InputMethodListener l);
- public void addKeyListener(KeyListener l);
- public void removeKeyListener(KeyListener l);
- public void addMouseListener(MouseListener l);
- public void removeMouseListener(MouseListener l);
- public void addMouseMotionListener(MouseMotionListener l);
- public void removeMouseMotionListener(MouseMotionListener l);
- public void addMouseWheelListener(MouseWheelListener l);
- public void removeMouseWheelListener(MouseWheelListener l);
- public void addPropertyChangeListener(PropertyChangeListener listener);
- public void removePropertyChangeListener(PropertyChangeListener listener);
- public void addPropertyChangeListener(String propertyName,
- PropertyChangeListener listener);
- public void removePropertyChangeListener(String propertyName,
- PropertyChangeListener listener);
-}
diff --git a/src/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java b/src/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java
deleted file mode 100644
index 5147ab8b7..000000000
--- a/src/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import com.sun.opengl.impl.Debug;
-
-/** <P> The default implementation of the {@link
- GLCapabilitiesChooser} interface, which provides consistent visual
- selection behavior across platforms. The precise algorithm is
- deliberately left loosely specified. Some properties are: </P>
-
- <UL>
-
- <LI> As long as there is at least one available non-null
- GLCapabilities which matches the "stereo" option, will return a
- valid index.
-
- <LI> Attempts to match as closely as possible the given
- GLCapabilities, but will select one with fewer capabilities (i.e.,
- lower color depth) if necessary.
-
- <LI> Prefers hardware-accelerated visuals to
- non-hardware-accelerated.
-
- <LI> If there is no exact match, prefers a more-capable visual to
- a less-capable one.
-
- <LI> If there is more than one exact match, chooses an arbitrary
- one.
-
- <LI> May select the opposite of a double- or single-buffered
- visual (based on the user's request) in dire situations.
-
- <LI> Color depth (including alpha) mismatches are weighted higher
- than depth buffer mismatches, which are in turn weighted higher
- than accumulation buffer (including alpha) and stencil buffer
- depth mismatches.
-
- <LI> If a valid windowSystemRecommendedChoice parameter is
- supplied, chooses that instead of using the cross-platform code.
-
- </UL>
-*/
-
-public class DefaultGLCapabilitiesChooser implements GLCapabilitiesChooser {
- private static final boolean DEBUG = Debug.debug("DefaultGLCapabilitiesChooser");
-
- public int chooseCapabilities(GLCapabilities desired,
- GLCapabilities[] available,
- int windowSystemRecommendedChoice) {
- if (DEBUG) {
- System.err.println("Desired: " + desired);
- for (int i = 0; i < available.length; i++) {
- System.err.println("Available " + i + ": " + available[i]);
- }
- System.err.println("Window system's recommended choice: " + windowSystemRecommendedChoice);
- }
-
- if (windowSystemRecommendedChoice >= 0 &&
- windowSystemRecommendedChoice < available.length &&
- available[windowSystemRecommendedChoice] != null) {
- if (DEBUG) {
- System.err.println("Choosing window system's recommended choice of " + windowSystemRecommendedChoice);
- System.err.println(available[windowSystemRecommendedChoice]);
- }
- return windowSystemRecommendedChoice;
- }
-
- // Create score array
- int[] scores = new int[available.length];
- int NO_SCORE = -9999999;
- int DOUBLE_BUFFER_MISMATCH_PENALTY = 1000;
- int STENCIL_MISMATCH_PENALTY = 500;
- // Pseudo attempt to keep equal rank penalties scale-equivalent
- // (e.g., stencil mismatch is 3 * accum because there are 3 accum
- // components)
- int COLOR_MISMATCH_PENALTY_SCALE = 36;
- int DEPTH_MISMATCH_PENALTY_SCALE = 6;
- int ACCUM_MISMATCH_PENALTY_SCALE = 1;
- int STENCIL_MISMATCH_PENALTY_SCALE = 3;
- for (int i = 0; i < scores.length; i++) {
- scores[i] = NO_SCORE;
- }
- // Compute score for each
- for (int i = 0; i < scores.length; i++) {
- GLCapabilities cur = available[i];
- if (cur == null) {
- continue;
- }
- if (desired.getStereo() != cur.getStereo()) {
- continue;
- }
- int score = 0;
- // Compute difference in color depth
- // (Note that this decides the direction of all other penalties)
- score += (COLOR_MISMATCH_PENALTY_SCALE *
- ((cur.getRedBits() + cur.getGreenBits() + cur.getBlueBits() + cur.getAlphaBits()) -
- (desired.getRedBits() + desired.getGreenBits() + desired.getBlueBits() + desired.getAlphaBits())));
- // Compute difference in depth buffer depth
- score += (DEPTH_MISMATCH_PENALTY_SCALE * sign(score) *
- Math.abs(cur.getDepthBits() - desired.getDepthBits()));
- // Compute difference in accumulation buffer depth
- score += (ACCUM_MISMATCH_PENALTY_SCALE * sign(score) *
- Math.abs((cur.getAccumRedBits() + cur.getAccumGreenBits() + cur.getAccumBlueBits() + cur.getAccumAlphaBits()) -
- (desired.getAccumRedBits() + desired.getAccumGreenBits() + desired.getAccumBlueBits() + desired.getAccumAlphaBits())));
- // Compute difference in stencil bits
- score += STENCIL_MISMATCH_PENALTY_SCALE * sign(score) * (cur.getStencilBits() - desired.getStencilBits());
- if (cur.getDoubleBuffered() != desired.getDoubleBuffered()) {
- score += sign(score) * DOUBLE_BUFFER_MISMATCH_PENALTY;
- }
- if ((desired.getStencilBits() > 0) && (cur.getStencilBits() == 0)) {
- score += sign(score) * STENCIL_MISMATCH_PENALTY;
- }
- scores[i] = score;
- }
- // Now prefer hardware-accelerated visuals by pushing scores of
- // non-hardware-accelerated visuals out
- boolean gotHW = false;
- int maxAbsoluteHWScore = 0;
- for (int i = 0; i < scores.length; i++) {
- int score = scores[i];
- if (score == NO_SCORE) {
- continue;
- }
- GLCapabilities cur = available[i];
- if (cur.getHardwareAccelerated()) {
- int absScore = Math.abs(score);
- if (!gotHW ||
- (absScore > maxAbsoluteHWScore)) {
- gotHW = true;
- maxAbsoluteHWScore = absScore;
- }
- }
- }
- if (gotHW) {
- for (int i = 0; i < scores.length; i++) {
- int score = scores[i];
- if (score == NO_SCORE) {
- continue;
- }
- GLCapabilities cur = available[i];
- if (!cur.getHardwareAccelerated()) {
- if (score <= 0) {
- score -= maxAbsoluteHWScore;
- } else if (score > 0) {
- score += maxAbsoluteHWScore;
- }
- scores[i] = score;
- }
- }
- }
-
- if (DEBUG) {
- System.err.print("Scores: [");
- for (int i = 0; i < available.length; i++) {
- if (i > 0) {
- System.err.print(",");
- }
- System.err.print(" " + scores[i]);
- }
- System.err.println(" ]");
- }
-
- // Ready to select. Choose score closest to 0.
- int scoreClosestToZero = NO_SCORE;
- int chosenIndex = -1;
- for (int i = 0; i < scores.length; i++) {
- int score = scores[i];
- if (score == NO_SCORE) {
- continue;
- }
- // Don't substitute a positive score for a smaller negative score
- if ((scoreClosestToZero == NO_SCORE) ||
- (Math.abs(score) < Math.abs(scoreClosestToZero) &&
- ((sign(scoreClosestToZero) < 0) || (sign(score) > 0)))) {
- scoreClosestToZero = score;
- chosenIndex = i;
- }
- }
- if (chosenIndex < 0) {
- throw new GLException("Unable to select one of the provided GLCapabilities");
- }
- if (DEBUG) {
- System.err.println("Chosen index: " + chosenIndex);
- System.err.println("Chosen capabilities:");
- System.err.println(available[chosenIndex]);
- }
-
- return chosenIndex;
- }
-
- private static int sign(int score) {
- if (score < 0) {
- return -1;
- }
- return 1;
- }
-}
diff --git a/src/classes/javax/media/opengl/GLAutoDrawable.java b/src/classes/javax/media/opengl/GLAutoDrawable.java
deleted file mode 100644
index 5f3115da8..000000000
--- a/src/classes/javax/media/opengl/GLAutoDrawable.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import javax.media.opengl.glu.*;
-
-/** A higher-level abstraction than {@link GLDrawable} which supplies
- an event based mechanism ({@link GLEventListener}) for performing
- OpenGL rendering. A GLAutoDrawable automatically creates a primary
- rendering context which is associated with the GLAutoDrawable for
- the lifetime of the object. This context has the {@link
- GLContext#setSynchronized synchronized} property enabled so that
- calls to {@link GLContext#makeCurrent makeCurrent} will block if
- the context is current on another thread. This allows the internal
- GLContext for the GLAutoDrawable to be used both by the event
- based rendering mechanism as well by end users directly. */
-
-public interface GLAutoDrawable extends GLDrawable, ComponentEvents {
- /**
- * Returns the context associated with this drawable. The returned
- * context will be synchronized.
- */
- public GLContext getContext();
-
- /** Adds a {@link GLEventListener} to this drawable. If multiple
- listeners are added to a given drawable, they are notified of
- events in an arbitrary order. */
- public void addGLEventListener(GLEventListener listener);
-
- /** Removes a {@link GLEventListener} from this drawable. Note that
- if this is done from within a particular drawable's {@link
- GLEventListener} handler (reshape, display, etc.) that it is not
- guaranteed that all other listeners will be evaluated properly
- during this update cycle. */
- public void removeGLEventListener(GLEventListener listener);
-
- /** Causes OpenGL rendering to be performed for this GLAutoDrawable
- by calling {@link GLEventListener#display display} for all
- registered {@link GLEventListener}s. Called automatically by the
- window system toolkit upon receiving a repaint() request. this
- routine may be called manually for better control over the
- rendering process. It is legal to call another GLAutoDrawable's
- display method from within the {@link GLEventListener#display
- display} callback. */
- public void display();
-
- /** Schedules a repaint of the component at some point in the
- future. */
- public void repaint();
-
- /** Enables or disables automatic buffer swapping for this drawable.
- By default this property is set to true; when true, after all
- GLEventListeners have been called for a display() event, the
- front and back buffers are swapped, displaying the results of
- the render. When disabled, the user is responsible for calling
- {@link #swapBuffers} manually. */
- public void setAutoSwapBufferMode(boolean onOrOff);
-
- /** Indicates whether automatic buffer swapping is enabled for this
- drawable. See {@link #setAutoSwapBufferMode}. */
- public boolean getAutoSwapBufferMode();
-
- /** Returns the {@link GL} pipeline object this GLAutoDrawable uses.
- If this method is called outside of the {@link
- GLEventListener}'s callback methods (init, display, etc.) it may
- return null. Users should not rely on the identity of the
- returned GL object; for example, users should not maintain a
- hash table with the GL object as the key. Additionally, the GL
- object should not be cached in client code, but should be
- re-fetched from the GLAutoDrawable at the beginning of each call
- to init, display, etc. */
- public GL getGL();
-
- /** Sets the {@link GL} pipeline object this GLAutoDrawable uses.
- This should only be called from within the GLEventListener's
- callback methods, and usually only from within the init()
- method, in order to install a composable pipeline. See the JOGL
- demos for examples. */
- public void setGL(GL gl);
-}
diff --git a/src/classes/javax/media/opengl/GLCanvas.java b/src/classes/javax/media/opengl/GLCanvas.java
deleted file mode 100644
index 73b3e51bf..000000000
--- a/src/classes/javax/media/opengl/GLCanvas.java
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.awt.Canvas;
-import java.awt.Color;
-import java.awt.EventQueue;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.awt.geom.*;
-import java.beans.*;
-import java.lang.reflect.*;
-import java.security.*;
-import com.sun.opengl.impl.*;
-
-// FIXME: Subclasses need to call resetGLFunctionAvailability() on their
-// context whenever the displayChanged() function is called on our
-// GLEventListeners
-
-/** A heavyweight AWT component which provides OpenGL rendering
- support. This is the primary implementation of {@link GLDrawable};
- {@link GLJPanel} is provided for compatibility with Swing user
- interfaces when adding a heavyweight doesn't work either because
- of Z-ordering or LayoutManager problems. */
-
-public class GLCanvas extends Canvas implements GLAutoDrawable {
-
- private static final boolean DEBUG = Debug.debug("GLCanvas");
-
- private GLDrawableHelper drawableHelper = new GLDrawableHelper();
- private GLDrawable drawable;
- private GLContext context;
- private boolean autoSwapBufferMode = true;
- private boolean sendReshape = false;
-
- private GraphicsConfiguration chosen;
- private GLCapabilities glCaps;
- private GLCapabilitiesChooser glCapChooser;
-
- /** Creates a new GLCanvas component with a default set of OpenGL
- capabilities, using the default OpenGL capabilities selection
- mechanism, on the default screen device. */
- public GLCanvas() {
- this(null);
- }
-
- /** Creates a new GLCanvas component with the requested set of
- OpenGL capabilities, using the default OpenGL capabilities
- selection mechanism, on the default screen device. */
- public GLCanvas(GLCapabilities capabilities) {
- this(capabilities, null, null, null);
- }
-
- /** Creates a new GLCanvas component. The passed GLCapabilities
- specifies the OpenGL capabilities for the component; if null, a
- default set of capabilities is used. The GLCapabilitiesChooser
- specifies the algorithm for selecting one of the available
- GLCapabilities for the component; a DefaultGLCapabilitesChooser
- is used if null is passed for this argument. The passed
- GLContext specifies an OpenGL context with which to share
- textures, display lists and other OpenGL state, and may be null
- if sharing is not desired. See the note in the overview
- documentation on <a
- href="../../../overview-summary.html#SHARING">context
- sharing</a>. The passed GraphicsDevice indicates the screen on
- which to create the GLCanvas; the GLDrawableFactory uses the
- default screen device of the local GraphicsEnvironment if null
- is passed for this argument. */
- public GLCanvas(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- GLContext shareWith,
- GraphicsDevice device) {
- // The platform-specific GLDrawableFactory will only provide a
- // non-null GraphicsConfiguration on platforms where this is
- // necessary (currently only X11, as Windows allows the pixel
- // format of the window to be set later and Mac OS X seems to
- // handle this very differently than all other platforms). On
- // other platforms this method returns null; it is the case (at
- // least in the Sun AWT implementation) that this will result in
- // equivalent behavior to calling the no-arg super() constructor
- // for Canvas.
- /*
- * Workaround for Xinerama, always pass null so we can detect whether
- * super.getGraphicsConfiguration() is returning the Canvas' GC (null),
- * or an ancestor component's GC (non-null) in the overridden version
- * below.
- */
- super();
- /*
- * Save the chosen capabilities for use in getGraphicsConfiguration().
- */
- chosen = chooseGraphicsConfiguration(capabilities, chooser, device);
- if (chosen != null) {
- /*
- * If we are running on a platform that
- * must select a GraphicsConfiguration now,
- * save these for later use in getGraphicsConfiguration().
- */
- this.glCapChooser = chooser;
- this.glCaps = capabilities;
- }
- if (!Beans.isDesignTime()) {
- drawable = GLDrawableFactory.getFactory().getGLDrawable(this, capabilities, chooser);
- context = drawable.createContext(shareWith);
- context.setSynchronized(true);
- }
- }
-
- /**
- * Overridden to choose a GraphicsConfiguration on a parent container's
- * GraphicsDevice because both devices
- */
- public GraphicsConfiguration getGraphicsConfiguration() {
- /*
- * Workaround for problems with Xinerama and java.awt.Component.checkGD
- * when adding to a container on a different graphics device than the
- * one that this Canvas is associated with.
- *
- * GC will be null unless:
- * - A native peer has assigned it. This means we have a native
- * peer, and are already comitted to a graphics configuration.
- * - This canvas has been added to a component hierarchy and has
- * an ancestor with a non-null GC, but the native peer has not
- * yet been created. This means we can still choose the GC on
- * all platforms since the peer hasn't been created.
- */
- final GraphicsConfiguration gc = super.getGraphicsConfiguration();
- /*
- * chosen is only non-null on platforms where the GLDrawableFactory
- * returns a non-null GraphicsConfiguration (in the GLCanvas
- * constructor).
- *
- * if gc is from this Canvas' native peer then it should equal chosen,
- * otherwise it is from an ancestor component that this Canvas is being
- * added to, and we go into this block.
- */
- if (gc != null && chosen != null && !chosen.equals(gc)) {
- /*
- * Check for compatibility with gc. If they differ by only the
- * device then return a new GCconfig with the super-class' GDevice
- * (and presumably the same visual ID in Xinerama).
- *
- */
- if (!chosen.getDevice().getIDstring().equals(gc.getDevice().getIDstring())) {
- /*
- * Here we select a GraphicsConfiguration on the alternate
- * device that is presumably identical to the chosen
- * configuration, but on the other device.
- *
- * Should really check to ensure that we select a configuration
- * with the same X visual ID for Xinerama screens, otherwise the
- * GLDrawable may have the wrong visual ID (I don't think this
- * ever gets updated). May need to add a method to
- * X11GLDrawableFactory to do this in a platform specific
- * manner.
- *
- * However, on platforms where we can actually get into this
- * block, both devices should have the same visual list, and the
- * same configuration should be selected here.
- */
- final GraphicsConfiguration compatible = chooseGraphicsConfiguration(glCaps, glCapChooser, gc.getDevice());
-
- if (compatible != null) {
- /*
- * Save the new GC for equals test above, and to return to
- * any outside callers of this method.
- */
- chosen = compatible;
- }
- }
-
- /*
- * If a compatible GC was not found in the block above, this will
- * return the GC that was selected in the constructor (and might
- * cause an exception in Component.checkGD when adding to a
- * container, but in this case that would be the desired behavior).
- *
- */
- return chosen;
- } else if (gc == null) {
- /*
- * The GC is null, which means we have no native peer, and are not
- * part of a (realized) component hierarchy. So we return the
- * desired visual that was selected in the constructor (possibly
- * null).
- */
- return chosen;
- }
-
- /*
- * Otherwise we have not explicitly selected a GC in the constructor, so
- * just return what Canvas would have.
- */
- return gc;
- }
-
- public GLContext createContext(GLContext shareWith) {
- return drawable.createContext(shareWith);
- }
-
- public void setRealized(boolean realized) {
- }
-
- public void display() {
- maybeDoSingleThreadedWorkaround(displayOnEventDispatchThreadAction,
- displayAction);
- }
-
- /** Overridden to cause OpenGL rendering to be performed during
- repaint cycles. Subclasses which override this method must call
- super.paint() in their paint() method in order to function
- properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>paint</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- public void paint(Graphics g) {
- if (Beans.isDesignTime()) {
- // Make GLCanvas behave better in NetBeans GUI builder
- g.setColor(Color.BLACK);
- g.fillRect(0, 0, getWidth(), getHeight());
- FontMetrics fm = g.getFontMetrics();
- String name = getName();
- if (name == null) {
- name = getClass().getName();
- int idx = name.lastIndexOf('.');
- if (idx >= 0) {
- name = name.substring(idx + 1);
- }
- }
- Rectangle2D bounds = fm.getStringBounds(name, g);
- g.setColor(Color.WHITE);
- g.drawString(name,
- (int) ((getWidth() - bounds.getWidth()) / 2),
- (int) ((getHeight() + bounds.getHeight()) / 2));
- return;
- }
-
- display();
- }
-
- /** Overridden to track when this component is added to a container.
- Subclasses which override this method must call
- super.addNotify() in their addNotify() method in order to
- function properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>addNotify</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- public void addNotify() {
- super.addNotify();
- if (!Beans.isDesignTime()) {
- disableBackgroundErase();
- drawable.setRealized(true);
- }
- if (DEBUG) {
- System.err.println("GLCanvas.addNotify()");
- }
- }
-
- /** Overridden to track when this component is removed from a
- container. Subclasses which override this method must call
- super.removeNotify() in their removeNotify() method in order to
- function properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>removeNotify</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- public void removeNotify() {
- if (Beans.isDesignTime()) {
- super.removeNotify();
- } else {
- try {
- if (Threading.isSingleThreaded() &&
- !Threading.isOpenGLThread()) {
- // Workaround for termination issues with applets --
- // sun.applet.AppletPanel should probably be performing the
- // remove() call on the EDT rather than on its own thread
- if (Threading.isAWTMode() &&
- Thread.holdsLock(getTreeLock())) {
- // The user really should not be invoking remove() from this
- // thread -- but since he/she is, we can not go over to the
- // EDT at this point. Try to destroy the context from here.
- destroyAction.run();
- } else {
- Threading.invokeOnOpenGLThread(destroyAction);
- }
- } else {
- destroyAction.run();
- }
- } finally {
- drawable.setRealized(false);
- super.removeNotify();
- if (DEBUG) {
- System.err.println("GLCanvas.removeNotify()");
- }
- }
- }
- }
-
- /** Overridden to cause {@link GLDrawableHelper#reshape} to be
- called on all registered {@link GLEventListener}s. Subclasses
- which override this method must call super.reshape() in
- their reshape() method in order to function properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>reshape</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- public void reshape(int x, int y, int width, int height) {
- super.reshape(x, y, width, height);
- sendReshape = true;
- }
-
- /** <B>Overrides:</B>
- <DL><DD><CODE>update</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- // Overridden from Canvas to prevent the AWT's clearing of the
- // canvas from interfering with the OpenGL rendering.
- public void update(Graphics g) {
- paint(g);
- }
-
- public void addGLEventListener(GLEventListener listener) {
- drawableHelper.addGLEventListener(listener);
- }
-
- public void removeGLEventListener(GLEventListener listener) {
- drawableHelper.removeGLEventListener(listener);
- }
-
- public GLContext getContext() {
- return context;
- }
-
- public GL getGL() {
- if (Beans.isDesignTime()) {
- return null;
- }
-
- return getContext().getGL();
- }
-
- public void setGL(GL gl) {
- if (!Beans.isDesignTime()) {
- getContext().setGL(gl);
- }
- }
-
- public void setAutoSwapBufferMode(boolean onOrOff) {
- drawableHelper.setAutoSwapBufferMode(onOrOff);
- }
-
- public boolean getAutoSwapBufferMode() {
- return drawableHelper.getAutoSwapBufferMode();
- }
-
- public void swapBuffers() {
- maybeDoSingleThreadedWorkaround(swapBuffersOnEventDispatchThreadAction, swapBuffersAction);
- }
-
- public GLCapabilities getChosenGLCapabilities() {
- if (drawable == null)
- return null;
-
- return drawable.getChosenGLCapabilities();
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void maybeDoSingleThreadedWorkaround(Runnable eventDispatchThreadAction,
- Runnable invokeGLAction) {
- if (Threading.isSingleThreaded() &&
- !Threading.isOpenGLThread()) {
- Threading.invokeOnOpenGLThread(eventDispatchThreadAction);
- } else {
- drawableHelper.invokeGL(drawable, context, invokeGLAction, initAction);
- }
- }
-
- class InitAction implements Runnable {
- public void run() {
- drawableHelper.init(GLCanvas.this);
- }
- }
- private InitAction initAction = new InitAction();
-
- class DisplayAction implements Runnable {
- public void run() {
- if (sendReshape) {
- // Note: we ignore the given x and y within the parent component
- // since we are drawing directly into this heavyweight component.
- int width = getWidth();
- int height = getHeight();
- getGL().glViewport(0, 0, width, height);
- drawableHelper.reshape(GLCanvas.this, 0, 0, width, height);
- sendReshape = false;
- }
-
- drawableHelper.display(GLCanvas.this);
- }
- }
- private DisplayAction displayAction = new DisplayAction();
-
- class SwapBuffersAction implements Runnable {
- public void run() {
- drawable.swapBuffers();
- }
- }
- private SwapBuffersAction swapBuffersAction = new SwapBuffersAction();
-
- // Workaround for ATI driver bugs related to multithreading issues
- // like simultaneous rendering via Animators to canvases that are
- // being resized on the AWT event dispatch thread
- class DisplayOnEventDispatchThreadAction implements Runnable {
- public void run() {
- drawableHelper.invokeGL(drawable, context, displayAction, initAction);
- }
- }
- private DisplayOnEventDispatchThreadAction displayOnEventDispatchThreadAction =
- new DisplayOnEventDispatchThreadAction();
- class SwapBuffersOnEventDispatchThreadAction implements Runnable {
- public void run() {
- drawableHelper.invokeGL(drawable, context, swapBuffersAction, initAction);
- }
- }
- private SwapBuffersOnEventDispatchThreadAction swapBuffersOnEventDispatchThreadAction =
- new SwapBuffersOnEventDispatchThreadAction();
-
- class DestroyAction implements Runnable {
- public void run() {
- GLContext current = GLContext.getCurrent();
- if (current == context) {
- context.release();
- }
- context.destroy();
- }
- }
- private DestroyAction destroyAction = new DestroyAction();
-
- // Disables the AWT's erasing of this Canvas's background on Windows
- // in Java SE 6. This internal API is not available in previous
- // releases, but the system property
- // -Dsun.awt.noerasebackground=true can be specified to get similar
- // results globally in previous releases.
- private static boolean disableBackgroundEraseInitialized;
- private static Method disableBackgroundEraseMethod;
- private void disableBackgroundErase() {
- if (!disableBackgroundEraseInitialized) {
- try {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- try {
- disableBackgroundEraseMethod =
- getToolkit().getClass().getDeclaredMethod("disableBackgroundErase",
- new Class[] { Canvas.class });
- disableBackgroundEraseMethod.setAccessible(true);
- } catch (Exception e) {
- }
- return null;
- }
- });
- } catch (Exception e) {
- }
- disableBackgroundEraseInitialized = true;
- }
- if (disableBackgroundEraseMethod != null) {
- try {
- disableBackgroundEraseMethod.invoke(getToolkit(), new Object[] { this });
- } catch (Exception e) {
- // FIXME: workaround for 6504460 (incorrect backport of 6333613 in 5.0u10)
- // throw new GLException(e);
- }
- }
- }
-
- private static GraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- GraphicsDevice device) {
- // Make GLCanvas behave better in NetBeans GUI builder
- if (Beans.isDesignTime()) {
- return null;
- }
-
- AWTGraphicsConfiguration config = (AWTGraphicsConfiguration)
- GLDrawableFactory.getFactory().chooseGraphicsConfiguration(capabilities,
- chooser,
- new AWTGraphicsDevice(device));
- if (config == null) {
- return null;
- }
-
- return config.getGraphicsConfiguration();
- }
-}
diff --git a/src/classes/javax/media/opengl/GLCapabilities.java b/src/classes/javax/media/opengl/GLCapabilities.java
deleted file mode 100644
index 0a36fe502..000000000
--- a/src/classes/javax/media/opengl/GLCapabilities.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-/** Specifies a set of OpenGL capabilities that a rendering context
- must support, such as color depth and whether stereo is enabled.
- It currently contains the minimal number of routines which allow
- configuration on all supported window systems. */
-
-public class GLCapabilities implements Cloneable {
- private boolean doubleBuffered = true;
- private boolean stereo = false;
- private boolean hardwareAccelerated = true;
- private int depthBits = 24;
- private int stencilBits = 0;
- private int redBits = 8;
- private int greenBits = 8;
- private int blueBits = 8;
- private int alphaBits = 0;
- private int accumRedBits = 0;
- private int accumGreenBits = 0;
- private int accumBlueBits = 0;
- private int accumAlphaBits = 0;
- // Shift bits from PIXELFORMATDESCRIPTOR not present because they
- // are unlikely to be supported on Windows anyway
-
- // Support for full-scene antialiasing (FSAA)
- private boolean sampleBuffers = false;
- private int numSamples = 2;
-
- // Bits for pbuffer creation
- private boolean pbufferFloatingPointBuffers;
- private boolean pbufferRenderToTexture;
- private boolean pbufferRenderToTextureRectangle;
-
- /** Creates a GLCapabilities object. All attributes are in a default
- state.
- */
- public GLCapabilities() {}
-
- public Object clone() {
- try {
- return super.clone();
- } catch (CloneNotSupportedException e) {
- throw new GLException(e);
- }
- }
-
- /** Indicates whether double-buffering is enabled. */
- public boolean getDoubleBuffered() {
- return doubleBuffered;
- }
-
- /** Enables or disables double buffering. */
- public void setDoubleBuffered(boolean onOrOff) {
- doubleBuffered = onOrOff;
- }
-
- /** Indicates whether stereo is enabled. */
- public boolean getStereo() {
- return stereo;
- }
-
- /** Enables or disables stereo viewing. */
- public void setStereo(boolean onOrOff) {
- stereo = onOrOff;
- }
-
- /** Indicates whether hardware acceleration is enabled. */
- public boolean getHardwareAccelerated() {
- return hardwareAccelerated;
- }
-
- /** Enables or disables hardware acceleration. */
- public void setHardwareAccelerated(boolean onOrOff) {
- hardwareAccelerated = onOrOff;
- }
-
- /** Returns the number of bits requested for the depth buffer. */
- public int getDepthBits() {
- return depthBits;
- }
-
- /** Sets the number of bits requested for the depth buffer. */
- public void setDepthBits(int depthBits) {
- this.depthBits = depthBits;
- }
-
- /** Returns the number of bits requested for the stencil buffer. */
- public int getStencilBits() {
- return stencilBits;
- }
-
- /** Sets the number of bits requested for the stencil buffer. */
- public void setStencilBits(int stencilBits) {
- this.stencilBits = stencilBits;
- }
-
- /** Returns the number of bits requested for the color buffer's red
- component. On some systems only the color depth, which is the
- sum of the red, green, and blue bits, is considered. */
- public int getRedBits() {
- return redBits;
- }
-
- /** Sets the number of bits requested for the color buffer's red
- component. On some systems only the color depth, which is the
- sum of the red, green, and blue bits, is considered. */
- public void setRedBits(int redBits) {
- this.redBits = redBits;
- }
-
- /** Returns the number of bits requested for the color buffer's
- green component. On some systems only the color depth, which is
- the sum of the red, green, and blue bits, is considered. */
- public int getGreenBits() {
- return greenBits;
- }
-
- /** Sets the number of bits requested for the color buffer's green
- component. On some systems only the color depth, which is the
- sum of the red, green, and blue bits, is considered. */
- public void setGreenBits(int greenBits) {
- this.greenBits = greenBits;
- }
-
- /** Returns the number of bits requested for the color buffer's blue
- component. On some systems only the color depth, which is the
- sum of the red, green, and blue bits, is considered. */
- public int getBlueBits() {
- return blueBits;
- }
-
- /** Sets the number of bits requested for the color buffer's blue
- component. On some systems only the color depth, which is the
- sum of the red, green, and blue bits, is considered. */
- public void setBlueBits(int blueBits) {
- this.blueBits = blueBits;
- }
-
- /** Returns the number of bits requested for the color buffer's
- alpha component. On some systems only the color depth, which is
- the sum of the red, green, and blue bits, is considered. */
- public int getAlphaBits() {
- return alphaBits;
- }
-
- /** Sets the number of bits requested for the color buffer's alpha
- component. On some systems only the color depth, which is the
- sum of the red, green, and blue bits, is considered. */
- public void setAlphaBits(int alphaBits) {
- this.alphaBits = alphaBits;
- }
-
- /** Returns the number of bits requested for the accumulation
- buffer's red component. On some systems only the accumulation
- buffer depth, which is the sum of the red, green, and blue bits,
- is considered. */
- public int getAccumRedBits() {
- return accumRedBits;
- }
-
- /** Sets the number of bits requested for the accumulation buffer's
- red component. On some systems only the accumulation buffer
- depth, which is the sum of the red, green, and blue bits, is
- considered. */
- public void setAccumRedBits(int accumRedBits) {
- this.accumRedBits = accumRedBits;
- }
-
- /** Returns the number of bits requested for the accumulation
- buffer's green component. On some systems only the accumulation
- buffer depth, which is the sum of the red, green, and blue bits,
- is considered. */
- public int getAccumGreenBits() {
- return accumGreenBits;
- }
-
- /** Sets the number of bits requested for the accumulation buffer's
- green component. On some systems only the accumulation buffer
- depth, which is the sum of the red, green, and blue bits, is
- considered. */
- public void setAccumGreenBits(int accumGreenBits) {
- this.accumGreenBits = accumGreenBits;
- }
-
- /** Returns the number of bits requested for the accumulation
- buffer's blue component. On some systems only the accumulation
- buffer depth, which is the sum of the red, green, and blue bits,
- is considered. */
- public int getAccumBlueBits() {
- return accumBlueBits;
- }
-
- /** Sets the number of bits requested for the accumulation buffer's
- blue component. On some systems only the accumulation buffer
- depth, which is the sum of the red, green, and blue bits, is
- considered. */
- public void setAccumBlueBits(int accumBlueBits) {
- this.accumBlueBits = accumBlueBits;
- }
-
- /** Returns the number of bits requested for the accumulation
- buffer's alpha component. On some systems only the accumulation
- buffer depth, which is the sum of the red, green, and blue bits,
- is considered. */
- public int getAccumAlphaBits() {
- return accumAlphaBits;
- }
-
- /** Sets number of bits requested for accumulation buffer's alpha
- component. On some systems only the accumulation buffer depth,
- which is the sum of the red, green, and blue bits, is
- considered. */
- public void setAccumAlphaBits(int accumAlphaBits) {
- this.accumAlphaBits = accumAlphaBits;
- }
-
- /** Indicates whether sample buffers for full-scene antialiasing
- (FSAA) should be allocated for this drawable. Defaults to
- false. */
- public void setSampleBuffers(boolean onOrOff) {
- sampleBuffers = onOrOff;
- }
-
- /** Returns whether sample buffers for full-scene antialiasing
- (FSAA) should be allocated for this drawable. Defaults to
- false. */
- public boolean getSampleBuffers() {
- return sampleBuffers;
- }
-
- /** If sample buffers are enabled, indicates the number of buffers
- to be allocated. Defaults to 2. */
- public void setNumSamples(int numSamples) {
- this.numSamples = numSamples;
- }
-
- /** Returns the number of sample buffers to be allocated if sample
- buffers are enabled. Defaults to 2. */
- public int getNumSamples() {
- return numSamples;
- }
-
- /** For pbuffers only, indicates whether floating-point buffers
- should be used if available. Defaults to false. */
- public void setPbufferFloatingPointBuffers(boolean onOrOff) {
- pbufferFloatingPointBuffers = onOrOff;
- }
-
- /** For pbuffers only, returns whether floating-point buffers should
- be used if available. Defaults to false. */
- public boolean getPbufferFloatingPointBuffers() {
- return pbufferFloatingPointBuffers;
- }
-
- /** For pbuffers only, indicates whether the render-to-texture
- extension should be used if available. Defaults to false. */
- public void setPbufferRenderToTexture(boolean onOrOff) {
- pbufferRenderToTexture = onOrOff;
- }
-
- /** For pbuffers only, returns whether the render-to-texture
- extension should be used if available. Defaults to false. */
- public boolean getPbufferRenderToTexture() {
- return pbufferRenderToTexture;
- }
-
- /** For pbuffers only, indicates whether the
- render-to-texture-rectangle extension should be used if
- available. Defaults to false. */
- public void setPbufferRenderToTextureRectangle(boolean onOrOff) {
- pbufferRenderToTextureRectangle = onOrOff;
- }
-
- /** For pbuffers only, returns whether the render-to-texture
- extension should be used. Defaults to false. */
- public boolean getPbufferRenderToTextureRectangle() {
- return pbufferRenderToTextureRectangle;
- }
-
- /** Returns a textual representation of this GLCapabilities
- object. */
- public String toString() {
- return ("GLCapabilities [" +
- "DoubleBuffered: " + doubleBuffered +
- ", Stereo: " + stereo +
- ", HardwareAccelerated: " + hardwareAccelerated +
- ", DepthBits: " + depthBits +
- ", StencilBits: " + stencilBits +
- ", Red: " + redBits +
- ", Green: " + greenBits +
- ", Blue: " + blueBits +
- ", Alpha: " + alphaBits +
- ", Red Accum: " + accumRedBits +
- ", Green Accum: " + accumGreenBits +
- ", Blue Accum: " + accumBlueBits +
- ", Alpha Accum: " + accumAlphaBits +
- ", Multisample: " + sampleBuffers +
- (sampleBuffers ? ", Num samples: " + numSamples : "") +
- " ]");
- }
-}
diff --git a/src/classes/javax/media/opengl/GLCapabilitiesChooser.java b/src/classes/javax/media/opengl/GLCapabilitiesChooser.java
deleted file mode 100644
index 9d970ff42..000000000
--- a/src/classes/javax/media/opengl/GLCapabilitiesChooser.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-/** Provides a mechanism by which applications can customize the
- window type selection for a given {@link GLCapabilities}.
- Developers can implement this interface and pass an instance into
- the appropriate method of {@link GLDrawableFactory}; the chooser
- will be called during the OpenGL context creation process. */
-
-public interface GLCapabilitiesChooser {
- /** Chooses the index (0..available.length - 1) of the {@link
- GLCapabilities} most closely matching the desired one from the
- list of all supported. Some of the entries in the
- <code>available</code> array may be null; the chooser must
- ignore these. The <em>windowSystemRecommendedChoice</em>
- parameter may be provided to the chooser by the underlying
- window system; if this index is valid, it is recommended, but
- not necessarily required, that the chooser select that entry.
-
- <P> <em>Note:</em> this method is called automatically by the
- {@link GLDrawableFactory} when an instance of this class is
- passed in to one of its factory methods. It should generally not
- be invoked by users directly, unless it is desired to delegate
- the choice to some other GLCapabilitiesChooser object.
- */
- public int chooseCapabilities(GLCapabilities desired,
- GLCapabilities[] available,
- int windowSystemRecommendedChoice);
-}
diff --git a/src/classes/javax/media/opengl/GLContext.java b/src/classes/javax/media/opengl/GLContext.java
deleted file mode 100644
index a70e131c8..000000000
--- a/src/classes/javax/media/opengl/GLContext.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-/** Abstraction for an OpenGL rendering context. In order to perform
- OpenGL rendering, a context must be "made current" on the current
- thread. OpenGL rendering semantics specify that only one context
- may be current on the current thread at any given time, and also
- that a given context may be current on only one thread at any
- given time. Because components can be added to and removed from
- the component hierarchy at any time, it is possible that the
- underlying OpenGL context may need to be destroyed and recreated
- multiple times over the lifetime of a given component. This
- process is handled by the implementation, and the GLContext
- abstraction provides a stable object which clients can use to
- refer to a given context. */
-
-public abstract class GLContext {
- /** Indicates that the context was not made current during the last call to {@link #makeCurrent makeCurrent}. */
- public static final int CONTEXT_NOT_CURRENT = 0;
- /** Indicates that the context was made current during the last call to {@link #makeCurrent makeCurrent}. */
- public static final int CONTEXT_CURRENT = 1;
- /** Indicates that a newly-created context was made current during the last call to {@link #makeCurrent makeCurrent}. */
- public static final int CONTEXT_CURRENT_NEW = 2;
-
- private static ThreadLocal currentContext = new ThreadLocal();
-
- /**
- * Returns the GLDrawable to which this context may be used to
- * draw.
- */
- public abstract GLDrawable getGLDrawable();
-
- /**
- * Makes this GLContext current on the calling thread.
- *
- * There are two return values that indicate success and one that
- * indicates failure. A return value of CONTEXT_CURRENT_NEW
- * indicates that that context has been made current, and that
- * this is the first time this context has been made current, or
- * that the state of the underlying context or drawable may have
- * changed since the last time this context was made current. In
- * this case, the application may wish to initialize the state. A
- * return value of CONTEXT_CURRENT indicates that the context has
- * been made currrent, with its previous state restored.
- *
- * If the context could not be made current (for example, because
- * the underlying drawable has not ben realized on the display) ,
- * a value of CONTEXT_NOT_CURRENT is returned.
- *
- * If the context is in use by another thread at the time of the
- * call, then if isSynchronized() is true the call will
- * block. If isSynchronized() is false, an exception will be
- * thrown and the context will remain current on the other thread.
- *
- * @return CONTEXT_CURRENT if the context was successfully made current
- * @return CONTEXT_CURRENT_NEW if the context was successfully made
- * current, but need to be initialized.
- *
- * @return CONTEXT_NOT_CURRENT if the context could not be made current.
- *
- * @throws GLException if synchronization is disabled and the
- * context is current on another thread, or because the context
- * could not be created or made current due to non-recoverable,
- * window system-specific errors.
- */
- public abstract int makeCurrent() throws GLException;
-
- /**
- * Releases control of this GLContext from the current thread.
- *
- * @throws GLException if the context had not previously been made
- * current on the current thread
- */
- public abstract void release() throws GLException;
-
- /**
- * Copies selected groups of OpenGL state variables from the
- * supplied source context into this one. The <code>mask</code>
- * parameter indicates which groups of state variables are to be
- * copied. <code>mask</code> contains the bitwise OR of the same
- * symbolic names that are passed to the GL command {@link
- * GL#glPushAttrib glPushAttrib}. The single symbolic constant
- * {@link GL#GL_ALL_ATTRIB_BITS GL_ALL_ATTRIB_BITS} can be used to
- * copy the maximum possible portion of rendering state. <P>
- *
- * Not all values for GL state can be copied. For example, pixel
- * pack and unpack state, render mode state, and select and feedback
- * state are not copied. The state that can be copied is exactly the
- * state that is manipulated by the GL command {@link
- * GL#glPushAttrib glPushAttrib}. <P>
- *
- * On most platforms, this context may not be current to any thread,
- * including the calling thread, when this method is called. Some
- * platforms have additional requirements such as whether this
- * context or the source context must occasionally be made current
- * in order for the results of the copy to be seen; these
- * requirements are beyond the scope of this specification.
- *
- * @param source the source OpenGL context from which to copy state
- * @param mask a mask of symbolic names indicating which groups of state to copy
-
- * @throws GLException if an OpenGL-related error occurred
- */
- public abstract void copy(GLContext source, int mask) throws GLException;
-
- /**
- * Returns the context which is current on the current thread. If no
- * context is current, returns null.
- *
- * @return the context current on this thread, or null if no context
- * is current.
- */
- public static GLContext getCurrent() {
- return (GLContext) currentContext.get();
- }
-
- /**
- * Sets the thread-local variable returned by {@link #getCurrent}
- * and has no other side-effects. For use by third parties adding
- * new GLContext implementations; not for use by end users.
- */
- protected static void setCurrent(GLContext cur) {
- currentContext.set(cur);
- }
-
- /**
- * Destroys this OpenGL context and frees its associated
- * resources. The context should have been released before this
- * method is called.
- */
- public abstract void destroy();
-
- /**
- * Returns true if 'makeCurrent' will exhibit synchronized behavior.
- */
- public abstract boolean isSynchronized();
-
- /**
- * Determines whether 'makeCurrent' will exhibit synchronized behavior.
- */
- public abstract void setSynchronized(boolean isSynchronized);
-
- /**
- * Returns the GL pipeline object for this GLContext.
- */
- public abstract GL getGL();
-
- /**
- * Sets the GL pipeline object for this GLContext.
- */
- public abstract void setGL(GL gl);
-}
diff --git a/src/classes/javax/media/opengl/GLDrawable.java b/src/classes/javax/media/opengl/GLDrawable.java
deleted file mode 100644
index 6c0178474..000000000
--- a/src/classes/javax/media/opengl/GLDrawable.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-// FIXME: We need some way to tell when the device upon which the canvas is
-// being displayed has changed (e.g., the user drags the canvas's parent
-// window from one screen on multi-screen environment to another, when the
-// user changes the display bit depth or screen resolution, etc). When this
-// occurs, we need the canvas to reset the gl function pointer tables for the
-// canvas, because the new device may have different capabilities (e.g.,
-// doesn't support as many opengl extensions) from the original device. This
-// hook would also be useful in other GLDrawables (for example, offscreen
-// buffers such as pbuffers, whose contents may or may not be invalidated when
-// the display mode changes, depending on the vendor's GL implementation).
-//
-// Right now I'm not sure how hook into when this change occurs. There isn't
-// any AWT event corresponding to a device change (as far as I can
-// tell). We could constantly check the GraphicsConfiguration of the canvas's top-level
-// parent to see if it has changed, but this would be very slow (we'd have to
-// do it every time the context is made current). There has got to be a better
-// solution, but I'm not sure what it is.
-
-// FIXME: Subclasses need to call resetGLFunctionAvailability() on their
-// context whenever the displayChanged() function is called on our
-// GLEventListeners
-
-/** An abstraction for an OpenGL rendering target. A GLDrawable's
- primary functionality is to create OpenGL contexts which can be
- used to perform rendering. A GLDrawable does not automatically
- create an OpenGL context, but all implementations of {@link
- GLAutoDrawable} do so upon creation. */
-
-public interface GLDrawable {
- /**
- * Creates a new context for drawing to this drawable that will
- * optionally share display lists and other server-side OpenGL
- * objects with the specified GLContext. <P>
- *
- * The GLContext <code>share</code> need not be associated with this
- * GLDrawable and may be null if sharing of display lists and other
- * objects is not desired. See the note in the overview
- * documentation on
- * <a href="../../../overview-summary.html#SHARING">context sharing</a>.
- */
- public GLContext createContext(GLContext shareWith);
-
- /**
-
- * Indicates to on-screen GLDrawable implementations whether the
- * underlying window has been created and can be drawn into. This
- * method must be called from GLDrawables obtained from the
- * GLDrawableFactory via the {@link GLDrawableFactory#getGLDrawable
- * GLDrawableFactory.getGLDrawable()} method. It must typically be
- * called with an argument of <code>true</code> in the
- * <code>addNotify</code> method of components performing OpenGL
- * rendering and with an argument of <code>false</code> in the
- * <code>removeNotify</code> method. Calling this method has no
- * other effects. For example, if <code>removeNotify</code> is
- * called on a Canvas implementation for which a GLDrawable has been
- * created, it is also necessary to destroy all OpenGL contexts
- * associated with that GLDrawable. This is not done automatically
- * by the implementation. It is not necessary to call
- * <code>setRealized</code> on a GLCanvas, a GLJPanel, or a
- * GLPbuffer, as these perform the appropriate calls on their
- * underlying GLDrawables internally..
- */
- public void setRealized(boolean realized);
-
- /** Requests a new width and height for this GLDrawable. Not all
- drawables are able to respond to this request and may silently
- ignore it. */
- public void setSize(int width, int height);
-
- /** Returns the current width of this GLDrawable. */
- public int getWidth();
-
- /** Returns the current height of this GLDrawable. */
- public int getHeight();
-
- /** Swaps the front and back buffers of this drawable. For {@link
- GLAutoDrawable} implementations, when automatic buffer swapping
- is enabled (as is the default), this method is called
- automatically and should not be called by the end user. */
- public void swapBuffers() throws GLException;
-
- /** Fetches the {@link GLCapabilities} corresponding to the chosen
- OpenGL capabilities (pixel format / visual) for this drawable.
- Some drawables, in particular on-screen drawables, may be
- created lazily; null is returned if the drawable is not
- currently created or if its pixel format has not been set yet.
- On some platforms, the pixel format is not directly associated
- with the drawable; a best attempt is made to return a reasonable
- value in this case. */
- public GLCapabilities getChosenGLCapabilities();
-}
diff --git a/src/classes/javax/media/opengl/GLDrawableFactory.java b/src/classes/javax/media/opengl/GLDrawableFactory.java
deleted file mode 100644
index fd934195c..000000000
--- a/src/classes/javax/media/opengl/GLDrawableFactory.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.security.*;
-import com.sun.opengl.impl.*;
-
-/** <P> Provides a virtual machine- and operating system-independent
- mechanism for creating {@link GLDrawable}s. </P>
-
- <P> The {@link javax.media.opengl.GLCapabilities} objects passed
- in to the various factory methods are used as a hint for the
- properties of the returned drawable. The default capabilities
- selection algorithm (equivalent to passing in a null {@link
- GLCapabilitiesChooser}) is described in {@link
- DefaultGLCapabilitiesChooser}. Sophisticated applications needing
- to change the selection algorithm may pass in their own {@link
- GLCapabilitiesChooser} which can select from the available pixel
- formats. The GLCapabilitiesChooser mechanism may not be supported
- by all implementations or on all platforms, in which case any
- passed GLCapabilitiesChooser will be ignored. </P>
-
- <P> Because of the multithreaded nature of the Java platform's
- window system toolkit, it is typically not possible to immediately
- reject a given {@link GLCapabilities} as being unsupportable by
- either returning <code>null</code> from the creation routines or
- raising a {@link GLException}. The semantics of the rejection
- process are (unfortunately) left unspecified for now. The current
- implementation will cause a {@link GLException} to be raised
- during the first repaint of the {@link GLCanvas} or {@link
- GLJPanel} if the capabilities can not be met. Pbuffers are always
- created immediately and their creation will fail with a {@link
- GLException} if errors occur. </P>
-
- <P> The concrete GLDrawableFactory subclass instantiated by {@link
- #getFactory getFactory} can be changed by setting the system
- property <code>opengl.factory.class.name</code> to the
- fully-qualified name of the desired class. </P>
-*/
-
-public abstract class GLDrawableFactory {
- private static GLDrawableFactory factory;
-
- protected GLDrawableFactory() {}
-
- /** Returns the sole GLDrawableFactory instance. */
- public static GLDrawableFactory getFactory() {
- if (factory == null) {
- try {
- String factoryClassName =
- (String) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty("opengl.factory.class.name");
- }
- });
- String osName = System.getProperty("os.name");
- String osNameLowerCase = osName.toLowerCase();
- Class factoryClass = null;
-
- // Because there are some complications with generating all
- // platforms' Java glue code on all platforms (among them that we
- // would have to include jawt.h and jawt_md.h in the jogl
- // sources, which we currently don't have to do) we break the only
- // static dependencies with platform-specific code here using reflection.
-
- if (factoryClassName != null) {
- factoryClass = Class.forName(factoryClassName);
- } else if (osNameLowerCase.startsWith("wind")) {
- factoryClass = Class.forName("com.sun.opengl.impl.windows.WindowsGLDrawableFactory");
- } else if (osNameLowerCase.startsWith("mac os x")) {
- factoryClass = Class.forName("com.sun.opengl.impl.macosx.MacOSXGLDrawableFactory");
- } else {
- // Assume Linux, Solaris, etc. Should probably test for these explicitly.
- factoryClass = Class.forName("com.sun.opengl.impl.x11.X11GLDrawableFactory");
- }
-
- if (factoryClass == null) {
- throw new GLException("OS " + osName + " not yet supported");
- }
-
- factory = (GLDrawableFactory) factoryClass.newInstance();
- } catch (Exception e) {
- throw new GLException(e);
- }
- }
-
- return factory;
- }
-
- /**
- * <P> Selects a graphics configuration on the specified graphics
- * device compatible with the supplied GLCapabilities. This method
- * is intended to be used by applications which do not use the
- * supplied GLCanvas class but instead wrap their own Canvas or
- * other window toolkit-specific object with a GLDrawable. Some
- * platforms (specifically X11) require the graphics configuration
- * to be specified when the window toolkit object is created. This
- * method may return null on platforms on which the OpenGL pixel
- * format selection process is performed later. </P>
- *
- * <P> The concrete data type of the passed graphics device and
- * returned graphics configuration must be specified in the
- * documentation binding this particular API to the underlying
- * window toolkit. The Reference Implementation accepts {@link
- * AWTGraphicsDevice AWTGraphicsDevice} objects and returns {@link
- * AWTGraphicsConfiguration AWTGraphicsConfiguration} objects. </P>
- *
- * @see java.awt.Canvas#Canvas(java.awt.GraphicsConfiguration)
- *
- * @throws IllegalArgumentException if the data type of the passed
- * AbstractGraphicsDevice is not supported by this
- * GLDrawableFactory.
- * @throws GLException if any window system-specific errors caused
- * the selection of the graphics configuration to fail.
- */
- public abstract AbstractGraphicsConfiguration
- chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- AbstractGraphicsDevice device)
- throws IllegalArgumentException, GLException;
-
- /**
- * Returns a GLDrawable that wraps a platform-specific window system
- * object, such as an AWT or LCDUI Canvas. On platforms which
- * support it, selects a pixel format compatible with the supplied
- * GLCapabilities, or if the passed GLCapabilities object is null,
- * uses a default set of capabilities. On these platforms, uses
- * either the supplied GLCapabilitiesChooser object, or if the
- * passed GLCapabilitiesChooser object is null, uses a
- * DefaultGLCapabilitiesChooser instance.
- *
- * @throws IllegalArgumentException if the passed target is either
- * null or its data type is not supported by this GLDrawableFactory.
- * @throws GLException if any window system-specific errors caused
- * the creation of the GLDrawable to fail.
- */
- public abstract GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser)
- throws IllegalArgumentException, GLException;
-
- //----------------------------------------------------------------------
- // Methods to create high-level objects
-
- /**
- * Returns true if it is possible to create a GLPbuffer. Some older
- * graphics cards do not have this capability.
- */
- public abstract boolean canCreateGLPbuffer();
-
- /**
- * Creates a GLPbuffer with the given capabilites and dimensions. <P>
- *
- * See the note in the overview documentation on
- * <a href="../../../overview-summary.html#SHARING">context sharing</a>.
- *
- * @throws GLException if any window system-specific errors caused
- * the creation of the GLPbuffer to fail.
- */
- public abstract GLPbuffer createGLPbuffer(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- int initialWidth,
- int initialHeight,
- GLContext shareWith)
- throws GLException;
-
- //----------------------------------------------------------------------
- // Methods for interacting with third-party OpenGL libraries
-
- /**
- * <P> Creates a GLContext object representing an existing OpenGL
- * context in an external (third-party) OpenGL-based library. This
- * GLContext object may be used to draw into this preexisting
- * context using its {@link GL} and {@link
- * javax.media.opengl.glu.GLU} objects. New contexts created through
- * {@link GLDrawable}s may share textures and display lists with
- * this external context. </P>
- *
- * <P> The underlying OpenGL context must be current on the current
- * thread at the time this method is called. The user is responsible
- * for the maintenance of the underlying OpenGL context; calls to
- * <code>makeCurrent</code> and <code>release</code> on the returned
- * GLContext object have no effect. If the underlying OpenGL context
- * is destroyed, the <code>destroy</code> method should be called on
- * the <code>GLContext</code>. A new <code>GLContext</code> object
- * should be created for each newly-created underlying OpenGL
- * context.
- *
- * @throws GLException if any window system-specific errors caused
- * the creation of the external GLContext to fail.
- */
- public abstract GLContext createExternalGLContext()
- throws GLException;
-
- /**
- * Returns true if it is possible to create an external GLDrawable
- * object via {@link #createExternalGLDrawable}.
- */
- public abstract boolean canCreateExternalGLDrawable();
-
- /**
- * <P> Creates a {@link GLDrawable} object representing an existing
- * OpenGL drawable in an external (third-party) OpenGL-based
- * library. This GLDrawable object may be used to create new,
- * fully-functional {@link GLContext}s on the OpenGL drawable. This
- * is useful when interoperating with a third-party OpenGL-based
- * library and it is essential to not perturb the state of the
- * library's existing context, even to the point of not sharing
- * textures or display lists with that context. </P>
- *
- * <P> An underlying OpenGL context must be current on the desired
- * drawable and the current thread at the time this method is
- * called. The user is responsible for the maintenance of the
- * underlying drawable. If one or more contexts are created on the
- * drawable using {@link GLDrawable#createContext}, and the drawable
- * is deleted by the third-party library, the user is responsible
- * for calling {@link GLContext#destroy} on these contexts. </P>
- *
- * <P> Calls to <code>setSize</code>, <code>getWidth</code> and
- * <code>getHeight</code> are illegal on the returned GLDrawable. If
- * these operations are required by the user, they must be performed
- * by the third-party library. </P>
- *
- * <P> It is legal to create both an external GLContext and
- * GLDrawable representing the same third-party OpenGL entities.
- * This can be used, for example, to query current state information
- * using the external GLContext and then create and set up new
- * GLContexts using the external GLDrawable. </P>
- *
- * <P> This functionality may not be available on all platforms and
- * {@link #canCreateExternalGLDrawable} should be called first to
- * see if it is present. For example, on X11 platforms, this API
- * requires the presence of GLX 1.3 or later.
- *
- * @throws GLException if any window system-specific errors caused
- * the creation of the external GLDrawable to fail.
- */
- public abstract GLDrawable createExternalGLDrawable()
- throws GLException;
-}
diff --git a/src/classes/javax/media/opengl/GLEventListener.java b/src/classes/javax/media/opengl/GLEventListener.java
deleted file mode 100644
index 2f4d3ac72..000000000
--- a/src/classes/javax/media/opengl/GLEventListener.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.util.EventListener;
-
-/** Declares events which client code can use to manage OpenGL
- rendering into a {@link GLAutoDrawable}. At the time any of these
- methods is called, the drawable has made its associated OpenGL
- context current, so it is valid to make OpenGL calls. */
-
-public interface GLEventListener extends EventListener {
- /** Called by the drawable immediately after the OpenGL context is
- initialized. Can be used to perform one-time OpenGL
- initialization such as setup of lights and display lists. Note
- that this method may be called more than once if the underlying
- OpenGL context for the GLAutoDrawable is destroyed and
- recreated, for example if a GLCanvas is removed from the widget
- hierarchy and later added again.
- */
- public void init(GLAutoDrawable drawable);
-
- /** Called by the drawable to initiate OpenGL rendering by the
- client. After all GLEventListeners have been notified of a
- display event, the drawable will swap its buffers if {@link
- GLAutoDrawable#setAutoSwapBufferMode setAutoSwapBufferMode} is
- enabled. */
- public void display(GLAutoDrawable drawable);
-
- /** Called by the drawable during the first repaint after the
- component has been resized. The client can update the viewport
- and view volume of the window appropriately, for example by a
- call to {@link javax.media.opengl.GL#glViewport}; note that for
- convenience the component has already called <code>glViewport(x,
- y, width, height)</code> when this method is called, so the
- client may not have to do anything in this method.
- */
- public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height);
-
- /** Called by the drawable when the display mode or the display device
- associated with the GLAutoDrawable has changed. The two boolean parameters
- indicate the types of change(s) that have occurred.
- <P>
-
- An example of a display <i>mode</i> change is when the bit depth changes (e.g.,
- from 32-bit to 16-bit color) on monitor upon which the GLAutoDrawable is
- currently being displayed. <p>
-
- An example of a display <i>device</i> change is when the user drags the
- window containing the GLAutoDrawable from one monitor to another in a
- multiple-monitor setup. <p>
-
- The reason that this function handles both types of changes (instead of
- handling mode and device changes in separate methods) is so that
- applications have the opportunity to respond to display changes in the most
- efficient manner. For example, the application may need make fewer
- adjustments to compensate for a device change if it knows that the mode
- on the new device is identical the previous mode.<p>
-
- <b>NOTE: Implementations are not required to implement this method. The
- Reference Implementation DOES NOT IMPLEMENT this method.</b>
- */
- public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged);
-}
diff --git a/src/classes/javax/media/opengl/GLException.java b/src/classes/javax/media/opengl/GLException.java
deleted file mode 100644
index 644042e15..000000000
--- a/src/classes/javax/media/opengl/GLException.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-/** A generic exception for OpenGL errors used throughout the binding
- as a substitute for {@link RuntimeException}. */
-
-public class GLException extends RuntimeException {
- /** Constructs a GLException object. */
- public GLException() {
- super();
- }
-
- /** Constructs a GLException object with the specified detail
- message. */
- public GLException(String message) {
- super(message);
- }
-
- /** Constructs a GLException object with the specified detail
- message and root cause. */
- public GLException(String message, Throwable cause) {
- super(message, cause);
- }
-
- /** Constructs a GLException object with the specified root
- cause. */
- public GLException(Throwable cause) {
- super(cause);
- }
-}
diff --git a/src/classes/javax/media/opengl/GLJPanel.java b/src/classes/javax/media/opengl/GLJPanel.java
deleted file mode 100644
index 6be6fa2b9..000000000
--- a/src/classes/javax/media/opengl/GLJPanel.java
+++ /dev/null
@@ -1,1257 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.awt.*;
-import java.awt.geom.*;
-import java.awt.image.*;
-import java.beans.*;
-import javax.swing.*;
-import java.nio.*;
-import java.security.*;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import com.sun.opengl.impl.*;
-
-// FIXME: Subclasses need to call resetGLFunctionAvailability() on their
-// context whenever the displayChanged() function is called on their
-// GLEventListeners
-
-/** A lightweight Swing component which provides OpenGL rendering
- support. Provided for compatibility with Swing user interfaces
- when adding a heavyweight doesn't work either because of
- Z-ordering or LayoutManager problems. <P>
-
- The GLJPanel can be made transparent by creating it with a
- GLCapabilities object with alpha bits specified and calling {@link
- #setOpaque}(false). Pixels with resulting OpenGL alpha values less
- than 1.0 will be overlaid on any underlying Swing rendering. <P>
-
- Notes specific to the Reference Implementation: This component
- attempts to use hardware-accelerated rendering via pbuffers and
- falls back on to software rendering if problems occur.
- Note that because this component attempts to use pbuffers for
- rendering, and because pbuffers can not be resized, somewhat
- surprising behavior may occur during resize operations; the {@link
- GLEventListener#init} method may be called multiple times as the
- pbuffer is resized to be able to cover the size of the GLJPanel.
- This behavior is correct, as the textures and display lists for
- the GLJPanel will have been lost during the resize operation. The
- application should attempt to make its GLEventListener.init()
- methods as side-effect-free as possible. <P>
-
-*/
-
-public class GLJPanel extends JPanel implements GLAutoDrawable {
- private static final boolean DEBUG = Debug.debug("GLJPanel");
- private static final boolean VERBOSE = Debug.verbose();
-
- private GLDrawableHelper drawableHelper = new GLDrawableHelper();
- private volatile boolean isInitialized;
- private volatile boolean shouldInitialize = false;
-
- // Data used for either pbuffers or pixmap-based offscreen surfaces
- private GLCapabilities offscreenCaps;
- private GLCapabilitiesChooser chooser;
- private GLContext shareWith;
- // This image is exactly the correct size to render into the panel
- private BufferedImage offscreenImage;
- // One of these is used to store the read back pixels before storing
- // in the BufferedImage
- private ByteBuffer readBackBytes;
- private IntBuffer readBackInts;
- private int readBackWidthInPixels;
- private int readBackHeightInPixels;
- // Width of the actual GLJPanel
- private int panelWidth = 0;
- private int panelHeight = 0;
- private Updater updater;
- private int awtFormat;
- private int glFormat;
- private int glType;
- // Lazy reshape notification
- private boolean handleReshape = false;
- private boolean sendReshape = true;
-
- // Implementation using pbuffers
- private static boolean hardwareAccelerationDisabled =
- Debug.isPropertyDefined("jogl.gljpanel.nohw");
- private static boolean softwareRenderingDisabled =
- Debug.isPropertyDefined("jogl.gljpanel.nosw");
- private GLPbuffer pbuffer;
- private int pbufferWidth = 256;
- private int pbufferHeight = 256;
-
- // Implementation using software rendering
- private GLDrawableImpl offscreenDrawable;
- private GLContextImpl offscreenContext;
-
- // For handling reshape events lazily
- private int reshapeX;
- private int reshapeY;
- private int reshapeWidth;
- private int reshapeHeight;
-
- // For saving/restoring of OpenGL state during ReadPixels
- private int[] swapbytes = new int[1];
- private int[] rowlength = new int[1];
- private int[] skiprows = new int[1];
- private int[] skippixels = new int[1];
- private int[] alignment = new int[1];
-
- // Implementation using Java2D OpenGL pipeline's back buffer
- private boolean oglPipelineEnabled =
- Java2D.isOGLPipelineActive() &&
- !Debug.isPropertyDefined("jogl.gljpanel.noogl");
- // Opaque Object identifier representing the Java2D surface we are
- // drawing to; used to determine when to destroy and recreate JOGL
- // context
- private Object j2dSurface;
- // Graphics object being used during Java2D update action
- // (absolutely essential to cache this)
- private Graphics cached2DGraphics;
- // No-op context representing the Java2D OpenGL context
- private GLContext j2dContext;
- // Context associated with no-op drawable representing the JOGL
- // OpenGL context
- private GLDrawable joglDrawable;
- // The real OpenGL context JOGL uses to render
- private GLContext joglContext;
- // State captured from Java2D OpenGL context necessary in order to
- // properly render into Java2D back buffer
- private int[] drawBuffer = new int[1];
- private int[] readBuffer = new int[1];
- // This is required when the FBO option of the Java2D / OpenGL
- // pipeline is active
- private int[] frameBuffer = new int[1];
- // Current (as of this writing) NVidia drivers have a couple of bugs
- // relating to the sharing of framebuffer and renderbuffer objects
- // between contexts. It appears we have to (a) reattach the color
- // attachment and (b) actually create new depth buffer storage and
- // attach it in order for the FBO to behave properly in our context.
- private boolean checkedForFBObjectWorkarounds;
- private boolean fbObjectWorkarounds;
- private int[] frameBufferDepthBuffer;
- private int[] frameBufferTexture;
- private boolean createNewDepthBuffer;
- // Current (as of this writing) ATI drivers have problems when the
- // same FBO is bound in two different contexts. Here we check for
- // this case and explicitly release the FBO from Java2D's context
- // before switching to ours. Java2D will re-bind the FBO when it
- // makes its context current the next time. Interestingly, if we run
- // this code path on NVidia hardware, it breaks the rendering
- // results -- no output is generated. This doesn't appear to be an
- // interaction with the abovementioned NVidia-specific workarounds,
- // as even if we disable that code the FBO is still reported as
- // incomplete in our context.
- private boolean checkedGLVendor;
- private boolean vendorIsATI;
-
- // Holding on to this GraphicsConfiguration is a workaround for a
- // problem in the Java 2D / JOGL bridge when FBOs are enabled; see
- // comment related to Issue 274 below
- private GraphicsConfiguration workaroundConfig;
-
- // These are always set to (0, 0) except when the Java2D / OpenGL
- // pipeline is active
- private int viewportX;
- private int viewportY;
-
- static {
- // Force eager initialization of part of the Java2D class since
- // otherwise it's likely it will try to be initialized while on
- // the Queue Flusher Thread, which is not allowed
- if (Java2D.isOGLPipelineActive() && Java2D.isFBOEnabled()) {
- Java2D.getShareContext(GraphicsEnvironment.
- getLocalGraphicsEnvironment().
- getDefaultScreenDevice().
- getDefaultConfiguration());
- }
- }
-
- /** Creates a new GLJPanel component with a default set of OpenGL
- capabilities and using the default OpenGL capabilities selection
- mechanism. */
- public GLJPanel() {
- this(null);
- }
-
- /** Creates a new GLJPanel component with the requested set of
- OpenGL capabilities, using the default OpenGL capabilities
- selection mechanism. */
- public GLJPanel(GLCapabilities capabilities) {
- this(capabilities, null, null);
- }
-
- /** Creates a new GLJPanel component. The passed GLCapabilities
- specifies the OpenGL capabilities for the component; if null, a
- default set of capabilities is used. The GLCapabilitiesChooser
- specifies the algorithm for selecting one of the available
- GLCapabilities for the component; a DefaultGLCapabilitesChooser
- is used if null is passed for this argument. The passed
- GLContext specifies an OpenGL context with which to share
- textures, display lists and other OpenGL state, and may be null
- if sharing is not desired. See the note in the overview documentation on
- <a href="../../../overview-summary.html#SHARING">context sharing</a>.
- */
- public GLJPanel(GLCapabilities capabilities, GLCapabilitiesChooser chooser, GLContext shareWith) {
- super();
-
- // Works around problems on many vendors' cards; we don't need a
- // back buffer for the offscreen surface anyway
- if (capabilities != null) {
- offscreenCaps = (GLCapabilities) capabilities.clone();
- } else {
- offscreenCaps = new GLCapabilities();
- }
- offscreenCaps.setDoubleBuffered(false);
- this.chooser = ((chooser != null) ? chooser : new DefaultGLCapabilitiesChooser());
- this.shareWith = shareWith;
- }
-
- public void display() {
- if (EventQueue.isDispatchThread()) {
- // Want display() to be synchronous, so call paintImmediately()
- paintImmediately(0, 0, getWidth(), getHeight());
- } else {
- // Multithreaded redrawing of Swing components is not allowed,
- // so do everything on the event dispatch thread
- try {
- EventQueue.invokeAndWait(paintImmediatelyAction);
- } catch (Exception e) {
- throw new GLException(e);
- }
- }
- }
-
- private void captureJ2DState(GL gl, Graphics g) {
- gl.glGetIntegerv(GL.GL_DRAW_BUFFER, drawBuffer, 0);
- gl.glGetIntegerv(GL.GL_READ_BUFFER, readBuffer, 0);
- if (Java2D.isFBOEnabled() &&
- Java2D.getOGLSurfaceType(g) == Java2D.FBOBJECT) {
- if (DEBUG && VERBOSE) {
- System.err.println("GLJPanel: Fetching GL_FRAMEBUFFER_BINDING_EXT");
- }
- gl.glGetIntegerv(GL.GL_FRAMEBUFFER_BINDING_EXT, frameBuffer, 0);
-
- if (fbObjectWorkarounds ||
- !checkedForFBObjectWorkarounds) {
- // See above for description of what we are doing here
- if (frameBufferTexture == null)
- frameBufferTexture = new int[1];
-
- // Query the framebuffer for its color buffer so we can hook
- // it back up in our context (should not be necessary)
- gl.glGetFramebufferAttachmentParameterivEXT(GL.GL_FRAMEBUFFER_EXT,
- GL.GL_COLOR_ATTACHMENT0_EXT,
- GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
- frameBufferTexture, 0);
- if (DEBUG && VERBOSE) {
- System.err.println("GLJPanel: FBO COLOR_ATTACHMENT0: " + frameBufferTexture[0]);
- }
- }
-
- if (!checkedGLVendor) {
- checkedGLVendor = true;
- String vendor = gl.glGetString(GL.GL_VENDOR);
-
- if ((vendor != null) &&
- vendor.startsWith("ATI")) {
- vendorIsATI = true;
- }
- }
-
- if (vendorIsATI) {
- // Unbind the FBO from Java2D's context as it appears that
- // driver bugs on ATI's side are causing problems if the FBO is
- // simultaneously bound to more than one context. Java2D will
- // re-bind the FBO during the next validation of its context.
- // Note: this breaks rendering at least on NVidia hardware
- gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, 0);
- }
- }
- }
-
- private boolean preGL(Graphics g) {
- GL gl = joglContext.getGL();
- // Set up needed state in JOGL context from Java2D context
- gl.glEnable(GL.GL_SCISSOR_TEST);
- Rectangle r = Java2D.getOGLScissorBox(g);
-
- if (r == null) {
- if (DEBUG && VERBOSE) {
- System.err.println("Java2D.getOGLScissorBox() returned null");
- }
- return false;
- }
- if (DEBUG && VERBOSE) {
- System.err.println("GLJPanel: gl.glScissor(" + r.x + ", " + r.y + ", " + r.width + ", " + r.height + ")");
- }
-
- gl.glScissor(r.x, r.y, r.width, r.height);
- Rectangle oglViewport = Java2D.getOGLViewport(g, panelWidth, panelHeight);
- // If the viewport X or Y changes, in addition to the panel's
- // width or height, we need to send a reshape operation to the
- // client
- if ((viewportX != oglViewport.x) ||
- (viewportY != oglViewport.y)) {
- sendReshape = true;
- if (DEBUG) {
- System.err.println("Sending reshape because viewport changed");
- System.err.println(" viewportX (" + viewportX + ") ?= oglViewport.x (" + oglViewport.x + ")");
- System.err.println(" viewportY (" + viewportY + ") ?= oglViewport.y (" + oglViewport.y + ")");
- }
- }
- viewportX = oglViewport.x;
- viewportY = oglViewport.y;
-
- // If the FBO option is active, bind to the FBO from the Java2D
- // context.
- // Note that all of the plumbing in the context sharing stuff will
- // allow us to bind to this object since it's in our namespace.
- if (Java2D.isFBOEnabled() &&
- Java2D.getOGLSurfaceType(g) == Java2D.FBOBJECT) {
- if (DEBUG && VERBOSE) {
- System.err.println("GLJPanel: Binding to framebuffer object " + frameBuffer[0]);
- }
-
- // The texture target for Java2D's OpenGL pipeline when using FBOs
- // -- either GL_TEXTURE_2D or GL_TEXTURE_RECTANGLE_ARB
- int fboTextureTarget = Java2D.getOGLTextureType(g);
-
- if (!checkedForFBObjectWorkarounds) {
- checkedForFBObjectWorkarounds = true;
- gl.glBindTexture(fboTextureTarget, 0);
- gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, frameBuffer[0]);
- if (gl.glCheckFramebufferStatusEXT(GL.GL_FRAMEBUFFER_EXT) !=
- GL.GL_FRAMEBUFFER_COMPLETE_EXT) {
- // Need to do workarounds
- fbObjectWorkarounds = true;
- createNewDepthBuffer = true;
- if (DEBUG) {
- System.err.println("-- GLJPanel: discovered frame_buffer_object workarounds to be necessary");
- }
- } else {
- // Don't need the frameBufferTexture temporary any more
- frameBufferTexture = null;
- }
- }
-
- if (fbObjectWorkarounds && createNewDepthBuffer) {
- if (frameBufferDepthBuffer == null)
- frameBufferDepthBuffer = new int[1];
-
- // Create our own depth renderbuffer and associated storage
- // If we have an old one, delete it
- if (frameBufferDepthBuffer[0] != 0) {
- gl.glDeleteRenderbuffersEXT(1, frameBufferDepthBuffer, 0);
- frameBufferDepthBuffer[0] = 0;
- }
-
- gl.glBindTexture(fboTextureTarget, frameBufferTexture[0]);
- int[] width = new int[1];
- int[] height = new int[1];
- gl.glGetTexLevelParameteriv(fboTextureTarget, 0, GL.GL_TEXTURE_WIDTH, width, 0);
- gl.glGetTexLevelParameteriv(fboTextureTarget, 0, GL.GL_TEXTURE_HEIGHT, height, 0);
-
- gl.glGenRenderbuffersEXT(1, frameBufferDepthBuffer, 0);
- if (DEBUG) {
- System.err.println("GLJPanel: Generated frameBufferDepthBuffer " + frameBufferDepthBuffer[0] +
- " with width " + width[0] + ", height " + height[0]);
- }
-
- gl.glBindRenderbufferEXT(GL.GL_RENDERBUFFER_EXT, frameBufferDepthBuffer[0]);
- // FIXME: may need a loop here like in Java2D
- gl.glRenderbufferStorageEXT(GL.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT24, width[0], height[0]);
-
- gl.glBindRenderbufferEXT(GL.GL_RENDERBUFFER_EXT, 0);
- createNewDepthBuffer = false;
- }
-
- gl.glBindTexture(fboTextureTarget, 0);
- gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, frameBuffer[0]);
-
- if (fbObjectWorkarounds) {
- // Hook up the color and depth buffer attachment points for this framebuffer
- gl.glFramebufferTexture2DEXT(GL.GL_FRAMEBUFFER_EXT,
- GL.GL_COLOR_ATTACHMENT0_EXT,
- fboTextureTarget,
- frameBufferTexture[0],
- 0);
- if (DEBUG && VERBOSE) {
- System.err.println("GLJPanel: frameBufferDepthBuffer: " + frameBufferDepthBuffer[0]);
- }
- gl.glFramebufferRenderbufferEXT(GL.GL_FRAMEBUFFER_EXT,
- GL.GL_DEPTH_ATTACHMENT_EXT,
- GL.GL_RENDERBUFFER_EXT,
- frameBufferDepthBuffer[0]);
- }
-
- if (DEBUG) {
- int status = gl.glCheckFramebufferStatusEXT(GL.GL_FRAMEBUFFER_EXT);
- if (status != GL.GL_FRAMEBUFFER_COMPLETE_EXT) {
- throw new GLException("Error: framebuffer was incomplete: status = 0x" +
- Integer.toHexString(status));
- }
- }
- } else {
- if (DEBUG && VERBOSE) {
- System.err.println("GLJPanel: Setting up drawBuffer " + drawBuffer[0] +
- " and readBuffer " + readBuffer[0]);
- }
-
- gl.glDrawBuffer(drawBuffer[0]);
- gl.glReadBuffer(readBuffer[0]);
- }
-
- return true;
- }
-
- private void postGL(Graphics g) {
- if (Java2D.isFBOEnabled() &&
- Java2D.getOGLSurfaceType(g) == Java2D.FBOBJECT) {
- // Unbind the framebuffer from our context to work around
- // apparent driver bugs or at least unspecified behavior causing
- // OpenGL to run out of memory with certain cards and drivers
- GL gl = joglContext.getGL();
- gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, 0);
- }
- }
-
- /** Overridden to cause OpenGL rendering to be performed during
- repaint cycles. Subclasses which override this method must call
- super.paintComponent() in their paintComponent() method in order
- to function properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>paintComponent</CODE> in class <CODE>javax.swing.JComponent</CODE></DD></DL> */
- protected void paintComponent(final Graphics g) {
- if (Beans.isDesignTime()) {
- // Make GLJPanel behave better in NetBeans GUI builder
- g.setColor(Color.BLACK);
- g.fillRect(0, 0, getWidth(), getHeight());
- FontMetrics fm = g.getFontMetrics();
- String name = getName();
- if (name == null) {
- name = getClass().getName();
- int idx = name.lastIndexOf('.');
- if (idx >= 0) {
- name = name.substring(idx + 1);
- }
- }
- Rectangle2D bounds = fm.getStringBounds(name, g);
- g.setColor(Color.WHITE);
- g.drawString(name,
- (int) ((getWidth() - bounds.getWidth()) / 2),
- (int) ((getHeight() + bounds.getHeight()) / 2));
- return;
- }
-
- if (shouldInitialize) {
- initialize();
- }
-
- if (!isInitialized) {
- return;
- }
-
- // NOTE: must do this when the context is not current as it may
- // involve destroying the pbuffer (current context) and
- // re-creating it -- tricky to do properly while the context is
- // current
- if (handleReshape) {
- handleReshape();
- }
-
- updater.setGraphics(g);
-
- if (oglPipelineEnabled) {
-
- // This is a workaround for an issue in the Java 2D / JOGL
- // bridge (reported by an end user as JOGL Issue 274) where Java
- // 2D can occasionally leave its internal OpenGL context current
- // to the on-screen window rather than its internal "scratch"
- // pbuffer surface to which the FBO is attached. JOGL expects to
- // find a stable OpenGL drawable (on Windows, an HDC) upon which
- // it can create another OpenGL context. It turns out that, on
- // Windows, when Java 2D makes its internal OpenGL context
- // current against the window in order to put pixels on the
- // screen, it gets the device context for the window, makes its
- // context current, and releases the device context. This means
- // that when JOGL's Runnable gets to run below, the HDC is
- // already invalid. The workaround for this is to force Java 2D
- // to make its context current to the scratch surface, which we
- // can do by executing an empty Runnable with the "shared"
- // context current. This will be fixed in a Java SE 6 update
- // release, hopefully 6u2.
- if (Java2D.isFBOEnabled()) {
- if (workaroundConfig == null) {
- workaroundConfig = GraphicsEnvironment.
- getLocalGraphicsEnvironment().
- getDefaultScreenDevice().
- getDefaultConfiguration();
- }
- Java2D.invokeWithOGLSharedContextCurrent(workaroundConfig, new Runnable() { public void run() {}});
- }
-
- Java2D.invokeWithOGLContextCurrent(g, new Runnable() {
- public void run() {
- if (DEBUG && VERBOSE) {
- System.err.println("-- In invokeWithOGLContextCurrent");
- }
-
- // Create no-op context representing Java2D context
- if (j2dContext == null) {
- j2dContext = GLDrawableFactory.getFactory().createExternalGLContext();
- if (DEBUG) {
- j2dContext.setGL(new DebugGL(j2dContext.getGL()));
- }
-
- // Check to see whether we can support the requested
- // capabilities or need to fall back to a pbuffer
- // FIXME: add more checks?
-
- j2dContext.makeCurrent();
- GL gl = j2dContext.getGL();
- if ((getGLInteger(gl, GL.GL_RED_BITS) < offscreenCaps.getRedBits()) ||
- (getGLInteger(gl, GL.GL_GREEN_BITS) < offscreenCaps.getGreenBits()) ||
- (getGLInteger(gl, GL.GL_BLUE_BITS) < offscreenCaps.getBlueBits()) ||
- // (getGLInteger(gl, GL.GL_ALPHA_BITS) < offscreenCaps.getAlphaBits()) ||
- (getGLInteger(gl, GL.GL_ACCUM_RED_BITS) < offscreenCaps.getAccumRedBits()) ||
- (getGLInteger(gl, GL.GL_ACCUM_GREEN_BITS) < offscreenCaps.getAccumGreenBits()) ||
- (getGLInteger(gl, GL.GL_ACCUM_BLUE_BITS) < offscreenCaps.getAccumBlueBits()) ||
- (getGLInteger(gl, GL.GL_ACCUM_ALPHA_BITS) < offscreenCaps.getAccumAlphaBits()) ||
- // (getGLInteger(gl, GL.GL_DEPTH_BITS) < offscreenCaps.getDepthBits()) ||
- (getGLInteger(gl, GL.GL_STENCIL_BITS) < offscreenCaps.getStencilBits())) {
- if (DEBUG) {
- System.err.println("GLJPanel: Falling back to pbuffer-based support because Java2D context insufficient");
- System.err.println(" Available Required");
- System.err.println("GL_RED_BITS " + getGLInteger(gl, GL.GL_RED_BITS) + " " + offscreenCaps.getRedBits());
- System.err.println("GL_GREEN_BITS " + getGLInteger(gl, GL.GL_GREEN_BITS) + " " + offscreenCaps.getGreenBits());
- System.err.println("GL_BLUE_BITS " + getGLInteger(gl, GL.GL_BLUE_BITS) + " " + offscreenCaps.getBlueBits());
- System.err.println("GL_ALPHA_BITS " + getGLInteger(gl, GL.GL_ALPHA_BITS) + " " + offscreenCaps.getAlphaBits());
- System.err.println("GL_ACCUM_RED_BITS " + getGLInteger(gl, GL.GL_ACCUM_RED_BITS) + " " + offscreenCaps.getAccumRedBits());
- System.err.println("GL_ACCUM_GREEN_BITS " + getGLInteger(gl, GL.GL_ACCUM_GREEN_BITS) + " " + offscreenCaps.getAccumGreenBits());
- System.err.println("GL_ACCUM_BLUE_BITS " + getGLInteger(gl, GL.GL_ACCUM_BLUE_BITS) + " " + offscreenCaps.getAccumBlueBits());
- System.err.println("GL_ACCUM_ALPHA_BITS " + getGLInteger(gl, GL.GL_ACCUM_ALPHA_BITS) + " " + offscreenCaps.getAccumAlphaBits());
- System.err.println("GL_DEPTH_BITS " + getGLInteger(gl, GL.GL_DEPTH_BITS) + " " + offscreenCaps.getDepthBits());
- System.err.println("GL_STENCIL_BITS " + getGLInteger(gl, GL.GL_STENCIL_BITS) + " " + offscreenCaps.getStencilBits());
- }
- isInitialized = false;
- shouldInitialize = true;
- oglPipelineEnabled = false;
- handleReshape = true;
- j2dContext.release();
- j2dContext.destroy();
- j2dContext = null;
- return;
- }
- j2dContext.release();
- }
-
- j2dContext.makeCurrent();
- try {
- captureJ2DState(j2dContext.getGL(), g);
- Object curSurface = Java2D.getOGLSurfaceIdentifier(g);
- if (curSurface != null) {
- if (j2dSurface != curSurface) {
- if (joglContext != null) {
- joglContext.destroy();
- joglContext = null;
- joglDrawable = null;
- sendReshape = true;
- if (DEBUG) {
- System.err.println("Sending reshape because surface changed");
- System.err.println("New surface = " + curSurface);
- }
- }
- j2dSurface = curSurface;
- }
- if (joglContext == null) {
- if (GLDrawableFactory.getFactory().canCreateExternalGLDrawable()) {
- joglDrawable = GLDrawableFactory.getFactory().createExternalGLDrawable();
- joglContext = joglDrawable.createContext(shareWith);
- } else if (GLDrawableFactoryImpl.getFactoryImpl().canCreateContextOnJava2DSurface()) {
- // Mac OS X code path
- joglContext = GLDrawableFactoryImpl.getFactoryImpl().createContextOnJava2DSurface(g, shareWith);
- }
- if (DEBUG) {
- joglContext.setGL(new DebugGL(joglContext.getGL()));
- }
-
- if (Java2D.isFBOEnabled() &&
- Java2D.getOGLSurfaceType(g) == Java2D.FBOBJECT &&
- fbObjectWorkarounds) {
- createNewDepthBuffer = true;
- }
- }
- if (joglContext instanceof Java2DGLContext) {
- // Mac OS X code path
- ((Java2DGLContext) joglContext).setGraphics(g);
- }
-
- if (DEBUG && VERBOSE && Java2D.isFBOEnabled()) {
- System.err.print("-- Surface type: ");
- int surfaceType = Java2D.getOGLSurfaceType(g);
- if (surfaceType == Java2D.UNDEFINED) {
- System.err.println("UNDEFINED");
- } else if (surfaceType == Java2D.WINDOW) {
- System.err.println("WINDOW");
- } else if (surfaceType == Java2D.PBUFFER) {
- System.err.println("PBUFFER");
- } else if (surfaceType == Java2D.TEXTURE) {
- System.err.println("TEXTURE");
- } else if (surfaceType == Java2D.FLIP_BACKBUFFER) {
- System.err.println("FLIP_BACKBUFFER");
- } else if (surfaceType == Java2D.FBOBJECT) {
- System.err.println("FBOBJECT");
- } else {
- System.err.println("(Unknown surface type " + surfaceType + ")");
- }
- }
-
- drawableHelper.invokeGL(joglDrawable, joglContext, displayAction, initAction);
- }
- } finally {
- j2dContext.release();
- }
- }
- });
- } else {
- if (!hardwareAccelerationDisabled) {
- pbuffer.display();
- } else {
- drawableHelper.invokeGL(offscreenDrawable, offscreenContext, displayAction, initAction);
- }
-
- if (offscreenImage != null) {
- // Draw resulting image in one shot
- g.drawImage(offscreenImage, 0, 0, offscreenImage.getWidth(), offscreenImage.getHeight(), this);
- }
- }
- }
-
- /** Overridden to track when this component is added to a container.
- Subclasses which override this method must call
- super.addNotify() in their addNotify() method in order to
- function properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>addNotify</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- public void addNotify() {
- super.addNotify();
- shouldInitialize = true;
- if (DEBUG) {
- System.err.println("GLJPanel.addNotify()");
- }
- }
-
- /** Overridden to track when this component is removed from a
- container. Subclasses which override this method must call
- super.removeNotify() in their removeNotify() method in order to
- function properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>removeNotify</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- public void removeNotify() {
- if (DEBUG) {
- System.err.println("GLJPanel.removeNotify()");
- }
- if (oglPipelineEnabled) {
- Java2D.invokeWithOGLContextCurrent(null, new Runnable() {
- public void run() {
- if (joglContext != null) {
- joglContext.destroy();
- joglContext = null;
- }
- joglDrawable = null;
- if (j2dContext != null) {
- j2dContext.destroy();
- j2dContext = null;
- }
- }
- });
- } else {
- if (!hardwareAccelerationDisabled) {
- if (pbuffer != null) {
- pbuffer.destroy();
- pbuffer = null;
- }
- } else {
- if (offscreenContext != null) {
- offscreenContext.destroy();
- offscreenContext = null;
- }
- if (offscreenDrawable != null) {
- offscreenDrawable.destroy();
- offscreenDrawable = null;
- }
- }
- }
- isInitialized = false;
- super.removeNotify();
- }
-
- /** Overridden to cause {@link GLDrawableHelper#reshape} to be
- called on all registered {@link GLEventListener}s. Subclasses
- which override this method must call super.reshape() in
- their reshape() method in order to function properly. <P>
-
- <B>Overrides:</B>
- <DL><DD><CODE>reshape</CODE> in class <CODE>java.awt.Component</CODE></DD></DL> */
- public void reshape(int x, int y, int width, int height) {
- super.reshape(x, y, width, height);
-
- reshapeX = x;
- reshapeY = y;
- reshapeWidth = width;
- reshapeHeight = height;
- handleReshape = true;
- }
-
- public void setOpaque(boolean opaque) {
- if (opaque != isOpaque()) {
- if (offscreenImage != null) {
- offscreenImage.flush();
- offscreenImage = null;
- }
- }
- super.setOpaque(opaque);
- }
-
- public void addGLEventListener(GLEventListener listener) {
- drawableHelper.addGLEventListener(listener);
- }
-
- public void removeGLEventListener(GLEventListener listener) {
- drawableHelper.removeGLEventListener(listener);
- }
-
- public GLContext createContext(GLContext shareWith) {
- if (!hardwareAccelerationDisabled) {
- return pbuffer.createContext(shareWith);
- } else {
- return offscreenDrawable.createContext(shareWith);
- }
- }
-
- public void setRealized(boolean realized) {
- }
-
- public GLContext getContext() {
- if (oglPipelineEnabled) {
- return joglContext;
- } else {
- if (!hardwareAccelerationDisabled) {
- // Workaround for crashes in NetBeans GUI builder
- if (pbuffer == null && Beans.isDesignTime()) {
- return null;
- }
- return pbuffer.getContext();
- } else {
- return offscreenContext;
- }
- }
- }
-
- public GL getGL() {
- GLContext context = getContext();
- return (context == null) ? null : context.getGL();
- }
-
- public void setGL(GL gl) {
- GLContext context = getContext();
- if (context != null) {
- context.setGL(gl);
- }
- }
-
- public void setAutoSwapBufferMode(boolean onOrOff) {
- // In the current implementation this is a no-op. Both the pbuffer
- // and pixmap based rendering paths use a single-buffered surface
- // so swapping the buffers doesn't do anything. We also don't
- // currently have the provision to skip copying the data to the
- // Swing portion of the GLJPanel in any of the rendering paths.
- }
-
- public boolean getAutoSwapBufferMode() {
- // In the current implementation this is a no-op. Both the pbuffer
- // and pixmap based rendering paths use a single-buffered surface
- // so swapping the buffers doesn't do anything. We also don't
- // currently have the provision to skip copying the data to the
- // Swing portion of the GLJPanel in any of the rendering paths.
- return true;
- }
-
- public void swapBuffers() {
- // In the current implementation this is a no-op. Both the pbuffer
- // and pixmap based rendering paths use a single-buffered surface
- // so swapping the buffers doesn't do anything. We also don't
- // currently have the provision to skip copying the data to the
- // Swing portion of the GLJPanel in any of the rendering paths.
- }
-
- /** For a translucent GLJPanel (one for which {@link #setOpaque
- setOpaque}(false) has been called), indicates whether the
- application should preserve the OpenGL color buffer
- (GL_COLOR_BUFFER_BIT) for correct rendering of the GLJPanel and
- underlying widgets which may show through portions of the
- GLJPanel with alpha values less than 1. Most Swing
- implementations currently expect the GLJPanel to be completely
- cleared (e.g., by <code>glClear(GL_COLOR_BUFFER_BIT |
- GL_DEPTH_BUFFER_BIT)</code>), but for certain optimized Swing
- implementations which use OpenGL internally, it may be possible
- to perform OpenGL rendering using the GLJPanel into the same
- OpenGL drawable as the Swing implementation uses. */
- public boolean shouldPreserveColorBufferIfTranslucent() {
- return oglPipelineEnabled;
- }
-
- public GLCapabilities getChosenGLCapabilities() {
- if (oglPipelineEnabled) {
- // FIXME: should do better than this; is it possible to using only platform-independent code?
- return new GLCapabilities();
- }
-
- if (hardwareAccelerationDisabled) {
- if (offscreenDrawable != null)
- return offscreenDrawable.getChosenGLCapabilities();
- } else {
- if (pbuffer != null)
- return pbuffer.getChosenGLCapabilities();
- }
-
- return null;
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void initialize() {
- if (panelWidth == 0 ||
- panelHeight == 0) {
- // See whether we have a non-zero size yet and can go ahead with
- // initialization
- if (reshapeWidth == 0 ||
- reshapeHeight == 0) {
- return;
- }
-
- // Pull down reshapeWidth and reshapeHeight into panelWidth and
- // panelHeight eagerly in order to complete initialization, and
- // force a reshape later
- panelWidth = reshapeWidth;
- panelHeight = reshapeHeight;
- }
-
- if (!oglPipelineEnabled) {
- // Initialize either the hardware-accelerated rendering path or
- // the lightweight rendering path
- if (!hardwareAccelerationDisabled) {
- if (GLDrawableFactory.getFactory().canCreateGLPbuffer()) {
- if (pbuffer != null) {
- throw new InternalError("Creating pbuffer twice without destroying it (memory leak / correctness bug)");
- }
- try {
- pbuffer = GLDrawableFactory.getFactory().createGLPbuffer(offscreenCaps,
- null,
- pbufferWidth,
- pbufferHeight,
- shareWith);
- updater = new Updater();
- pbuffer.addGLEventListener(updater);
- shouldInitialize = false;
- isInitialized = true;
- return;
- } catch (GLException e) {
- if (DEBUG) {
- e.printStackTrace();
- System.err.println("GLJPanel: Falling back on software rendering because of problems creating pbuffer");
- }
- hardwareAccelerationDisabled = true;
- }
- } else {
- if (DEBUG) {
- System.err.println("GLJPanel: Falling back on software rendering because no pbuffer support");
- }
-
- // If the factory reports that it can't create a pbuffer,
- // don't try again the next time, and fall through to the
- // software rendering path
- hardwareAccelerationDisabled = true;
- }
- }
-
- if (softwareRenderingDisabled) {
- throw new GLException("Fallback to software rendering disabled by user");
- }
-
- // Fall-through path: create an offscreen context instead
- offscreenDrawable = GLDrawableFactoryImpl.getFactoryImpl().createOffscreenDrawable(offscreenCaps, chooser);
- offscreenDrawable.setSize(Math.max(1, panelWidth), Math.max(1, panelHeight));
- offscreenContext = (GLContextImpl) offscreenDrawable.createContext(shareWith);
- offscreenContext.setSynchronized(true);
- }
- updater = new Updater();
- shouldInitialize = false;
- isInitialized = true;
- }
-
- private void handleReshape() {
- readBackWidthInPixels = 0;
- readBackHeightInPixels = 0;
-
- panelWidth = reshapeWidth;
- panelHeight = reshapeHeight;
-
- if (DEBUG) {
- System.err.println("GLJPanel.handleReshape: (w,h) = (" +
- panelWidth + "," + panelHeight + ")");
- }
-
- sendReshape = true;
-
- if (!oglPipelineEnabled) {
- if (!hardwareAccelerationDisabled) {
- // Use factor larger than 2 during shrinks for some hysteresis
- float shrinkFactor = 2.5f;
- if ((panelWidth > pbufferWidth ) || (panelHeight > pbufferHeight) ||
- (panelWidth < (pbufferWidth / shrinkFactor)) || (panelHeight < (pbufferHeight / shrinkFactor))) {
- if (DEBUG) {
- System.err.println("Resizing pbuffer from (" + pbufferWidth + ", " + pbufferHeight + ") " +
- " to fit (" + panelWidth + ", " + panelHeight + ")");
- }
- // Must destroy and recreate pbuffer to fit
- if (pbuffer != null) {
- // Watch for errors during pbuffer destruction (due to
- // buggy / bad OpenGL drivers, in particular SiS) and fall
- // back to software rendering
- try {
- pbuffer.destroy();
- } catch (GLException e) {
- hardwareAccelerationDisabled = true;
- if (DEBUG) {
- System.err.println("WARNING: falling back to software rendering due to bugs in OpenGL drivers");
- e.printStackTrace();
- }
- }
- }
- pbuffer = null;
- isInitialized = false;
- pbufferWidth = getNextPowerOf2(panelWidth);
- pbufferHeight = getNextPowerOf2(panelHeight);
- if (DEBUG && !hardwareAccelerationDisabled) {
- System.err.println("New pbuffer size is (" + pbufferWidth + ", " + pbufferHeight + ")");
- }
- initialize();
- }
-
- // It looks like NVidia's drivers (at least the ones on my
- // notebook) are buggy and don't allow a rectangle of less than
- // the pbuffer's width to be read...this doesn't really matter
- // because it's the Graphics.drawImage() calls that are the
- // bottleneck. Should probably make the size of the offscreen
- // image be the exact size of the pbuffer to save some work on
- // resize operations...
- if (!hardwareAccelerationDisabled) {
- readBackWidthInPixels = pbufferWidth;
- readBackHeightInPixels = panelHeight;
- } else {
- // Just disabled hardware acceleration during this resize operation; do a fixup
- readBackWidthInPixels = Math.max(1, panelWidth);
- readBackHeightInPixels = Math.max(1, panelHeight);
- }
- } else {
- offscreenContext.destroy();
- offscreenDrawable.setSize(Math.max(1, panelWidth), Math.max(1, panelHeight));
- readBackWidthInPixels = Math.max(1, panelWidth);
- readBackHeightInPixels = Math.max(1, panelHeight);
- }
-
- if (offscreenImage != null) {
- offscreenImage.flush();
- offscreenImage = null;
- }
- }
-
- handleReshape = false;
- }
-
- // FIXME: it isn't clear whether this works any more given that
- // we're accessing the GLDrawable inside of the GLPbuffer directly
- // up in reshape() -- need to rethink and clean this up
- class Updater implements GLEventListener {
- private Graphics g;
-
- public void setGraphics(Graphics g) {
- this.g = g;
- }
-
- public void init(GLAutoDrawable drawable) {
- if (oglPipelineEnabled) {
- if (!preGL(g)) {
- return;
- }
- }
- drawableHelper.init(GLJPanel.this);
- if (oglPipelineEnabled) {
- postGL(g);
- }
- }
-
- public void display(GLAutoDrawable drawable) {
- if (oglPipelineEnabled) {
- if (!preGL(g)) {
- return;
- }
- }
-
- if (sendReshape) {
- if (DEBUG) {
- System.err.println("glViewport(" + viewportX + ", " + viewportY + ", " + panelWidth + ", " + panelHeight + ")");
- }
- getGL().glViewport(viewportX, viewportY, panelWidth, panelHeight);
- drawableHelper.reshape(GLJPanel.this, viewportX, viewportY, panelWidth, panelHeight);
- sendReshape = false;
- }
-
- drawableHelper.display(GLJPanel.this);
-
- if (!oglPipelineEnabled) {
- // Must now copy pixels from offscreen context into surface
- if (offscreenImage == null) {
- if (panelWidth > 0 && panelHeight > 0) {
- // It looks like NVidia's drivers (at least the ones on my
- // notebook) are buggy and don't allow a sub-rectangle to be
- // read from a pbuffer...this doesn't really matter because
- // it's the Graphics.drawImage() calls that are the
- // bottleneck
-
- int awtFormat = 0;
- int hwGLFormat = 0;
- if (!hardwareAccelerationDisabled) {
- // This seems to be a good choice on all platforms
- hwGLFormat = GL.GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- // Should be more flexible in these BufferedImage formats;
- // perhaps see what the preferred image types are on the
- // given platform
- if (isOpaque()) {
- awtFormat = BufferedImage.TYPE_INT_RGB;
- } else {
- awtFormat = BufferedImage.TYPE_INT_ARGB;
- }
-
- offscreenImage = new BufferedImage(panelWidth,
- panelHeight,
- awtFormat);
- switch (awtFormat) {
- case BufferedImage.TYPE_3BYTE_BGR:
- glFormat = GL.GL_BGR;
- glType = GL.GL_UNSIGNED_BYTE;
- readBackBytes = ByteBuffer.allocate(readBackWidthInPixels * readBackHeightInPixels * 3);
- break;
-
- case BufferedImage.TYPE_INT_RGB:
- case BufferedImage.TYPE_INT_ARGB:
- glFormat = GL.GL_BGRA;
- glType = (hardwareAccelerationDisabled
- ? offscreenContext.getOffscreenContextPixelDataType()
- : hwGLFormat);
- readBackInts = IntBuffer.allocate(readBackWidthInPixels * readBackHeightInPixels);
- break;
-
- default:
- // FIXME: Support more off-screen image types (current
- // offscreen context implementations don't use others, and
- // some of the OpenGL formats aren't supported in the 1.1
- // headers, which we're currently using)
- throw new GLException("Unsupported offscreen image type " + awtFormat);
- }
- }
- }
-
- if (offscreenImage != null) {
- GL gl = getGL();
- // Save current modes
- gl.glGetIntegerv(GL.GL_PACK_SWAP_BYTES, swapbytes, 0);
- gl.glGetIntegerv(GL.GL_PACK_ROW_LENGTH, rowlength, 0);
- gl.glGetIntegerv(GL.GL_PACK_SKIP_ROWS, skiprows, 0);
- gl.glGetIntegerv(GL.GL_PACK_SKIP_PIXELS, skippixels, 0);
- gl.glGetIntegerv(GL.GL_PACK_ALIGNMENT, alignment, 0);
-
- gl.glPixelStorei(GL.GL_PACK_SWAP_BYTES, GL.GL_FALSE);
- gl.glPixelStorei(GL.GL_PACK_ROW_LENGTH, readBackWidthInPixels);
- gl.glPixelStorei(GL.GL_PACK_SKIP_ROWS, 0);
- gl.glPixelStorei(GL.GL_PACK_SKIP_PIXELS, 0);
- gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1);
-
- // Actually read the pixels.
- gl.glReadBuffer(GL.GL_FRONT);
- if (readBackBytes != null) {
- gl.glReadPixels(0, 0, readBackWidthInPixels, readBackHeightInPixels, glFormat, glType, readBackBytes);
- } else if (readBackInts != null) {
- gl.glReadPixels(0, 0, readBackWidthInPixels, readBackHeightInPixels, glFormat, glType, readBackInts);
- }
-
- // Restore saved modes.
- gl.glPixelStorei(GL.GL_PACK_SWAP_BYTES, swapbytes[0]);
- gl.glPixelStorei(GL.GL_PACK_ROW_LENGTH, rowlength[0]);
- gl.glPixelStorei(GL.GL_PACK_SKIP_ROWS, skiprows[0]);
- gl.glPixelStorei(GL.GL_PACK_SKIP_PIXELS, skippixels[0]);
- gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, alignment[0]);
-
- if (readBackBytes != null || readBackInts != null) {
- // Copy temporary data into raster of BufferedImage for faster
- // blitting Note that we could avoid this copy in the cases
- // where !offscreenContext.offscreenImageNeedsVerticalFlip(),
- // but that's the software rendering path which is very slow
- // anyway
- Object src = null;
- Object dest = null;
- int srcIncr = 0;
- int destIncr = 0;
-
- if (readBackBytes != null) {
- src = readBackBytes.array();
- dest = ((DataBufferByte) offscreenImage.getRaster().getDataBuffer()).getData();
- srcIncr = readBackWidthInPixels * 3;
- destIncr = offscreenImage.getWidth() * 3;
- } else {
- src = readBackInts.array();
- dest = ((DataBufferInt) offscreenImage.getRaster().getDataBuffer()).getData();
- srcIncr = readBackWidthInPixels;
- destIncr = offscreenImage.getWidth();
- }
-
- if (!hardwareAccelerationDisabled ||
- offscreenContext.offscreenImageNeedsVerticalFlip()) {
- int srcPos = 0;
- int destPos = (offscreenImage.getHeight() - 1) * destIncr;
- for (; destPos >= 0; srcPos += srcIncr, destPos -= destIncr) {
- System.arraycopy(src, srcPos, dest, destPos, destIncr);
- }
- } else {
- int srcPos = 0;
- int destEnd = destIncr * offscreenImage.getHeight();
- for (int destPos = 0; destPos < destEnd; srcPos += srcIncr, destPos += destIncr) {
- System.arraycopy(src, srcPos, dest, destPos, destIncr);
- }
- }
-
- // Note: image will be drawn back in paintComponent() for
- // correctness on all platforms
- }
- }
- } else {
- // Cause OpenGL pipeline to flush its results because
- // otherwise it's possible we will buffer up multiple frames'
- // rendering results, resulting in apparent mouse lag
- GL gl = getGL();
- gl.glFinish();
-
- postGL(g);
- }
- }
-
- public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
- // This is handled above and dispatched directly to the appropriate context
- }
-
- public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
- }
- }
-
- class InitAction implements Runnable {
- public void run() {
- updater.init(GLJPanel.this);
- }
- }
- private InitAction initAction = new InitAction();
-
- class DisplayAction implements Runnable {
- public void run() {
- updater.display(GLJPanel.this);
- }
- }
- private DisplayAction displayAction = new DisplayAction();
-
- // This one is used exclusively in the non-hardware-accelerated case
- class SwapBuffersAction implements Runnable {
- public void run() {
- offscreenDrawable.swapBuffers();
- }
- }
- private SwapBuffersAction swapBuffersAction = new SwapBuffersAction();
-
- class PaintImmediatelyAction implements Runnable {
- public void run() {
- paintImmediately(0, 0, getWidth(), getHeight());
- }
- }
- private PaintImmediatelyAction paintImmediatelyAction = new PaintImmediatelyAction();
-
- private int getNextPowerOf2(int number) {
- // Workaround for problems where 0 width or height are transiently
- // seen during layout
- if (number == 0) {
- return 2;
- }
-
- if (((number-1) & number) == 0) {
- //ex: 8 -> 0b1000; 8-1=7 -> 0b0111; 0b1000&0b0111 == 0
- return number;
- }
- int power = 0;
- while (number > 0) {
- number = number>>1;
- power++;
- }
- return (1<<power);
- }
-
- private int getGLInteger(GL gl, int which) {
- int[] tmp = new int[1];
- gl.glGetIntegerv(which, tmp, 0);
- return tmp[0];
- }
-}
diff --git a/src/classes/javax/media/opengl/GLPbuffer.java b/src/classes/javax/media/opengl/GLPbuffer.java
deleted file mode 100644
index 04cf7f0ed..000000000
--- a/src/classes/javax/media/opengl/GLPbuffer.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-/** Provides offscreen rendering support via pbuffers. The principal
- addition of this interface is a {@link #destroy} method to
- deallocate the pbuffer and its associated resources. It also
- contains experimental methods for accessing the pbuffer's contents
- as a texture map and enabling rendering to floating-point frame
- buffers. These methods are not guaranteed to be supported on all
- platforms and may be deprecated in a future release. */
-
-public interface GLPbuffer extends GLAutoDrawable {
- /** Indicates the GL_APPLE_float_pixels extension is being used for this pbuffer. */
- public static final int APPLE_FLOAT = 1;
-
- /** Indicates the GL_ATI_texture_float extension is being used for this pbuffer. */
- public static final int ATI_FLOAT = 2;
-
- /** Indicates the GL_NV_float_buffer extension is being used for this pbuffer. */
- public static final int NV_FLOAT = 3;
-
- /** Binds this pbuffer to its internal texture target. Only valid to
- call if offscreen render-to-texture has been specified in the
- GLCapabilities for this GLPbuffer. If the
- render-to-texture-rectangle capability has also been specified,
- this will use e.g. wglBindTexImageARB as its implementation and
- cause the texture to be bound to e.g. the
- GL_TEXTURE_RECTANGLE_NV state; otherwise, during the display()
- phase the pixels will have been copied into an internal texture
- target and this will cause that to be bound to the GL_TEXTURE_2D
- state. */
- public void bindTexture();
-
- /** Unbinds the pbuffer from its internal texture target. */
- public void releaseTexture();
-
- /** Destroys the native resources associated with this pbuffer. It
- is not valid to call display() or any other routines on this
- pbuffer after it has been destroyed. Before destroying the
- pbuffer, the application must destroy any additional OpenGL
- contexts which have been created for the pbuffer via {@link
- #createContext}. */
- public void destroy();
-
- /** Indicates which vendor's extension is being used to support
- floating point channels in this pbuffer if that capability was
- requested in the GLCapabilities during pbuffer creation. Returns
- one of NV_FLOAT, ATI_FLOAT or APPLE_FLOAT, or throws GLException
- if floating-point channels were not requested for this pbuffer.
- This function may only be called once the init method for this
- pbuffer's GLEventListener has been called. */
- public int getFloatingPointMode();
-}
diff --git a/src/classes/javax/media/opengl/Threading.java b/src/classes/javax/media/opengl/Threading.java
deleted file mode 100755
index d3712c4c5..000000000
--- a/src/classes/javax/media/opengl/Threading.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package javax.media.opengl;
-
-import java.awt.EventQueue;
-import java.lang.reflect.InvocationTargetException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import com.sun.opengl.impl.*;
-
-/** This API provides access to the threading model for the implementation of
- the classes in this package.
-
- <P>
-
- OpenGL is specified as a thread-safe API, but in practice there
- are multithreading-related issues on most, if not all, of the
- platforms which support it. For example, some OpenGL
- implementations do not behave well when one context is made
- current first on one thread, released, and then made current on a
- second thread, although this is legal according to the OpenGL
- specification. On other platforms there are other problems.
-
- <P>
-
- Due to these limitations, and due to the inherent multithreading
- in the Java platform (in particular, in the Abstract Window
- Toolkit), it is often necessary to limit the multithreading
- occurring in the typical application using the OpenGL API.
-
- <P>
-
- In the current reference implementation, for instance, multithreading
- has been limited by
- forcing all OpenGL-related work for GLAutoDrawables on to a single
- thread. In other words, if an application uses only the
- GLAutoDrawable and GLEventListener callback mechanism, it is
- guaranteed to have the most correct single-threaded behavior on
- all platforms.
-
- <P>
-
- Applications using the GLContext makeCurrent/release API directly
- will inherently break this single-threaded model, as these methods
- require that the OpenGL context be made current on the current
- thread immediately. For applications wishing to integrate better
- with an implementation that uses the single-threaded model, this
- class provides public access to the mechanism used by the implementation.
-
- <P>
-
- Users can execute Runnables on the
- internal thread used for performing OpenGL work, and query whether
- the current thread is already this thread. Using these mechanisms
- the user can move work from the current thread on to the internal
- OpenGL thread if desired.
-
- <P>
-
- This class also provides mechanisms for querying whether this
- internal serialization of OpenGL work is in effect, and a
- programmatic way of disabling it. In the current reference
- implementation it is enabled by default, although it could be
- disabled in the future if OpenGL drivers become more robust on
- all platforms.
-
- <P>
-
- In addition to specifying programmatically whether the single
- thread for OpenGL work is enabled, users may switch it on and off
- using the system property <code>opengl.1thread</code>. Valid values
- for this system property are:
-
- <PRE>
- -Dopengl.1thread=false Disable single-threading of OpenGL work
- -Dopengl.1thread=true Enable single-threading of OpenGL work (default -- on a newly-created worker thread)
- -Dopengl.1thread=auto Select default single-threading behavior (currently on)
- -Dopengl.1thread=awt Enable single-threading of OpenGL work on AWT event dispatch thread (current default on all
- platforms, and also the default behavior older releases)
- -Dopengl.1thread=worker Enable single-threading of OpenGL work on newly-created worker thread (not suitable for Mac
- OS X or X11 platforms, and risky on Windows in applet environments)
- </PRE>
-*/
-
-public class Threading {
- private static boolean singleThreaded = true;
- private static final int AWT = 1;
- private static final int WORKER = 2;
- private static int mode;
- // We need to know whether we're running on X11 platforms to change
- // our behavior when the Java2D/JOGL bridge is active
- private static boolean isX11;
-
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- String workaround = System.getProperty("opengl.1thread");
- // Default to using the AWT thread on all platforms except
- // Windows. On OS X there is instability apparently due to
- // using the JAWT on non-AWT threads. On X11 platforms there
- // are potential deadlocks which can be caused if the AWT
- // EventQueue thread hands work off to the GLWorkerThread
- // while holding the AWT lock. The optimization of
- // makeCurrent / release calls isn't worth these stability
- // problems.
- String osName = System.getProperty("os.name");
- boolean isWindows = osName.startsWith("Windows");
- isX11 = !(isWindows || osName.startsWith("Mac OS"));
- // int defaultMode = (isWindows ? WORKER : AWT);
- int defaultMode = AWT;
- mode = defaultMode;
- if (workaround != null) {
- workaround = workaround.toLowerCase();
- if (workaround.equals("true") ||
- workaround.equals("auto")) {
- // Nothing to do; singleThreaded and mode already set up
- } else if (workaround.equals("worker")) {
- singleThreaded = true;
- mode = WORKER;
- } else if (workaround.equals("awt")) {
- singleThreaded = true;
- mode = AWT;
- } else {
- singleThreaded = false;
- }
- }
- printWorkaroundNotice();
- return null;
- }
- });
- }
-
- /** No reason to ever instantiate this class */
- private Threading() {}
-
- /** If an implementation of the javax.media.opengl APIs offers a
- multithreading option but the default behavior is single-threading,
- this API provides a mechanism for end users to disable single-threading
- in this implementation. Users are strongly discouraged from
- calling this method unless they are aware of all of the
- consequences and are prepared to enforce some amount of
- threading restrictions in their applications. Disabling
- single-threading, for example, may have unintended consequences
- on GLAutoDrawable implementations such as GLCanvas, GLJPanel and
- GLPbuffer. Currently there is no supported way to re-enable it
- once disabled, partly to discourage careless use of this
- method. This method should be called as early as possible in an
- application. */
- public static void disableSingleThreading() {
- singleThreaded = false;
- if (Debug.verbose()) {
- System.err.println("Application forced disabling of single-threading of javax.media.opengl implementation");
- }
- }
-
- /** Indicates whether OpenGL work is being automatically forced to a
- single thread in this implementation. */
- public static boolean isSingleThreaded() {
- return singleThreaded;
- }
-
- /** Indicates whether the current thread is the single thread on
- which this implementation of the javax.media.opengl APIs
- performs all of its OpenGL-related work. This method should only
- be called if the single-thread model is in effect. */
- public static boolean isOpenGLThread() throws GLException {
- if (!isSingleThreaded()) {
- throw new GLException("Should only call this in single-threaded mode");
- }
-
- switch (mode) {
- case AWT:
- if (Java2D.isOGLPipelineActive()) {
- // FIXME: ideally only the QFT would be considered to be the
- // "OpenGL thread", but we can not currently run all of
- // JOGL's OpenGL work on that thread. See the FIXME in
- // invokeOnOpenGLThread.
- return (Java2D.isQueueFlusherThread() ||
- (isX11 && EventQueue.isDispatchThread()));
- } else {
- return EventQueue.isDispatchThread();
- }
- case WORKER:
- if (Java2D.isOGLPipelineActive()) {
- // FIXME: ideally only the QFT would be considered to be the
- // "OpenGL thread", but we can not currently run all of
- // JOGL's OpenGL work on that thread. See the FIXME in
- // invokeOnOpenGLThread.
- return (Java2D.isQueueFlusherThread() ||
- (isX11 && GLWorkerThread.isWorkerThread()));
- } else {
- return GLWorkerThread.isWorkerThread();
- }
- default:
- throw new InternalError("Illegal single-threading mode " + mode);
- }
- }
-
- /** Executes the passed Runnable on the single thread used for all
- OpenGL work in this javax.media.opengl API implementation. It is
- not specified exactly which thread is used for this
- purpose. This method should only be called if the single-thread
- model is in use and if the current thread is not the OpenGL
- thread (i.e., if <code>isOpenGLThread()</code> returns
- false). It is up to the end user to check to see whether the
- current thread is the OpenGL thread and either execute the
- Runnable directly or perform the work inside it. */
- public static void invokeOnOpenGLThread(Runnable r) throws GLException {
- if (!isSingleThreaded()) {
- throw new GLException ("Should only call this in single-threaded mode");
- }
-
- if (isOpenGLThread()) {
- throw new GLException ("Should only call this from other threads than the OpenGL thread");
- }
-
- switch (mode) {
- case AWT:
- // FIXME: ideally should run all OpenGL work on the Java2D QFT
- // thread when it's enabled, but unfortunately there are
- // deadlock issues on X11 platforms when making our
- // heavyweight OpenGL contexts current on the QFT because we
- // perform the JAWT lock inside the makeCurrent()
- // implementation, which attempts to grab the AWT lock on the
- // QFT which is not allowed. For now, on X11 platforms,
- // continue to perform this work on the EDT.
- if (Java2D.isOGLPipelineActive() && !isX11) {
- Java2D.invokeWithOGLContextCurrent(null, r);
- } else {
- try {
- EventQueue.invokeAndWait(r);
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (InterruptedException e) {
- throw new GLException(e);
- }
- }
- break;
-
- case WORKER:
- if (!GLWorkerThread.isStarted()) {
- synchronized (GLWorkerThread.class) {
- if (!GLWorkerThread.isStarted()) {
- GLWorkerThread.start();
- }
- }
- }
- try {
- GLWorkerThread.invokeAndWait(r);
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (InterruptedException e) {
- throw new GLException(e);
- }
- break;
-
- default:
- throw new InternalError("Illegal single-threading mode " + mode);
- }
- }
-
- /** This is a workaround for AWT-related deadlocks which only seem
- to show up in the context of applets */
- static boolean isAWTMode() {
- return (mode == AWT);
- }
-
- private static void printWorkaroundNotice() {
- if (singleThreaded && Debug.verbose()) {
- System.err.println("Using " +
- (mode == AWT ? "AWT" : "OpenGL worker") +
- " thread for performing OpenGL work in javax.media.opengl implementation");
- }
- }
-}
diff --git a/src/classes/javax/media/opengl/glu/GLUnurbs.java b/src/classes/javax/media/opengl/glu/GLUnurbs.java
deleted file mode 100755
index 2641115d0..000000000
--- a/src/classes/javax/media/opengl/glu/GLUnurbs.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package javax.media.opengl.glu;
-
-/**
- * Wrapper for a GLU NURBS object.
- */
-
-public interface GLUnurbs {
-}
diff --git a/src/classes/javax/media/opengl/glu/GLUquadric.java b/src/classes/javax/media/opengl/glu/GLUquadric.java
deleted file mode 100755
index bcb21fb90..000000000
--- a/src/classes/javax/media/opengl/glu/GLUquadric.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package javax.media.opengl.glu;
-
-/**
- * Wrapper for a GLU quadric object.
- */
-
-public interface GLUquadric {
-}
diff --git a/src/classes/javax/media/opengl/glu/GLUtessellator.java b/src/classes/javax/media/opengl/glu/GLUtessellator.java
deleted file mode 100755
index cb7bd9d76..000000000
--- a/src/classes/javax/media/opengl/glu/GLUtessellator.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package javax.media.opengl.glu;
-
-/**
- * The <b>GLUtessellator</b> object is used to hold the data, such as the
- * vertices, edges and callback objects, to describe and tessellate complex
- * polygons. A <b>GLUtessellator</b> object is used with the
- * {@link GLU GLU} tessellator methods and
- * {@link GLUtessellatorCallback GLU callbacks}.
- *
- * @author Eric Veach, July 1994
- * @author Java Port: Pepijn Van Eechhoudt, July 2003
- * @author Java Port: Nathan Parker Burg, August 2003
- */
-public interface GLUtessellator {}
diff --git a/src/classes/javax/media/opengl/glu/GLUtessellatorCallback.java b/src/classes/javax/media/opengl/glu/GLUtessellatorCallback.java
deleted file mode 100755
index 253b50743..000000000
--- a/src/classes/javax/media/opengl/glu/GLUtessellatorCallback.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package javax.media.opengl.glu;
-
-/**
- * <b>GLUtessellatorCallback</b> interface provides methods that the user will
- * override to define the callbacks for a tessellation object.
- *
- * @author Eric Veach, July 1994
- * @author Java Port: Pepijn Van Eeckhoudt, July 2003
- * @author Java Port: Nathan Parker Burg, August 2003
- */
-public interface GLUtessellatorCallback {
- /**
- * The <b>begin</b> callback method is invoked like
- * {@link javax.media.opengl.GL#glBegin glBegin} to indicate the start of a
- * (triangle) primitive. The method takes a single argument of type int. If
- * the <b>GLU_TESS_BOUNDARY_ONLY</b> property is set to <b>GL_FALSE</b>, then
- * the argument is set to either <b>GL_TRIANGLE_FAN</b>,
- * <b>GL_TRIANGLE_STRIP</b>, or <b>GL_TRIANGLES</b>. If the
- * <b>GLU_TESS_BOUNDARY_ONLY</b> property is set to <b>GL_TRUE</b>, then the
- * argument will be set to <b>GL_LINE_LOOP</b>.
- *
- * @param type
- * Specifics the type of begin/end pair being defined. The following
- * values are valid: <b>GL_TRIANGLE_FAN</b>, <b>GL_TRIANGLE_STRIP</b>,
- * <b>GL_TRIANGLES</b> or <b>GL_LINE_LOOP</b>.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #end end
- * @see #begin begin
- */
- public void begin(int type);
-
- /**
- * The same as the {@link #begin begin} callback method except that
- * it takes an additional reference argument. This reference is
- * identical to the opaque reference provided when {@link
- * GLU#gluTessBeginPolygon gluTessBeginPolygon} was called.
- *
- * @param type
- * Specifics the type of begin/end pair being defined. The following
- * values are valid: <b>GL_TRIANGLE_FAN</b>, <b>GL_TRIANGLE_STRIP</b>,
- * <b>GL_TRIANGLES</b> or <b>GL_LINE_LOOP</b>.
- * @param polygonData
- * Specifics a reference to user-defined data.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #endData endData
- * @see #begin begin
- */
- public void beginData(int type, Object polygonData);
-
-
- /**
- * The <b>edgeFlag</b> callback method is similar to
- * {@link javax.media.opengl.GL#glEdgeFlag glEdgeFlag}. The method takes
- * a single boolean boundaryEdge that indicates which edges lie on the
- * polygon boundary. If the boundaryEdge is <b>GL_TRUE</b>, then each vertex
- * that follows begins an edge that lies on the polygon boundary, that is,
- * an edge that separates an interior region from an exterior one. If the
- * boundaryEdge is <b>GL_FALSE</b>, then each vertex that follows begins an
- * edge that lies in the polygon interior. The edge flag callback (if
- * defined) is invoked before the first vertex callback.<P>
- *
- * Since triangle fans and triangle strips do not support edge flags, the
- * begin callback is not called with <b>GL_TRIANGLE_FAN</b> or
- * <b>GL_TRIANGLE_STRIP</b> if a non-null edge flag callback is provided.
- * (If the callback is initialized to null, there is no impact on
- * performance). Instead, the fans and strips are converted to independent
- * triangles.
- *
- * @param boundaryEdge
- * Specifics which edges lie on the polygon boundary.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #edgeFlagData edgeFlagData
- */
- public void edgeFlag(boolean boundaryEdge);
-
-
- /**
- * The same as the {@link #edgeFlag edgeFlage} callback method
- * except that it takes an additional reference argument. This
- * reference is identical to the opaque reference provided when
- * {@link GLU#gluTessBeginPolygon gluTessBeginPolygon} was called.
- *
- * @param boundaryEdge
- * Specifics which edges lie on the polygon boundary.
- * @param polygonData
- * Specifics a reference to user-defined data.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #edgeFlag edgeFlag
- */
- public void edgeFlagData(boolean boundaryEdge, Object polygonData);
-
-
- /**
- * The <b>vertex</b> callback method is invoked between the {@link
- * #begin begin} and {@link #end end} callback methods. It is
- * similar to {@link javax.media.opengl.GL#glVertex3f glVertex3f},
- * and it defines the vertices of the triangles created by the
- * tessellation process. The method takes a reference as its only
- * argument. This reference is identical to the opaque reference
- * provided by the user when the vertex was described (see {@link
- * GLU#gluTessVertex gluTessVertex}).
- *
- * @param vertexData
- * Specifics a reference to the vertices of the triangles created
- * byt the tessellatin process.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #vertexData vertexData
- */
- public void vertex(Object vertexData);
-
-
- /**
- * The same as the {@link #vertex vertex} callback method except
- * that it takes an additional reference argument. This reference is
- * identical to the opaque reference provided when {@link
- * GLU#gluTessBeginPolygon gluTessBeginPolygon} was called.
- *
- * @param vertexData
- * Specifics a reference to the vertices of the triangles created
- * byt the tessellatin process.
- * @param polygonData
- * Specifics a reference to user-defined data.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #vertex vertex
- */
- public void vertexData(Object vertexData, Object polygonData);
-
-
- /**
- * The end callback serves the same purpose as
- * {@link javax.media.opengl.GL#glEnd glEnd}. It indicates the end of a
- * primitive and it takes no arguments.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #begin begin
- * @see #endData endData
- */
- public void end();
-
-
- /**
- * The same as the {@link #end end} callback method except that it
- * takes an additional reference argument. This reference is
- * identical to the opaque reference provided when {@link
- * GLU#gluTessBeginPolygon gluTessBeginPolygon} was called.
- *
- * @param polygonData
- * Specifics a reference to user-defined data.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #beginData beginData
- * @see #end end
- */
- public void endData(Object polygonData);
-
-
- /**
- * The <b>combine</b> callback method is called to create a new vertex when
- * the tessellation detects an intersection, or wishes to merge features. The
- * method takes four arguments: an array of three elements each of type
- * double, an array of four references, an array of four elements each of
- * type float, and a reference to a reference.<P>
- *
- * The vertex is defined as a linear combination of up to four existing
- * vertices, stored in <i>data</i>. The coefficients of the linear combination
- * are given by <i>weight</i>; these weights always add up to 1. All vertex
- * pointers are valid even when some of the weights are 0. <i>coords</i> gives
- * the location of the new vertex.<P>
- *
- * The user must allocate another vertex, interpolate parameters using
- * <i>data</i> and <i>weight</i>, and return the new vertex pointer in
- * <i>outData</i>. This handle is supplied during rendering callbacks. The
- * user is responsible for freeing the memory some time after
- * {@link GLU#gluTessEndPolygon gluTessEndPolygon} is
- * called.<P>
- *
- * For example, if the polygon lies in an arbitrary plane in 3-space, and a
- * color is associated with each vertex, the <b>GLU_TESS_COMBINE</b>
- * callback might look like this:
- * </UL>
- * <PRE>
- * void myCombine(double[] coords, Object[] data,
- * float[] weight, Object[] outData)
- * {
- * MyVertex newVertex = new MyVertex();
- *
- * newVertex.x = coords[0];
- * newVertex.y = coords[1];
- * newVertex.z = coords[2];
- * newVertex.r = weight[0]*data[0].r +
- * weight[1]*data[1].r +
- * weight[2]*data[2].r +
- * weight[3]*data[3].r;
- * newVertex.g = weight[0]*data[0].g +
- * weight[1]*data[1].g +
- * weight[2]*data[2].g +
- * weight[3]*data[3].g;
- * newVertex.b = weight[0]*data[0].b +
- * weight[1]*data[1].b +
- * weight[2]*data[2].b +
- * weight[3]*data[3].b;
- * newVertex.a = weight[0]*data[0].a +
- * weight[1]*data[1].a +
- * weight[2]*data[2].a +
- * weight[3]*data[3].a;
- * outData = newVertex;
- * }</PRE>
- *
- * @param coords
- * Specifics the location of the new vertex.
- * @param data
- * Specifics the vertices used to create the new vertex.
- * @param weight
- * Specifics the weights used to create the new vertex.
- * @param outData
- * Reference user the put the coodinates of the new vertex.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #combineData combineData
- */
- public void combine(double[] coords, Object[] data,
- float[] weight, Object[] outData);
-
-
- /**
- * The same as the {@link #combine combine} callback method except
- * that it takes an additional reference argument. This reference is
- * identical to the opaque reference provided when {@link
- * GLU#gluTessBeginPolygon gluTessBeginPolygon} was called.
- *
- * @param coords
- * Specifics the location of the new vertex.
- * @param data
- * Specifics the vertices used to create the new vertex.
- * @param weight
- * Specifics the weights used to create the new vertex.
- * @param outData
- * Reference user the put the coodinates of the new vertex.
- * @param polygonData
- * Specifics a reference to user-defined data.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #combine combine
- */
- public void combineData(double[] coords, Object[] data,
- float[] weight, Object[] outData,
- Object polygonData);
-
-
- /**
- * The <b>error</b> callback method is called when an error is encountered.
- * The one argument is of type int; it indicates the specific error that
- * occurred and will be set to one of <b>GLU_TESS_MISSING_BEGIN_POLYGON</b>,
- * <b>GLU_TESS_MISSING_END_POLYGON</b>, <b>GLU_TESS_MISSING_BEGIN_CONTOUR</b>,
- * <b>GLU_TESS_MISSING_END_CONTOUR</b>, <b>GLU_TESS_COORD_TOO_LARGE</b>,
- * <b>GLU_TESS_NEED_COMBINE_CALLBACK</b> or <b>GLU_OUT_OF_MEMORY</b>.
- * Character strings describing these errors can be retrieved with the
- * {@link GLU#gluErrorString gluErrorString} call.<P>
- *
- * The GLU library will recover from the first four errors by inserting the
- * missing call(s). <b>GLU_TESS_COORD_TOO_LARGE</b> indicates that some
- * vertex coordinate exceeded the predefined constant
- * <b>GLU_TESS_MAX_COORD</b> in absolute value, and that the value has been
- * clamped. (Coordinate values must be small enough so that two can be
- * multiplied together without overflow.)
- * <b>GLU_TESS_NEED_COMBINE_CALLBACK</b> indicates that the tessellation
- * detected an intersection between two edges in the input data, and the
- * <b>GLU_TESS_COMBINE</b> or <b>GLU_TESS_COMBINE_DATA</b> callback was not
- * provided. No output is generated. <b>GLU_OUT_OF_MEMORY</b> indicates that
- * there is not enough memory so no output is generated.
- *
- * @param errnum
- * Specifics the error number code.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #errorData errorData
- */
- public void error(int errnum);
-
-
- /**
- * The same as the {@link #error error} callback method except that
- * it takes an additional reference argument. This reference is
- * identical to the opaque reference provided when {@link
- * GLU#gluTessBeginPolygon gluTessBeginPolygon} was called.
- *
- * @param errnum
- * Specifics the error number code.
- * @param polygonData
- * Specifics a reference to user-defined data.
- *
- * @see GLU#gluTessCallback gluTessCallback
- * @see #error error
- */
- public void errorData(int errnum, Object polygonData);
-
- //void mesh(com.sun.opengl.impl.tessellator.GLUmesh mesh);
-}
diff --git a/src/classes/javax/media/opengl/glu/GLUtessellatorCallbackAdapter.java b/src/classes/javax/media/opengl/glu/GLUtessellatorCallbackAdapter.java
deleted file mode 100755
index bf6f2d29a..000000000
--- a/src/classes/javax/media/opengl/glu/GLUtessellatorCallbackAdapter.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-* Portions Copyright (C) 2003-2006 Sun Microsystems, Inc.
-* All rights reserved.
-*/
-
-/*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-**
-** http://oss.sgi.com/projects/FreeB
-**
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-**
-** NOTE: The Original Code (as defined below) has been licensed to Sun
-** Microsystems, Inc. ("Sun") under the SGI Free Software License B
-** (Version 1.1), shown above ("SGI License"). Pursuant to Section
-** 3.2(3) of the SGI License, Sun is distributing the Covered Code to
-** you under an alternative license ("Alternative License"). This
-** Alternative License includes all of the provisions of the SGI License
-** except that Section 2.2 and 11 are omitted. Any differences between
-** the Alternative License and the SGI License are offered solely by Sun
-** and not by SGI.
-**
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-**
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-** Author: Eric Veach, July 1994
-** Java Port: Pepijn Van Eeckhoudt, July 2003
-** Java Port: Nathan Parker Burg, August 2003
-*/
-package javax.media.opengl.glu;
-
-/**
- * The <b>GLUtessellatorCallbackAdapter</b> provides a default implementation of
- * {@link GLUtessellatorCallback GLUtessellatorCallback}
- * with empty callback methods. This class can be extended to provide user
- * defined callback methods.
- *
- * @author Eric Veach, July 1994
- * @author Java Port: Pepijn Van Eechhoudt, July 2003
- * @author Java Port: Nathan Parker Burg, August 2003
- */
-
-public class GLUtessellatorCallbackAdapter implements GLUtessellatorCallback {
- public void begin(int type) {}
- public void edgeFlag(boolean boundaryEdge) {}
- public void vertex(Object vertexData) {}
- public void end() {}
-// public void mesh(com.sun.opengl.impl.tessellator.GLUmesh mesh) {}
- public void error(int errnum) {}
- public void combine(double[] coords, Object[] data,
- float[] weight, Object[] outData) {}
- public void beginData(int type, Object polygonData) {}
- public void edgeFlagData(boolean boundaryEdge,
- Object polygonData) {}
- public void vertexData(Object vertexData, Object polygonData) {}
- public void endData(Object polygonData) {}
- public void errorData(int errnum, Object polygonData) {}
- public void combineData(double[] coords, Object[] data,
- float[] weight, Object[] outData,
- Object polygonData) {}
-}