0

Noch einmal habe ich ein Problem mit meinem Compute Shader ... Ich würde gerne eine Struktur, die einen Zeiger enthält, an einen Compute Shader übergeben. Dies ist mein Strukturbeispiel:Zeiger auf Eingabestruktur des Compute Shaders

struct couleurStruct { 
    float r; 
    float g; 
    float b; 
    float a; 
    float *x; 
}; 

Hier ist meine SSBO Initialisierung:

couleurStruct *coul; 
coul = (couleurStruct *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(couleurStruct), bufMask); 
//coul->x = (float *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(float), bufMask); 

coul->r = 0.0; 
coul->g = 1.0; 
coul->b = 0.0; 
coul->a = 1.0; 
coul->x[0] = 0.5; 

glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); 

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, structBuffer); 

ich eine Menge verschiedener Initialisierungen versucht, aber ohne Erfolg ...

, also ist es eine Möglichkeit, um den gesamten benötigten Speicher zuzuweisen (weil ich den Speicher kenne, den ich in jedem Array benötige, auf den meine Zeiger zeigen), und ihn an den Compute-Shader weiterleiten? Oder ist es wirklich unmöglich, einen Zeiger auf einen Compute-Shader zu übergeben?

Vielen Dank für Ihre Hilfe!

Antwort

1

Shader in OpenGL (und Vulkan/D3D für die Angelegenheit) kann nicht haben Zeiger. Das Meiste, was Sie tun können, ist, einen Index in einer anderen Datenstruktur bereitzustellen. So könnten Sie x einen Index in ein anderes Array machen. Obwohl es nicht klar ist, warum es ein Zeiger sein muss.

+0

Nochmals vielen Dank! Also werde ich meine Zeiger als statische Felder ändern ... Natürlich ist der obige Code nur ein Testcode, nicht der, an dem ich wirklich arbeite. – bRiocHe