Julien Seinturier 835fbd7957 Jme3 vr (#828)
* Updated OpenVR implementation to 1.0.9

User can specify external OpenVR library to load with
openvr.library.path system property.
Usage: java -Dopenvr.library.name=my_path_to_library MyApp

Removed reference to OCCULUS VR and OpenVR from VRAppstate as this class
is generic and does not have to be linked to specific implementation.

VRMouseManager can be buggous using OSVR or Occulus VR. 

Refactored VR implementation packages in order to separate all available
implementation. Modifying or adding implementation should no more impact
other ones. 

Renamed some classes in order to be uniform

* Sample and VR mouse manager update

Adding sample for VR AppState

Added OSVRMouseManager in order to handle VRMouseManager for OSVR
environment

Added OcculusMouseManager in order to handle VRMouseManager for Oculus
environment

Changed OpenVRMouseManager reference within VRAppState and VREnvironment
into VRMouseManager

* Revert previous commit as jme3-examples does not handle java8 and lwjgl3

* Adding AWT component rendering within app state

Adding AWT component rendering capabilities for any JMonkeyEngine
renderer (works with LWJGL 3.1.x and compatible with other
implementations)

This implementation differs from the previous one as it's relies on
AppState (compatible with all JME application) and as it use only
produces framebuffer.

With this implementation, it is possible to use AWT component ad
rendering target and so to integrate JMonkey rendering within AWT /
Swing application. This capability was not available with LWJGL3 as the
version 3.1.x does not provide anymore AWT link.

* AWTComponentAppState update

Added Update within AWTComponentAppState and added getter and setter for
transfer mode within AWTFramePRocessor

* Removing Java 8 related stuff
2019-02-08 15:44:33 +01:00

131 lines
3.9 KiB
Java

/*
* Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme3.input;
import java.awt.Component;
import java.util.Objects;
import com.jme3.app.Application;
import com.jme3.input.Input;
import com.jme3.input.RawInputListener;
import com.jme3.system.AWTContext;
import com.jme3.system.AWTTaskExecutor;
/**
* The implementation of the {@link Input} dedicated to AWT {@link Component component}.
* <p>
* This class is based on the <a href="http://www.oracle.com/technetwork/java/javase/overview/javafx-overview-2158620.html">JavaFX</a> original code provided by Alexander Brui (see <a href="https://github.com/JavaSaBr/JME3-JFX">JME3-FX</a>)
* </p>
* @author Julien Seinturier - COMEX SA - <a href="http://www.seinturier.fr">http://www.seinturier.fr</a>
* @author Alexander Brui (JavaSaBr)
*/
public class AWTInput implements Input {
protected static final AWTTaskExecutor EXECUTOR = AWTTaskExecutor.getInstance();
/**
* The context.
*/
protected final AWTContext context;
/**
* The raw listener.
*/
protected RawInputListener listener;
/**
* The input node.
*/
protected Component component;
/**
* The {@link Application JMonkey application} that provide the context.
*/
protected Application application;
/**
* Initializes is it.
*/
protected boolean initialized;
public AWTInput(final AWTContext context) {
this.context = context;
}
public void bind(final Component component) {
this.component = component;
Objects.requireNonNull(this.component, "binded Component cannot be null");
}
public void unbind() {
this.component = null;
}
@Override
public void initialize() {
if (isInitialized()) return;
initializeImpl();
initialized = true;
}
protected void initializeImpl() {
}
@Override
public void update() {
if (!context.isRenderable()) return;
updateImpl();
}
protected void updateImpl() {
}
@Override
public void destroy() {
unbind();
}
@Override
public boolean isInitialized() {
return initialized;
}
@Override
public void setInputListener(RawInputListener listener) {
this.listener = listener;
}
@Override
public long getInputTimeNanos() {
return System.nanoTime();
}
}