mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-08 12:51:51 +09:00
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
168 lines
5.2 KiB
Java
168 lines
5.2 KiB
Java
package org.newdawn.slick.tests;
|
|
|
|
import org.newdawn.slick.AngelCodeFont;
|
|
import org.newdawn.slick.AppGameContainer;
|
|
import org.newdawn.slick.BasicGame;
|
|
import org.newdawn.slick.Color;
|
|
import org.newdawn.slick.Font;
|
|
import org.newdawn.slick.GameContainer;
|
|
import org.newdawn.slick.Graphics;
|
|
import org.newdawn.slick.Image;
|
|
import org.newdawn.slick.SlickException;
|
|
import org.newdawn.slick.opengl.pbuffer.GraphicsFactory;
|
|
|
|
/**
|
|
* A test for rendering to an image
|
|
*
|
|
* @author kevin
|
|
*/
|
|
public class ImageGraphicsTest extends BasicGame {
|
|
/** The image loaded and then rendered to */
|
|
private Image preloaded;
|
|
/** The image rendered to */
|
|
private Image target;
|
|
/** The image cut from the screen */
|
|
private Image cut;
|
|
/** The offscreen graphics */
|
|
private Graphics gTarget;
|
|
/** The offscreen graphics */
|
|
private Graphics offscreenPreload;
|
|
/** The image loaded */
|
|
private Image testImage;
|
|
/** The font loaded */
|
|
private Font testFont;
|
|
/** The angle of the rotation */
|
|
private float ang;
|
|
/** The name of the dynamic image technique in use */
|
|
private String using = "none";
|
|
|
|
/**
|
|
* Create a new image rendering test
|
|
*/
|
|
public ImageGraphicsTest() {
|
|
super("Image Graphics Test");
|
|
}
|
|
|
|
/**
|
|
* @see org.newdawn.slick.BasicGame#init(org.newdawn.slick.GameContainer)
|
|
*/
|
|
public void init(GameContainer container) throws SlickException {
|
|
testImage = new Image("testdata/logo.png");
|
|
preloaded = new Image("testdata/logo.png");
|
|
testFont = new AngelCodeFont("testdata/hiero.fnt","testdata/hiero.png");
|
|
target = new Image(400,300);
|
|
cut = new Image(100,100);
|
|
gTarget = target.getGraphics();
|
|
offscreenPreload = preloaded.getGraphics();
|
|
|
|
offscreenPreload.drawString("Drawing over a loaded image", 5, 15);
|
|
offscreenPreload.setLineWidth(5);
|
|
offscreenPreload.setAntiAlias(true);
|
|
offscreenPreload.setColor(Color.blue.brighter());
|
|
offscreenPreload.drawOval(200, 30, 50, 50);
|
|
offscreenPreload.setColor(Color.white);
|
|
offscreenPreload.drawRect(190,20,70,70);
|
|
offscreenPreload.flush();
|
|
|
|
if (GraphicsFactory.usingFBO()) {
|
|
using = "FBO (Frame Buffer Objects)";
|
|
} else if (GraphicsFactory.usingPBuffer()) {
|
|
using = "Pbuffer (Pixel Buffers)";
|
|
}
|
|
|
|
System.out.println(preloaded.getColor(50,50));
|
|
}
|
|
|
|
/**
|
|
* @see org.newdawn.slick.BasicGame#render(org.newdawn.slick.GameContainer, org.newdawn.slick.Graphics)
|
|
*/
|
|
public void render(GameContainer container, Graphics g) throws SlickException {
|
|
|
|
// RENDERING TO AN IMAGE AND THEN DRAWING IT TO THE DISPLAY
|
|
// Draw graphics and text onto our graphics context from the Image target
|
|
gTarget.setBackground(new Color(0,0,0,0));
|
|
gTarget.clear();
|
|
gTarget.rotate(200,160,ang);
|
|
gTarget.setFont(testFont);
|
|
gTarget.fillRect(10, 10, 50, 50);
|
|
gTarget.drawString("HELLO WORLD",10,10);
|
|
|
|
gTarget.drawImage(testImage,100,150);
|
|
gTarget.drawImage(testImage,100,50);
|
|
gTarget.drawImage(testImage,50,75);
|
|
|
|
// Note we started by clearing the offscreen graphics area and then end
|
|
// by calling flush
|
|
gTarget.flush();
|
|
|
|
g.setColor(Color.red);
|
|
g.fillRect(250, 50, 200, 200);
|
|
// The image has been updated using its graphics context, so now draw the image
|
|
// to the screen a few times
|
|
target.draw(300,100);
|
|
target.draw(300,410,200,150);
|
|
target.draw(505,410,100,75);
|
|
|
|
// Draw some text on the screen to indicate what we did and put some
|
|
// nice boxes around the three areas
|
|
g.setColor(Color.white);
|
|
g.drawString("Testing On Offscreen Buffer", 300, 80);
|
|
g.setColor(Color.green);
|
|
g.drawRect(300, 100, target.getWidth(), target.getHeight());
|
|
g.drawRect(300, 410, target.getWidth()/2, target.getHeight()/2);
|
|
g.drawRect(505, 410, target.getWidth()/4, target.getHeight()/4);
|
|
|
|
// SCREEN COPY EXAMPLE
|
|
// Put some text and simple graphics on the screen to test copying
|
|
// from the screen to a target image
|
|
g.setColor(Color.white);
|
|
g.drawString("Testing Font On Back Buffer", 10, 100);
|
|
g.drawString("Using: "+using, 10, 580);
|
|
g.setColor(Color.red);
|
|
g.fillRect(10,120,200,5);
|
|
|
|
// Copy the screen area into a destination image
|
|
int xp = (int) (60 + (Math.sin(ang / 60) * 50));
|
|
g.copyArea(cut,xp,50);
|
|
|
|
// Draw the copied image to the screen and put some nice
|
|
// boxes around the source and the destination
|
|
cut.draw(30,250);
|
|
g.setColor(Color.white);
|
|
g.drawRect(30, 250, cut.getWidth(), cut.getHeight());
|
|
g.setColor(Color.gray);
|
|
g.drawRect(xp, 50, cut.getWidth(), cut.getHeight());
|
|
|
|
// ALTERING A LOADED IMAGE EXAMPLE
|
|
// Draw the image we loaded in the init method and then modified
|
|
// by drawing some text and simple geometry on it
|
|
preloaded.draw(2,400);
|
|
g.setColor(Color.blue);
|
|
g.drawRect(2,400,preloaded.getWidth(),preloaded.getHeight());
|
|
}
|
|
|
|
/**
|
|
* @see org.newdawn.slick.BasicGame#update(org.newdawn.slick.GameContainer, int)
|
|
*/
|
|
public void update(GameContainer container, int delta) {
|
|
ang += delta * 0.1f;
|
|
}
|
|
|
|
/**
|
|
* Entry point to our test
|
|
*
|
|
* @param argv The arguments to pass into the test
|
|
*/
|
|
public static void main(String[] argv) {
|
|
try {
|
|
GraphicsFactory.setUseFBO(false);
|
|
|
|
AppGameContainer container = new AppGameContainer(new ImageGraphicsTest());
|
|
container.setDisplayMode(800,600,false);
|
|
container.start();
|
|
} catch (SlickException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|