## 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.5 or later
  - A mobile JavaVM with language 1.5 support, ie:
    - Dalvik API Level 7
    - JamVM
    with
    - Foundation Profile 1.1.2 (JSR 219)
    - 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}.
The implementor has to specialize All supported Regardless of the knowledge of the underly

### Revision History

- Early Draft Review, June 2009
- 2.0.0 Maintenance Release, February 2011