当前位置: 首页 > 知识库问答 >
问题:

LWJGL 3.1.6在Win 10上崩溃

封烈
2023-03-14

即使这个问题被问了很多次(我读了所有这些,没有一个解决方案对我有效),我也试图用LWJGL和OpenGL建模一个矩形,但每次都会崩溃。我的电脑数据如下:

AMD Ryzen 1600x | MSI Nvidia GTX 1060(6GB)| MSI x370 Carbon Pro主板

我还在英特尔安装程序上尝试了这个,使用i7处理器和Nvidia Quadro K1000M设置,但您可以在以下内容中看到相同的错误:

https://hastebin.com/ayiqiritov.makefile

我的绘画方法:

public void render(RawModel model){
    GL30.glBindVertexArray(model.getVaoID());
    GL20.glEnableVertexAttribArray(0);
    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, model.getVertexCount());
    GL20.glDisableVertexAttribArray(0);
    GL30.glBindVertexArray(0);
}

在这个类中,我创建了VAO和VBO,并将数据存储到其中:

    private List<Integer> vaos = new ArrayList<Integer>();
private List<Integer> vbos = new ArrayList<Integer>();

public RawModel loadToVAO(float[] positions) {
    int vaoID = createVAO();
    storeDataInAttributeList(0, positions);
    unbindVAO();
    return new RawModel(vaoID, positions.length / 3);
}

public void cleanUp() {
    for (int vao : vaos) {
        GL30.glDeleteVertexArrays(vao);
    }
    for (int vbo : vbos) {
        GL15.glDeleteBuffers(vbo);
    }
}

private int createVAO() {
    int vaoID = GL30.glGenVertexArrays();
    vaos.add(vaoID);
    GL30.glBindVertexArray(vaoID);
    return vaoID;
}

private void storeDataInAttributeList(int attributeNumber, float[] data) {
    int vboID = GL15.glGenBuffers();
    vbos.add(vboID);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
    FloatBuffer buffer = storeDataInFloatBuffer(data);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
    GL20.glVertexAttribPointer(attributeNumber, 3, GL11.GL_FLOAT, false, 0, 0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}

private void unbindVAO() {
    GL30.glBindVertexArray(0);
}

private FloatBuffer storeDataInFloatBuffer(float[] data) {
    FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length);
    buffer.put(data).position(0);
    buffer.flip();
    return buffer;
}

我的主要方法是:

        public static void main(String[] args){
    if(!glfwInit()){
        throw new IllegalStateException("Failed");
    }

    System.out.println(GL11.glGetString(GL11.GL_VERSION));

    glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);

    GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MINOR, 3);
    GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 4);

    long window = GLFW.glfwCreateWindow(640, 480, "Hello World", 0, 0);

    if(window == 0){
        throw new IllegalStateException("Failed to create Window");
    }

    GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
    glfwSetWindowPos(window, (vidmode.width() - 640) / 2, (vidmode.height() - 480) / 2);

    glfwShowWindow(window);

    Loader loader = new Loader();
    Renderer renderer = new Renderer();

    float[] vertices = {
        -0.5f, 0.5f, 0f,
        -0.5f, -0.5f, 0f,
        0.5f, -0.5f, 0f,

        0.5f, -0.5f, 0f,
        0.5f, 0.5f, 0f,
        -0.5f, 0.5f, 0f
    };

    RawModel model = loader.loadToVAO(vertices);

    while(!glfwWindowShouldClose(window)){
        renderer.prepare();
        renderer.render(model);
        glfwPollEvents();
    }

    loader.cleanUp();
    GLFW.glfwTerminate();

}

所以我已经尝试过了:

更新图形卡驱动程序、更新java、更新Windows、设置新eclipse、重新安装java并删除。eclipse中的元数据。

谁能帮帮我吗?

共有1个答案

皇甫乐
2023-03-14

根据评论

我还没有实现着色器

OpenGL中最先进的渲染方式是使用着色器。

如果您不使用着色器,那么您必须通过glVertexPointer定义顶点数据数组。glVertexPointer为固定函数顶点坐标属性指定数组。如果您没有着色器程序,那么您必须使用固定函数管道。

private void storeDataInAttributeList(int attributeNumber, float[] data) {
    int vboID = GL15.glGenBuffers();
    vbos.add(vboID);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
    FloatBuffer buffer = storeDataInFloatBuffer(data);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);

    GL11.glVertexPointer( 3, GL11.GL_FLOAT, 0, 0 ); // <---------

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}

此外,您还必须通过glEnableClientState(GL_vertex_ARRAY)启用顶点坐标的客户端功能:

public void render(RawModel model){
    GL30.glBindVertexArray(model.getVaoID());

    GL11.glEnableClientState( GL11.GL_VERTEX_ARRAY );   // <---------

    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, model.getVertexCount());

    GL11.glDisableClientState( GL11.GL_VERTEX_ARRAY );  // <---------

    GL30.glBindVertexArray(0);
}

进一步注意,在使用OpenGL指令(如GL30.glGenVertexArray())之前,您必须创建“GLCapables”实例并使OpenGL绑定可供使用,并且您必须确保OpenGL上下文是最新的。

调用glfwMakeContextCurrent(窗口)GL。createCapabilities()在创建窗口之后,在任何OpenGL指令之前:

long window = GLFW.glfwCreateWindow(640, 480, "Hello World", 0, 0);
if(window == 0){
    throw new IllegalStateException("Failed to create Window");
}

GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window, (vidmode.width() - 640) / 2, (vidmode.height() - 480) / 2);

glfwMakeContextCurrent(window);  // <-----

glfwShowWindow(window);

GL.createCapabilities();         // <-----

.....

最后,渲染循环中缺少glfwSwapBuffersintglfwSwapBuffers交换指定窗口的前后缓冲区。换句话说,简单地说,它会在屏幕上显示渲染到的缓冲区:

while(!glfwWindowShouldClose(window)){
    renderer.prepare();
    renderer.render(model);

    glfwSwapBuffers(window); // <-----

    glfwPollEvents();
}

另请参见LWJGL 3指南-入门

 类似资料:
  • 我有一个Selenium集线器,其中6个节点基于该平台注册如下: > 3平台作为WIN10 3平台作为VISTA 有没有办法通过提及OSname在平台上调用chrome浏览器,我已经尝试了几个选项,但看起来集线器随机调用驱动器而不是基于操作系统版本。 任何洞察都会有所帮助。在某些情况下,当我提到WIN10的chrome驱动程序时,chrome驱动器崩溃,如下所示: 节点注册如下: 和 如果能帮助解

  • 问题内容: 当使用Lucene为文档建立索引时,我的JVM(1.6.0_29)在频繁使用时始终崩溃。我得到: 环境: JDK:1.6u29(与1.6_02相同的问题)Lucene版本3.4.0 vm_info:适用于linux-amd64 JRE(1.6.0_29-b11)的Java HotSpot(TM)64位服务器VM(20.4-b02),由“ java_re”于gcc 3.2.2于2011年

  • 我一直在尝试将. ttf字体添加到我的android移动应用程序中。我正在使用Libgdx引擎创建我的应用程序,并尝试添加True Type扩展以允许使用. ttf字体。这是我正在运行以尝试创建字体的代码。 当我调用这段代码时,我的应用程序会给我消息,没有其他信息。我已经在核心和android项目中包含了和。我已经单击了在这两个项目上导出它们的选项。我已经在和文件夹中包含了两个文件。 谁能告诉我为

  • 在Windows Phone8(诺基亚Lumia520)上调试应用程序时,我面临崩溃,我不知道为什么。游戏在Unity中开发,最初针对iOS和Android,现在被移植到WP8。失败发生在单步执行我的脚本之前,并且处理程序也无法到达。 调试器(仅本机)设置为在引发异常且用户未处理时中断。第一次调用堆栈是: 环境: Windows Pro 8.1 64位 Unity Pro 4.3.1F1 Micr

  • 每次我打开Aptana它都会崩溃。 Java运行时环境检测到一个致命错误: 如果您想提交错误报告,请访问:http://bugreport.sun.com/bugreport/crash.jsp崩溃发生在Java虚拟机之外的本机代码中。有关报告错误的位置,请参见问题框。

  • 问题内容: 通过Web Start启动从服务器后,我正在尝试安装Jenkins从服务器服务。尝试在Windows 10和Windows 8.1上安装时出现以下错误。 我可以在win 7上安装任何奴隶服务而没有任何问题。知道为什么会发生这种情况,或者是Jenkins的某些限制,还是我缺少一些依赖关系? 我的詹金斯版本是1.655,在安装时使用chrome浏览器。Jenkins master在Wind