@Override public void drawMesh(Mesh mesh, Material material, Rect2i region, Quat4f rotation, Vector3f offset, float scale) { if (material == null) { logger.warn("Attempted to draw with nonexistent material"); return; } if (mesh == null) { logger.warn("Attempted to draw nonexistent mesh"); return; } Rect2i drawRegion = relativeToAbsolute(region); if (!state.cropRegion.overlaps(drawRegion)) { return; } renderer.drawMesh(mesh, material, drawRegion, drawRegion.intersect(state.cropRegion), rotation, offset, scale, state.getAlpha()); }
@Override public void drawTextureRaw(TextureRegion texture, Rect2i region, Color color, ScaleMode mode, float ux, float uy, float uw, float uh) { if (!state.cropRegion.overlaps(relativeToAbsolute(region))) { return; } Rect2i absoluteRegion = relativeToAbsolute(region); Rect2i cropRegion = absoluteRegion.intersect(state.cropRegion); if (!cropRegion.isEmpty()) { if (state.drawOnTop) { drawOnTopOperations.add(new DrawTextureOperation(texture, color, mode, absoluteRegion, cropRegion, ux, uy, uw, uh, state.getAlpha())); } else { renderer.drawTexture(texture, color, mode, absoluteRegion, ux, uy, uw, uh, state.getAlpha()); } } }
@Override public void drawMaterial(Material material, Rect2i region) { if (material.isRenderable()) { Rect2i drawRegion = relativeToAbsolute(region); if (!state.cropRegion.overlaps(drawRegion)) { return; } material.setFloat("alpha", state.getAlpha()); material.bindTextures(); renderer.drawMaterialAt(material, drawRegion); } }
@Override public void drawTextureRawBordered(TextureRegion texture, Rect2i region, Border border, boolean tile, float ux, float uy, float uw, float uh) { if (!state.cropRegion.overlaps(relativeToAbsolute(region))) { return; } Rect2i absoluteRegion = relativeToAbsolute(region); Rect2i cropRegion = absoluteRegion.intersect(state.cropRegion); if (!cropRegion.isEmpty()) { if (state.drawOnTop) { drawOnTopOperations.add(new DrawBorderedTextureOperation(texture, absoluteRegion, border, tile, cropRegion, ux, uy, uw, uh, state.getAlpha())); } else { renderer.drawTextureBordered(texture, absoluteRegion, border, tile, ux, uy, uw, uh, state.getAlpha()); } } }
@Test public void testOverlap() { assertTrue(Rect2i.createFromMinAndSize(5, 5, 472, 17).overlaps(Rect2i.createFromMinAndSize(5, 5, 1, 16))); }