java - 为什么在 OpenGL 上下文初始化后移动一些变量声明会破坏代码?
问题描述
我目前正在开发一个 Java 游戏,我在带有 LWJGL 2.9.3 的 AWT Canvas 中使用 OpenGL。而且我实际上不明白为什么在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 初始化中的方法调用。完整的代码来自这个答案。这个问题并不是很重要,但我想知道为什么仅仅替换几个声明就可以完全破坏游戏。
解决方案
推荐阅读
- google-apps-script - fileExtension 配置选项的全局设置
- javascript - 使用带有引用的变量并匹配到数组
- ios - 关闭以前的 VC 后仅重新加载新数据
- netlogo - 如何在 netlogo 上为不同的海龟创建函数?
- tabs - 如何确定 NSWindow 是选项卡式还是独立式?
- python - 如何保存从missingno(python)生成的图形以可视化缺失值?
- java - nginx - Spring Boot 应用程序的多个反向代理(启用 Spring Security)
- angular - 如何使用 chrome 检查器通过 ion2-calendar 日期选择器组件的 css 调整高度?
- emacs - 如何在 Emacs 中获取 Markdown 或 org-mode 文档大纲?
- sql-server - 两列上的 SQL Server 数据透视表