Make ImageManager shares common Mesh 1x1 among all images

This commit is contained in:
2021-03-23 13:00:21 +01:00
parent ba748a738f
commit 6ee0f2a6cd
4 changed files with 54 additions and 11 deletions

View File

@@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.engine.world.image.manager;
import com.bartlomiejpluta.base.api.image.Image;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager;
import com.bartlomiejpluta.base.engine.error.AppException;
import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration;
@@ -29,7 +30,12 @@ public class DefaultImageManager implements ImageManager {
private final Map<String, ImageAsset> assets = new HashMap<>();
private final Map<String, ByteBuffer> imageBuffers = new HashMap<>();
private final ProjectConfiguration configuration;
private Mesh mesh;
@Override
public void init() {
mesh = meshManager.createQuad(1, 1, 0, 0);
}
@Override
public void registerAsset(ImageAsset asset) {
@@ -52,7 +58,6 @@ public class DefaultImageManager implements ImageManager {
var gcd = MathUtil.gcdEuclidean(width, height);
var initialWidth = width / gcd;
var initialHeight = height / gcd;
var mesh = meshManager.createQuad(initialWidth, initialHeight, 0, 0);
var material = Material.textured(texture);
log.info("Creating new image on asset with UID: [{}]", uid);

View File

@@ -1,10 +1,11 @@
package com.bartlomiejpluta.base.engine.world.image.manager;
import com.bartlomiejpluta.base.api.image.Image;
import com.bartlomiejpluta.base.engine.common.init.Initianizable;
import com.bartlomiejpluta.base.engine.common.manager.AssetManager;
import com.bartlomiejpluta.base.engine.common.manager.ByteBufferAssetManager;
import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset;
import com.bartlomiejpluta.base.internal.gc.Cleanable;
public interface ImageManager extends AssetManager<ImageAsset, Image>, ByteBufferAssetManager<ImageAsset>, Cleanable {
public interface ImageManager extends Initianizable, AssetManager<ImageAsset, Image>, ByteBufferAssetManager<ImageAsset>, Cleanable {
}

View File

@@ -6,9 +6,11 @@ import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.world.object.Sprite;
import lombok.Getter;
import lombok.NonNull;
import org.joml.Vector2f;
@Getter
public class DefaultImage extends Sprite implements Image {
private final Vector2f imageScale = new Vector2f(1, 1);
private final int primaryWidth;
private final int primaryHeight;
private final int factor;
@@ -23,6 +25,8 @@ public class DefaultImage extends Sprite implements Image {
this.width = primaryWidth * factor;
this.height = primaryHeight * factor;
super.setScale(width * imageScale.x, height * imageScale.y);
}
@Override
@@ -34,4 +38,39 @@ public class DefaultImage extends Sprite implements Image {
public float getOpacity() {
return material.getColor().w();
}
@Override
public void setScaleX(float scaleX) {
this.imageScale.x = scaleX;
super.setScaleX(width * scaleX);
}
@Override
public void setScaleY(float scaleY) {
this.imageScale.y = scaleY;
super.setScaleY(height * scaleY);
}
@Override
public void setScale(float scale) {
this.imageScale.x = scale;
this.imageScale.y = scale;
super.setScale(width * scale, height * scale);
}
public void setScale(float scaleX, float scaleY) {
this.imageScale.x = scaleX;
this.imageScale.y = scaleY;
super.setScale(width * scaleX, height * scaleY);
}
@Override
public float getScaleX() {
return imageScale.x;
}
@Override
public float getScaleY() {
return imageScale.y;
}
}

View File

@@ -19,14 +19,13 @@ public class DefaultImageLayer extends BaseLayer implements ImageLayer {
@NonNull
@Getter
private Image image;
private float imagePrimaryWidth;
private float imagePrimaryHeight;
private float imageWidth;
private float imageHeight;
private float x;
private float y;
private float scaleX;
private float scaleY;
private float factor;
@NonNull
private ImageLayerMode mode;
@@ -57,17 +56,16 @@ public class DefaultImageLayer extends BaseLayer implements ImageLayer {
private void recalculate() {
switch (mode) {
case NORMAL -> image.setScale(factor * scaleX, factor * scaleY);
case FIT_MAP -> image.setScale(mapWidth / imagePrimaryWidth, mapHeight / imagePrimaryHeight);
case NORMAL -> image.setScale(scaleX, scaleY);
case FIT_MAP -> image.setScale(mapWidth / imageWidth, mapHeight / imageHeight);
}
}
@Override
public void setImage(Image image) {
this.image = image;
this.imagePrimaryWidth = image.getPrimaryWidth();
this.imagePrimaryHeight = image.getPrimaryHeight();
this.factor = image.getFactor();
this.imageWidth = image.getWidth();
this.imageHeight = image.getHeight();
this.image.setPosition(x, y);
@@ -115,7 +113,7 @@ public class DefaultImageLayer extends BaseLayer implements ImageLayer {
}
if (mode == ImageLayerMode.FIT_SCREEN) {
image.setScale(screen.getWidth() / imagePrimaryWidth, screen.getHeight() / imagePrimaryHeight);
image.setScale(screen.getWidth() / imageWidth, screen.getHeight() / imageHeight);
}
image.render(screen, camera, shaderManager);