In meinem Basisprogramm (C++/OpenGL 4.5) ich den Inhalt des Vertex Buffer zu einem Shader Lagerpuffer (SSBO) kopiert haben:Ändern eines Shader Speicherpuffer-Objekt aus einem Vertex Shader
float* buffer = (float*) glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo[2]);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(GLfloat)*size,buffer, GL_DYNAMIC_DRAW);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, 0);
glUnmapBuffer(GL_ARRAY_BUFFER);
im Vertex Shader werden diese Daten an ein Array gebunden:
#version 430
#extension GL_ARB_shader_storage_buffer_object : require
layout(shared, binding = 3) buffer storage
{
float array[];
}
Aber wenn ich versuche, ein Array-Eintrag in derzu überschreibenFunktion wie folgt:
array[index_in_bounds] = 4.2;
passiert nichts.
Was mache ich falsch? Kann ich den Puffer innerhalb des Vertex-Shaders ändern? Ist das nur in einem Geometry Shader möglich? Muss ich das mit Transform Feedback machen (das habe ich noch nie benutzt)?
edit: ich die Abbildung der Puffer für Testzwecke in meinem Hauptprogramm, nur um zu sehen, ob sich die Daten ändern:
float* buffer = (float*) glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
float* ssbo = (float*) glMapNamedBuffer(3, GL_READ_ONLY);
for(int i = 0; i < SIZE_OF_BUFFERS; i++)
printf("% 5f | % 5f\n", ssbo[i], buffer[i]);
glUnmapNamedBuffer(3);
glUnmapBuffer(GL_ARRAY_BUFFER);
definieren Zeigen Sie den Code, in dem Sie feststellen, ob etwas passiert ist oder nicht. –
Es ist offensichtlich, wie ich das Array für Transformationen verwende. Ich habe meinen Debug-Ausgangscode hinzugefügt. – Corbie
Bitte poste ein [mcve]. –