| @@ -1,37 +1,119 @@ | |||||
| package edu.stuy.goldfish; | |||||
| import java.awt.Color; | |||||
| public class Render { | |||||
| public Render (int width, int height) { | |||||
| } | |||||
| public Render () { | |||||
| this(100,100); | |||||
| } | |||||
| /** | |||||
| * Render a color to a position | |||||
| * | |||||
| * This should draw to a buffer, which should be | |||||
| * rendered with render() | |||||
| * | |||||
| * @param x The x coordinate | |||||
| * @param y The y coordinate | |||||
| * @param c The color to draw | |||||
| */ | |||||
| public void draw (int x, int y, Color c) { | |||||
| } | |||||
| /** | |||||
| * Renders the stored buffer to the screen. | |||||
| */ | |||||
| public void render () { | |||||
| } | |||||
| } | |||||
| import java.awt.Canvas; | |||||
| import java.awt.Dimension; | |||||
| import java.awt.Graphics; | |||||
| import java.awt.image.BufferStrategy; | |||||
| import java.awt.image.BufferedImage; | |||||
| import java.awt.image.DataBufferInt; | |||||
| import javax.swing.JFrame; | |||||
| public class Renderer extends Canvas implements Runnable { | |||||
| private static final long serialVersionUID = 1L; | |||||
| public static int width = 320; | |||||
| public static int height = 240; | |||||
| public static int scale = 2; | |||||
| public String title = "Title"; | |||||
| private Thread thread; | |||||
| private JFrame frame; | |||||
| private boolean running = false; | |||||
| private Screen screen; | |||||
| private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); | |||||
| private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); | |||||
| public Renderer(int width, int height) { | |||||
| System.out.println(width); | |||||
| } | |||||
| public Renderer() { | |||||
| Dimension size = new Dimension(width*scale, height*scale); | |||||
| setPreferredSize(size); | |||||
| screen = new Screen(width, height); | |||||
| frame = new JFrame(); | |||||
| } | |||||
| public synchronized void start() { | |||||
| running = true; | |||||
| thread = new Thread(this, "Display"); | |||||
| thread.start(); | |||||
| } | |||||
| public synchronized void stop() { | |||||
| running = false; | |||||
| try { | |||||
| thread.join(); | |||||
| } catch (InterruptedException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| public void run() { | |||||
| long lastTime = System.nanoTime(); | |||||
| long timer = System.currentTimeMillis(); | |||||
| double delta = 0; | |||||
| int frames = 0; | |||||
| int updates = 0; | |||||
| long now; | |||||
| while (running) { | |||||
| now = System.nanoTime(); | |||||
| delta += (now - lastTime) * 6.0 / 100000000.0; | |||||
| lastTime = now; | |||||
| while (delta >= 1) { | |||||
| update(); | |||||
| updates++; | |||||
| delta--; | |||||
| render(); | |||||
| frames++; | |||||
| } | |||||
| if (System.currentTimeMillis() - timer > 1000) { | |||||
| timer += 1000; | |||||
| frame.setTitle(title + " | updates: " + updates + " | frames: "+ frames); | |||||
| frames = 0; | |||||
| updates = 0; | |||||
| } | |||||
| } | |||||
| stop(); | |||||
| } | |||||
| public void update() { | |||||
| } | |||||
| public void render() { | |||||
| BufferStrategy bs = getBufferStrategy(); | |||||
| if (bs == null) { | |||||
| createBufferStrategy(3); | |||||
| return; | |||||
| } | |||||
| screen.clear(); | |||||
| screen.render(); | |||||
| for (int i = 0; i < pixels.length; i++) { | |||||
| pixels[i] = screen.pixels[i]; | |||||
| } | |||||
| Graphics g = bs.getDrawGraphics(); | |||||
| g.drawImage(image, 0, 0, getWidth(), getHeight(), null); | |||||
| g.dispose(); | |||||
| bs.show(); | |||||
| } | |||||
| public static void main(String[] args) { | |||||
| Renderer render = new Renderer(); | |||||
| render.frame.setResizable(false); | |||||
| render.frame.setTitle(render.title); | |||||
| render.frame.add(render); | |||||
| render.frame.pack(); | |||||
| render.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |||||
| render.frame.setLocationRelativeTo(null); | |||||
| render.frame.setVisible(true); | |||||
| render.start(); | |||||
| } | |||||
| } | |||||
| @@ -1,120 +0,0 @@ | |||||
| import java.awt.Canvas; | |||||
| import java.awt.Dimension; | |||||
| import java.awt.Graphics; | |||||
| import java.awt.image.BufferStrategy; | |||||
| import java.awt.image.BufferedImage; | |||||
| import java.awt.image.DataBufferInt; | |||||
| import javax.swing.JFrame; | |||||
| public class Renderer extends Canvas implements Runnable { | |||||
| private static final long serialVersionUID = 1L; | |||||
| public static int width = 320; | |||||
| public static int height = 240; | |||||
| public static int scale = 2; | |||||
| public String title = "Title"; | |||||
| private Thread thread; | |||||
| private JFrame frame; | |||||
| private boolean running = false; | |||||
| private Screen screen; | |||||
| private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); | |||||
| private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); | |||||
| public Renderer(int width, int height) { | |||||
| System.out.println(width); | |||||
| } | |||||
| public Renderer() { | |||||
| Dimension size = new Dimension(width*scale, height*scale); | |||||
| setPreferredSize(size); | |||||
| screen = new Screen(width, height); | |||||
| frame = new JFrame(); | |||||
| } | |||||
| public synchronized void start() { | |||||
| running = true; | |||||
| thread = new Thread(this, "Display"); | |||||
| thread.start(); | |||||
| } | |||||
| public synchronized void stop() { | |||||
| running = false; | |||||
| try { | |||||
| thread.join(); | |||||
| } catch (InterruptedException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| public void run() { | |||||
| long lastTime = System.nanoTime(); | |||||
| long timer = System.currentTimeMillis(); | |||||
| double delta = 0; | |||||
| int frames = 0; | |||||
| int updates = 0; | |||||
| long now; | |||||
| while (running) { | |||||
| now = System.nanoTime(); | |||||
| delta += (now - lastTime) * 6.0 / 100000000.0; | |||||
| lastTime = now; | |||||
| while (delta >= 1) { | |||||
| update(); | |||||
| updates++; | |||||
| delta--; | |||||
| render(); | |||||
| frames++; | |||||
| } | |||||
| if (System.currentTimeMillis() - timer > 1000) { | |||||
| timer += 1000; | |||||
| frame.setTitle(title + " | updates: " + updates + " | frames: "+ frames); | |||||
| frames = 0; | |||||
| updates = 0; | |||||
| } | |||||
| } | |||||
| stop(); | |||||
| } | |||||
| public void update() { | |||||
| } | |||||
| public void render() { | |||||
| BufferStrategy bs = getBufferStrategy(); | |||||
| if (bs == null) { | |||||
| createBufferStrategy(3); | |||||
| return; | |||||
| } | |||||
| screen.clear(); | |||||
| screen.render(); | |||||
| for (int i = 0; i < pixels.length; i++) { | |||||
| pixels[i] = screen.pixels[i]; | |||||
| } | |||||
| Graphics g = bs.getDrawGraphics(); | |||||
| g.drawImage(image, 0, 0, getWidth(), getHeight(), null); | |||||
| g.dispose(); | |||||
| bs.show(); | |||||
| } | |||||
| public static void main(String[] args) { | |||||
| Renderer render = new Renderer(); | |||||
| render.frame.setResizable(false); | |||||
| render.frame.setTitle(render.title); | |||||
| render.frame.add(render); | |||||
| render.frame.pack(); | |||||
| render.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |||||
| render.frame.setLocationRelativeTo(null); | |||||
| render.frame.setVisible(true); | |||||
| render.start(); | |||||
| render.screen.draw(100,100,0xFFFFFF); | |||||
| } | |||||
| } | |||||
| @@ -1,3 +1,4 @@ | |||||
| import java.util.Random; | |||||
| public class Screen { | public class Screen { | ||||
| @@ -5,6 +6,8 @@ public class Screen { | |||||
| public int[] pixels; | public int[] pixels; | ||||
| private int[] _grid; | private int[] _grid; | ||||
| Random random = new Random(); | |||||
| public Screen(int width, int height) { | public Screen(int width, int height) { | ||||
| this.width = width; | this.width = width; | ||||
| this.height = height; | this.height = height; | ||||
| @@ -22,7 +25,8 @@ public class Screen { | |||||
| public void render() { | public void render() { | ||||
| for (int x = 0; x < width; x++) { | for (int x = 0; x < width; x++) { | ||||
| for (int y = 0; y < height; y++) { | for (int y = 0; y < height; y++) { | ||||
| pixels[x + y * width] = _grid[x + y * width]; | |||||
| pixels[x+y*width] = random.nextInt(); | |||||
| //pixels[x + y * width] = _grid[x + y * width]; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||