Вы используете шейдеры: геометрические шейдеры работают с любыми вершинными шейдерами. Если вы хотите, чтобы это были значения пространства клипа, то геометрический шейдер работает со значениями пространства клипа. Если ваш вершинный шейдер передает им значения в пространстве глаза, то геометрический шейдер должен работать со значениями в пространстве глаза.
Важно то, что на финальном этапе шейдера предварительной растеризации выводится gl_Position
. Это - это то, что должно быть в однородном пространстве клипа. Вершинный шейдер, за которым стоит геометрический шейдер, даже не должен записывать в gl_Position
.
Также, похоже, что GL_TRIANGLES не поддерживается как один из возможных типов вывода геометрии.
Вы должны использовать ARB_geometry_shader4, а не функциональность шейдера геометрии ядра. Вам, вероятно, следует избегать этого расширения, если вы можете. Любое оборудование, имеющее геометрические шейдеры, может запускать OpenGL 3.2.
В любом случае, основная функция не поддерживает треугольники в качестве вывода. Он поддерживает точки, линейные и треугольные полосы.
Можно ли создавать кубы, если GL_TRIANGLES не поддерживается?
Вот для чего EndPrimitive (). Вы называете это, когда закончите с примитивом; ничто не мешает вам выпустить второй примитив. Или третий.
Кроме того, вам следует учесть, что это, вероятно, будет медленно. Геометрические шейдеры не известны высокой скоростью рендеринга.