Я пытаюсь передать массив фрагментному шейдеру:
//c++ code
float filter[9] = {-1.0f,-1.0f,-1.0f, -1.0f,9.0f,-1.0f, -1.0f,-1.0f,-1.0f};
glUniform1fv(glGetUniformLocation(imageShaderId, "filter"), 9, filter);//inside fragment shader code
uniform float filter[9]; //global
if(filter[0]==-1.0) gl_FragColor = red;//in main()
Это не работает для меня .. Я просмотрел много примеров, и все, кажется, указывают на мой код, является правильным? я могу передать одну переменную с плавающей точкой без проблем, используя glUniform1f, но не массив. Может ли кто-нибудь указать мне правильное направление?
Вот как я передал массив float фрагментному шейдеру:
C ++
GLfloat params[3];
params[0] = 2.0f;
params[1] = 1.0f;
params[2] = 1.0f;
colorRampUniformLocation = glGetUniformLocation(glprog->getProgram(), "params");
glUniform1fv(colorRampUniformLocation, 3, params);
В шейдере:
uniform float params[3];
Других решений пока нет …