EmitVertex表示输出一个顶点,而EndPrimitive表示结束一个图元的输出,这是一对命令。只有几何着色器才有的命令。
几何着色器的图元通过两个特殊的内置函数生成的,即EmitVertex()和EndPrimitive() ,每个着色器请求都必须调用EmitVertex(),以及必须必要的时候使用EndPrimitive()来产生图元,如果没有调用这些函数,那么就不会输出几何体,也就是剪裁/扩充的意思。如果多次调用那么就产生比输入更多的数据。
EndPrimitive结束以后,图元形式是什么呢?三角形、四边形?在几何着色器的布局layout中会指定输出的图元形式,如下:
static const char* pGS = " \n\
#version 330 \n\
\n\
layout(points) in; \n\
layout(triangle_strip) out; \n\
layout(max_vertices = 4) out; \n\