使用 GLFW (LWJGL) 创建 window 时出现问题
Problem with creating a window using GLFW (LWJGL)
我正在尝试使用 GLFW 创建 window。 Window 已创建,
但经过几次尝试后,window 确实需要很长时间才能创建。
https://drive.google.com/file/d/1zq4IEjcSIJxy5wnXWLrGe46ptHMbKM5R/view?usp=sharing
我找不到任何解决方案,也不知道这是什么原因造成的。
这是我正在使用的代码:
import org.lwjgl.glfw.GLFWVidMode;
import org.lwjgl.opengl.GL;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.glfw.GLFW.*;
public class Main {
public static void main(String[] args) {
System.out.println("0");
if(!glfwInit()) {
throw new IllegalStateException("GLFW couldn't be initialized!");
}
System.out.println("1");
long window = glfwCreateWindow(450,800,"Test #1",0,0);
if(window == 0) {
throw new IllegalStateException("GLFW failed to create a window!");
}
System.out.println("2");
GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window,(videoMode.width()-450)/2,(videoMode.height()-800)/2);
glfwMakeContextCurrent(window);
GL.createCapabilities();
float i = 2;
float speed = 1;
System.out.println("3");
while(!glfwWindowShouldClose(window)) {
if(i> 253 || i < 1)
speed *= -1;
i+=speed;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor4f(0.38f,(i%255)/255,(i%255)/255,1.0f);
glVertex2f(-0.5f,0.5f);
glVertex2f(0.5f,0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(-0.5f,-0.5f);
glEnd();
glfwSwapBuffers(window);
glfwPollEvents();
}
System.out.println("4");
glfwDestroyWindow(window);
glfwTerminate();
System.out.println("5");
}
}
程序的输出是
0
//Now for a really long time nothing
1
2
3
所以看起来初始化 glfw 需要很长时间,但我不知道如何修复它。
经过一些研究,我发现问题与 USB 输入设备有关 - 在我的例子中 - Corsair k55 键盘。
从我了解到的一些文章和 github 个问题中,该错误也是由其他一些设备引起的(在许多情况下是 Corsair,但不仅如此)。
修复方法是:
- 找出导致错误的设备(通过拔掉插头,我就是这样做的)
- 现在(我发现它是我的 k55)我必须更新 ICUE(驱动程序)。
希望对您有所帮助 ;)
我正在尝试使用 GLFW 创建 window。 Window 已创建, 但经过几次尝试后,window 确实需要很长时间才能创建。
https://drive.google.com/file/d/1zq4IEjcSIJxy5wnXWLrGe46ptHMbKM5R/view?usp=sharing
我找不到任何解决方案,也不知道这是什么原因造成的。
这是我正在使用的代码:
import org.lwjgl.glfw.GLFWVidMode;
import org.lwjgl.opengl.GL;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.glfw.GLFW.*;
public class Main {
public static void main(String[] args) {
System.out.println("0");
if(!glfwInit()) {
throw new IllegalStateException("GLFW couldn't be initialized!");
}
System.out.println("1");
long window = glfwCreateWindow(450,800,"Test #1",0,0);
if(window == 0) {
throw new IllegalStateException("GLFW failed to create a window!");
}
System.out.println("2");
GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window,(videoMode.width()-450)/2,(videoMode.height()-800)/2);
glfwMakeContextCurrent(window);
GL.createCapabilities();
float i = 2;
float speed = 1;
System.out.println("3");
while(!glfwWindowShouldClose(window)) {
if(i> 253 || i < 1)
speed *= -1;
i+=speed;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor4f(0.38f,(i%255)/255,(i%255)/255,1.0f);
glVertex2f(-0.5f,0.5f);
glVertex2f(0.5f,0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(-0.5f,-0.5f);
glEnd();
glfwSwapBuffers(window);
glfwPollEvents();
}
System.out.println("4");
glfwDestroyWindow(window);
glfwTerminate();
System.out.println("5");
}
}
程序的输出是
0
//Now for a really long time nothing
1
2
3
所以看起来初始化 glfw 需要很长时间,但我不知道如何修复它。
经过一些研究,我发现问题与 USB 输入设备有关 - 在我的例子中 - Corsair k55 键盘。
从我了解到的一些文章和 github 个问题中,该错误也是由其他一些设备引起的(在许多情况下是 Corsair,但不仅如此)。
修复方法是:
- 找出导致错误的设备(通过拔掉插头,我就是这样做的)
- 现在(我发现它是我的 k55)我必须更新 ICUE(驱动程序)。
希望对您有所帮助 ;)