Я пытаюсь выполнить билинейную цветовую интерполяцию на четырехугольнике, мне удалось с помощью моего предыдущего вопроса здесь, но у него плохая производительность, потому что он требует, чтобы я повторил glBegin () и glEnd () и 4 раза glUniform() перед glBegin ().
Вопрос в том, можно ли в любом случае применить билинейную цветовую интерполяцию к четырехугольнику следующим образом:
glBegin(GL_QUADS);
glColor4f(...); glVertexAttrib2f(uv, 0, 0); glTexCoord2f(...); glVertex3f(...);
glColor4f(...); glVertexAttrib2f(uv, 1, 0); glTexCoord2f(...); glVertex3f(...);
glColor4f(...); glVertexAttrib2f(uv, 1, 1); glTexCoord2f(...); glVertex3f(...);
glColor4f(...); glVertexAttrib2f(uv, 0, 1); glTexCoord2f(...); glVertex3f(...);
... // here can be any amount of quads without repeating glBegin()/glEnd()
glEnd();
Чтобы сделать это, я думаю, что я должен как-тополучить доступ к цветам близлежащих вершин, но как?Или есть другие решения для этого?
Мне нужно, чтобы это работало таким образом, чтобы я мог легко переключаться между различными интерполяционными шейдерами.
Любое другое решение, которое работает с одной командой glBegin ()тоже хорошо, но отправка всех угловых цветов для каждой вершины неприемлема, разве это единственное решение здесь?
Редактировать: В примере кода используется непосредственный режим только для ясности.Даже с массивами / буферами вершин проблема будет такой же: мне придется разделить вызовы рендеринга на 4 фрагмента вершин, что приведет к полному падению скорости здесь!