Java 类org.newdawn.slick.ShapeFill 实例源码

项目:fuzzy-octo-shame    文件:ShapeRenderer.java   
/**
 * Draw the the given shape filled in with a texture.  Only the vertices are set.  
 * The colour has to be set independently of this method.
 * 
 * @param shape The shape to texture.
 * @param image The image to tile across the shape
 * @param scaleX The scale to apply on the x axis for texturing
 * @param scaleY The scale to apply on the y axis for texturing
 * @param fill The fill to apply
 */
public static final void texture(@Nonnull final Shape shape, @Nonnull final Image image, final float scaleX, final float scaleY, @Nonnull final ShapeFill fill) {
    if (!validFill(shape)) {
        return;
    }

    Texture t = TextureImpl.getLastBind();
    image.getTexture().bind();

    final float center[] = shape.getCenter();
    fill(shape, (shape1, x, y) -> {
        fill.colorAt(shape1, x - center[0], y - center[1]).bind();
        Vector2f offset = fill.getOffsetAt(shape1, x, y);

        x += offset.x;
        y += offset.y;

        float tx = x * scaleX;
        float ty = y * scaleY;

        tx = image.getTextureOffsetX() + (image.getTextureWidth() * tx);
        ty = image.getTextureOffsetY() + (image.getTextureHeight() * ty);

        GL.glTexCoord2f(tx, ty);

        return new float[] {offset.x + x,offset.y + y};
    });

    if (t == null) {
        TextureImpl.bindNone();
    } else {
        t.bind();
    }
}