@Override public Surface drawImage(Image image, float x, float y, float dw, float dh) { bindFramebuffer(); ((AbstractImageGL<?>) image).draw(shader, topTransform(), tint, x, y, dw, dh); return this; }
@Override public Surface fillTriangles(float[] xys, float[] sxys, int[] indices) { return fillTriangles(xys, sxys, 0, xys.length, indices, 0, indices.length, 0); }
@Override public Surface rotate(float angle) { float sr = (float) Math.sin(angle); float cr = (float) Math.cos(angle); transform(cr, sr, -sr, cr, 0, 0); return this; }
@Override public Surface scale(float sx, float sy) { topTransform().scale(sx, sy); return this; }
@Override public Surface drawImage(Image image, float x, float y) { return drawImage(image, x, y, image.width(), image.height()); }
@Override public Surface clear() { bindFramebuffer(); ctx.clear(0, 0, 0, 0); return this; }
@Override public Surface translate(float x, float y) { topTransform().translate(x, y); return this; }
@Override public Surface drawImageCentered(Image img, float x, float y) { return drawImage(img, x - img.width()/2, y - img.height()/2); }
@Override public Surface drawImage(Image image, float dx, float dy, float dw, float dh, float sx, float sy, float sw, float sh) { bindFramebuffer(); ((AbstractImageGL<?>) image).draw(shader, topTransform(), tint, dx, dy, dw, dh, sx, sy, sw, sh); return this; }
@Deprecated @Override public Surface setTransform(float m00, float m01, float m10, float m11, float tx, float ty) { topTransform().setTransform(m00, m01, m10, m11, tx, ty); return this; }
@Override public Surface fillTriangles(float[] xys, int[] indices) { return fillTriangles(xys, 0, xys.length, indices, 0, indices.length, 0); }
@Override public Surface drawLayer(Layer layer) { bindFramebuffer(); ((LayerGL) layer).paint(topTransform(), tint, shader); return this; }
@Override public Surface transform(float m00, float m01, float m10, float m11, float tx, float ty) { topTransform().concatenate(m00, m01, m10, m11, tx, ty, 0, 0); return this; }
@Override public Surface fillTriangles(float[] xys, float[] sxys, int xysOffset, int xysLen, int[] indices, int indicesOffset, int indicesLen, int indexBase) { bindFramebuffer(); if (fillPattern == null) throw new IllegalStateException("No fill pattern currently set"); int tex = fillPattern.ensureTexture(); if (tex > 0) { GLShader shader = ctx.trisShader(this.shader).prepareTexture(tex, tint); shader.addTriangles(topTransform(), xys, sxys, xysOffset, xysLen, indices, indicesOffset, indicesLen, indexBase); } return this; }
@Override public Surface save() { transformStack.add(ctx.createTransform().set(topTransform())); return this; }
@Override public Surface fillRect(float x, float y, float width, float height) { bindFramebuffer(); GLShader shader = ctx.quadShader(this.shader); if (fillPattern != null) { int tex = fillPattern.ensureTexture(); if (tex > 0) { shader.prepareTexture(tex, tint); float tw = fillPattern.width(), th = fillPattern.height(), r = x+width, b = y+height; shader.addQuad(topTransform(), x, y, x+width, y+height, x / tw, y / th, r / tw, b / th); } } else { int tex = ctx.fillImage().ensureTexture(); shader.prepareTexture(tex, Tint.combine(fillColor, tint)); shader.addQuad(topTransform(), x, y, x+width, y+height, 0, 0, 1, 1); } return this; }
@Override public Surface fillTriangles(float[] xys, int xysOffset, int xysLen, int[] indices, int indicesOffset, int indicesLen, int indexBase) { bindFramebuffer(); GLShader shader = ctx.trisShader(this.shader); if (fillPattern != null) { int tex = fillPattern.ensureTexture(); if (tex > 0) { shader.prepareTexture(tex, tint); shader.addTriangles(topTransform(), xys, xysOffset, xysLen, fillPattern.width(), fillPattern.height(), indices, indicesOffset, indicesLen, indexBase); } } else { int tex = ctx.fillImage().ensureTexture(); shader.prepareTexture(tex, Tint.combine(fillColor, tint)); shader.addTriangles(topTransform(), xys, xysOffset, xysLen, 1, 1, indices, indicesOffset, indicesLen, indexBase); } return this; }
@Override public Surface drawLine(float x0, float y0, float x1, float y1, float width) { bindFramebuffer(); l.setRotation(FloatMath.atan2(dy, dx)); l.setTranslation(x0 + wy, y0 - wx); l.preConcatenate(topTransform());