Skip to content

Commit 706c4bb

Browse files
committed
Rename texture providers to bitmap providers
1 parent c65bac3 commit 706c4bb

9 files changed

Lines changed: 47 additions & 48 deletions

File tree

src/main/java/org/teacon/slides/renderer/TextureSequence.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.teacon.slides.SlideShow;
1010
import org.teacon.slides.block.ProjectorBlockEntity;
1111
import org.teacon.slides.calc.Concrete;
12-
import org.teacon.slides.texture.TextureProvider;
12+
import org.teacon.slides.renderer.bitmap.BitmapProvider;
1313

1414
import java.util.ArrayList;
1515
import java.util.Collections;
@@ -75,7 +75,7 @@ public void addLoadingIcon() {
7575
this.elements.add(IconCentered.DEFAULT_EMPTY);
7676
}
7777

78-
public void addTexture(TextureProvider provider, Concrete.Size size) {
78+
public void addTexture(BitmapProvider provider, Concrete.Size size) {
7979
this.recommends.add(provider.getRecommendedName());
8080
var textureSize = Util.make(new Vector2i(), provider::getSize);
8181
var concrete = Concrete.from(size, this.sizeMicros, textureSize);
@@ -135,7 +135,7 @@ void render(MultiBufferSource src, PoseStack.Pose pose,
135135
int light, int overlay, long tick, float partialTick);
136136
}
137137

138-
private record Texture(TextureProvider provider, Concrete concrete, int x, int y, int w, int h) implements Elem {
138+
private record Texture(BitmapProvider provider, Concrete concrete, int x, int y, int w, int h) implements Elem {
139139
@Override
140140
public void render(MultiBufferSource src, PoseStack.Pose pose,
141141
Vector2i viewportMicros, Vector2i scaleHint,

src/main/java/org/teacon/slides/renderer/TextureState.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@
3434
import org.teacon.slides.cache.ImageCache;
3535
import org.teacon.slides.item.SlideItem;
3636
import org.teacon.slides.network.SlideURLRequestPacket;
37-
import org.teacon.slides.texture.*;
37+
import org.teacon.slides.renderer.bitmap.BitmapProvider;
38+
import org.teacon.slides.renderer.bitmap.GIFBitmapProvider;
39+
import org.teacon.slides.renderer.bitmap.StaticBitmapProvider;
40+
import org.teacon.slides.renderer.bitmap.WebPBitmapProvider;
41+
import org.teacon.slides.renderer.decoder.GIFDecoder;
3842
import org.teacon.slides.url.ProjectorURL;
3943

4044
import javax.annotation.Nullable;
@@ -233,7 +237,7 @@ public static void appendTextureSequence(SlideItem.Entry entry, TextureSequence
233237
private int mRecycleCounter;
234238
private int mRequestCounter;
235239
private boolean mTimeoutCheckAtUpdate;
236-
private @Nullable TextureProvider mProvider;
240+
private @Nullable BitmapProvider mProvider;
237241

238242
private TextureState(ProjectorURL location) {
239243
mState = State.INITIAL;
@@ -246,7 +250,7 @@ private TextureState(ProjectorURL location) {
246250
private void refresh(ProjectorURL location) {
247251
var requestCounter = mRequestCounter;
248252
ImageCache.getInstance().getResource(location.toUrl(), true).thenCompose(entry -> {
249-
var future = new CompletableFuture<TextureProvider>();
253+
var future = new CompletableFuture<BitmapProvider>();
250254
var providerFactory = dispatchProviderFactory(entry);
251255
RenderSystem.recordRenderCall(() -> {
252256
try {
@@ -270,7 +274,7 @@ private void refresh(ProjectorURL location) {
270274
}
271275
}));
272276
ImageCache.getInstance().getResource(location.toUrl(), false).thenCompose(entry -> {
273-
var future = new CompletableFuture<TextureProvider>();
277+
var future = new CompletableFuture<BitmapProvider>();
274278
var providerFactory = dispatchProviderFactory(entry);
275279
RenderSystem.recordRenderCall(() -> {
276280
try {
@@ -290,7 +294,7 @@ private void refresh(ProjectorURL location) {
290294
}));
291295
}
292296

293-
private void transferState(State state, @Nullable TextureProvider provider) {
297+
private void transferState(State state, @Nullable BitmapProvider provider) {
294298
var old = mProvider;
295299
mProvider = provider;
296300
if (old != null && old != provider) {
@@ -328,7 +332,7 @@ public String toString() {
328332
"counter=" + mRecycleCounter + ", requests=" + mRequestCounter + "}";
329333
}
330334

331-
private static Callable<TextureProvider> throwIOE(String message) {
335+
private static Callable<BitmapProvider> throwIOE(String message) {
332336
return () -> {
333337
throw new IOException(message);
334338
};
@@ -340,17 +344,17 @@ private static Callable<TextureProvider> throwIOE(String message) {
340344
* @param nameDataEntry image file name & compressed image data
341345
* @return texture
342346
*/
343-
private static Callable<TextureProvider> dispatchProviderFactory(Map.Entry<String, byte[]> nameDataEntry) {
347+
private static Callable<BitmapProvider> dispatchProviderFactory(Map.Entry<String, byte[]> nameDataEntry) {
344348
var name = nameDataEntry.getKey();
345349
var data = nameDataEntry.getValue();
346350
// gif
347351
var isGif = name.endsWith(".gif") || GIFDecoder.checkMagic(data);
348352
if (isGif) {
349353
// TODO: decode GIFs asynchronously
350-
return () -> new GIFTextureProvider(name, data);
354+
return () -> new GIFBitmapProvider(name, data);
351355
}
352356
// webp detector
353-
var featureWebP = name.endsWith(".webp") || WebPDecoder.checkMagic(data) ? new WebPBitstreamFeatures() : null;
357+
var featureWebP = name.endsWith(".webp") || WebPBitmapProvider.checkMagic(data) ? new WebPBitstreamFeatures() : null;
354358
if (featureWebP != null) {
355359
var success = VP8StatusCode.getStatusCode(NativeWebP.getFeatures(data, data.length, featureWebP));
356360
if (success != VP8StatusCode.VP8_STATUS_OK) {
@@ -365,7 +369,7 @@ private static Callable<TextureProvider> dispatchProviderFactory(Map.Entry<Strin
365369
return throwIOE("Failed to decode animated webp image.");
366370
}
367371
if (webPData.getFrameCount() > 1) {
368-
return () -> new WebPTextureProvider(name, data.length, webPData, featureWebP.isHasAlpha());
372+
return () -> new WebPBitmapProvider(name, data.length, webPData, featureWebP.isHasAlpha());
369373
}
370374
}
371375
var img = new NativeImage[1];
@@ -404,7 +408,7 @@ private static Callable<TextureProvider> dispatchProviderFactory(Map.Entry<Strin
404408
}
405409
}
406410
// construct static provider
407-
return () -> new StaticTextureProvider(name, Objects.requireNonNull(img[0]));
411+
return () -> new StaticBitmapProvider(name, Objects.requireNonNull(img[0]));
408412
}
409413

410414
public enum State {

src/main/java/org/teacon/slides/texture/TextureProvider.java renamed to src/main/java/org/teacon/slides/renderer/bitmap/BitmapProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.teacon.slides.texture;
1+
package org.teacon.slides.renderer.bitmap;
22

33
import net.minecraft.FieldsAreNonnullByDefault;
44
import net.minecraft.MethodsReturnNonnullByDefault;
@@ -10,7 +10,7 @@
1010
@FieldsAreNonnullByDefault
1111
@MethodsReturnNonnullByDefault
1212
@ParametersAreNonnullByDefault
13-
public interface TextureProvider extends AutoCloseable {
13+
public interface BitmapProvider extends AutoCloseable {
1414
int MAX_TEXTURE_SIZE = 4096;
1515

1616
SlideRenderType updateAndGet(long tick, float partialTick);

src/main/java/org/teacon/slides/texture/GIFTextureProvider.java renamed to src/main/java/org/teacon/slides/renderer/bitmap/GIFBitmapProvider.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
package org.teacon.slides.texture;
1+
package org.teacon.slides.renderer.bitmap;
22

33
import com.mojang.blaze3d.platform.GlStateManager;
44
import net.minecraft.FieldsAreNonnullByDefault;
55
import net.minecraft.MethodsReturnNonnullByDefault;
66
import org.joml.Vector2i;
77
import org.lwjgl.system.MemoryUtil;
88
import org.teacon.slides.renderer.SlideRenderType;
9+
import org.teacon.slides.renderer.decoder.GIFDecoder;
10+
import org.teacon.slides.renderer.decoder.LZWDecoder;
911

1012
import javax.annotation.Nullable;
1113
import javax.annotation.ParametersAreNonnullByDefault;
@@ -18,7 +20,7 @@
1820
@FieldsAreNonnullByDefault
1921
@MethodsReturnNonnullByDefault
2022
@ParametersAreNonnullByDefault
21-
public final class GIFTextureProvider implements TextureProvider {
23+
public final class GIFBitmapProvider implements BitmapProvider {
2224

2325
private static final LZWDecoder gRenderThreadDecoder = new LZWDecoder();
2426

@@ -36,7 +38,7 @@ public final class GIFTextureProvider implements TextureProvider {
3638

3739
private final int mCPUMemorySize;
3840

39-
public GIFTextureProvider(String name, byte[] data) throws IOException {
41+
public GIFBitmapProvider(String name, byte[] data) throws IOException {
4042
try {
4143
mDecoder = new GIFDecoder(ByteBuffer.wrap(data), gRenderThreadDecoder);
4244
final int width = mDecoder.getScreenWidth();

src/main/java/org/teacon/slides/texture/StaticTextureProvider.java renamed to src/main/java/org/teacon/slides/renderer/bitmap/StaticBitmapProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.teacon.slides.texture;
1+
package org.teacon.slides.renderer.bitmap;
22

33
import com.mojang.blaze3d.platform.GlStateManager;
44
import com.mojang.blaze3d.platform.NativeImage;
@@ -19,14 +19,14 @@
1919
@FieldsAreNonnullByDefault
2020
@MethodsReturnNonnullByDefault
2121
@ParametersAreNonnullByDefault
22-
public final class StaticTextureProvider implements TextureProvider {
22+
public final class StaticBitmapProvider implements BitmapProvider {
2323

2424
private int mTexture;
2525
private final SlideRenderType mRenderType;
2626
private final String mRecommendedName;
2727
private final int mWidth, mHeight;
2828

29-
public StaticTextureProvider(String name, NativeImage image) throws IOException {
29+
public StaticBitmapProvider(String name, NativeImage image) throws IOException {
3030
try {
3131
mWidth = image.getWidth();
3232
mHeight = image.getHeight();

src/main/java/org/teacon/slides/texture/WebPTextureProvider.java renamed to src/main/java/org/teacon/slides/renderer/bitmap/WebPBitmapProvider.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
package org.teacon.slides.texture;
1+
package org.teacon.slides.renderer.bitmap;
22

33
import com.mojang.blaze3d.platform.GlStateManager;
44
import dev.matrixlab.webp4j.model.AnimatedWebPData;
55
import net.minecraft.FieldsAreNonnullByDefault;
66
import net.minecraft.MethodsReturnNonnullByDefault;
77
import net.minecraft.util.Mth;
8+
import org.apache.commons.lang3.ArrayUtils;
89
import org.joml.Vector2i;
910
import org.lwjgl.system.MemoryUtil;
1011
import org.teacon.slides.renderer.SlideRenderType;
@@ -13,6 +14,7 @@
1314
import javax.annotation.ParametersAreNonnullByDefault;
1415
import java.io.IOException;
1516
import java.nio.ByteBuffer;
17+
import java.nio.ByteOrder;
1618
import java.util.Arrays;
1719
import java.util.Objects;
1820

@@ -22,7 +24,19 @@
2224
@FieldsAreNonnullByDefault
2325
@MethodsReturnNonnullByDefault
2426
@ParametersAreNonnullByDefault
25-
public final class WebPTextureProvider implements TextureProvider {
27+
public final class WebPBitmapProvider implements BitmapProvider {
28+
public static boolean checkMagic(byte[] buf) {
29+
if (buf.length >= 12) {
30+
var wr = ByteBuffer.wrap(buf).order(ByteOrder.LITTLE_ENDIAN);
31+
var riff = wr.getInt() == 0x46464952; // RIFF in LITTLE ENDIAN
32+
var size = wr.getInt() == buf.length - 8; // SIZE - 8 of image
33+
var webp = wr.getInt() == 0x50424557; // WEBP in LITTLE ENDIAN
34+
var vp8_ = ArrayUtils.contains(new int[]{0x58385056, 0x4C385056, 0x20385056}, wr.getInt()); // VP8[XL\x20] in LITTLE ENDIAN;
35+
return riff && size && webp && vp8_;
36+
}
37+
return false;
38+
}
39+
2640
private int mTexture;
2741
private final SlideRenderType mRenderType;
2842

@@ -42,7 +56,7 @@ public final class WebPTextureProvider implements TextureProvider {
4256

4357
private final int mCPUMemorySize;
4458

45-
public WebPTextureProvider(String name, int byteCount, AnimatedWebPData data, boolean hasAlpha) throws IOException {
59+
public WebPBitmapProvider(String name, int byteCount, AnimatedWebPData data, boolean hasAlpha) throws IOException {
4660
try {
4761
// check canvas size
4862
var width = data.getCanvasWidth();

src/main/java/org/teacon/slides/texture/GIFDecoder.java renamed to src/main/java/org/teacon/slides/renderer/decoder/GIFDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* License along with Modern UI. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
package org.teacon.slides.texture;
19+
package org.teacon.slides.renderer.decoder;
2020

2121
import javax.annotation.Nonnull;
2222
import javax.annotation.Nullable;

src/main/java/org/teacon/slides/texture/LZWDecoder.java renamed to src/main/java/org/teacon/slides/renderer/decoder/LZWDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* License along with Modern UI. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
package org.teacon.slides.texture;
19+
package org.teacon.slides.renderer.decoder;
2020

2121
import java.nio.BufferUnderflowException;
2222
import java.nio.ByteBuffer;

src/main/java/org/teacon/slides/texture/WebPDecoder.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)