В настоящее время я работаю над Java-игрой и использую OpenGL в AWT Canvas с LWJGL 2.9.3.И я на самом деле не понимаю, почему перемещение некоторых объявлений объектов после Display.create()
заставляет холст перестать показывать что-либо (glClearColor
все еще работает).
Вот код, который работает:
private void startGL() {
glThread = new Thread(() -> {
isRunning = true;
ArrayList<Entity> entities = new ArrayList<>();
Vector3f lightPosition = new Vector3f(-20.0f, 20.0f, -20.0f);
Matrix4f projMatrix = new Matrix4f();
Camera camera;
EntityRenderer entityRenderer = null;
try {
Display.setDisplayMode(new DisplayMode(displayWidth, displayHeight));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
camera = new Camera();
try {
entityRenderer = new EntityRenderer();
} catch (IOException e) {
e.printStackTrace();
}
projMatrix.setPerspective((float) Math.toRadians(45.0f), dmGetAspectRatio(), 0.1f, 1000f);
while(isRunning) {
//rendering and update code
}
//cleanup code
}, "LWJGL Thread");
glThread.start();
}
А вот код, который не работает:
private void startGL() {
glThread = new Thread(() -> {
isRunning = true;
try {
Display.setDisplayMode(new DisplayMode(displayWidth, displayHeight));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
ArrayList<Entity> entities = new ArrayList<>();
Vector3f lightPosition = new Vector3f(-20.0f, 20.0f, -20.0f);
Matrix4f projMatrix = new Matrix4f();
Camera camera;
EntityRenderer entityRenderer = null;
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
camera = new Camera();
try {
entityRenderer = new EntityRenderer();
} catch (IOException e) {
e.printStackTrace();
}
projMatrix.setPerspective((float) Math.toRadians(45.0f), dmGetAspectRatio(), 0.1f, 1000f);
while(isRunning) {
//rendering and update code
}
//cleanup code
}, "LWJGL Thread");
glThread.start();
}
Эти методы вызываются методом addNotify()
при инициализации Canvas.Полный код от этого ответа .Эта проблема не очень важна, но я хотел бы знать, почему просто смещение нескольких объявлений может полностью сломать игру.