/** * 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(); } }