0

Еще раз у меня проблема с моим вычислительным шейдером ... Я хотел бы передать структуру, содержащую указатель, в вычислительный шейдер. Это мой пример структуры:Указатель на структуру ввода 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 индексом в какой-либо другой массив. Хотя непонятно, почему это должен быть указатель.

+0

Еще раз спасибо! Поэтому я буду менять свои указатели как статические массивы ... Конечно, приведенный выше код - это всего лишь тестовый код, а не тот, над которым я действительно работаю. – bRiocHe

Смежные вопросы