parent
ec64ad21fc
commit
eee9ed14dc
@ -0,0 +1,299 @@ |
|||||||
|
//package junk;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import static org.lwjgl.opengl.GL11.*;
|
||||||
|
//
|
||||||
|
//import java.nio.ByteBuffer;
|
||||||
|
//
|
||||||
|
//import mightypork.gamecore.backend.lwjgl.AwtScreenshot;
|
||||||
|
//import mightypork.gamecore.core.modules.AppAccess;
|
||||||
|
//import mightypork.gamecore.core.modules.AppModule;
|
||||||
|
//import mightypork.gamecore.render.events.DisplayReadyEvent;
|
||||||
|
//import mightypork.gamecore.render.events.ViewportChangeEvent;
|
||||||
|
//import mightypork.utils.logging.Log;
|
||||||
|
//import mightypork.utils.math.constraints.rect.Rect;
|
||||||
|
//import mightypork.utils.math.constraints.rect.RectBound;
|
||||||
|
//import mightypork.utils.math.constraints.vect.Vect;
|
||||||
|
//import mightypork.utils.math.timing.FpsMeter;
|
||||||
|
//
|
||||||
|
//import org.lwjgl.BufferUtils;
|
||||||
|
//import org.lwjgl.LWJGLException;
|
||||||
|
//import org.lwjgl.opengl.Display;
|
||||||
|
//import org.lwjgl.opengl.DisplayMode;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * Display system
|
||||||
|
// *
|
||||||
|
// * @author Ondřej Hruška (MightyPork)
|
||||||
|
// */
|
||||||
|
//@Deprecated
|
||||||
|
//public class DisplaySystem extends AppModule implements RectBound {
|
||||||
|
//
|
||||||
|
// private DisplayMode windowDisplayMode;
|
||||||
|
// private int targetFps;
|
||||||
|
// private FpsMeter fpsMeter;
|
||||||
|
// private boolean fullscreenSwitchRequested;
|
||||||
|
//
|
||||||
|
// /** Current screen size */
|
||||||
|
// private static final Vect screenSize = new Vect() {
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public double y()
|
||||||
|
// {
|
||||||
|
// return Display.getHeight();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public double x()
|
||||||
|
// {
|
||||||
|
// return Display.getWidth();
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// private static final Rect rect = Rect.make(screenSize);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @param app app access
|
||||||
|
// */
|
||||||
|
// public DisplaySystem(AppAccess app) {
|
||||||
|
// super(app);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// protected void deinit()
|
||||||
|
// {
|
||||||
|
// Display.destroy();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Set target fps (for syncing in endFrame() call).<br>
|
||||||
|
// * With vsync enabled, the target fps may not be met.
|
||||||
|
// *
|
||||||
|
// * @param fps requested fps
|
||||||
|
// */
|
||||||
|
// public void setTargetFps(int fps)
|
||||||
|
// {
|
||||||
|
// this.targetFps = fps;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Create a main window
|
||||||
|
// *
|
||||||
|
// * @param width requested width
|
||||||
|
// * @param height requested height
|
||||||
|
// * @param resizable is resizable by the user
|
||||||
|
// * @param fullscreen is in fullscreen
|
||||||
|
// * @param title window title
|
||||||
|
// */
|
||||||
|
// public void createMainWindow(int width, int height, boolean resizable, boolean fullscreen, String title)
|
||||||
|
// {
|
||||||
|
// try {
|
||||||
|
// Display.setDisplayMode(windowDisplayMode = new DisplayMode(width, height));
|
||||||
|
// Display.setResizable(resizable);
|
||||||
|
// Display.setVSyncEnabled(true);
|
||||||
|
// Display.setTitle(title);
|
||||||
|
// Display.create();
|
||||||
|
//
|
||||||
|
// fpsMeter = new FpsMeter();
|
||||||
|
//
|
||||||
|
// if (fullscreen) {
|
||||||
|
// switchFullscreen();
|
||||||
|
// Display.update();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// getEventBus().send(new DisplayReadyEvent());
|
||||||
|
//
|
||||||
|
// } catch (final LWJGLException e) {
|
||||||
|
// throw new RuntimeException("Could not initialize screen", e);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Toggle FS if possible
|
||||||
|
// */
|
||||||
|
// public void switchFullscreen()
|
||||||
|
// {
|
||||||
|
// fullscreenSwitchRequested = true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// private void doSwitchFullscreen()
|
||||||
|
// {
|
||||||
|
// try {
|
||||||
|
//
|
||||||
|
// if (!Display.isFullscreen()) {
|
||||||
|
// Log.f3("Entering fullscreen.");
|
||||||
|
// // save window resize
|
||||||
|
// windowDisplayMode = new DisplayMode(Display.getWidth(), Display.getHeight());
|
||||||
|
//
|
||||||
|
// Display.setDisplayMode(Display.getDesktopDisplayMode());
|
||||||
|
// Display.setFullscreen(true);
|
||||||
|
// Display.update();
|
||||||
|
// } else {
|
||||||
|
// Log.f3("Leaving fullscreen.");
|
||||||
|
// Display.setDisplayMode(windowDisplayMode);
|
||||||
|
// Display.update();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// getEventBus().send(new ViewportChangeEvent(getSize()));
|
||||||
|
//
|
||||||
|
// } catch (final Throwable t) {
|
||||||
|
// Log.e("Failed to toggle fullscreen mode.", t);
|
||||||
|
// try {
|
||||||
|
// Display.setDisplayMode(windowDisplayMode);
|
||||||
|
// Display.update();
|
||||||
|
// } catch (final Throwable t1) {
|
||||||
|
// throw new RuntimeException("Failed to revert failed fullscreen toggle.", t1);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Take screenshot (expensive processing is done on-demand when screenshot
|
||||||
|
// * is processed).
|
||||||
|
// *
|
||||||
|
// * @return screenshot object
|
||||||
|
// */
|
||||||
|
// public static AwtScreenshot prepareScreenshot()
|
||||||
|
// {
|
||||||
|
// glReadBuffer(GL_FRONT);
|
||||||
|
// final int width = Display.getWidth();
|
||||||
|
// final int height = Display.getHeight();
|
||||||
|
// final int bpp = 4;
|
||||||
|
// final ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * bpp);
|
||||||
|
// glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
|
||||||
|
//
|
||||||
|
// final AwtScreenshot sc = new AwtScreenshot(width, height, bpp, buffer);
|
||||||
|
//
|
||||||
|
// return sc;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @return true if close was requested (i.e. click on cross)
|
||||||
|
// */
|
||||||
|
// public static boolean isCloseRequested()
|
||||||
|
// {
|
||||||
|
// return Display.isCloseRequested();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Get fullscreen state
|
||||||
|
// *
|
||||||
|
// * @return is fullscreen
|
||||||
|
// */
|
||||||
|
// public static boolean isFullscreen()
|
||||||
|
// {
|
||||||
|
// return Display.isFullscreen();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Get screen size. This Vect is final and views at it can safely be made.
|
||||||
|
// *
|
||||||
|
// * @return size
|
||||||
|
// */
|
||||||
|
// public static Vect getSize()
|
||||||
|
// {
|
||||||
|
// return screenSize;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Get screen rect. Static version of getRect().
|
||||||
|
// *
|
||||||
|
// * @return size
|
||||||
|
// */
|
||||||
|
// public static Rect getBounds()
|
||||||
|
// {
|
||||||
|
// return rect;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @return screen width
|
||||||
|
// */
|
||||||
|
// public static int getWidth()
|
||||||
|
// {
|
||||||
|
// return screenSize.xi();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @return screen height
|
||||||
|
// */
|
||||||
|
// public static int getHeight()
|
||||||
|
// {
|
||||||
|
// return screenSize.yi();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Start a OpenGL frame
|
||||||
|
// */
|
||||||
|
// public void beginFrame()
|
||||||
|
// {
|
||||||
|
// // handle resize
|
||||||
|
// if (Display.wasResized()) {
|
||||||
|
// getEventBus().send(new ViewportChangeEvent(getSize()));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (fullscreenSwitchRequested) {
|
||||||
|
// fullscreenSwitchRequested = false;
|
||||||
|
// doSwitchFullscreen();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// glLoadIdentity();
|
||||||
|
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
// fpsMeter.frame();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * End an OpenGL frame, flip buffers, sync to fps.
|
||||||
|
// */
|
||||||
|
// public void endFrame()
|
||||||
|
// {
|
||||||
|
// Display.update(false); // don't poll input devices
|
||||||
|
// Display.sync(targetFps);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Get screen rect. This Rect is final and views at it can safely be made.
|
||||||
|
// */
|
||||||
|
// @Override
|
||||||
|
// public Rect getRect()
|
||||||
|
// {
|
||||||
|
// return getBounds();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @return current FPS
|
||||||
|
// */
|
||||||
|
// public long getFps()
|
||||||
|
// {
|
||||||
|
// return fpsMeter.getFPS();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Get screen center. This vect is final and views at it can safely be made.
|
||||||
|
// *
|
||||||
|
// * @return screen center.
|
||||||
|
// */
|
||||||
|
// public static Vect getCenter()
|
||||||
|
// {
|
||||||
|
// return rect.center();
|
||||||
|
// }
|
||||||
|
//}
|
@ -0,0 +1,542 @@ |
|||||||
|
//package junk;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import static org.lwjgl.opengl.GL11.*;
|
||||||
|
//
|
||||||
|
//import java.io.IOException;
|
||||||
|
//
|
||||||
|
//import mightypork.gamecore.resources.textures.FilterMode;
|
||||||
|
//import mightypork.gamecore.resources.textures.ITexture;
|
||||||
|
//import mightypork.gamecore.resources.textures.TxQuad;
|
||||||
|
//import mightypork.utils.files.FileUtils;
|
||||||
|
//import mightypork.utils.logging.Log;
|
||||||
|
//import mightypork.utils.math.color.Color;
|
||||||
|
//import mightypork.utils.math.color.pal.RGB;
|
||||||
|
//import mightypork.utils.math.constraints.rect.Rect;
|
||||||
|
//import mightypork.utils.math.constraints.rect.caching.RectDigest;
|
||||||
|
//import mightypork.utils.math.constraints.vect.Vect;
|
||||||
|
//import mightypork.utils.math.constraints.vect.VectConst;
|
||||||
|
//
|
||||||
|
//import org.lwjgl.opengl.GL11;
|
||||||
|
//import org.newdawn.slick.opengl.Texture;
|
||||||
|
//import org.newdawn.slick.opengl.TextureLoader;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * Render utilities
|
||||||
|
// *
|
||||||
|
// * @author Ondřej Hruška (MightyPork)
|
||||||
|
// */
|
||||||
|
//@Deprecated
|
||||||
|
//public class Render {
|
||||||
|
//
|
||||||
|
// public static final VectConst AXIS_X = Vect.make(1, 0, 0);
|
||||||
|
// public static final VectConst AXIS_Y = Vect.make(0, 1, 0);
|
||||||
|
// public static final VectConst AXIS_Z = Vect.make(0, 0, 1);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Bind GL color
|
||||||
|
// *
|
||||||
|
// * @param color Color color
|
||||||
|
// */
|
||||||
|
// public static void setColor(Color color)
|
||||||
|
// {
|
||||||
|
// if (color != null) glColor4d(color.r(), color.g(), color.b(), color.a());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Bind GL color
|
||||||
|
// *
|
||||||
|
// * @param color Color color
|
||||||
|
// * @param alpha alpha multiplier
|
||||||
|
// */
|
||||||
|
// public static void setColor(Color color, double alpha)
|
||||||
|
// {
|
||||||
|
// if (color != null) glColor4d(color.r(), color.g(), color.b(), color.a() * alpha);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Translate
|
||||||
|
// *
|
||||||
|
// * @param x
|
||||||
|
// * @param y
|
||||||
|
// */
|
||||||
|
// public static void translate(double x, double y)
|
||||||
|
// {
|
||||||
|
// glTranslated(x, y, 0);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Translate
|
||||||
|
// *
|
||||||
|
// * @param x
|
||||||
|
// * @param y
|
||||||
|
// * @param z
|
||||||
|
// */
|
||||||
|
// public static void translate(double x, double y, double z)
|
||||||
|
// {
|
||||||
|
// glTranslated(x, y, z);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Translate with coord
|
||||||
|
// *
|
||||||
|
// * @param coord coord
|
||||||
|
// */
|
||||||
|
// public static void translate(Vect coord)
|
||||||
|
// {
|
||||||
|
// glTranslated(coord.x(), coord.y(), coord.z());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Translate with coord, discard Z
|
||||||
|
// *
|
||||||
|
// * @param coord coord
|
||||||
|
// */
|
||||||
|
// public static void translateXY(Vect coord)
|
||||||
|
// {
|
||||||
|
// glTranslated(coord.x(), coord.y(), 0);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Scale
|
||||||
|
// *
|
||||||
|
// * @param x
|
||||||
|
// * @param y
|
||||||
|
// */
|
||||||
|
// public static void scale(double x, double y)
|
||||||
|
// {
|
||||||
|
// glScaled(x, y, 0);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Scale
|
||||||
|
// *
|
||||||
|
// * @param x
|
||||||
|
// * @param y
|
||||||
|
// * @param z
|
||||||
|
// */
|
||||||
|
// public static void scale(double x, double y, double z)
|
||||||
|
// {
|
||||||
|
// glScaled(x, y, z);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Scale
|
||||||
|
// *
|
||||||
|
// * @param factor vector of scaling factors
|
||||||
|
// */
|
||||||
|
// public static void scale(Vect factor)
|
||||||
|
// {
|
||||||
|
// glScaled(factor.x(), factor.y(), factor.z());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Scale by X factor
|
||||||
|
// *
|
||||||
|
// * @param factor scaling factor
|
||||||
|
// */
|
||||||
|
// public static void scaleXY(double factor)
|
||||||
|
// {
|
||||||
|
// glScaled(factor, factor, 1);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Scale by X factor
|
||||||
|
// *
|
||||||
|
// * @param factor scaling factor
|
||||||
|
// */
|
||||||
|
// public static void scaleX(double factor)
|
||||||
|
// {
|
||||||
|
// glScaled(factor, 1, 1);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Scale by Y factor
|
||||||
|
// *
|
||||||
|
// * @param factor scaling factor
|
||||||
|
// */
|
||||||
|
// public static void scaleY(double factor)
|
||||||
|
// {
|
||||||
|
// glScaled(1, factor, 1);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Scale by Z factor
|
||||||
|
// *
|
||||||
|
// * @param factor scaling factor
|
||||||
|
// */
|
||||||
|
// public static void scaleZ(double factor)
|
||||||
|
// {
|
||||||
|
// glScaled(1, 1, factor);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Rotate around X axis
|
||||||
|
// *
|
||||||
|
// * @param angle deg
|
||||||
|
// */
|
||||||
|
// public static void rotateX(double angle)
|
||||||
|
// {
|
||||||
|
// rotate(angle, AXIS_X);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Rotate around Y axis
|
||||||
|
// *
|
||||||
|
// * @param angle deg
|
||||||
|
// */
|
||||||
|
// public static void rotateY(double angle)
|
||||||
|
// {
|
||||||
|
// rotate(angle, AXIS_Y);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Rotate around Z axis
|
||||||
|
// *
|
||||||
|
// * @param angle deg
|
||||||
|
// */
|
||||||
|
// public static void rotateZ(double angle)
|
||||||
|
// {
|
||||||
|
// rotate(angle, AXIS_Z);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Rotate
|
||||||
|
// *
|
||||||
|
// * @param angle rotate angle
|
||||||
|
// * @param axis rotation axis
|
||||||
|
// */
|
||||||
|
// public static void rotate(double angle, Vect axis)
|
||||||
|
// {
|
||||||
|
// final Vect vec = axis.norm(1);
|
||||||
|
// glRotated(angle, vec.x(), vec.y(), vec.z());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private static int pushed = 0;
|
||||||
|
// /** Can be used to avoid texture binding and glBegin/glEnd in textured quads */
|
||||||
|
// public static boolean batchTexturedQuadMode;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Store GL state
|
||||||
|
// */
|
||||||
|
// public static void pushState()
|
||||||
|
// {
|
||||||
|
// pushed++;
|
||||||
|
//
|
||||||
|
// if (pushed >= 100) {
|
||||||
|
// Log.w("Suspicious number of state pushes: " + pushed);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
|
||||||
|
// GL11.glPushClientAttrib(GL11.GL_ALL_CLIENT_ATTRIB_BITS);
|
||||||
|
// GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||||
|
// GL11.glPushMatrix();
|
||||||
|
// GL11.glMatrixMode(GL11.GL_PROJECTION);
|
||||||
|
// GL11.glPushMatrix();
|
||||||
|
// GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Restore Gl state
|
||||||
|
// */
|
||||||
|
// public static void popState()
|
||||||
|
// {
|
||||||
|
// if (pushed == 0) {
|
||||||
|
// Log.w("Pop without push.");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// pushed--;
|
||||||
|
//
|
||||||
|
// GL11.glMatrixMode(GL11.GL_PROJECTION);
|
||||||
|
// GL11.glPopMatrix();
|
||||||
|
// GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||||
|
// GL11.glPopMatrix();
|
||||||
|
// GL11.glPopClientAttrib();
|
||||||
|
// GL11.glPopAttrib();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Store matrix
|
||||||
|
// */
|
||||||
|
// public static void pushMatrix()
|
||||||
|
// {
|
||||||
|
// GL11.glPushMatrix();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Restore Gl state
|
||||||
|
// */
|
||||||
|
// public static void popMatrix()
|
||||||
|
// {
|
||||||
|
// GL11.glPopMatrix();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Load texture
|
||||||
|
// *
|
||||||
|
// * @param resourcePath
|
||||||
|
// * @param filtering filtering mode to use while loading.
|
||||||
|
// * @return the loaded texture
|
||||||
|
// */
|
||||||
|
// public synchronized static Texture loadSlickTexture(String resourcePath, FilterMode filtering)
|
||||||
|
// {
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
//
|
||||||
|
// final String ext = FileUtils.getExtension(resourcePath).toUpperCase();
|
||||||
|
//
|
||||||
|
// final Texture texture = TextureLoader.getTexture(ext, FileUtils.getResource(resourcePath), false, filtering.num);
|
||||||
|
//
|
||||||
|
// if (texture == null) {
|
||||||
|
// Log.w("Texture " + resourcePath + " could not be loaded.");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return texture;
|
||||||
|
//
|
||||||
|
// } catch (final IOException e) {
|
||||||
|
// Log.e("Loading of texture " + resourcePath + " failed.", e);
|
||||||
|
// throw new RuntimeException("Could not load texture " + resourcePath + ".", e);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Render quad 2D
|
||||||
|
// *
|
||||||
|
// * @param rect rectangle
|
||||||
|
// * @param color draw color
|
||||||
|
// */
|
||||||
|
// public static void quad(Rect rect, Color color)
|
||||||
|
// {
|
||||||
|
// setColor(color);
|
||||||
|
// quad(rect);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Render quad
|
||||||
|
// *
|
||||||
|
// * @param quad the quad to draw (px)
|
||||||
|
// */
|
||||||
|
// public static void quad(Rect quad)
|
||||||
|
// {
|
||||||
|
// final RectDigest q = quad.digest();
|
||||||
|
//
|
||||||
|
// // draw with color
|
||||||
|
//
|
||||||
|
// glDisable(GL_TEXTURE_2D);
|
||||||
|
//
|
||||||
|
// // quad
|
||||||
|
// glBegin(GL_QUADS);
|
||||||
|
// glVertex2d(q.left, q.bottom);
|
||||||
|
// glVertex2d(q.right, q.bottom);
|
||||||
|
// glVertex2d(q.right, q.top);
|
||||||
|
// glVertex2d(q.left, q.top);
|
||||||
|
// glEnd();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Draw quad with horizontal gradient
|
||||||
|
// *
|
||||||
|
// * @param quad drawn quad bounds
|
||||||
|
// * @param color1 left color
|
||||||
|
// * @param color2 right color
|
||||||
|
// */
|
||||||
|
// public static void quadGradH(Rect quad, Color color1, Color color2)
|
||||||
|
// {
|
||||||
|
// quadColor(quad, color1, color2, color2, color1);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// public static void quadColor(Rect quad, Color color)
|
||||||
|
// {
|
||||||
|
// quadColor(quad, color, color, color, color);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Draw quad with coloured vertices.
|
||||||
|
// *
|
||||||
|
// * @param quad drawn quad bounds
|
||||||
|
// * @param colorHMinVMin
|
||||||
|
// * @param colorHMaxVMin
|
||||||
|
// * @param colorHMaxVMax
|
||||||
|
// * @param colorHMinVMax
|
||||||
|
// */
|
||||||
|
// public static void quadColor(Rect quad, Color colorHMinVMin, Color colorHMaxVMin, Color colorHMaxVMax, Color colorHMinVMax)
|
||||||
|
// {
|
||||||
|
// final RectDigest r = quad.digest();
|
||||||
|
//
|
||||||
|
// // draw with color
|
||||||
|
//
|
||||||
|
// glDisable(GL_TEXTURE_2D);
|
||||||
|
//
|
||||||
|
// glBegin(GL_QUADS);
|
||||||
|
// setColor(colorHMinVMax);
|
||||||
|
// glVertex2d(r.left, r.bottom);
|
||||||
|
//
|
||||||
|
// setColor(colorHMaxVMax);
|
||||||
|
// glVertex2d(r.right, r.bottom);
|
||||||
|
//
|
||||||
|
// setColor(colorHMaxVMin);
|
||||||
|
// glVertex2d(r.right, r.top);
|
||||||
|
//
|
||||||
|
// setColor(colorHMinVMin);
|
||||||
|
// glVertex2d(r.left, r.top);
|
||||||
|
// glEnd();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Draw quad with vertical gradient
|
||||||
|
// *
|
||||||
|
// * @param quad drawn quad bounds
|
||||||
|
// * @param color1 top color
|
||||||
|
// * @param color2 bottom color
|
||||||
|
// */
|
||||||
|
// public static void quadGradV(Rect quad, Color color1, Color color2)
|
||||||
|
// {
|
||||||
|
// quadColor(quad, color1, color1, color2, color2);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Render textured rect
|
||||||
|
// *
|
||||||
|
// * @param quad rectangle (px)
|
||||||
|
// * @param txquad texture quad
|
||||||
|
// */
|
||||||
|
// public static void quadTextured(Rect quad, TxQuad txquad)
|
||||||
|
// {
|
||||||
|
// quadTextured(quad, txquad, RGB.WHITE);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Render textured rect
|
||||||
|
// *
|
||||||
|
// * @param quad rectangle (px)
|
||||||
|
// * @param txquad texture instance
|
||||||
|
// * @param tint color tint
|
||||||
|
// */
|
||||||
|
// public static void quadTextured(Rect quad, TxQuad txquad, Color tint)
|
||||||
|
// {
|
||||||
|
// if (!batchTexturedQuadMode) {
|
||||||
|
// glEnable(GL_TEXTURE_2D);
|
||||||
|
// txquad.tx.bind();
|
||||||
|
// glBegin(GL_QUADS);
|
||||||
|
// setColor(tint);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// final RectDigest q = quad.digest();
|
||||||
|
// final RectDigest u = txquad.uvs.digest();
|
||||||
|
//
|
||||||
|
// final double offs = 0.0001;// hack to avoid white stitching
|
||||||
|
//
|
||||||
|
// double tL = u.left + offs, tR = u.right - offs, tT = u.top + offs, tB = u.bottom - offs;
|
||||||
|
//
|
||||||
|
// // handle flip
|
||||||
|
// if (txquad.isFlippedY()) {
|
||||||
|
// final double swap = tT;
|
||||||
|
// tT = tB;
|
||||||
|
// tB = swap;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (txquad.isFlippedX()) {
|
||||||
|
// final double swap = tL;
|
||||||
|
// tL = tR;
|
||||||
|
// tR = swap;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// final double w = txquad.tx.getWidth01();
|
||||||
|
// final double h = txquad.tx.getHeight01();
|
||||||
|
//
|
||||||
|
// // quad with texture
|
||||||
|
// glTexCoord2d(tL * w, tB * h);
|
||||||
|
// glVertex2d(q.left, q.bottom);
|
||||||
|
//
|
||||||
|
// glTexCoord2d(tR * w, tB * h);
|
||||||
|
// glVertex2d(q.right, q.bottom);
|
||||||
|
//
|
||||||
|
// glTexCoord2d(tR * w, tT * h);
|
||||||
|
// glVertex2d(q.right, q.top);
|
||||||
|
//
|
||||||
|
// glTexCoord2d(tL * w, tT * h);
|
||||||
|
// glVertex2d(q.left, q.top);
|
||||||
|
//
|
||||||
|
// if (!batchTexturedQuadMode) glEnd();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Setup Ortho projection for 2D graphics
|
||||||
|
// *
|
||||||
|
// * @param size viewport size (screen size)
|
||||||
|
// */
|
||||||
|
// public static void setupOrtho(Vect size)
|
||||||
|
// {
|
||||||
|
// // fix projection for changed size
|
||||||
|
// glMatrixMode(GL_PROJECTION);
|
||||||
|
// glLoadIdentity();
|
||||||
|
// glViewport(0, 0, size.xi(), size.yi());
|
||||||
|
// glOrtho(0, size.xi(), size.yi(), 0, -1000, 1000);
|
||||||
|
//
|
||||||
|
// // back to modelview
|
||||||
|
// glMatrixMode(GL_MODELVIEW);
|
||||||
|
//
|
||||||
|
// glLoadIdentity();
|
||||||
|
//
|
||||||
|
// glDisable(GL_LIGHTING);
|
||||||
|
//
|
||||||
|
// glClearDepth(1f);
|
||||||
|
// glEnable(GL_DEPTH_TEST);
|
||||||
|
// glDepthFunc(GL_LEQUAL);
|
||||||
|
//
|
||||||
|
// glEnable(GL_NORMALIZE);
|
||||||
|
//
|
||||||
|
// glShadeModel(GL_SMOOTH);
|
||||||
|
//
|
||||||
|
// glEnable(GL_BLEND);
|
||||||
|
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// public static void enterBatchTexturedQuadMode(ITexture texture)
|
||||||
|
// {
|
||||||
|
// texture.bind();
|
||||||
|
// glBegin(GL11.GL_QUADS);
|
||||||
|
// batchTexturedQuadMode = true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// public static void leaveBatchTexturedQuadMode()
|
||||||
|
// {
|
||||||
|
// glEnd();
|
||||||
|
// batchTexturedQuadMode = false;
|
||||||
|
// }
|
||||||
|
//}
|
@ -0,0 +1,151 @@ |
|||||||
|
package mightypork.gamecore.core.modules; |
||||||
|
|
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.logging.Level; |
||||||
|
|
||||||
|
import mightypork.gamecore.backend.Backend; |
||||||
|
import mightypork.gamecore.core.WorkDir.RouteSetup; |
||||||
|
import mightypork.gamecore.core.config.ConfigSetup; |
||||||
|
import mightypork.gamecore.core.config.KeySetup; |
||||||
|
import mightypork.gamecore.resources.AsyncResourceLoader; |
||||||
|
import mightypork.gamecore.resources.ResourceLoader; |
||||||
|
import mightypork.gamecore.resources.ResourceSetup; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Init options holder class
|
||||||
|
*/ |
||||||
|
public class AppInitOptions { |
||||||
|
|
||||||
|
boolean singleInstance = false; |
||||||
|
|
||||||
|
Backend backend = null; |
||||||
|
File workdir = null; |
||||||
|
|
||||||
|
String logDir = "log"; |
||||||
|
String logFilePrefix = "runtime"; |
||||||
|
|
||||||
|
String screenshotDir = "screenshots"; |
||||||
|
|
||||||
|
int logArchiveCount = 0; |
||||||
|
boolean busLogging = false; |
||||||
|
|
||||||
|
String configFile = "settings.cfg"; |
||||||
|
String configComment = "Main config file"; |
||||||
|
|
||||||
|
public String lockFile = ".lock"; |
||||||
|
|
||||||
|
final List<ResourceSetup> resourceLists = new ArrayList<>(); |
||||||
|
final List<KeySetup> keyLists = new ArrayList<>(); |
||||||
|
final List<ConfigSetup> configLists = new ArrayList<>(); |
||||||
|
final List<RouteSetup> routeLists = new ArrayList<>(); |
||||||
|
|
||||||
|
ResourceLoader resourceLoader = new AsyncResourceLoader(); |
||||||
|
Level logLevel = Level.ALL; |
||||||
|
public boolean sigleInstance = true; |
||||||
|
Level logSoutLevel = Level.ALL; |
||||||
|
|
||||||
|
|
||||||
|
public void setConfigFile(String filename, String comment) |
||||||
|
{ |
||||||
|
configFile = filename; |
||||||
|
configComment = comment; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addConfig(ConfigSetup cfg) |
||||||
|
{ |
||||||
|
configLists.add(cfg); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addKeys(KeySetup keys) |
||||||
|
{ |
||||||
|
keyLists.add(keys); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addRoutes(RouteSetup keys) |
||||||
|
{ |
||||||
|
routeLists.add(keys); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addResources(ResourceSetup res) |
||||||
|
{ |
||||||
|
resourceLists.add(res); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setBackend(Backend backend) |
||||||
|
{ |
||||||
|
this.backend = backend; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Set whether to run in single instance mode, or allow multiple instances.<br> |
||||||
|
* Multiple instances running can cause various collisions (eg. when writing |
||||||
|
* config file or logging). |
||||||
|
* |
||||||
|
* @param sigleInstance true to allow only one instance |
||||||
|
*/ |
||||||
|
public void setSigleInstance(boolean sigleInstance) |
||||||
|
{ |
||||||
|
this.sigleInstance = sigleInstance; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Set working directory path. If not exists, it will be created. |
||||||
|
* |
||||||
|
* @param workdir work dir path |
||||||
|
*/ |
||||||
|
public void setWorkdir(File workdir) |
||||||
|
{ |
||||||
|
this.workdir = workdir; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setBusLogging(boolean yes) |
||||||
|
{ |
||||||
|
busLogging = yes; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setLogOptions(String logDir, String filePrefix, int archivedCount, Level logLevel) |
||||||
|
{ |
||||||
|
this.logDir = logDir; |
||||||
|
this.logFilePrefix = filePrefix; |
||||||
|
this.logArchiveCount = archivedCount; |
||||||
|
this.logLevel = logLevel; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setResourceLoader(ResourceLoader resLoader) |
||||||
|
{ |
||||||
|
resourceLoader = resLoader; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setScreenshotDir(String path) |
||||||
|
{ |
||||||
|
this.screenshotDir = path; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setLockFile(String lockFile) |
||||||
|
{ |
||||||
|
this.lockFile = lockFile; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setLogLevel(Level logLevel, Level soutLevel) |
||||||
|
{ |
||||||
|
this.logLevel = logLevel; |
||||||
|
this.logSoutLevel = soutLevel; |
||||||
|
} |
||||||
|
} |
@ -1,300 +0,0 @@ |
|||||||
package mightypork.gamecore.render; |
|
||||||
|
|
||||||
|
|
||||||
import static org.lwjgl.opengl.GL11.*; |
|
||||||
|
|
||||||
import java.nio.ByteBuffer; |
|
||||||
|
|
||||||
import mightypork.gamecore.backend.lwjgl.AwtScreenshot; |
|
||||||
import mightypork.gamecore.core.modules.AppAccess; |
|
||||||
import mightypork.gamecore.core.modules.AppModule; |
|
||||||
import mightypork.gamecore.render.events.DisplayReadyEvent; |
|
||||||
import mightypork.gamecore.render.events.ViewportChangeEvent; |
|
||||||
import mightypork.utils.logging.Log; |
|
||||||
import mightypork.utils.math.constraints.rect.Rect; |
|
||||||
import mightypork.utils.math.constraints.rect.RectBound; |
|
||||||
import mightypork.utils.math.constraints.vect.Vect; |
|
||||||
import mightypork.utils.math.timing.FpsMeter; |
|
||||||
|
|
||||||
import org.lwjgl.BufferUtils; |
|
||||||
import org.lwjgl.LWJGLException; |
|
||||||
import org.lwjgl.opengl.Display; |
|
||||||
import org.lwjgl.opengl.DisplayMode; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Display system |
|
||||||
* |
|
||||||
* @author Ondřej Hruška (MightyPork) |
|
||||||
*/ |
|
||||||
@Deprecated |
|
||||||
public class DisplaySystem extends AppModule implements RectBound { |
|
||||||
|
|
||||||
private DisplayMode windowDisplayMode; |
|
||||||
private int targetFps; |
|
||||||
private FpsMeter fpsMeter; |
|
||||||
private boolean fullscreenSwitchRequested; |
|
||||||
|
|
||||||
/** Current screen size */ |
|
||||||
private static final Vect screenSize = new Vect() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public double y() |
|
||||||
{ |
|
||||||
return Display.getHeight(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
public double x() |
|
||||||
{ |
|
||||||
return Display.getWidth(); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
private static final Rect rect = Rect.make(screenSize); |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* @param app app access |
|
||||||
*/ |
|
||||||
public DisplaySystem(AppAccess app) |
|
||||||
{ |
|
||||||
super(app); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
protected void deinit() |
|
||||||
{ |
|
||||||
Display.destroy(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Set target fps (for syncing in endFrame() call).<br> |
|
||||||
* With vsync enabled, the target fps may not be met. |
|
||||||
* |
|
||||||
* @param fps requested fps |
|
||||||
*/ |
|
||||||
public void setTargetFps(int fps) |
|
||||||
{ |
|
||||||
this.targetFps = fps; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Create a main window |
|
||||||
* |
|
||||||
* @param width requested width |
|
||||||
* @param height requested height |
|
||||||
* @param resizable is resizable by the user |
|
||||||
* @param fullscreen is in fullscreen |
|
||||||
* @param title window title |
|
||||||
*/ |
|
||||||
public void createMainWindow(int width, int height, boolean resizable, boolean fullscreen, String title) |
|
||||||
{ |
|
||||||
try { |
|
||||||
Display.setDisplayMode(windowDisplayMode = new DisplayMode(width, height)); |
|
||||||
Display.setResizable(resizable); |
|
||||||
Display.setVSyncEnabled(true); |
|
||||||
Display.setTitle(title); |
|
||||||
Display.create(); |
|
||||||
|
|
||||||
fpsMeter = new FpsMeter(); |
|
||||||
|
|
||||||
if (fullscreen) { |
|
||||||
switchFullscreen(); |
|
||||||
Display.update(); |
|
||||||
} |
|
||||||
|
|
||||||
getEventBus().send(new DisplayReadyEvent()); |
|
||||||
|
|
||||||
} catch (final LWJGLException e) { |
|
||||||
throw new RuntimeException("Could not initialize screen", e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Toggle FS if possible |
|
||||||
*/ |
|
||||||
public void switchFullscreen() |
|
||||||
{ |
|
||||||
fullscreenSwitchRequested = true; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
private void doSwitchFullscreen() |
|
||||||
{ |
|
||||||
try { |
|
||||||
|
|
||||||
if (!Display.isFullscreen()) { |
|
||||||
Log.f3("Entering fullscreen."); |
|
||||||
// save window resize
|
|
||||||
windowDisplayMode = new DisplayMode(Display.getWidth(), Display.getHeight()); |
|
||||||
|
|
||||||
Display.setDisplayMode(Display.getDesktopDisplayMode()); |
|
||||||
Display.setFullscreen(true); |
|
||||||
Display.update(); |
|
||||||
} else { |
|
||||||
Log.f3("Leaving fullscreen."); |
|
||||||
Display.setDisplayMode(windowDisplayMode); |
|
||||||
Display.update(); |
|
||||||
} |
|
||||||
|
|
||||||
getEventBus().send(new ViewportChangeEvent(getSize())); |
|
||||||
|
|
||||||
} catch (final Throwable t) { |
|
||||||
Log.e("Failed to toggle fullscreen mode.", t); |
|
||||||
try { |
|
||||||
Display.setDisplayMode(windowDisplayMode); |
|
||||||
Display.update(); |
|
||||||
} catch (final Throwable t1) { |
|
||||||
throw new RuntimeException("Failed to revert failed fullscreen toggle.", t1); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Take screenshot (expensive processing is done on-demand when screenshot |
|
||||||
* is processed). |
|
||||||
* |
|
||||||
* @return screenshot object |
|
||||||
*/ |
|
||||||
public static AwtScreenshot prepareScreenshot() |
|
||||||
{ |
|
||||||
glReadBuffer(GL_FRONT); |
|
||||||
final int width = Display.getWidth(); |
|
||||||
final int height = Display.getHeight(); |
|
||||||
final int bpp = 4; |
|
||||||
final ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * bpp); |
|
||||||
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer); |
|
||||||
|
|
||||||
final AwtScreenshot sc = new AwtScreenshot(width, height, bpp, buffer); |
|
||||||
|
|
||||||
return sc; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* @return true if close was requested (i.e. click on cross) |
|
||||||
*/ |
|
||||||
public static boolean isCloseRequested() |
|
||||||
{ |
|
||||||
return Display.isCloseRequested(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Get fullscreen state |
|
||||||
* |
|
||||||
* @return is fullscreen |
|
||||||
*/ |
|
||||||
public static boolean isFullscreen() |
|
||||||
{ |
|
||||||
return Display.isFullscreen(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Get screen size. This Vect is final and views at it can safely be made. |
|
||||||
* |
|
||||||
* @return size |
|
||||||
*/ |
|
||||||
public static Vect getSize() |
|
||||||
{ |
|
||||||
return screenSize; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Get screen rect. Static version of getRect(). |
|
||||||
* |
|
||||||
* @return size |
|
||||||
*/ |
|
||||||
public static Rect getBounds() |
|
||||||
{ |
|
||||||
return rect; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* @return screen width |
|
||||||
*/ |
|
||||||
public static int getWidth() |
|
||||||
{ |
|
||||||
return screenSize.xi(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* @return screen height |
|
||||||
*/ |
|
||||||
public static int getHeight() |
|
||||||
{ |
|
||||||
return screenSize.yi(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Start a OpenGL frame |
|
||||||
*/ |
|
||||||
public void beginFrame() |
|
||||||
{ |
|
||||||
// handle resize
|
|
||||||
if (Display.wasResized()) { |
|
||||||
getEventBus().send(new ViewportChangeEvent(getSize())); |
|
||||||
} |
|
||||||
|
|
||||||
if (fullscreenSwitchRequested) { |
|
||||||
fullscreenSwitchRequested = false; |
|
||||||
doSwitchFullscreen(); |
|
||||||
} |
|
||||||
|
|
||||||
glLoadIdentity(); |
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
|
||||||
fpsMeter.frame(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* End an OpenGL frame, flip buffers, sync to fps. |
|
||||||
*/ |
|
||||||
public void endFrame() |
|
||||||
{ |
|
||||||
Display.update(false); // don't poll input devices
|
|
||||||
Display.sync(targetFps); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Get screen rect. This Rect is final and views at it can safely be made. |
|
||||||
*/ |
|
||||||
@Override |
|
||||||
public Rect getRect() |
|
||||||
{ |
|
||||||
return getBounds(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* @return current FPS |
|
||||||
*/ |
|
||||||
public long getFps() |
|
||||||
{ |
|
||||||
return fpsMeter.getFPS(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Get screen center. This vect is final and views at it can safely be made. |
|
||||||
* |
|
||||||
* @return screen center. |
|
||||||
*/ |
|
||||||
public static Vect getCenter() |
|
||||||
{ |
|
||||||
return rect.center(); |
|
||||||
} |
|
||||||
} |
|
@ -1,542 +0,0 @@ |
|||||||
package mightypork.gamecore.render; |
|
||||||
|
|
||||||
|
|
||||||
import static org.lwjgl.opengl.GL11.*; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
import mightypork.gamecore.resources.textures.FilterMode; |
|
||||||
import mightypork.gamecore.resources.textures.ITexture; |
|
||||||
import mightypork.gamecore.resources.textures.TxQuad; |
|
||||||
import mightypork.utils.files.FileUtils; |
|
||||||
import mightypork.utils.logging.Log; |
|
||||||
import mightypork.utils.math.color.Color; |
|
||||||
import mightypork.utils.math.color.pal.RGB; |
|
||||||
import mightypork.utils.math.constraints.rect.Rect; |
|
||||||
import mightypork.utils.math.constraints.rect.caching.RectDigest; |
|
||||||
import mightypork.utils.math.constraints.vect.Vect; |
|
||||||
import mightypork.utils.math.constraints.vect.VectConst; |
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11; |
|
||||||
import org.newdawn.slick.opengl.Texture; |
|
||||||
import org.newdawn.slick.opengl.TextureLoader; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Render utilities |
|
||||||
* |
|
||||||
* @author Ondřej Hruška (MightyPork) |
|
||||||
*/ |
|
||||||
@Deprecated |
|
||||||
public class Render { |
|
||||||
|
|
||||||
public static final VectConst AXIS_X = Vect.make(1, 0, 0); |
|
||||||
public static final VectConst AXIS_Y = Vect.make(0, 1, 0); |
|
||||||
public static final VectConst AXIS_Z = Vect.make(0, 0, 1); |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Bind GL color |
|
||||||
* |
|
||||||
* @param color Color color |
|
||||||
*/ |
|
||||||
public static void setColor(Color color) |
|
||||||
{ |
|
||||||
if (color != null) glColor4d(color.r(), color.g(), color.b(), color.a()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Bind GL color |
|
||||||
* |
|
||||||
* @param color Color color |
|
||||||
* @param alpha alpha multiplier |
|
||||||
*/ |
|
||||||
public static void setColor(Color color, double alpha) |
|
||||||
{ |
|
||||||
if (color != null) glColor4d(color.r(), color.g(), color.b(), color.a() * alpha); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Translate |
|
||||||
* |
|
||||||
* @param x |
|
||||||
* @param y |
|
||||||
*/ |
|
||||||
public static void translate(double x, double y) |
|
||||||
{ |
|
||||||
glTranslated(x, y, 0); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Translate |
|
||||||
* |
|
||||||
* @param x |
|
||||||
* @param y |
|
||||||
* @param z |
|
||||||
*/ |
|
||||||
public static void translate(double x, double y, double z) |
|
||||||
{ |
|
||||||
glTranslated(x, y, z); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Translate with coord |
|
||||||
* |
|
||||||
* @param coord coord |
|
||||||
*/ |
|
||||||
public static void translate(Vect coord) |
|
||||||
{ |
|
||||||
glTranslated(coord.x(), coord.y(), coord.z()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Translate with coord, discard Z |
|
||||||
* |
|
||||||
* @param coord coord |
|
||||||
*/ |
|
||||||
public static void translateXY(Vect coord) |
|
||||||
{ |
|
||||||
glTranslated(coord.x(), coord.y(), 0); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Scale |
|
||||||
* |
|
||||||
* @param x |
|
||||||
* @param y |
|
||||||
*/ |
|
||||||
public static void scale(double x, double y) |
|
||||||
{ |
|
||||||
glScaled(x, y, 0); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Scale |
|
||||||
* |
|
||||||
* @param x |
|
||||||
* @param y |
|
||||||
* @param z |
|
||||||
*/ |
|
||||||
public static void scale(double x, double y, double z) |
|
||||||
{ |
|
||||||
glScaled(x, y, z); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Scale |
|
||||||
* |
|
||||||
* @param factor vector of scaling factors |
|
||||||
*/ |
|
||||||
public static void scale(Vect factor) |
|
||||||
{ |
|
||||||
glScaled(factor.x(), factor.y(), factor.z()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Scale by X factor |
|
||||||
* |
|
||||||
* @param factor scaling factor |
|
||||||
*/ |
|
||||||
public static void scaleXY(double factor) |
|
||||||
{ |
|
||||||
glScaled(factor, factor, 1); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Scale by X factor |
|
||||||
* |
|
||||||
* @param factor scaling factor |
|
||||||
*/ |
|
||||||
public static void scaleX(double factor) |
|
||||||
{ |
|
||||||
glScaled(factor, 1, 1); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Scale by Y factor |
|
||||||
* |
|
||||||
* @param factor scaling factor |
|
||||||
*/ |
|
||||||
public static void scaleY(double factor) |
|
||||||
{ |
|
||||||
glScaled(1, factor, 1); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Scale by Z factor |
|
||||||
* |
|
||||||
* @param factor scaling factor |
|
||||||
*/ |
|
||||||
public static void scaleZ(double factor) |
|
||||||
{ |
|
||||||
glScaled(1, 1, factor); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Rotate around X axis |
|
||||||
* |
|
||||||
* @param angle deg |
|
||||||
*/ |
|
||||||
public static void rotateX(double angle) |
|
||||||
{ |
|
||||||
rotate(angle, AXIS_X); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Rotate around Y axis |
|
||||||
* |
|
||||||
* @param angle deg |
|
||||||
*/ |
|
||||||
public static void rotateY(double angle) |
|
||||||
{ |
|
||||||
rotate(angle, AXIS_Y); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Rotate around Z axis |
|
||||||
* |
|
||||||
* @param angle deg |
|
||||||
*/ |
|
||||||
public static void rotateZ(double angle) |
|
||||||
{ |
|
||||||
rotate(angle, AXIS_Z); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Rotate |
|
||||||
* |
|
||||||
* @param angle rotate angle |
|
||||||
* @param axis rotation axis |
|
||||||
*/ |
|
||||||
public static void rotate(double angle, Vect axis) |
|
||||||
{ |
|
||||||
final Vect vec = axis.norm(1); |
|
||||||
glRotated(angle, vec.x(), vec.y(), vec.z()); |
|
||||||
} |
|
||||||
|
|
||||||
private static int pushed = 0; |
|
||||||
/** Can be used to avoid texture binding and glBegin/glEnd in textured quads */ |
|
||||||
public static boolean batchTexturedQuadMode; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Store GL state |
|
||||||
*/ |
|
||||||
public static void pushState() |
|
||||||
{ |
|
||||||
pushed++; |
|
||||||
|
|
||||||
if (pushed >= 100) { |
|
||||||
Log.w("Suspicious number of state pushes: " + pushed); |
|
||||||
} |
|
||||||
|
|
||||||
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); |
|
||||||
GL11.glPushClientAttrib(GL11.GL_ALL_CLIENT_ATTRIB_BITS); |
|
||||||
GL11.glMatrixMode(GL11.GL_MODELVIEW); |
|
||||||
GL11.glPushMatrix(); |
|
||||||
GL11.glMatrixMode(GL11.GL_PROJECTION); |
|
||||||
GL11.glPushMatrix(); |
|
||||||
GL11.glMatrixMode(GL11.GL_MODELVIEW); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Restore Gl state |
|
||||||
*/ |
|
||||||
public static void popState() |
|
||||||
{ |
|
||||||
if (pushed == 0) { |
|
||||||
Log.w("Pop without push."); |
|
||||||
} |
|
||||||
|
|
||||||
pushed--; |
|
||||||
|
|
||||||
GL11.glMatrixMode(GL11.GL_PROJECTION); |
|
||||||
GL11.glPopMatrix(); |
|
||||||
GL11.glMatrixMode(GL11.GL_MODELVIEW); |
|
||||||
GL11.glPopMatrix(); |
|
||||||
GL11.glPopClientAttrib(); |
|
||||||
GL11.glPopAttrib(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Store matrix |
|
||||||
*/ |
|
||||||
public static void pushMatrix() |
|
||||||
{ |
|
||||||
GL11.glPushMatrix(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Restore Gl state |
|
||||||
*/ |
|
||||||
public static void popMatrix() |
|
||||||
{ |
|
||||||
GL11.glPopMatrix(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Load texture |
|
||||||
* |
|
||||||
* @param resourcePath |
|
||||||
* @param filtering filtering mode to use while loading. |
|
||||||
* @return the loaded texture |
|
||||||
*/ |
|
||||||
public synchronized static Texture loadSlickTexture(String resourcePath, FilterMode filtering) |
|
||||||
{ |
|
||||||
|
|
||||||
try { |
|
||||||
|
|
||||||
final String ext = FileUtils.getExtension(resourcePath).toUpperCase(); |
|
||||||
|
|
||||||
final Texture texture = TextureLoader.getTexture(ext, FileUtils.getResource(resourcePath), false, filtering.num); |
|
||||||
|
|
||||||
if (texture == null) { |
|
||||||
Log.w("Texture " + resourcePath + " could not be loaded."); |
|
||||||
} |
|
||||||
|
|
||||||
return texture; |
|
||||||
|
|
||||||
} catch (final IOException e) { |
|
||||||
Log.e("Loading of texture " + resourcePath + " failed.", e); |
|
||||||
throw new RuntimeException("Could not load texture " + resourcePath + ".", e); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Render quad 2D |
|
||||||
* |
|
||||||
* @param rect rectangle |
|
||||||
* @param color draw color |
|
||||||
*/ |
|
||||||
public static void quad(Rect rect, Color color) |
|
||||||
{ |
|
||||||
setColor(color); |
|
||||||
quad(rect); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Render quad |
|
||||||
* |
|
||||||
* @param quad the quad to draw (px) |
|
||||||
*/ |
|
||||||
public static void quad(Rect quad) |
|
||||||
{ |
|
||||||
final RectDigest q = quad.digest(); |
|
||||||
|
|
||||||
// draw with color
|
|
||||||
|
|
||||||
glDisable(GL_TEXTURE_2D); |
|
||||||
|
|
||||||
// quad
|
|
||||||
glBegin(GL_QUADS); |
|
||||||
glVertex2d(q.left, q.bottom); |
|
||||||
glVertex2d(q.right, q.bottom); |
|
||||||
glVertex2d(q.right, q.top); |
|
||||||
glVertex2d(q.left, q.top); |
|
||||||
glEnd(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Draw quad with horizontal gradient |
|
||||||
* |
|
||||||
* @param quad drawn quad bounds |
|
||||||
* @param color1 left color |
|
||||||
* @param color2 right color |
|
||||||
*/ |
|
||||||
public static void quadGradH(Rect quad, Color color1, Color color2) |
|
||||||
{ |
|
||||||
quadColor(quad, color1, color2, color2, color1); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
public static void quadColor(Rect quad, Color color) |
|
||||||
{ |
|
||||||
quadColor(quad, color, color, color, color); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Draw quad with coloured vertices. |
|
||||||
* |
|
||||||
* @param quad drawn quad bounds |
|
||||||
* @param colorHMinVMin |
|
||||||
* @param colorHMaxVMin |
|
||||||
* @param colorHMaxVMax |
|
||||||
* @param colorHMinVMax |
|
||||||
*/ |
|
||||||
public static void quadColor(Rect quad, Color colorHMinVMin, Color colorHMaxVMin, Color colorHMaxVMax, Color colorHMinVMax) |
|
||||||
{ |
|
||||||
final RectDigest r = quad.digest(); |
|
||||||
|
|
||||||
// draw with color
|
|
||||||
|
|
||||||
glDisable(GL_TEXTURE_2D); |
|
||||||
|
|
||||||
glBegin(GL_QUADS); |
|
||||||
setColor(colorHMinVMax); |
|
||||||
glVertex2d(r.left, r.bottom); |
|
||||||
|
|
||||||
setColor(colorHMaxVMax); |
|
||||||
glVertex2d(r.right, r.bottom); |
|
||||||
|
|
||||||
setColor(colorHMaxVMin); |
|
||||||
glVertex2d(r.right, r.top); |
|
||||||
|
|
||||||
setColor(colorHMinVMin); |
|
||||||
glVertex2d(r.left, r.top); |
|
||||||
glEnd(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Draw quad with vertical gradient |
|
||||||
* |
|
||||||
* @param quad drawn quad bounds |
|
||||||
* @param color1 top color |
|
||||||
* @param color2 bottom color |
|
||||||
*/ |
|
||||||
public static void quadGradV(Rect quad, Color color1, Color color2) |
|
||||||
{ |
|
||||||
quadColor(quad, color1, color1, color2, color2); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Render textured rect |
|
||||||
* |
|
||||||
* @param quad rectangle (px) |
|
||||||
* @param txquad texture quad |
|
||||||
*/ |
|
||||||
public static void quadTextured(Rect quad, TxQuad txquad) |
|
||||||
{ |
|
||||||
quadTextured(quad, txquad, RGB.WHITE); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Render textured rect |
|
||||||
* |
|
||||||
* @param quad rectangle (px) |
|
||||||
* @param txquad texture instance |
|
||||||
* @param tint color tint |
|
||||||
*/ |
|
||||||
public static void quadTextured(Rect quad, TxQuad txquad, Color tint) |
|
||||||
{ |
|
||||||
if (!batchTexturedQuadMode) { |
|
||||||
glEnable(GL_TEXTURE_2D); |
|
||||||
txquad.tx.bind(); |
|
||||||
glBegin(GL_QUADS); |
|
||||||
setColor(tint); |
|
||||||
} |
|
||||||
|
|
||||||
final RectDigest q = quad.digest(); |
|
||||||
final RectDigest u = txquad.uvs.digest(); |
|
||||||
|
|
||||||
final double offs = 0.0001;// hack to avoid white stitching
|
|
||||||
|
|
||||||
double tL = u.left + offs, tR = u.right - offs, tT = u.top + offs, tB = u.bottom - offs; |
|
||||||
|
|
||||||
// handle flip
|
|
||||||
if (txquad.isFlippedY()) { |
|
||||||
final double swap = tT; |
|
||||||
tT = tB; |
|
||||||
tB = swap; |
|
||||||
} |
|
||||||
|
|
||||||
if (txquad.isFlippedX()) { |
|
||||||
final double swap = tL; |
|
||||||
tL = tR; |
|
||||||
tR = swap; |
|
||||||
} |
|
||||||
|
|
||||||
final double w = txquad.tx.getWidth01(); |
|
||||||
final double h = txquad.tx.getHeight01(); |
|
||||||
|
|
||||||
// quad with texture
|
|
||||||
glTexCoord2d(tL * w, tB * h); |
|
||||||
glVertex2d(q.left, q.bottom); |
|
||||||
|
|
||||||
glTexCoord2d(tR * w, tB * h); |
|
||||||
glVertex2d(q.right, q.bottom); |
|
||||||
|
|
||||||
glTexCoord2d(tR * w, tT * h); |
|
||||||
glVertex2d(q.right, q.top); |
|
||||||
|
|
||||||
glTexCoord2d(tL * w, tT * h); |
|
||||||
glVertex2d(q.left, q.top); |
|
||||||
|
|
||||||
if (!batchTexturedQuadMode) glEnd(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Setup Ortho projection for 2D graphics |
|
||||||
* |
|
||||||
* @param size viewport size (screen size) |
|
||||||
*/ |
|
||||||
public static void setupOrtho(Vect size) |
|
||||||
{ |
|
||||||
// fix projection for changed size
|
|
||||||
glMatrixMode(GL_PROJECTION); |
|
||||||
glLoadIdentity(); |
|
||||||
glViewport(0, 0, size.xi(), size.yi()); |
|
||||||
glOrtho(0, size.xi(), size.yi(), 0, -1000, 1000); |
|
||||||
|
|
||||||
// back to modelview
|
|
||||||
glMatrixMode(GL_MODELVIEW); |
|
||||||
|
|
||||||
glLoadIdentity(); |
|
||||||
|
|
||||||
glDisable(GL_LIGHTING); |
|
||||||
|
|
||||||
glClearDepth(1f); |
|
||||||
glEnable(GL_DEPTH_TEST); |
|
||||||
glDepthFunc(GL_LEQUAL); |
|
||||||
|
|
||||||
glEnable(GL_NORMALIZE); |
|
||||||
|
|
||||||
glShadeModel(GL_SMOOTH); |
|
||||||
|
|
||||||
glEnable(GL_BLEND); |
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
public static void enterBatchTexturedQuadMode(ITexture texture) |
|
||||||
{ |
|
||||||
texture.bind(); |
|
||||||
glBegin(GL11.GL_QUADS); |
|
||||||
batchTexturedQuadMode = true; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
public static void leaveBatchTexturedQuadMode() |
|
||||||
{ |
|
||||||
glEnd(); |
|
||||||
batchTexturedQuadMode = false; |
|
||||||
} |
|
||||||
} |
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue