我用LWJGL编写了一个简单的程序。问题是每次我尝试运行应用程序时,都会遇到这个错误:
FATAL ERROR in native method: Thread[main,5,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution.
at org.lwjgl.opengl.GL11.glBegin(Native Method)
at Main.main(Main.java:24)
该错误具有误导性,因为我确实调用了< code > glfwMakeContextCurrent(window)和< code > GL . create capabilities()。
我将错误跟踪到glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3)。
似乎当我删除这个和glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE)
行时,应用程序将运行。
我不理解的是为什么会发生这种情况,因为我在pom.xml
中确实有一个GLFW 3.3依赖项。
以下是我的代码:
pom.xml:
<dependencies>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-glfw</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-opengl</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl</artifactId>
<version>3.3.0</version>
<classifier>natives-windows</classifier>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-glfw</artifactId>
<version>3.3.0</version>
<classifier>natives-windows</classifier>
</dependency>
</dependencies>
Main.java:
public class Main {
public static void main(String[] args) {
glfwInit(); // Initialize GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // GLFW version 3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // GLFW version 3.3
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // GLFW uses CORE profile
long window = glfwCreateWindow(800, 600, "Hello Triangle", 0, 0);
glfwMakeContextCurrent(window);
GL.createCapabilities();
while(!glfwWindowShouldClose(window)) {
glfwPollEvents();
glClearColor(0.05f, 0.1f, 0.2f, 1.0f); // Wipe drawing from previous frame with a black color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear color buffer and depth buffer
glBegin(GL_TRIANGLES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(0f, 0.5f);
glEnd();
glfwSwapBuffers(window); // Swap front and back buffer
glFlush(); // Empties buffers - improves performance
}
glfwDestroyWindow(window);
glfwTerminate();
}
}
您请求的是OpenGL 3.3核心(“3.3”不是LWJGL或GLFW版本3.3-它是您请求的OpenGL上下文版本),它没有您尝试使用的不推荐使用的OpenGL函数-<code>glBegin</code>和<code>glVertex2f</code>。
错误消息提示:
没有上下文是当前的,或者调用了当前上下文中不可用的函数。
还有一个误解。为了澄清,代码中的以下注释具有误导性/错误:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // GLFW version 3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // GLFW version 3.3
窗口提示GLFW_CONTEXT_VERSION_MAJOR
和GLFW_CONTEXT_VERSION_MINOR
没有指定使用哪个版本的GLFW本机库,但是GLFW将从操作系统/驱动程序请求哪个OpenGL上下文版本来获取下一次调用glfwCreateWindow()
创建的OpenGL上下文。
要么使用现代OpenGL,要么通过省略glfwWindowHint()
调用来请求较低的OpenGL版本,例如2.1。在这种情况下,这取决于它为您提供的OpenGL上下文版本的驱动程序。在Windows上(与NVidia一起),它将是支持的最高可用OpenGL兼容性版本(例如4.6)。在macOS上,它将是2.1。
对于这个程序,它要求用户输入他们的全名。然后,它通过在名字和姓氏之间的空格处将它们分开来排序名字和姓氏。但是,indexOf()无法识别空格并且只返回-1。为什么?谢谢。 以下是PracticeIt的提示: 编写一个名为process Name的方法,该方法接受控制台的Scanner作为参数,并提示用户输入他或她的全名,然后以相反的顺序打印名称(即姓氏、名字)。您可以假设只会给出名字和姓氏。您应该
我想验证只有当另外两个输入为空时才需要输入。所以我使用required_without_all验证规则。 根据Laravel 5.4文件要求,无需所有: 只有当所有其他指定字段都不存在时,验证中的字段才必须存在且不为空。 然而,我认为我不知道现在是什么意思,因为我认为这意味着输入必须被填充。 当我在用户名为空的情况下运行测试时,无论firstname和lastname输入是否为空,它都会返回以下错
有25种类型的空白。在下面的代码中显示,25种类型中有4种在Java中不被视为空白。为什么? 参考-https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/character.html#IsWhitespace(char)
我不明白为什么我的Nexus4没有出现在adb设备列表中。我试过以下方法 $adb杀死服务器;亚洲开发银行设备 亚行在我的路上。当我查看系统信息时,会显示Nexus 4。 我试着询问xda开发人员,但没有成功。有什么建议我可以试试吗? 提前感谢
在PhpStorm的最新版本(2018年)中,所以它在项目的2017年版本中,我有一个名为<code>User_model的文件。php</code>,并且PhpStorm不将其识别为php文件,而是将其识别成纯文本文件。 但它并不总是如此;我最近才注意到。 我意识到问题出在文件名中()。因为只要我更改文件名(例如,),该文件就会立即被识别为php文件。 是不是(< code>User_model
在我的spring-maven-java项目上的时,heroku cli识别出它是一个Java项目,并尝试构建它。它打印出它正在安装JDK 1.8,在大量终端输出之后,它说 maven-compiler-plugin配置源和目标显式标识Heroku文档指定为可接受的Java 10.0.2,并且在和中 我想我需要让Heroku在一开始就安装正确的JDK。我如何让Heroku获得并使用Java10?