顶点着色器将输出剪辑空间中的顶点位置:
顶点着色器,顾名思义,对顶点进行操作。具体来说,每个顶点着色器的调用都在一个顶点上运行。这些着色器必须在任何其他用户定义的输出中输出该顶点的剪辑空间位置.(资料来源:学习现代三维图形编程,杰森L. McKesson著)
它有一个内置变量,名为gl_Position
。
同样,期望片段着色器输出颜色:
片段着色器用于计算片段的输出颜色。..。执行片段着色器后,将片段输出颜色写入输出图像。(资料来源:学习现代三维图形编程,杰森L. McKesson著)
但是没有定义gl_Color
内建变量,如下所述:opengl44-quick-reference-card.pdf。
为什么OpenGL API中(明显的)不一致?
发布于 2013-11-29 05:40:24
这是因为OpenGL管道在多个任务中使用gl_Position
。手册上说:“写入gl_Position的值将用于原语组装、裁剪、裁剪和其他固定功能操作(如果存在的话),这些操作在顶点处理之后对原语进行操作。”
相反,流水线逻辑不依赖于最后的像素颜色。
发布于 2013-11-29 13:33:36
已被接受的答案不能充分解释实际情况:
gl_Color
已经被一次性使用,但是它总是被定义为输入值。
在兼容GLSL的情况下,gl_Color
是顶点着色器中的颜色顶点指针,它根据在片段着色器中着色的多边形的哪一侧而获得gl_FrontColor
或gl_BackColor
的值。
但是,这种行为在GLSL的新版本中不存在。您必须提供您自己的顶点属性、您自己的变体以及使用gl_FrontFacing
值在颜色之间进行选择。实际上,我提出了一个与更详细地解释了这一点。 ES 2.0有关的不同问题,但基本原则是相同的。
事实上,由于gl_Color
已经被用作输入变量,这就是为什么片段着色器的输出被称为gl_FragColor
。您不能让变量同时用作输入和输出。inout
存储限定符的存在可能会导致您不这么认为,但这只适用于函数参数。
https://stackoverflow.com/questions/20286156
复制相似问题