Ich habe eine Anwendung, in der ich texturierte Puffer verwende mit glBindImageTexture, und meine GLSL-Code macht verschiedene Dinge und aktualisiert die Puffer.imageAtomic GLSL-Funktionen und RGBA-Bildformat
Kürzlich habe ich einige meiner Bildpufferformate von GL_R32UI in GL_RGBA32UI geändert. Im Grunde war ein Texel 1 unsigned int vorher und jetzt sind es 4 unsigned ints. Bei ImageStores, imageLoads und clientseitigen Dingen funktioniert alles einwandfrei.
Ich bekomme derzeit ein paar Probleme bei der Verwendung von imageAtomic * -Funktionen. Nehmen wir imageAtomicAdd. Der letzte Parameter hat immer eine Ganzzahl, unabhängig vom Pufferformat. Z.B. Es ist kein uvec4 und bleibt eine einzige Uint. Wenn ich imageAtomicAdd (some_uimageBuffer, some_address, 1u) aufruft, was soll genau passieren? Wird GLSL alle 4 Texel-Komponenten (x, y, z und w) oder nur eins inkrementieren? Welcher?
Vielen Dank für Ihre Einsicht!
Vielen Dank! Kein Wunder, dass mein Code völlig falsch ist. SSBO scheint der richtige Weg zu sein, wenn ich auf Vec4-Basis zugreifen und vec4 einzelne Komponenten atomar verändern möchte. Wird das überprüfen. –
@MartinFrank: Sie sollten [die GLSL-Spezifikation lesen] (https://www.opengl.org/registry/), bevor Sie solche Aussagen machen. Weil die SSBO-Atomoperationen nicht auf Vektoren * entweder * wirken. Sie können * SIMD atomare Operationen nicht ausführen. –
Sie können auf einzelne Vektorkomponenten reagieren, wenn ich dieser OpenGL-Website-Seite vertraue: [link] (https://www.opengl.org/wiki/Shader_Storage_Buffer_Object). Abschnitt "Atomic Operations": Zitat: "_Diese arbeiten nur auf Uint- oder Int-Typen, aber diese können Mitglieder von Aggregaten (Structs/Arrays) ** oder Vektorelementen sein (dh: Sie können auf uvec3.x atomar zugreifen **) _ ". Sagen Sie, dass diese Webseite falsch ist? –