Место возникновения ошибки opengl (VBO)

Версия Minecraft
1.11.2
1,015
9
102
У меня майн начал флудить вот этим:
Код:
########## GL ERROR ##########
@ Post render
1282: Invalid operation

Это, кончено, очень информативно, но можно ли как-нибудь более подробнее узнать об ошибке? Например, откуда она исходит? У меня код довольно большой, и поэтому просматривать и тестить каждую строку желания нет
 
1,015
9
102
CoomingSoon написал(а):
По-хорошему, нужно поставить наблюдатель (шаблон) туда, где чанк изменяется. Тогда лишь обновлять твои данные.
Я не чанк отрисовываю, а блоки вокруг игрока

CoomingSoon написал(а):
Какие у тебя сейчас проблемы?
Ну если я сделаю так, что бы главный поток ждал заполнения буффера, то смысл нового потока отпадает. А если я делаю асинхронное заполнение, то появляются баги, когда буфер замапен, а рендер идет
 
1,990
18
105
На такой случай можно использовать два буфера, один из которых заполняется. Заполнили - сделали так, что он теперь отрисовывается.
Асинхронность нужна, чтобы не фризить главный поток при загрузке данных.
 
1,015
9
102
Oldestkon написал(а):
На такой случай можно использовать два буфера, один из которых заполняется. Заполнили - сделали так, что он теперь отрисовывается.
Асинхронность нужна, чтобы не фризить главный поток при загрузке данных.

Разве можно при изменении одного буффера пихать другой? Мне после маппинга через glBufferData другой буффер пихать?
 
1,990
18
105
Minebot написал(а):
Разве можно при изменении одного буффера пихать другой? Мне после маппинга через glBufferData другой буффер пихать?
 Маппинг буфера привязывается к состоянию объекта буфера - так что замаппеных буферов может быть дофига и больше. Это никак не мешает рисовать тебе данные из других буферов.
И не после маппинга, а сразу перед.
 
1,015
9
102
Не удивительно, но опять ничего не работает  :s
glMapBuffer почему-то возвращает null. Правильно ли вообще логику сделал?
Код:
   private ByteBuffer buffer0 = BufferUtils.createByteBuffer(1);
    private ByteBuffer buffer1 = BufferUtils.createByteBuffer(1);
    private volatile Boolean selector;
    private volatile Boolean isDone;

private void update(){
glBindBuffer(GL_ARRAY_BUFFER, vboID);
if (selector)
    buffer0 = BufferUtils.createByteBuffer(radius*radius*radius*786);
else
    buffer1 = BufferUtils.createByteBuffer(radius*radius*radius*786);
glBufferData(GL_ARRAY_BUFFER, selector ? buffer1 : buffer0, GL_DYNAMIC_DRAW);
ByteBuffer mappedBuffer = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY, selector ? buffer0 : buffer1);
glBindBuffer(GL_ARRAY_BUFFER, 0);
new Thread(() -> {
    float[] data = getData();
    mappedBuffer.asFloatBuffer().put(data).flip();
    if (selector)
        buffer0 = mappedBuffer;
    else
        buffer1 = mappedBuffer;
    selector = !selector;
    isDone = true;
}).start();
}


И еще ошибка Post render вылетает
 
Сверху