Вершинный процессор ответственен за выполнение вершинных шейдеров. Вводные данные вершинного шейдера — это данные вершин, а именно — их положение, цвет, нормали и т.д., в зависимости от того, что посылает приложение OpenGL.

Следующий код OpenGL пошлет вершинному процессору цвет и координаты каждой вершины:

    glBegin();

glColor3f(0.2,0.4,0.6);
glVertex3f(1.0,1.0,2.0);

glColor3f(0.2,0.4,0.8);
glVertex3f(1.0,-1.0,2.0);

glEnd();

 

В вершинном шейдере вы можете запрограммировать такие задачи, как:

  • Изменение позиции вершины с использованием матриц проеции и моделей.
  • Трансформацию нормалей и, если нужно, их нормализацию (приведению длинны = 1)
  • Трансформацию и генерацию текстурных координат
  • Освещение на вершину или рассчет данных для освещения на пиксел
  • Операции с цветом 

Нет никакой необходимости выполнять все перечисленные операции, ваша программа может, например, не использовать освещение. Однако, написав вершинный шейдер, вы переписываете функционал вершинного процессора, следовательно вы не можете выполнить трансформацию нормалей и ожидать, что генерацию текстурных координат выполнит фиксированный функционал. Когда используется вершинный шейдер, он становится ответственен за то, чтобы заменить весь функционал данной стадии графического конвейера.

Как вы могли видеть из предыдущего раздела, вершинный процессор не имеет никакой информации относительно объединения, так что операции, требующие топологической информации, не могут быть здесь применены. Например, вершинный шейдер не может обработать обрезку задних полигонов, так как он оперирует вершинами, а не полигонами. Вершинный процессор обрабатывает выршины индивидуально и не имеет никакой информации о связи вершин между собой.

Вершинный шейдер ответственен как минимум за одну переменную: gl_Position, и обычно трансформирует вершину в матрицах проекции и моделей.

Вершинный процессор имеет доступ к OpenGL, так что он может выполнять операции, использующие, например, освещение, или оперировать материалами. Также он может иметь доступ к текстурам (только но новом железе). Доступа к фреймбуферу нет.