makePackage¶
-
GPGPU.
makePackage
(param)¶ パッケージを作ります。
ソース¶
makePackage(param) {
var pkg = {};
this.packages[param.id] = pkg;
pkg.id = param.id;
if (!param.fragmentShader) {
// フラグメントシェーダが指定されてない場合
// デフォルトのフラグメントシェーダをセットする。
param.fragmentShader = this.minFragmentShader;
}
// シェーダのソースコードを解析する。
this.parseShader(pkg, param);
// 頂点シェーダを作る。
var vertex_shader = this.makeShader(gl.VERTEX_SHADER, param.vertexShader);
// フラグメントシェーダを作る。
var fragment_shader = this.makeShader(gl.FRAGMENT_SHADER, param.fragmentShader);
// プログラムを作る。
pkg.program = this.makeProgram(vertex_shader, fragment_shader, pkg.varyings);
// プログラムを使用する。
gl.useProgram(pkg.program); chk();
// ユニフォーム変数のロケーションをセットします。
this.setUniformLocation(pkg);
// テクスチャを作る。
this.makeTexture(pkg);
pkg.attribElementCount = param.elementCount;
// attribute変数を作る。
this.makeAttrib(pkg);
if (pkg.varyings.length != 0) {
// varying変数がある場合
// すべてのvarying変数に対し
for (let varying of pkg.varyings) {
var out_buffer_size = this.vecDim(varying.type) * pkg.attribElementCount * Float32Array.BYTES_PER_ELEMENT;
// Transform Feedbackバッファを作る。
varying.feedbackBuffer = gl.createBuffer(); chk();
// バッファをバインドする。
gl.bindBuffer(gl.ARRAY_BUFFER, varying.feedbackBuffer); chk();
gl.bufferData(gl.ARRAY_BUFFER, out_buffer_size, gl.STATIC_COPY); chk();
gl.bindBuffer(gl.ARRAY_BUFFER, null); chk();
}
// Transform Feedbackを作る。
pkg.transformFeedback = gl.createTransformFeedback(); chk();
}
if (param.VertexIndexBuffer) {
this.makeVertexIndexBuffer(pkg, param);
}
return pkg;
}