001: /*
002: * $RCSfile: NativeConfigTemplate3D.java,v $
003: *
004: * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
006: *
007: * This code is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License version 2 only, as
009: * published by the Free Software Foundation. Sun designates this
010: * particular file as subject to the "Classpath" exception as provided
011: * by Sun in the LICENSE file that accompanied this code.
012: *
013: * This code is distributed in the hope that it will be useful, but WITHOUT
014: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: * version 2 for more details (a copy is included in the LICENSE file that
017: * accompanied this code).
018: *
019: * You should have received a copy of the GNU General Public License version
020: * 2 along with this work; if not, write to the Free Software Foundation,
021: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
022: *
023: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
024: * CA 95054 USA or visit www.sun.com if you need additional information or
025: * have any questions.
026: *
027: * $Revision: 1.2 $
028: * $Date: 2008/02/28 20:17:26 $
029: * $State: Exp $
030: */
031:
032: package javax.media.j3d;
033:
034: import java.awt.GraphicsConfiguration;
035:
036: /**
037: * Native config template class. A singleton instance of the appropriate
038: * concrete subclass is created by a factory method using reflection.
039: */
040: abstract class NativeConfigTemplate3D {
041: // These definitions are used by both the X11 and Win32 subclasses
042: final static int RED_SIZE = 0;
043: final static int GREEN_SIZE = 1;
044: final static int BLUE_SIZE = 2;
045: final static int ALPHA_SIZE = 3;
046: final static int ACCUM_BUFFER = 4;
047: final static int DEPTH_SIZE = 5;
048: final static int DOUBLEBUFFER = 6;
049: final static int STEREO = 7;
050: final static int ANTIALIASING = 8;
051: final static int STENCIL_SIZE = 9;
052: final static int NUM_ITEMS = 10;
053:
054: private static final String x11ClassName = "javax.media.j3d.X11NativeConfigTemplate3D";
055: private static final String win32ClassName = "javax.media.j3d.Win32NativeConfigTemplate3D";
056:
057: // The singleton instance of this class
058: private static NativeConfigTemplate3D nativeConfigTemplate3D = null;
059:
060: protected NativeConfigTemplate3D() {
061: }
062:
063: // This method is called exactly once by the initialization method of
064: // the NativePipeline class
065: synchronized static void createNativeConfigTemplate3D() {
066: String className;
067: if (MasterControl.isWindows()) {
068: className = win32ClassName;
069: } else {
070: className = x11ClassName;
071: }
072:
073: final String templateClassName = className;
074: nativeConfigTemplate3D = (NativeConfigTemplate3D) java.security.AccessController
075: .doPrivileged(new java.security.PrivilegedAction() {
076: public Object run() {
077: try {
078: Class templateClass = Class
079: .forName(templateClassName);
080: return templateClass.newInstance();
081: } catch (Exception e) {
082: throw new RuntimeException(e);
083: }
084: }
085: });
086: }
087:
088: static NativeConfigTemplate3D getNativeConfigTemplate3D() {
089: return nativeConfigTemplate3D;
090: }
091:
092: /*
093: * Chooses the best FBConfig for Java 3D apps.
094: */
095: abstract GraphicsConfiguration getBestConfiguration(
096: GraphicsConfigTemplate3D template,
097: GraphicsConfiguration[] gc);
098:
099: /*
100: * Determine if a given GraphicsConfiguration object can be used
101: * by Java 3D.
102: */
103: abstract boolean isGraphicsConfigSupported(
104: GraphicsConfigTemplate3D template, GraphicsConfiguration gc);
105:
106: // Return whether stereo is available.
107: abstract boolean hasStereo(Canvas3D c3d);
108:
109: // Return the stencil of this canvas.
110: abstract int getStencilSize(Canvas3D c3d);
111:
112: // Return whether a double buffer is available.
113: abstract boolean hasDoubleBuffer(Canvas3D c3d);
114:
115: // Return whether scene antialiasing is available.
116: abstract boolean hasSceneAntialiasingAccum(Canvas3D c3d);
117:
118: // Return whether scene antialiasing is available.
119: abstract boolean hasSceneAntialiasingMultisample(Canvas3D c3d);
120:
121: // Ensure that the native libraries are loaded
122: static {
123: VirtualUniverse.loadLibraries();
124: }
125: }
|