Как получить доступ к другой вершине в программе вершинного шейдера в opengl es 2?

В приложении для Android я хочу вычислить нормаль к поверхности, зависящую от другой вершины этой поверхности. Я не хочу делать это в "мастер-программе", потому что это занимает много времени. На самом деле для каждой вершины я передаю 4 массива с плавающей запятой для каждого векстекса:

attribute vec3 a_bottom;
attribute vec3 a_left;
attribute vec3 a_right;
attribute vec3 a_top;

vec3 calculNormal( ) {
    return normalize( cross( (a_left - a_right) , ( a_bottom - a_top ) ) );
}

это очень-очень-очень грязный код, который я знаю, поэтому вместо передачи 4-х массивов я хочу сделать это:

vec3 calculNormal( ) {
    vec3 a_left = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - 1 ];
    vec3 a_bottom = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - X ];
    ...
    return normalize( cross( (a_left - a_right) , ( a_bottom - a_top ) ) );
}

Возможно ли это в вершинном шейдере программа для доступа к текущему буферу с плавающей запятой? Есть ли специальные ключевые слова, такие как currentFloat? Или есть еще одна возможность, которую я пропустил?

5
задан genpfault 31 January 2012 в 16:46
поделиться