Skip to content

Instantly share code, notes, and snippets.

@hotwatermorning
Created November 5, 2015 05:08
Show Gist options
  • Save hotwatermorning/59ff039261216a55de21 to your computer and use it in GitHub Desktop.
Save hotwatermorning/59ff039261216a55de21 to your computer and use it in GitHub Desktop.
[WebGL] shaderとprogramのエラーを得る方法
var canvas;
var gl;
var program;
function createGlContext()
{
canvas = document.getElementById("container");
gl = canvas.getContext("webgl");
}
function createShader(gl, source, type) {
var shader = gl.createShader(type);
source = document.getElementById(source).text;
gl.shaderSource(shader, source);
gl.compileShader(shader);
//! getShaderParameterでshaderの状態取得
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
//! 失敗していたらgetShaderInfoLogでエラー文字列取得
alert(gl.getShaderInfoLog(shader));
return null;
}
return shader;
}
function linkProgram()
{
var vertexShader = createShader(gl, 'vert-shader', gl.VERTEX_SHADER);
var fragShader = createShader(gl, 'frag-shader', gl.FRAGMENT_SHADER);
program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragShader);
gl.linkProgram(program);
// シェーダのリンクが正しく行なわれたかチェック
if(gl.getProgramParameter(program, gl.LINK_STATUS)){
gl.useProgram(program);
} else {
//! 失敗していたらgetProgramInfoLogでエラー文字列取得
alert(gl.getProgramInfoLog(program));
}
}
function drawArrays()
{
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array([
-1.0, -1.0,
1.0, -1.0,
-1.0, 1.0,
-1.0, 1.0,
1.0, -1.0,
1.0, 1.0]),
gl.STATIC_DRAW);
var positionLocation = gl.getAttribLocation(program, "a_position");
gl.enableVertexAttribArray(positionLocation);
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.TRIANGLES, 0, 6);
}
function run()
{
createGlContext();
linkProgram();
drawArrays();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment