Когда целесообразно использовать основные функции шейдеров с помощью regl? - PullRequest
0 голосов
/ 12 июня 2018

При создании ваших шейдеров я замечаю, что иногда создается функция void с именем main, которая используется для определения шейдера.Похоже, что main добавляется в шейдер при повторном включении атрибута.

Я хотел бы получить некоторую ясность, когда уместно определить шейдер внутри main, а не только внутри пространства определения верхнего уровня шейдера.

Пример кода от учебное пособие .

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 голосов
/ 12 июня 2018

Я не знаком с regl, но для шейдеров GLSL всегда требуется функция main().Это точка входа шейдера.Например, в случае вершинного шейдера функция main() шейдера будет выполняться для каждой вершины.В вашем учебном коде gl_Position - это встроенный (в отличие от пользовательского) вывод вершинного шейдера.attribute vec2 position; определяет входную переменную для вершинного шейдера, которая дает доступ к атрибуту position.

...