Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

AssetLoader исходник

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
6 Ноя 2023
Сообщения
59
Реакции
0
Что такое AssetLoader? AssetLoader он скачивает с прямой ссылки на ассет и преобразовывает его в нативный формат. Как дополнительная защита на ассеты пойдет

Java:
Expand Collapse Copy
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class AssetLoader {
    private static final Map<String, Integer> textureCache = new ConcurrentHashMap<>();

    public static int loadTexture(String urlString) {
        return textureCache.computeIfAbsent(urlString, key -> {
            BufferedImage image = downloadImage(urlString);
            if (image != null) {
                return convertToNativeTexture(image);
            }
            return -1;
        });
    }

    private static BufferedImage downloadImage(String urlString) {
        try {
            URL url = new URL(urlString);
            return ImageIO.read(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    private static int convertToNativeTexture(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        int[] pixels = new int[width * height];
        image.getRGB(0, 0, width, height, pixels, 0, width);

        ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 4);

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                int pixel = pixels[y * width + x];
                buffer.put((byte) ((pixel >> 16) & 0xFF));
                buffer.put((byte) ((pixel >> 8) & 0xFF));
                buffer.put((byte) (pixel & 0xFF));
                buffer.put((byte) ((pixel >> 24) & 0xFF));
            }
        }

        buffer.flip();

        int textureId = GL11.glGenTextures();
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer);

        return textureId;
    }
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что такое AssetLoader? AssetLoader он скачивает с прямой ссылки на ассет и преобразовывает его в нативный формат. Как дополнительная защита на ассеты пойдет

Java:
Expand Collapse Copy
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class AssetLoader {
    private static final Map<String, Integer> textureCache = new ConcurrentHashMap<>();

    public static int loadTexture(String urlString) {
        return textureCache.computeIfAbsent(urlString, key -> {
            BufferedImage image = downloadImage(urlString);
            if (image != null) {
                return convertToNativeTexture(image);
            }
            return -1;
        });
    }

    private static BufferedImage downloadImage(String urlString) {
        try {
            URL url = new URL(urlString);
            return ImageIO.read(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    private static int convertToNativeTexture(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        int[] pixels = new int[width * height];
        image.getRGB(0, 0, width, height, pixels, 0, width);

        ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 4);

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                int pixel = pixels[y * width + x];
                buffer.put((byte) ((pixel >> 16) & 0xFF));
                buffer.put((byte) ((pixel >> 8) & 0xFF));
                buffer.put((byte) (pixel & 0xFF));
                buffer.put((byte) ((pixel >> 24) & 0xFF));
            }
        }

        buffer.flip();

        int textureId = GL11.glGenTextures();
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer);

        return textureId;
    }
}
на хуй пойдет?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
eto burger king ready ????????????!!!!!!!!!!!!!!!!!!!!!!!!!!
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
блять как же я ору с этих квадратно головых пидорасов которые друг друга называют пастерами :tearsofjoy:
 
блять как же я ору с этих квадратно головых пидорасов которые друг друга называют пастерами :tearsofjoy:
Не представляешь как весь югейм с этого орёт :tearsofjoy::tearsofjoy:
Это из категории «он показывал писюн»
 
я тебя спрашивал? гуляй пастер
1708260652660.png
 
Назад
Сверху Снизу