/* * HalfNES by Andrew Hoffman * Licensed under the GNU GPL Version 3. See LICENSE file */ package com.grapeshot.halfnes.video; import java.awt.image.BufferedImage; import java.awt.image.DataBufferInt; import java.awt.image.WritableRaster; /** * * @author Andrew */ public abstract class Renderer { int frame_width; /* there's stuff involving this variable that's much uglier than it needs to be because of me not really remembering how abstract classes work */ int clip = 8; int height = 240 - 2 * clip; BufferedImage[] imgs = {null, null, null, null}; int imgctr = 0; protected final void init_images() { for (int i = 0; i < imgs.length; ++i) { imgs[i] = new BufferedImage(frame_width, height, BufferedImage.TYPE_INT_ARGB_PRE); } } public abstract BufferedImage render(int[] nespixels, int[] bgcolors, boolean dotcrawl); public void setClip(int i) { //how many lines to clip from top + bottom clip = i; height = 240 - 2 * clip; } public BufferedImage getBufferedImage(int[] frame) { final BufferedImage image = imgs[++imgctr % imgs.length]; final WritableRaster raster = image.getRaster(); final int[] pixels = ((DataBufferInt) raster.getDataBuffer()).getData(); System.arraycopy(frame, frame_width * clip, pixels, 0, frame_width * height); return image; } }