WebGl "ОШИБКА: неподдерживаемая версия шейдера" - PullRequest
1 голос
/ 16 января 2020

Я только начал использовать webgl и следую этому учебнику , но у меня появляется странное сообщение об ошибке. ERROR: unsupported shader version. VertexShader выглядит следующим образом:

 var vertexShaderSource = `#version 300 es

  // an attribute is an input (in) to a vertex shader.
  // It will receive data from a buffer
  in vec4 a_position;

  // all shaders have a main function
  void main() {

    // gl_Position is a special variable a vertex shader
    // is responsible for setting
    gl_Position = a_position;
  }
  `;

, а фрагментный шейдер выглядит следующим образом:

 var fragmentShaderSource = `#version 300 es

  // fragment shaders don't have a default precision so we need
  // to pick one. mediump is a good default. It means "medium precision"
  precision mediump float;

  // we need to declare an output for the fragment shader
  out vec4 outColor;

  void main() {
    // Just set the output to a constant reddish-purple
    outColor = vec4(1, 0, 0.5, 1);
  }
  `;

Затем они преобразуются в шейдеры со следующей функцией, после чего регистрируется ошибка, упомянутая выше. :

function createShader(gl,type,source) {
  var shader = gl.createShader(type);
  gl.shaderSource(shader,source);
  gl.compileShader(shader);
  var success = gl.getShaderParameter(shader,gl.COMPILE_STATUS);
  if(success) {
    return shader;
  }
  console.log(gl.getShaderInfoLog(shader));
  gl.deleteShader(shader);
}

Очень надеюсь, что вы мне поможете с этим, и заранее спасибо.

1 Ответ

2 голосов
/ 16 января 2020

Если вы хотите использовать шейдеры GLSL ES 3.00 , вам необходимо создать контекст WebGL 2.0 .

См. HTMLCanvasElement.getContext(). Например:

var ctx = canvas.getContext("webgl2");

См. Спецификация WebGL 2.0 - 4.3 Поддержка GLSL ES 3.00 :

В дополнение к поддержке OpenGL ES Shading Language, В версии 1.00 API WebGL 2.0 также принимает шейдеры, написанные на языке шейдеров OpenGL ES версии 3.00, с некоторыми ограничениями. [...]

...