繁体   English   中英

LWJGL多线程加载

[英]LWJGL Mutlithreading Loading

我试图用我的objs和纹理创建一个加载线程,而不使用任何opengl函数。 我想出了如何用我的objs做到这一点,但纹理在加载后将变成黑色。 我正在读取加载线程中的所有文件。 完成加载线程后,我将继续创建游戏,因此一旦游戏开始,所有内容都将已加载。

这是我的TextureLoaderThread类

package com.widowmc.threads;

import java.util.HashMap;

import com.widowmc.graphics.textures.TextureData;

public class TextureLoaderThread extends Thread {

    private String[] TERRAINIMGS = {"blendMap", "grassFlowers", "grassy2", "mud", "path"};
    private String[] IMGS = {"fern", "player", "tree"};

    private HashMap<String, TextureData> textureDatas = new HashMap<String, TextureData>();

    @Override
    public void run() {
        synchronized (this) {
            for(String str : TERRAINIMGS) {
                textureDatas.put(str, new TextureData("terrain", str));
                System.out.println("Terrain Image - " + str);
            } 
            for(String str : IMGS) {
                textureDatas.put(str, new TextureData(str));
                System.out.println("Image - " + str);
            } 
            notify();
        }
    }

    public TextureData getTextureData(String name) {
        return textureDatas.get(name);
    }

}

这是我的TextureData类

package com.widowmc.graphics.textures;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.widowmc.utils.MyFile;

public class TextureData {

    public int[] data;
    public int width, height;

    public TextureData(String name) {
        int[] pixels = null;
        try {
            BufferedImage image = ImageIO.read(new MyFile("res/" + name + ".png").getInputStream());
            width = image.getWidth();
            height = image.getHeight();
            pixels = new int[width * height];
            image.getRGB(0, 0, width, height, pixels, 0, width);
        } catch (IOException e) {
            e.printStackTrace();
        }

        data = new int[width * height];
        for (int i = 0; i < width * height; i++) {
            int a = (pixels[i] & 0xff000000) >> 24;
            int r = (pixels[i] & 0xff0000) >> 16;
            int g = (pixels[i] & 0xff00) >> 8;
            int b = (pixels[i] & 0xff);

            data[i] = a << 24 | b << 16 | g << 8 | r;
        }
    }

    public TextureData(String dir, String name) {
        int[] pixels = null;
        try {
            BufferedImage image = ImageIO.read(new MyFile("res/" + dir + "/" + name + ".png").getInputStream());
            width = image.getWidth();
            height = image.getHeight();
            pixels = new int[width * height];
            image.getRGB(0, 0, width, height, pixels, 0, width);
        } catch (IOException e) {
            e.printStackTrace();
        }

        data = new int[width * height];
        for (int i = 0; i < width * height; i++) {
            int a = (pixels[i] & 0xff000000) >> 24;
            int r = (pixels[i] & 0xff0000) >> 16;
            int g = (pixels[i] & 0xff00) >> 8;
            int b = (pixels[i] & 0xff);

            data[i] = a << 24 | b << 16 | g << 8 | r;
        }
    }

    public int[] getData() {
        return data;
    }

    public int getWidth() {
        return width;
    }

    public int getHeight() {
        return height;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM