Неустранимая ошибка Java при вызове glDrawElements ()

1

Я впервые встретился с этой проблемой, все прошло хорошо. На мой взгляд, проблема заключается в управлении памятью или чем-то подобном.

Я сжал весь код 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 Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc = 0x0000000055cdb5c0, pid = 5200, tid = 4540

Версия JRE: среда выполнения Java (TM) SE (8.0_40-b26) (версия 1.8.0_40-b26)

Java VM: Java HotSpot (TM) 64-разрядная серверная VM (25.40-b25 смешанного режима windows-amd64 сжатые oops)

Проблемная рамка: C [atio6axx.dll + 0x23b5c0]

Не удалось записать основной дамп. Minidumps по умолчанию не включены в клиентских версиях Windows

Авария произошла за пределами виртуальной машины Java в собственном коде. См. Проблематичную структуру для того, где сообщать об ошибке.

  • 0
    Какую версию LWJGL вы используете?
  • 0
    2.9.1, попробую lwjgl 3.
Показать ещё 4 комментария
Теги:
lwjgl
render
fatal-error

1 ответ

0

Наконец, я понял это. Проблема заключалась в этих двух строках кода:

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

Я включил VAO, которого не было. Глупый я.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню