package de.lessvoid.nifty.render.batch.spi; import de.lessvoid.nifty.render.BlendMode; import de.lessvoid.nifty.tools.Color; import javax.annotation.Nonnull; /** * Interface for managing a "batch" of vertex data from a specific texture. The vertex data is accumulated via the * {@link #addQuad(float, float, float, float, de.lessvoid.nifty.tools.Color, de.lessvoid.nifty.tools.Color, de.lessvoid.nifty.tools.Color, de.lessvoid.nifty.tools.Color, float, float, float, float)} * method. A batch can only hold so many quads; the {@link #canAddQuad()} method should tell you when the batch is * full. The amount of vertex data that a batch can hold is implementation-specific. Place initialization routines in * {@link #begin(de.lessvoid.nifty.render.BlendMode, int)}. When starting a new batch, you should call * {@link #begin(de.lessvoid.nifty.render.BlendMode, int)} to initialize the batch before calling {@link #render()}. * * @author void * @author Aaron Mahan <aaron@forerunnergames.com> */ public interface Batch { /** * Initializes the batch by specifying the blend mode and texture id before a call to {@link #render()}. * * @param blendMode The {@link de.lessvoid.nifty.render.BlendMode} to render the batch with. * @param textureId The id of the texture that this batch's vertex data belongs to. */ public void begin(@Nonnull final BlendMode blendMode, final int textureId); /** * Gets the {@link de.lessvoid.nifty.render.BlendMode} that will be used to render this batch, that was specified in * {@link #begin(de.lessvoid.nifty.render.BlendMode, int)}. */ @Nonnull public BlendMode getBlendMode(); /** * Renders the batch's vertex data that was added with * {@link #addQuad(float, float, float, float, de.lessvoid.nifty.tools.Color, de.lessvoid.nifty.tools.Color, de.lessvoid.nifty.tools.Color, de.lessvoid.nifty.tools.Color, float, float, float, float)}, * using the blend mode and texture id specified in {@link #begin(de.lessvoid.nifty.render.BlendMode, int)}. */ public void render(); /** * A batch can only hold so many quads. This will tell you when the batch is full. The amount of vertex data that a * batch can hold is implementation-specific. */ public boolean canAddQuad(); /** * Adds a quad to the batch for later rendering with {@link #render()}. * * @see #canAddQuad() * * @param x The top left coordinate of the quad, in screen coordinates. * @param y The top left coordinate of the quad, in screen coordinates. * @param width The width of the quad, in screen coordinates. * @param height The height of the quad, in screen coordinates. * @param color1 The color of the quad's first (top left) vertex. * @param color2 The color of the quad's second (top right) vertex. * @param color3 The color of the quad's third (bottom right) vertex. * @param color4 The color of the quad's fourth (bottom left) vertex. * @param textureX The first (top left) texture coordinate of the texture to map onto the quad. * @param textureY The first (top left) texture coordinate of the texture to map onto the quad. * @param textureWidth The width of the texture to map onto the quad. * @param textureHeight The width of the texture to map onto the quad. */ public void addQuad( final float x, final float y, final float width, final float height, @Nonnull final Color color1, @Nonnull final Color color2, @Nonnull final Color color3, @Nonnull final Color color4, final float textureX, final float textureY, final float textureWidth, final float textureHeight); }