• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2009-2010 jMonkeyEngine
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17  *   may be used to endorse or promote products derived from this software
18  *   without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 package com.jme3.system;
34 
35 import com.jme3.input.JoyInput;
36 import com.jme3.input.KeyInput;
37 import com.jme3.input.MouseInput;
38 import com.jme3.input.TouchInput;
39 import com.jme3.renderer.Renderer;
40 
41 /**
42  * Represents a rendering context within the engine.
43  */
44 public interface JmeContext {
45 
46     /**
47      * The type of context.
48      */
49     public enum Type {
50         /**
51          * A display can represent a windowed or a fullscreen-exclusive display.
52          * If windowed, the graphics are rendered to a new on-screen surface
53          * enclosed in a window defined by the operating system. Implementations
54          * are encouraged to not use AWT or Swing to create the OpenGL display
55          * but rather use native operating system functions to set up a native
56          * display with the windowing system.
57          */
58         Display,
59 
60         /**
61          * A canvas type context makes a rendering surface available as an
62          * AWT {@link java.awt.Canvas} object that can be embedded in a Swing/AWT
63          * frame. To retrieve the Canvas object, you should cast the context
64          * to {@link JmeCanvasContext}.
65          */
66         Canvas,
67 
68         /**
69          * An <code>OffscreenSurface</code> is a context that is not visible
70          * by the user. The application can use the offscreen surface to do
71          * General Purpose GPU computations or render a scene into a buffer
72          * in order to save it as a screenshot, video or send through a network.
73          */
74         OffscreenSurface,
75 
76         /**
77          * A <code>Headless</code> context is not visible and does not have
78          * any drawable surface. The implementation does not provide any
79          * display, input, or sound support.
80          */
81         Headless;
82     }
83 
84     /**
85      * @return The type of the context.
86      */
getType()87     public Type getType();
88 
89     /**
90      * @param settings the display settings to use for the created context. If
91      * the context has already been created, then <code>restart()</code> must be called
92      * for the changes to be applied.
93      */
setSettings(AppSettings settings)94     public void setSettings(AppSettings settings);
95 
96     /**
97      * Sets the listener that will receive events relating to context
98      * creation, update, and destroy.
99      */
setSystemListener(SystemListener listener)100     public void setSystemListener(SystemListener listener);
101 
102     /**
103      * @return The current display settings. Note that they might be
104      * different from the ones set with setDisplaySettings() if the context
105      * was restarted or the settings changed internally.
106      */
getSettings()107     public AppSettings getSettings();
108 
109     /**
110      * @return The renderer for this context, or null if not created yet.
111      */
getRenderer()112     public Renderer getRenderer();
113 
114     /**
115      * @return Mouse input implementation. May be null if not available.
116      */
getMouseInput()117     public MouseInput getMouseInput();
118 
119     /**
120      * @return Keyboard input implementation. May be null if not available.
121      */
getKeyInput()122     public KeyInput getKeyInput();
123 
124     /**
125      * @return Joystick input implementation. May be null if not available.
126      */
getJoyInput()127     public JoyInput getJoyInput();
128 
129     /**
130      * @return Touch device input implementation. May be null if not available.
131      */
getTouchInput()132     public TouchInput getTouchInput();
133 
134     /**
135      * @return The timer for this context, or null if not created yet.
136      */
getTimer()137     public Timer getTimer();
138 
139     /**
140      * Sets the title of the display (if available). This does nothing
141      * for fullscreen, headless, or canvas contexts.
142      * @param title The new title of the display.
143      */
setTitle(String title)144     public void setTitle(String title);
145 
146     /**
147      * @return True if the context has been created but not yet destroyed.
148      */
isCreated()149     public boolean isCreated();
150 
151     /**
152      * @return True if the context contains a valid render surface,
153      * if any of the rendering methods in {@link Renderer} are called
154      * while this is <code>false</code>, then the result is undefined.
155      */
isRenderable()156     public boolean isRenderable();
157 
158     /**
159      * @param enabled If enabled, the context will automatically flush
160      * frames to the video card (swap buffers) after an update cycle.
161      */
setAutoFlushFrames(boolean enabled)162     public void setAutoFlushFrames(boolean enabled);
163 
164     /**
165      * Creates the context and makes it active.
166      *
167      * @param waitFor If true, will wait until context has initialized.
168      */
create(boolean waitFor)169     public void create(boolean waitFor);
170 
171     /**
172      * Destroys and then re-creates the context. This should be called after
173      * the display settings have been changed.
174      */
restart()175     public void restart();
176 
177     /**
178      * Destroys the context completely, making it inactive.
179      *
180      * @param waitFor If true, will wait until the context is destroyed fully.
181      */
destroy(boolean waitFor)182     public void destroy(boolean waitFor);
183 
184 }
185