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

调用glDrawElements()时Java致命错误

崔棋
2023-03-14

我第一次遇到这个问题,在今天之前一切都很好。在我看来,问题在于内存管理,或者类似的东西。

我把我所有的opengl代码压缩在一个类中,我从主窗口循环中调用它。还是一样的错误。

public class renderTest 
{
public float[] vertices(int x, int y, int z)
{
    float vertices[] = 
        {
            //...
        };
    return vertices;
}

public final int[] indices = 
    {   
     //...
    };

public Model model;

public renderTest()
{
    this.model = loadToVAO(vertices(0, 0, -5), indices);

}
public void render(Model model)
{

glBindVertexArray(model.getVaoID());
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glDrawElements(GL_QUADS, model.getVertexAmount(), GL_UNSIGNED_INT, 0); // <<< FATAL ERROR HERE
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, 0);                               // <<< OR HERE
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindVertexArray(0);
}

public Model loadToVAO(float[] vertices, int [] indices)
{
    int vaoID = create();
    bindIndicesBuffer(indices);
    storeDataInAttributeList(0, vertices, 3);
    //storeDataInAttributeList(1, textureCoords, 2);
    unbind();
    return new Model(vaoID, indices.length);
}

private int create() 
{
    int ID = glGenVertexArrays();
    glBindVertexArray(ID);
    return ID;
}

private void storeDataInAttributeList(int attributeNumber, float[] data, int coordinateSize) 
{
    int vboID = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, vboID);
    FloatBuffer buffer = storeDataInFloatBuffer(data);
    glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
    glVertexAttribPointer(attributeNumber, coordinateSize, GL_FLOAT, false, 0, 0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

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

private IntBuffer storeDataInIntBuffer(int[] data)
{
    IntBuffer buffer = BufferUtils.createIntBuffer(data.length);
    buffer.put(data);
    buffer.flip();
    return buffer;
}

private void bindIndicesBuffer(int[] indices)
{
    int vboID = glGenBuffers();
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboID);
    IntBuffer buffer = storeDataInIntBuffer(indices);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
}

private void unbind()
{
    glBindVertexArray(0);
}

}

Java运行时环境检测到致命错误:

pc=0x0000000055cdb5c0、pid=5200、tid=4540时的异常访问(0xc0000005)

JRE版本:Java(TM)SE运行时环境(8.0_40-b26)(构建1.8.0_40-b26)

Java虚拟机:Java热点(TM)64位服务器虚拟机(25.40-b25混合模式windows-amd64压缩oops)

有问题的帧:C[atio6axx.dll 0x23b5c0]

写入核心转储失败。默认情况下,在Windows的客户端版本上不启用迷你配置

崩溃发生在Java虚拟机外部的本机代码中。有关报告错误的位置,请参见问题框。

共有1个答案

薄伟彦
2023-03-14

最后,我想通了。问题在于这两行代码:

glEnableVertexAttribArray(1);
//...
glDisableVertexAttribArray(1);

我启用了一个不存在的VAO。愚蠢的我。

 类似资料:
  • 我试图在Swift 3.0中调用委托函数。调用时,我收到一个错误,该错误显示“致命错误:在打开可选值时意外发现nil”。我已经给出了静态值,动态值没有用。 我用以下方式调用这个代表。 我在这里做得不对。下面是我设置的代理。

  • 试图创建一个登录屏幕,我得到一个错误 致命错误:在第19行的C:\xampp\htdocs\login\class\Mysql.php中,对非对象调用成员函数准备() Constants.php

  • 问题内容: 当我尝试将旧的sql切换到sqli时,有人可以告诉我为什么这不起作用: 至: 它一直给我一个错误:“致命错误:调用未定义函数mysqli_result()” 问题答案: 不要使用这种代码。这是非常低效的。使用来代替: 一个SINGLE数据库操作,而不是您尝试执行的3个以上操作。

  • 问题内容: 我正在尝试连接到安装了PostgreSQL的数据库(远程服务器)。我的PHP代码正在尝试使用pg_connect()连接到数据库,但出现错误消息:-“致命错误:在第82行的/var/www/website/functions.php中调用未定义的函数pg_connect()”。 82行只是: (所有先前定义的变量) 我检查了很多论坛,建议的唯一解决方案是找到包含一行的php.ini文件

  • 问题内容: 我的代码是这样的: 当我运行通过Web套接字创建连接的php文件时,出现致命错误:调用if(($ this-> master = socket_create(AF_INET,SOCK_STREAM,SOL_TCP))<0)行中的未定义函数socket_create() 因此,我无法连接Web套接字,也无法从套接字获取响应消息,因为在运行客户端页面时,浏览器中显示的是套接字状态:3(关闭

  • 我一直被这个错误困扰,请帮助我这是我的PHP代码致命错误:调用成员函数bind_param()