Указатель на структуру ввода Compute Shader

Еще раз у меня проблема с моим вычислительным шейдером... Я хотел бы передать структуру, содержащую указатель, в вычислительный шейдер. Это мой пример структуры:

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

Вот моя инициализация 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);

Я пробовал много разных инициализаций, но безуспешно...

Итак, есть ли способ выделить всю необходимую память (потому что я знаю, какая память мне понадобится внутри каждого из массивов, указанных моими указателями) и передать ее в вычислительный шейдер? Или действительно невозможно передать указатель на вычислительный шейдер?

Спасибо за помощь!

1 ответ

Решение

Шейдеры в OpenGL (и Vulkan/D3D в этом отношении) не могут иметь указатели. Максимум, что вы можете сделать, это предоставить индекс в какую-то другую структуру данных. Так что вы могли бы сделать x индекс в какой-то другой массив. Хотя не совсем понятно, зачем нужен указатель.

Другие вопросы по тегам