WebGLShader

WebGLShaderWebGL API の一部で、頂点シェーダーとフラグメントシェーダーを表します。 WebGLProgram は両方の種類のシェーダーが必要です。

WebGLObject WebGLShader

解説

WebGLShader を作成するには WebGLRenderingContext.createShader を使用し、それから WebGLRenderingContext.shaderSource() を使用して GLSL ソースコードを結び付け、最後に WebGLRenderingContext.compileShader() を呼び出してシェーダーを完成させコンパイルします。この時点では WebGLShader はまだ使用可能な形になっておらず、 WebGLProgram に関連付ける必要があります。

js
function createShader(gl, sourceCode, type) {
  // gl.VERTEX_SHADER または gl.FRAGMENT_SHADER のどちらかをコンパイル
  const shader = gl.createShader(type);
  gl.shaderSource(shader, sourceCode);
  gl.compileShader(shader);

  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
    const info = gl.getShaderInfoLog(shader);
    throw `WebGL プログラムをコンパイルできませんでした。\n\n${info}`;
  }
  return shader;
}

シェーダーの取り付けについては WebGLProgram を参照してください。

頂点シェーダーの作成

シェーダーのソースコード文字列の書き込みのアクセスには、他にも多くの戦略があることに注意してください。これらの例は説明のためのものです。

js
const vertexShaderSource =
  "attribute vec4 position;\n" +
  "void main() {\n" +
  "  gl_Position = position;\n" +
  "}\n";

// 上の例の createShader 関数を使う
const vertexShader = createShader(gl, vertexShaderSource, gl.VERTEX_SHADER);

フラグメントシェーダーの作成

js
const fragmentShaderSource =
  "void main() {\n" + "  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n" + "}\n";

// 上の例の createShader 関数を使う
const fragmentShader = createShader(
  gl,
  fragmentShaderSource,
  gl.FRAGMENT_SHADER,
);

仕様書

Specification
WebGL Specification
# 5.8

ブラウザーの互換性

BCD tables only load in the browser

関連情報