GLSL在屏幕上获取片段的位置

时间:2014-07-07 22:43:44

标签: opengl glsl shader

我试图在GLSL 1.00的片段着色器中访问视口中的片段位置,使用3.30我能够通过传递“vec2(gl_MultiTexCoord0);”来实现这一点。作为从顶点着色器到片段着色器的变化。有谁知道它是否可以这样做?

1 个答案:

答案 0 :(得分:3)

这里有一些值得注意的事情:

  1. 您可以在GLSL3.30中使用相同的原则。在顶点和片段着色器之间进行通信的varying关键字已被更通用的in / out concpet取代,您可以使用该关键字将值传递到下一个着色器阶段(在您的程序中)

  2. GLSL1.00确实不存在。第一个真实版本是1.10。如果您指定#version 100,您将获得GL ES SH 1.0(这是GLES 2.0原生的)。

  3. gl_MultiTexCoord0是不推荐使用的内置版本,在 core 配置文件/ 核心版本着色器中不可用。您应该使用通用顶点属性。

  4. 任何版本的GLSL都支持内置gl_FragCoord变量,它可以让您访问片段的屏幕空间坐标,因此这些东西都不是必需的。您可能希望位置在[0,1]范围内(适用于纹理),因此使用某些texcoord属性可能仍然是可行的方法。 OTOH,只是将视口大小指定为uniform vec2可能仍然更有效,特别是如果你实际上在CPU上反转一次,那么这将归结为每个片段一次向量乘法。