Для этого вам не нужны шейдеры:
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //Fill
glDrawElements(...);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //Outline
glDrawElements(...);
Если полигоны вогнутые, вам придется их тесселяции, либо вручную, либо с помощью служебной библиотеки gl, glu. Посмотрите на gluNewTess
. Если вы решите выполнить тесселяцию полигонов самостоятельно, вам нужно будет не забыть установить правильные флажки ребер, чтобы внутренние ребра тесселяции не отображались, см. glEdgeFlagPointer
.
РЕДАКТИРОВАТЬ: Я нашел следующую ссылку о том, как использовать буфер трафарета для рендеринга вогнутых полигонов.