Как передать в вершинный шейдер массив int?

Тестирую работу шейдера OpenGL ES 2.0 на разных устройствах, в том числе старых. Столкнулся с проблемой на Qualcomm Adreno 320 в планшете LG G PAD 8.3. В шейдер через uniform передаю массив матриц трансформации и для каждой вершины указываю индекс матрицы, которую нужно использовать. Массив индексов, естественно, передаю как массив float (attribute не может быть int), и приведение int(aTransfIndexes) всегда оказывается равно 0.

 "#version 100\n"
 "uniform highp mat4 uTransform[gl_MaxVertexUniformVectors/4];\n"
 "attribute highp float aTransfIndexes;\n"
 "attribute highp vec4 aVrtxCoords;\n"
 "void main()\n"
 "{  gl_Position = aVrtxCoords * uTransform[ int(aTransfIndexes) ];\n"
 "}"

Более того, в следующем примере idx также всегда равняется 0, что бы к нему не присваивали.

 "#version 100\n"
 "uniform highp mat4 uTransform[gl_MaxVertexUniformVectors/4];\n"
 "attribute highp vec4 aVrtxCoords;\n"
 "void main()\n"
 "{  highp int idx = 1; \n"
 "   gl_Position = aVrtxCoords * uTransform[ idx ];\n"
 "}"

Есть ли у кого идеи, как по другому можно передать в вершинный шейдер массив int или как преобразовать в нём float в int, чтобы значение не терялось?


Ответы (0 шт):