Двойная буферизация VBO

176
17 октября 2017, 00:57

Пытался сделать так, что бы VBO отрисовывала первый буффер, пока в другом потоке заполнялся второй буффер, а когда второй заполнился, буфферы меняются местами и по циклу. Но у меня не получилось и картинка от моего кода начала сильно глюкать (съехали все точки с UV). Вот код:

private ByteBuffer buffer0 = BufferUtils.createByteBuffer(1);
private ByteBuffer buffer1 = BufferUtils.createByteBuffer(1);
private volatile Boolean selector;
public void updateBuffer(){ // Вызывается каждую секунду
        if (selector)
            buffer0 = BufferUtils.createByteBuffer(count);
        else
            buffer1 = BufferUtils.createByteBuffer(count);
        ByteBuffer activeBuf = selector ? buffer0 : buffer1;
        new Thread(() -> {
            float[] data = getData();
            activeBuf.asFloatBuffer().put(data).flip();
            selector = !selector;
        }).start();
}
public void render(){
        glBindBuffer(GL_ARRAY_BUFFER, vboID);
        glBufferData(GL_ARRAY_BUFFER, selector ? buffer1 : buffer0, GL_DYNAMIC_DRAW);
        glEnableClientState(GL_VERTEX_ARRAY);
        glVertexPointer(3, GL_FLOAT, 0, 0);
        glEnableClientState(GL_COLOR_ARRAY);
        glColorPointer(3, GL_FLOAT, 0, vertexSize*4);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glTexCoordPointer(2, GL_FLOAT, 0, (vertexSize+colorSize)*4);
        glDrawArrays(GL_QUADS, 0, vertexCount);
        glDisableClientState(GL_VERTEX_ARRAY);
        glDisableClientState(GL_COLOR_ARRAY);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
}

Никак не могу понять, где что неправильно работает

READ ALSO
Пункты меню не реагируют на нажатие

Пункты меню не реагируют на нажатие

Пункты меню, вынесенные в ActionBar работают, а те, что можно увидеть лишь при раскрытии меню не реагируют на нажатиеЕсли поменять значения в атрибутах...

166
Конвертирование из Optional в List

Конвертирование из Optional в List

Все функции возвращают List<Person>Но внутри функции есть переменная типа Collection<Person> и ее надо вернуть

165
Чтение данных по байтам

Чтение данных по байтам

Передаю данные в 16-ричном видеВот посылка

184
ListBox wpf SelectItem как получить в коде

ListBox wpf SelectItem как получить в коде

Как получить выделенный Item из списка?

280