public JAWT_PlatformInfo platformInfo(final JAWT jawt) { return newPlatformInfo(jawt, platformInfo0(getBuffer())); } private native ByteBuffer platformInfo0(Buffer jthis0); private static java.lang.reflect.Method platformInfoFactoryMethod; private static JAWT_PlatformInfo newPlatformInfo(JAWT jawt, ByteBuffer buf) { if (platformInfoFactoryMethod == null) { try { Class<?> factoryClass; if (Platform.OS_TYPE == Platform.OSType.WINDOWS) { factoryClass = Class.forName("jogamp.nativewindow.jawt.windows.JAWT_Win32DrawingSurfaceInfo"); } else if (Platform.OS_TYPE == Platform.OSType.MACOS) { if( 0 != ( jawt.getCachedVersion() & JAWTUtil.JAWT_MACOSX_USE_CALAYER ) ) { factoryClass = Class.forName("jogamp.nativewindow.jawt.macosx.JAWT_SurfaceLayers"); } else { factoryClass = Class.forName("jogamp.nativewindow.jawt.macosx.JAWT_MacOSXDrawingSurfaceInfo"); } } else { // Assume Linux, Solaris, etc. Should probably test for these explicitly. factoryClass = Class.forName("jogamp.nativewindow.jawt.x11.JAWT_X11DrawingSurfaceInfo"); } platformInfoFactoryMethod = factoryClass.getMethod("create", new Class[] { ByteBuffer.class }); } catch (Exception e) { throw new RuntimeException(e); } } try { return (JAWT_PlatformInfo) platformInfoFactoryMethod.invoke(null, new Object[] { buf }); } catch (Exception e) { throw new RuntimeException(e); } }