Jogamp
NewtVersionActivity: Remove 'gears' test; Version Info: Drop NativeWindow/Newt Versio...
[jogl.git] / src / jogl / classes / com / jogamp / opengl / JoglVersion.java
1 /**
2  * Copyright 2010 JogAmp Community. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are
5  * permitted provided that the following conditions are met:
6  * 
7  *    1. Redistributions of source code must retain the above copyright notice, this list of
8  *       conditions and the following disclaimer.
9  * 
10  *    2. Redistributions in binary form must reproduce the above copyright notice, this list
11  *       of conditions and the following disclaimer in the documentation and/or other materials
12  *       provided with the distribution.
13  * 
14  * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
15  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  * 
24  * The views and conclusions contained in the software and documentation are those of the
25  * authors and should not be interpreted as representing official policies, either expressed
26  * or implied, of JogAmp Community.
27  */
28  
29 package com.jogamp.opengl;
30
31 import com.jogamp.common.GlueGenVersion;
32 import javax.media.opengl.*;
33 import com.jogamp.common.os.Platform;
34 import com.jogamp.common.util.VersionUtil;
35 import com.jogamp.common.util.JogampVersion;
36 import com.jogamp.nativewindow.NativeWindowVersion;
37 import java.util.jar.Manifest;
38 import javax.media.nativewindow.AbstractGraphicsDevice;
39
40 public class JoglVersion extends JogampVersion {
41
42     protected static volatile JoglVersion jogampCommonVersionInfo;
43
44     protected JoglVersion(String packageName, Manifest mf) {
45         super(packageName, mf);
46     }
47
48     public static JoglVersion getInstance() {
49         if(null == jogampCommonVersionInfo) { // volatile: ok
50             synchronized(JoglVersion.class) {
51                 if( null == jogampCommonVersionInfo ) {
52                     final String packageName = "javax.media.opengl";
53                     final Manifest mf = VersionUtil.getManifest(JoglVersion.class.getClassLoader(), packageName);
54                     jogampCommonVersionInfo = new JoglVersion(packageName, mf);
55                 }
56             }
57         }
58         return jogampCommonVersionInfo;
59     }
60
61     public StringBuilder toString(GL gl, StringBuilder sb) {
62         sb = super.toString(sb).append(Platform.getNewline());
63         getGLInfo(gl, sb);
64         return sb;
65     }
66
67     public String toString(GL gl) {
68         return toString(gl, null).toString();
69     }
70
71     public static StringBuilder getGLInfo(GL gl, StringBuilder sb) {
72         AbstractGraphicsDevice device = gl.getContext().getGLDrawable().getNativeSurface()
73                                             .getGraphicsConfiguration().getNativeGraphicsConfiguration().getScreen().getDevice();
74         if(null==sb) {
75             sb = new StringBuilder();
76         }
77         GLContext ctx = gl.getContext();
78
79         sb.append(VersionUtil.SEPERATOR).append(Platform.getNewline());
80         sb.append(device.getClass().getSimpleName()).append("[type ")
81                 .append(device.getType()).append(", connection ").append(device.getConnection()).append("]: ")
82                 .append(GLProfile.glAvailabilityToString(device));
83         sb.append(Platform.getNewline());
84         sb.append("Swap Interval ").append(gl.getSwapInterval());
85         sb.append(Platform.getNewline());
86         sb.append("GL Profile    ").append(gl.getGLProfile());
87         sb.append(Platform.getNewline());
88         sb.append("CTX VERSION   ").append(gl.getContext().getGLVersion());
89         sb.append(Platform.getNewline());
90         sb.append("GL            ").append(gl);
91         sb.append(Platform.getNewline());
92         sb.append("GL_VENDOR     ").append(gl.glGetString(gl.GL_VENDOR));
93         sb.append(Platform.getNewline());
94         sb.append("GL_VERSION    ").append(gl.glGetString(gl.GL_VERSION));
95         sb.append(Platform.getNewline());
96         sb.append("GL_EXTENSIONS ");
97         sb.append(Platform.getNewline());
98         sb.append("              ").append(ctx.getGLExtensionsString());
99         sb.append(Platform.getNewline());
100         sb.append("GLX_EXTENSIONS ");
101         sb.append(Platform.getNewline());
102         sb.append("              ").append(ctx.getPlatformExtensionsString());
103         sb.append(Platform.getNewline());
104         sb.append("GLSL          ").append(gl.hasGLSL()).append(", shader-compiler: ").append(gl.isFunctionAvailable("glCompileShader"));
105         sb.append(Platform.getNewline());
106         sb.append(VersionUtil.SEPERATOR);
107
108         return sb;
109     }
110
111     public static void main(String args[]) {
112         System.err.println(VersionUtil.getPlatformInfo());
113         System.err.println(GlueGenVersion.getInstance());
114         // System.err.println(NativeWindowVersion.getInstance());
115         System.err.println(JoglVersion.getInstance());
116     }
117 }
118
http://JogAmp.org git info: FAQ, tutorial and man pages.