56 lines
1.5 KiB
Java
56 lines
1.5 KiB
Java
package speiger.src.coreengine.rendering.textures.simple;
|
|
|
|
import org.lwjgl.opengl.GL45;
|
|
import org.lwjgl.stb.STBImage;
|
|
import org.lwjgl.system.MemoryUtil;
|
|
|
|
import speiger.src.coreengine.assets.base.IAssetProvider;
|
|
import speiger.src.coreengine.rendering.textures.base.BaseTexture;
|
|
import speiger.src.coreengine.rendering.textures.base.TextureMetadata;
|
|
|
|
public class DirectTexture extends BaseTexture {
|
|
int width;
|
|
int height;
|
|
long imageData;
|
|
TextureMetadata metadata;
|
|
|
|
public DirectTexture(int width, int height, long imageData, TextureMetadata metadata) {
|
|
this.width = width;
|
|
this.height = height;
|
|
this.imageData = imageData;
|
|
this.metadata = metadata;
|
|
}
|
|
|
|
@Override
|
|
public void load(IAssetProvider provider) {
|
|
loadTexture();
|
|
}
|
|
|
|
@Override
|
|
public void delete(boolean untrack) {
|
|
super.delete(untrack);
|
|
if(imageData == 0L || !untrack) return;
|
|
if(metadata.isSTBData()) {
|
|
STBImage.nstbi_image_free(imageData);
|
|
imageData = 0L;
|
|
}
|
|
else {
|
|
MemoryUtil.nmemFree(imageData);
|
|
imageData = 0;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int width() { return width; }
|
|
@Override
|
|
public int height() { return width; }
|
|
|
|
private void loadTexture() {
|
|
createTexture();
|
|
metadata.applyArguments(id);
|
|
GL45.glTextureStorage2D(id, 1, metadata.getInternalFormat(), width, height);
|
|
GL45.glTextureSubImage2D(id, 0, 0, 0, width, height, metadata.getExternalFormat(), metadata.getDataFormat(), imageData);
|
|
if(metadata.generateMipMappings()) GL45.glGenerateTextureMipmap(id);
|
|
}
|
|
}
|