[英]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.