Make ImageManager shares common Mesh 1x1 among all images
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user