0

Une fois de plus, j'ai un problème avec mon shader de calcul ... Je voudrais passer une structure contenant un pointeur dans un shader de calcul. Ceci est mon exemple de structure:Pointer dans la structure d'entrée de Compute Shader

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

Voici mon initialisation de SSBO:

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); 

J'ai essayé beaucoup de différentes initialisations mais sans succès ...

Alors, est-il un moyen allouer toute la mémoire nécessaire (parce que je connais la mémoire dont j'ai besoin à l'intérieur de chacun des tableaux pointés par mes pointeurs) et le passer au shader de calcul? Ou est-ce vraiment impossible de passer un pointeur vers un shader de calcul?

Nous vous remercions de votre aide!

Répondre

1

Les shaders dans OpenGL (et Vulkan/D3D d'ailleurs) ne peuvent pas avoir des pointeurs. Le plus que vous pouvez faire est de fournir un index dans une autre structure de données. Donc, vous pouvez faire x un index dans un autre tableau. Bien qu'il ne soit pas clair exactement pourquoi il doit être un pointeur.

+0

Encore merci! Donc, je vais changer mes pointeurs en tant que tableaux statiques ... Bien sûr, le code ci-dessus est juste un code de test, pas celui sur lequel je travaille vraiment. – bRiocHe