package de.lessvoid.nifty.render;
import de.lessvoid.nifty.render.NiftyImageManager.ReferencedCountedImage;
import de.lessvoid.nifty.screen.Screen;
import de.lessvoid.nifty.spi.render.RenderDevice;
import de.lessvoid.nifty.spi.render.RenderImage;
import javax.annotation.Nonnull;
import java.util.Collection;
import java.util.logging.Logger;
public class NiftyImageManagerExtStandard implements NiftyImageManagerExt<ReferencedCountedImage> {
@Override
public void registerImage(@Nonnull final Screen screen, @Nonnull final ReferencedCountedImage image) {
}
@Override
public void unregisterImage(@Nonnull final ReferencedCountedImage reference) {
}
@Override
public void uploadScreenImages(@Nonnull final Screen screen) {
}
@Override
public void unloadScreenImages(
@Nonnull final Screen screen,
@Nonnull final RenderDevice renderDevice,
@Nonnull final Collection<ReferencedCountedImage> imageSet) {
}
@Override
public void screenAdded(@Nonnull final Screen screen) {
}
@Override
public void screenRemoved(@Nonnull final Screen screen) {
}
@Override
public void addScreenInfo(@Nonnull final StringBuffer result) {
}
@Nonnull
@Override
public ReferencedCountedImage createReferencedCountedImage(
@Nonnull final RenderDevice renderDevice,
@Nonnull final Screen screen,
@Nonnull final String filename,
final boolean filterLinear,
@Nonnull final RenderImage renderImage,
@Nonnull final String key) {
return new ReferencedCountedImageStandard(renderDevice, screen, filename, filterLinear, renderImage, key);
}
/**
* A standard implementation of a ReferencedCountedImage without Batch support.
*
* @author void
*/
public static class ReferencedCountedImageStandard implements ReferencedCountedImage {
private static final Logger log = Logger.getLogger(ReferencedCountedImageStandard.class.getName());
@Nonnull
private final RenderDevice renderDevice;
@Nonnull
private final Screen screen;
@Nonnull
private final String filename;
private final boolean filterLinear;
@Nonnull
private final String key;
@Nonnull
private RenderImage renderImage;
private int references;
public ReferencedCountedImageStandard(
@Nonnull final RenderDevice renderDevice,
@Nonnull final Screen screen,
@Nonnull final String filename,
final boolean filterLinear,
@Nonnull final RenderImage renderImage,
@Nonnull final String key) {
this.renderDevice = renderDevice;
this.screen = screen;
this.filename = filename;
this.filterLinear = filterLinear;
this.key = key;
this.renderImage = renderImage;
this.references = 1;
}
@Nonnull
@Override
public RenderImage reload() {
RenderImage newImage = renderDevice.createImage(filename, filterLinear);
if (newImage == null) {
log.warning("Reloading of image failed! Keeping the old image alive.");
} else {
renderImage.dispose();
renderImage = newImage;
}
return renderImage;
}
@Nonnull
@Override
public RenderImage addReference() {
references++;
return renderImage;
}
@Override
public boolean removeReference() {
references--;
if (references == 0) {
renderImage.dispose();
return true;
}
return false;
}
@Override
public int getReferences() {
return references;
}
@Nonnull
@Override
public RenderImage getRenderImage() {
return renderImage;
}
@Nonnull
@Override
public String getName() {
return key;
}
@Nonnull
@Override
public Screen getScreen() {
return screen;
}
@Nonnull
@Override
public String toString() {
return " - [" + getName() + "] reference count [" + getReferences() + "]\n";
}
}
}