WarpPI/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java
2018-04-02 00:47:33 +02:00

81 lines
1.9 KiB
Java
Executable File

package org.warp.picalculator.gui.graphicengine.gpu;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.warp.picalculator.gui.graphicengine.GraphicEngine;
import org.warp.picalculator.gui.graphicengine.Skin;
import org.warp.picalculator.gui.graphicengine.gpu.GPURenderer.OpenedTextureData;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2ES1;
import com.jogamp.opengl.GLException;
import com.jogamp.opengl.util.texture.Texture;
public class GPUSkin implements Skin {
public Texture t;
public int w;
public int h;
private String texturePath;
private boolean initialized = false;
private boolean isResource;
GPUSkin(GraphicEngine d, String file) throws IOException {
load(file);
}
@Override
public void load(String file) throws IOException {
boolean isResource = !Files.exists(Paths.get(file));
if (isResource && (this.getClass().getClassLoader().getResource(file)) == null) {
throw new IOException("File '" + file + "' not found!");
}
texturePath = file;
this.isResource = isResource;
}
@Override
public void initialize(GraphicEngine d) {
try {
final OpenedTextureData i = GPURenderer.openTexture(texturePath, isResource);
final GL2ES1 gl = GPURenderer.gl;
t = GPURenderer.importTexture(i.f, i.deleteOnExit);
w = i.w;
h = i.h;
((GPUEngine)d).registerTexture(t);
initialized = true;
} catch (GLException | IOException e) {
e.printStackTrace();
System.exit(1);
}
}
@Override
public void use(GraphicEngine d) {
if (!initialized) {
initialize(d);
}
final GPURenderer r = (GPURenderer) d.getRenderer();
r.useTexture(t, w, h);
}
@Override
public boolean isInitialized() {
return initialized;
}
@Override
public int getSkinWidth() {
return w;
}
@Override
public int getSkinHeight() {
return h;
}
}