## NativeWindow Protocol Specification Overview

### Preface

This specification, an optional set of packages, describing a protocol for a native windowing interface binding to Java(TM).
Currently specified native windowing systems are:

- EGL/OpenKODE Windowing System
- X11 Windowing System
- Microsoft Windows
- Apple MacOSX
- Java's AWT

However, any other native windowing system may be added to the implementation, using a generic string identifier and an optional specialisation of:

- {@link javax.media.nativewindow.AbstractGraphicsDevice AbstractGraphicsDevice},

  Shall return the new string identifier with {@link javax.media.nativewindow.AbstractGraphicsDevice#getType() getType()}

- {@link javax.media.nativewindow.AbstractGraphicsScreen AbstractGraphicsScreen}
- {@link javax.media.nativewindow.AbstractGraphicsConfiguration AbstractGraphicsConfiguration}

The implementor has to provide the following:

- The specialisation of the abstract class {@link javax.media.nativewindow.NativeWindowFactory NativeWindowFactory}

  shall be registered with {@link javax.media.nativewindow.NativeWindowFactory#registerFactory NativeWindowFactory.registerFactory(..)}.

- The specialisation of the abstract class {@link javax.media.nativewindow.GraphicsConfigurationFactory GraphicsConfigurationFactory}

  shall be registered with {@link javax.media.nativewindow.GraphicsConfigurationFactory#registerFactory GraphicsConfigurationFactory.registerFactory(..)}.

This protocol does not describe how to create native windows, but how to bind a native surface to an implementation of and window to an implementation of {@link javax.media.nativewindow.NativeSurface NativeSurface}.

{@link javax.media.nativewindow.NativeWindow NativeWindow} specializes the NativeSurface.

However, an implementation of this protocol (e.g. {@link com.jogamp.newt}) may support the creation.

### Dependencies

This binding has dependencies to the following:

- Either of the following Java implementations:
  - Java SE 1.6 or later
  - A mobile JavaVM with language 1.6 support, ie:
    - Android API Level 9 (Version 2.3)
    - JamVM
    with
    - Java 1.4 java.nio implementation

### Package Structure

The packages defined by this specification include:

- The javax.media.nativewindow package

  This package contains Java bindings for a native windowing system.

  Subsequent packages contain marker type classes, containing native characteristics of the windowing system.

  - The javax.media.nativewindow.awt package

    This sub package contains classes to cover the native characteristics of the AWT windowing system.

  - The javax.media.nativewindow.x11 package

    This sub package contains classes to cover the native characteristics of the X11 windowing system.

  - The javax.media.nativewindow.windows package

    This sub package contains classes to cover the native characteristics of the Windows windowing system.

  - The javax.media.nativewindow.macosx package

    This sub package contains classes to cover the native characteristics of the MacOSX windowing system.

  - The javax.media.nativewindow.egl package

    This sub package contains classes to cover the native characteristics of the EGL/OpenKODE windowing system.

### Factory Model

Running on a platform with a supported windowing system, the factory model shall be used to instantiate a native window, see {@link javax.media.nativewindow.NativeWindowFactory NativeWindowFactory}.

### Revision History

- Early Draft Review, June 2009
- 2.0.0 Maintenance Release, February 2011
- 2.0.2 Major Release, July 18th 2013