Package org.lwjgl.test

Source Code of org.lwjgl.test.WindowCreationTest

/*
* Copyright (c) 2002-2008 LWJGL Project
* 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 'LWJGL' 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 org.lwjgl.test;

import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;

import static org.lwjgl.opengl.GL11.*;

/**
* Small class for testing that the Window is creatable
* If this class can't run, LWJGL wont work!
*
* @author Brian Matzon <brian@matzon.dk>
*/
public class WindowCreationTest {

  /** Locatable modes */
  private DisplayMode[]  located_modes;

  /** Fixed selectable modes */
  private DisplayMode[]  fixed_modes = new DisplayMode[10];


  /** Window position x */
  private int            window_x;

  /** Window position y */
  private int            window_y;

  /** Color being cleared to */
  private float          color        = 0f;

  /** Direction moving clearing color */
  private int            direction    = 1;

  /** Whether we're running */
  private boolean        running;

  /** Whether we're in fullscreen mode */
  private boolean        fullscreen;

  /**
   * Initializes the test
   * @return true if initialization was successfull
   */
  public boolean initialize() {
    try {
      // get available modes, and print out
      located_modes = Display.getAvailableDisplayModes();
      System.out.println("Found " + located_modes.length + " display modes");

      // get 640x480, 800x600, 1024x768 modes
      findFixedModes();

      // create default windowed display 640*480 @ 100, 100
      setDefaultDisplayMode();

      window_x = window_y = 100;
      Display.setLocation(window_x, window_y);

      Display.create();
      return true;
    } catch (LWJGLException le) {
      le.printStackTrace();
    }
    return false;
  }

  /** Locate fixed modes */
  private void findFixedModes() {
    // get 640*480 modes
    fixed_modes[0] = getDisplayMode(640, 480, 16, -1);
    fixed_modes[1] = getDisplayMode(640, 480, 24, -1);
    fixed_modes[2] = getDisplayMode(640, 480, 32, -1);

    // get 800*600*16*60
    fixed_modes[3] = getDisplayMode(800, 600, 16, -1);
    fixed_modes[4] = getDisplayMode(800, 600, 24, -1);
    fixed_modes[5] = getDisplayMode(800, 600, 32, -1);

    // get 1024*768*16*60
    fixed_modes[6] = getDisplayMode(1024, 768, 16, -1);
    fixed_modes[7] = getDisplayMode(1024, 768, 24, -1);
    fixed_modes[8] = getDisplayMode(1024, 768, 32, -1);
  }

  /**
   * Executes the test
   */
  private void execute() {
    running = true;

    // wait for user to close window
    while (!Display.isCloseRequested() && running) {

      // handle input accordingly
      handleInput();

      // render something
      render();

      // update display as needed
      Display.update();

      // no need to run at full speed
      try {
        Thread.sleep(100);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  /**
   * Destroys any resources used while running test
   */
  public void destroy() {
    // nuke window and get out
    Display.destroy();
  }

  /**
   * Handles the input
   */
  private void handleInput() {
    while (Keyboard.next()) {

      // we only want key down events
      if (!Keyboard.getEventKeyState()) {
        continue;
      }

      // check for exit
      if (Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) {
        running = false;
      }

      // check for listing of modes
      if (Keyboard.getEventKey() == Keyboard.KEY_L) {
        for(int i=0;i<fixed_modes.length; i++) {
          System.out.println("[" + i + "]: " + fixed_modes[i]);
        }
      }

      // check for display mode
      // ================================
      if (Keyboard.getEventKey() == Keyboard.KEY_0) { setMode(0); }
      if (Keyboard.getEventKey() == Keyboard.KEY_1) { setMode(1); }
      if (Keyboard.getEventKey() == Keyboard.KEY_2) {  setMode(2); }
      if (Keyboard.getEventKey() == Keyboard.KEY_3) {  setMode(3); }
      if (Keyboard.getEventKey() == Keyboard.KEY_4) {  setMode(4); }
      if (Keyboard.getEventKey() == Keyboard.KEY_5) {  setMode(5); }
      if (Keyboard.getEventKey() == Keyboard.KEY_6) {  setMode(6); }
      if (Keyboard.getEventKey() == Keyboard.KEY_7) {  setMode(7); }
      if (Keyboard.getEventKey() == Keyboard.KEY_8) {  setMode(8); }
      // --------------------------------

      // check for window move
      // ================================
      if (Keyboard.getEventKey() == Keyboard.KEY_LEFT) {
        if (!Display.isFullscreen()) {
          Display.setLocation(window_x -= 10, window_y);
        }
      }

      if (Keyboard.getEventKey() == Keyboard.KEY_RIGHT) {
        if (!Display.isFullscreen()) {
          Display.setLocation(window_x += 10, window_y);
        }
      }

      if (Keyboard.getEventKey() == Keyboard.KEY_UP) {
        if (!Display.isFullscreen()) {
          Display.setLocation(window_x, window_y -= 10);
        }
      }

      if (Keyboard.getEventKey() == Keyboard.KEY_DOWN) {
        if (!Display.isFullscreen()) {
          Display.setLocation(window_x, window_y += 10);
        }
      }
      // --------------------------------

      // check for fullscreen
      if (Keyboard.getEventKey() == Keyboard.KEY_F) {
        try {
          if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ||
              Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) {
            System.out.println("Performing Display.destroy()/create() cycle");
            DisplayMode saved_mode = Display.getDisplayMode();
            Display.destroy();
            Display.setDisplayMode(saved_mode);
            Display.setFullscreen(fullscreen = !fullscreen);
            Display.create();
          } else
            Display.setFullscreen(fullscreen = !fullscreen);
        } catch (LWJGLException lwjgle) {
          lwjgle.printStackTrace();
        }
      }
    }
  }

  private void setMode(int mode) {
    if(fixed_modes[mode] == null) {
      System.out.println("Unable to set mode. Not valid: " + mode);
      return;
    }

    try {
      Display.setDisplayMode(fixed_modes[mode]);
    } catch (LWJGLException le) {
      le.printStackTrace();
      System.out.println("Exception while setting mode: " + fixed_modes[mode]);
    }
  }

  /**
   *
   */
  private void render() {
    glClearColor(color, color, color, 1f);
    glClear(GL_COLOR_BUFFER_BIT);

    color += direction * .05f;

    if (color > 1f) {
      color = 1f;
      direction = -1 * direction;
    } else if (color < 0f) {
      direction = -1 * direction;
      color = 0f;
    }
  }

  /**
   * Main entry point
   *
   * @param args ignored params to app
   */
  public static void main(String[] args) throws LWJGLException {

    System.out.println("The following keys are available:\n" +
                       "ESCAPE:\t\tExit test\n" +
                       "ARROW Keys:\tMove window when in non-fullscreen mode\n" +
                       "L:\t\tList selectable display modes\n" +
                       "0-8:\t\tSelection of display modes\n" +
                       "F:\t\tToggle fullscreen\n" +
                       "SHIFT-F:\tToggle fullscreen with Display.destroy()/create() cycle");

    WindowCreationTest wct = new WindowCreationTest();
    if (wct.initialize()) {
      wct.execute();
      wct.destroy();
    }
    System.exit(0);
  }

  /**
   * Sets the display mode for fullscreen mode
   */
  protected boolean setDefaultDisplayMode() {
    try {
      // get modes
      DisplayMode[] dm = org.lwjgl.util.Display.getAvailableDisplayModes(640, 480, -1, -1, -1, -1, -1, -1);

      org.lwjgl.util.Display.setDisplayMode(dm, new String[] { "width=" + 640, "height=" + 480, "freq=" + 60,
          "bpp=" + org.lwjgl.opengl.Display.getDisplayMode().getBitsPerPixel()});
      return true;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return false;
  }

  /**
   * Gets a specific display mode
   */
  private DisplayMode getDisplayMode(int width, int height, int bpp, int freq) {
    DisplayMode[] dm = null;
    try {
      dm = org.lwjgl.util.Display.getAvailableDisplayModes(width, height, width, height, bpp, bpp, freq, freq);
      if(dm == null || dm.length == 0) {
        System.out.println("Problem retrieving mode with " + width + "x" + height + "x" + bpp + "@" + freq);
      }
    } catch (LWJGLException le) {
      le.printStackTrace();
      System.out.println("Problem retrieving mode with " + width + "x" + height + "x" + bpp + "@" + freq);
    }
    return (dm != null && dm.length != 0) ? dm[0] : null;
  }
}
TOP

Related Classes of org.lwjgl.test.WindowCreationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.