OSDN Git Service

LwjglCanvas, added support for using config.
authorNathanSweet <nathan.sweet@gmail.com>
Thu, 10 Jan 2013 01:20:52 +0000 (02:20 +0100)
committerNathanSweet <nathan.sweet@gmail.com>
Thu, 10 Jan 2013 01:20:52 +0000 (02:20 +0100)
LwjglFrame, changed when JFrame is made displayable to prevent window from being shown before GL display is ready.

backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglCanvas.java
backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglFrame.java
backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglGraphics.java

index e50c6bb..eb1b784 100644 (file)
@@ -26,6 +26,7 @@ import com.badlogic.gdx.Input;
 import com.badlogic.gdx.Net;\r
 import com.badlogic.gdx.Preferences;\r
 import com.badlogic.gdx.backends.openal.OpenALAudio;\r
+import com.badlogic.gdx.graphics.GL10;\r
 import com.badlogic.gdx.utils.Clipboard;\r
 import com.badlogic.gdx.utils.GdxRuntimeException;\r
 \r
@@ -45,13 +46,13 @@ import org.lwjgl.opengl.Display;
  * call {@link #stop()} or a Swing application may deadlock on System.exit due to how LWJGL and/or Swing deal with shutdown hooks.\r
  * @author Nathan Sweet */\r
 public class LwjglCanvas implements Application {\r
-       final LwjglGraphics graphics;\r
+       LwjglGraphics graphics;\r
        OpenALAudio audio;\r
-       final LwjglFiles files;\r
-       final LwjglInput input;\r
-       final LwjglNet net;\r
-       final ApplicationListener listener;\r
-       final Canvas canvas;\r
+       LwjglFiles files;\r
+       LwjglInput input;\r
+       LwjglNet net;\r
+       ApplicationListener listener;\r
+       Canvas canvas;\r
        final List<Runnable> runnables = new ArrayList();\r
        final List<Runnable> executedRunnables = new ArrayList();\r
        boolean running = true;\r
@@ -59,6 +60,16 @@ public class LwjglCanvas implements Application {
        Cursor cursor;\r
 \r
        public LwjglCanvas (ApplicationListener listener, boolean useGL2) {\r
+               LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();\r
+               config.useGL20 = true;\r
+               initialize(listener, config);\r
+       }\r
+\r
+       public LwjglCanvas (ApplicationListener listener, LwjglApplicationConfiguration config) {\r
+               initialize(listener, config);\r
+       }\r
+\r
+       private void initialize (ApplicationListener listener, LwjglApplicationConfiguration config) {\r
                LwjglNativesLoader.load();\r
 \r
                canvas = new Canvas() {\r
@@ -66,11 +77,7 @@ public class LwjglCanvas implements Application {
 \r
                        public final void addNotify () {\r
                                super.addNotify();\r
-                               EventQueue.invokeLater(new Runnable() {\r
-                                       public void run () {\r
-                                               create();\r
-                                       }\r
-                               });\r
+                               create();\r
                        }\r
 \r
                        public final void removeNotify () {\r
@@ -84,7 +91,7 @@ public class LwjglCanvas implements Application {
                };\r
                canvas.setIgnoreRepaint(true);\r
 \r
-               graphics = new LwjglGraphics(canvas, useGL2) {\r
+               graphics = new LwjglGraphics(canvas, config) {\r
                        public void setTitle (String title) {\r
                                super.setTitle(title);\r
                                LwjglCanvas.this.setTitle(title);\r
@@ -102,7 +109,7 @@ public class LwjglCanvas implements Application {
                                return true;\r
                        }\r
                };\r
-               graphics.setVSync(true);\r
+               graphics.setVSync(config.vSyncEnabled);\r
                if (!LwjglApplicationConfiguration.disableAudio) audio = new OpenALAudio();\r
                files = new LwjglFiles();\r
                input = new LwjglInput();\r
index 0bbc803..a67a71f 100644 (file)
@@ -19,18 +19,32 @@ package com.badlogic.gdx.backends.lwjgl;
 import com.badlogic.gdx.ApplicationListener;\r
 \r
 import java.awt.Dimension;\r
+import java.awt.EventQueue;\r
 import java.awt.Point;\r
 \r
 import javax.swing.JFrame;\r
 \r
 /** Wraps an {@link LwjglCanvas} in a resizable {@link JFrame}. */\r
 public class LwjglFrame extends JFrame {\r
-       final LwjglCanvas lwjglCanvas;\r
+       LwjglCanvas lwjglCanvas;\r
 \r
        public LwjglFrame (ApplicationListener listener, String title, int width, int height, boolean useGL2) {\r
                super(title);\r
+               LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();\r
+               config.title = title;\r
+               config.width = width;\r
+               config.height = height;\r
+               config.useGL20 = useGL2;\r
+               construct(listener, config);\r
+       }\r
+\r
+       public LwjglFrame (ApplicationListener listener, LwjglApplicationConfiguration config) {\r
+               super(config.title);\r
+               construct(listener, config);\r
+       }\r
 \r
-               lwjglCanvas = new LwjglCanvas(listener, useGL2) {\r
+       private void construct (ApplicationListener listener, LwjglApplicationConfiguration config) {\r
+               lwjglCanvas = new LwjglCanvas(listener, config) {\r
                        protected void stopped () {\r
                                LwjglFrame.this.dispose();\r
                        }\r
@@ -59,7 +73,6 @@ public class LwjglFrame extends JFrame {
                                LwjglFrame.this.exception(t);\r
                        }\r
                };\r
-               getContentPane().add(lwjglCanvas.getCanvas());\r
 \r
                Runtime.getRuntime().addShutdownHook(new Thread() {\r
                        public void run () {\r
@@ -68,14 +81,22 @@ public class LwjglFrame extends JFrame {
                });\r
 \r
                setDefaultCloseOperation(EXIT_ON_CLOSE);\r
-               getContentPane().setPreferredSize(new Dimension(width, height));\r
+               getContentPane().setPreferredSize(new Dimension(config.width, config.height));\r
+\r
                initialize();\r
-               Dimension size = getSize();\r
-               if (size.width == 0 && size.height == 0) pack();\r
+               pack();\r
                Point location = getLocation();\r
                if (location.x == 0 && location.y == 0) setLocationRelativeTo(null);\r
-               setVisible(true); // Has to happen on OSX before display is created.\r
-               lwjglCanvas.getCanvas().requestFocus();\r
+               lwjglCanvas.getCanvas().setSize(getSize());\r
+\r
+               // Finish with invokeLater so any LwjglFrame super constructor has a chance to initialize.\r
+               EventQueue.invokeLater(new Runnable() {\r
+                       public void run () {\r
+                               addCanvas();\r
+                               setVisible(true);\r
+                               lwjglCanvas.getCanvas().requestFocus();\r
+                       }\r
+               });\r
        }\r
 \r
        protected void exception (Throwable ex) {\r
@@ -83,10 +104,15 @@ public class LwjglFrame extends JFrame {
                lwjglCanvas.stop();\r
        }\r
 \r
-       /** Called before the JFrame is shown. */\r
+       /** Called before the JFrame is made displayable. */\r
        protected void initialize () {\r
        }\r
 \r
+       /** Adds the canvas to the content pane. This triggers addNotify and starts the canvas' game loop. */\r
+       protected void addCanvas () {\r
+               getContentPane().add(lwjglCanvas.getCanvas());\r
+       }\r
+\r
        /** Called after {@link ApplicationListener} create and resize, but before the game loop iteration. */\r
        protected void start () {\r
        }\r
index 5f1bab8..706db4f 100644 (file)
@@ -73,8 +73,6 @@ public class LwjglGraphics implements Graphics {
 \r
        LwjglGraphics (Canvas canvas, LwjglApplicationConfiguration config) {\r
                this.config = config;\r
-               this.config.width = canvas.getWidth();\r
-               this.config.height = canvas.getHeight();\r
                this.canvas = canvas;\r
        }\r
 \r