Ich habe eine einfache Anwendung. Es hat zwei Threads, jeder mit einem eigenen Rendering-Kontext, aber sie teilen sich einen VBO (dies funktioniert, ich habe es getestet).
Was ich jetzt möchte: Ein Thread rendert einige Daten aus der ersten Hälfte des VBO und der zweite Thread aktualisiert den zweiten Teil des VBO.
Wenn ich das VBO nicht aktualisiere, funktioniert es einwandfrei.
Aber ich habe einige seltsame Probleme beim Aktualisieren. Wenn ich glMapBuffer
das VBO (im zweiten Thread) aktualisiere, wird im ersten Thread meistens nichts gerendert - der gesamte Bildschirm ist klar (nach einem glClear
Aufruf). Es sieht so aus, als ob es keine Daten vom VBO berühren kann (dies ist verständlich, da der gesamte Puffer zugeordnet ist und daher irgendwie gesperrt werden kann).
Ich habe versucht zu verwenden glMapBufferRange
, was verwendet GL_MAP_UNSYNCHRONIZED_BIT
. Dies sollte bedeuten: "Warten Sie nicht und verwenden Sie das VBO, wie Sie möchten. Ich (das Programm) synchronisiere es selbst." Wenn ich eine Reihe von VBOs zuordne und Daten von einem anderen Teil rendere, sollte es nicht warten, aber ich habe die gleichen Probleme wie bei mir glMapBuffer
.
Kann mir jemand helfen, das zu beheben oder zu erklären, warum es passiert?
quelle