什么时候使用主要着色器功能与regl?

时间:2018-06-12 16:34:23

标签: shader void regl

构建着色器时,我注意到有时会使用名为main的void函数来定义着色器。当迭代一个属性时,似乎main被添加到着色器中。

我希望能够清楚地了解在main内定义着色器的时间,而不是在着色器的顶级定义空间内定义。

来自the regl tutorial的示例代码。

var drawTriangle = regl({
  //
  // First we define a vertex shader.  This is a program which tells the GPU
  // where to draw the vertices.
  //
  vert: `
    // This is a simple vertex shader that just passes the position through
    attribute vec2 position;
    void main () {
      gl_Position = vec4(position, 0, 1);
    }
  `,

  //
  // Next, we define a fragment shader to tell the GPU what color to draw.
  //
  frag: `
    // This is program just colors the triangle white
    void main () {
      gl_FragColor = vec4(1, 1, 1, 1);
    }
  `,

  // Finally we need to give the vertices to the GPU
  attributes: {
    position: [
      [1, 0],
      [0, 1],
      [-1, -1]
    ]
  },

  // And also tell it how many vertices to draw
  count: 3
})

1 个答案:

答案 0 :(得分:1)

我不熟悉regl,但GLSL着色器始终需要main()函数。这是着色器的切入点。例如,在顶点着色器的情况下,将为每个顶点执行着色器的gl_Position函数。在教程代码中,attribute vec2 position;是顶点着色器的内置(与用户定义相对)输出。 position为顶点着色器定义了一个输入变量,可以访问0.25.1属性。