From 79286bbf5385c3144a8f214344ac0b8430d532a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Sun, 14 Mar 2021 11:30:29 +0100 Subject: [PATCH] Create ByteBufferAssetManager --- .../manager/ByteBufferAssetManager.java | 9 +++++++ .../engine/context/model/DefaultContext.java | 2 +- .../gui/manager/DefaultFontManager.java | 5 ++-- .../base/engine/gui/manager/FontManager.java | 5 ++-- .../base/engine/gui/model/Font.java | 13 ---------- .../base/engine/gui/render/NanoVGGUI.java | 22 +++++++++-------- .../image/manager/DefaultImageManager.java | 24 +++++++++++++++++++ .../world/image/manager/ImageManager.java | 3 ++- 8 files changed, 52 insertions(+), 31 deletions(-) create mode 100644 engine/src/main/java/com/bartlomiejpluta/base/engine/common/manager/ByteBufferAssetManager.java delete mode 100644 engine/src/main/java/com/bartlomiejpluta/base/engine/gui/model/Font.java diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/common/manager/ByteBufferAssetManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/common/manager/ByteBufferAssetManager.java new file mode 100644 index 00000000..7cb7a187 --- /dev/null +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/common/manager/ByteBufferAssetManager.java @@ -0,0 +1,9 @@ +package com.bartlomiejpluta.base.engine.common.manager; + +import java.nio.ByteBuffer; + +public interface ByteBufferAssetManager { + void registerAsset(A asset); + + ByteBuffer loadObjectByteBuffer(String uid); +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/context/model/DefaultContext.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/context/model/DefaultContext.java index e9847d8d..bb6befd9 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/context/model/DefaultContext.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/context/model/DefaultContext.java @@ -100,7 +100,7 @@ public class DefaultContext implements Context { @Override public GUI newGUI() { log.info("Creating new GUI"); - var gui = new NanoVGGUI(fontManager); + var gui = new NanoVGGUI(fontManager, imageManager); guis.add(gui); gui.init(screen); return gui; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/DefaultFontManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/DefaultFontManager.java index f9ece976..aac5a861 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/DefaultFontManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/DefaultFontManager.java @@ -2,7 +2,6 @@ package com.bartlomiejpluta.base.engine.gui.manager; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.gui.asset.FontAsset; -import com.bartlomiejpluta.base.engine.gui.model.Font; import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration; import com.bartlomiejpluta.base.engine.util.res.ResourcesManager; import lombok.RequiredArgsConstructor; @@ -30,7 +29,7 @@ public class DefaultFontManager implements FontManager { } @Override - public Font loadObject(String uid) { + public ByteBuffer loadObjectByteBuffer(String uid) { var buffer = fontBuffers.get(uid); if (buffer == null) { @@ -46,6 +45,6 @@ public class DefaultFontManager implements FontManager { fontBuffers.put(uid, buffer); } - return new Font(uid, buffer.duplicate()); + return buffer.duplicate(); } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/FontManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/FontManager.java index fb840955..41eb8c19 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/FontManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/manager/FontManager.java @@ -1,8 +1,7 @@ package com.bartlomiejpluta.base.engine.gui.manager; -import com.bartlomiejpluta.base.engine.common.manager.AssetManager; +import com.bartlomiejpluta.base.engine.common.manager.ByteBufferAssetManager; import com.bartlomiejpluta.base.engine.gui.asset.FontAsset; -import com.bartlomiejpluta.base.engine.gui.model.Font; -public interface FontManager extends AssetManager { +public interface FontManager extends ByteBufferAssetManager { } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/model/Font.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/model/Font.java deleted file mode 100644 index 4ab891d0..00000000 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/model/Font.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.bartlomiejpluta.base.engine.gui.model; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -import java.nio.ByteBuffer; - -@Getter -@RequiredArgsConstructor -public class Font { - private final String name; - private final ByteBuffer byteBuffer; -} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java index 4d41dfec..0215e914 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java @@ -11,10 +11,15 @@ import com.bartlomiejpluta.base.api.internal.render.ShaderManager; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.gui.manager.FontManager; import com.bartlomiejpluta.base.engine.gui.widget.ScreenWidget; +import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager; import lombok.Getter; +import lombok.RequiredArgsConstructor; import org.lwjgl.nanovg.NVGColor; +import org.springframework.beans.factory.annotation.Autowired; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import static org.lwjgl.nanovg.NanoVG.*; @@ -22,22 +27,19 @@ import static org.lwjgl.nanovg.NanoVGGL3.*; import static org.lwjgl.system.MemoryUtil.NULL; @Getter +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class NanoVGGUI implements GUI { + private final FontManager fontManager; + private final ImageManager imageManager; + private long context; - private ScreenWidget screenWidget; - private NVGColor fillColor; private NVGColor strokeColor; private final Set loadedFonts = new HashSet<>(); + private final Map loadedImages = new HashMap<>(); private final float[] boundBuffer = new float[4]; - private final FontManager fontManager; - - public NanoVGGUI(FontManager fontManager) { - this.fontManager = fontManager; - } - public void init(Screen screen) { context = nvgCreate(NVG_ANTIALIAS | NVG_STENCIL_STROKES); @@ -213,8 +215,8 @@ public class NanoVGGUI implements GUI { @Override public void setFontFace(String fontUid) { if (!loadedFonts.contains(fontUid)) { - var font = fontManager.loadObject(fontUid); - nvgCreateFontMem(context, fontUid, font.getByteBuffer(), 0); + var fontBuffer = fontManager.loadObjectByteBuffer(fontUid); + nvgCreateFontMem(context, fontUid, fontBuffer, 0); loadedFonts.add(fontUid); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java index d7641a14..d61f8ea5 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java @@ -7,6 +7,7 @@ import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration; import com.bartlomiejpluta.base.engine.util.math.MathUtil; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.util.res.ResourcesManager; import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset; import com.bartlomiejpluta.base.engine.world.image.model.DefaultImage; import lombok.RequiredArgsConstructor; @@ -14,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Map; @@ -23,7 +25,9 @@ import java.util.Map; public class DefaultImageManager implements ImageManager { private final MeshManager meshManager; private final TextureManager textureManager; + private final ResourcesManager resourcesManager; private final Map assets = new HashMap<>(); + private final Map imageBuffers = new HashMap<>(); private final ProjectConfiguration configuration; @@ -55,6 +59,26 @@ public class DefaultImageManager implements ImageManager { return new DefaultImage(mesh, material, initialWidth, initialHeight, gcd); } + @Override + public ByteBuffer loadObjectByteBuffer(String uid) { + var buffer = imageBuffers.get(uid); + + if (buffer == null) { + var asset = assets.get(uid); + + if (asset == null) { + throw new AppException("The image asset with UID: [%s] does not exist", uid); + } + + var source = configuration.projectFile("images", asset.getSource()); + buffer = resourcesManager.loadResourceAsByteBuffer(source); + log.info("Loading image from assets to cache under the key: [{}]", uid); + imageBuffers.put(uid, buffer); + } + + return buffer.duplicate(); + } + @Override public void cleanUp() { log.info("There is nothing to clean up here"); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java index 895ba2c8..4a4b8ab4 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java @@ -3,7 +3,8 @@ package com.bartlomiejpluta.base.engine.world.image.manager; import com.bartlomiejpluta.base.api.game.image.Image; import com.bartlomiejpluta.base.api.internal.gc.Cleanable; 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; -public interface ImageManager extends AssetManager, Cleanable { +public interface ImageManager extends AssetManager, ByteBufferAssetManager, Cleanable { }