だから、私の考えはそのようなことをすることです(コードはもちろん単純化されています):
var gl;
function Renderer(canvas) {
gl = this.gl = canvas.getContext('experimental-webgl');
}
function Object() {
}
Object.prototype.render = function() {
...
gl.drawElements(...);
}
変数自体は、一貫性を高めるために名前空間に配置できます。gl
また、すべてのコードを匿名関数にラップしてカプセル化して、何かと衝突しないようにすることもできます。
ここで明らかなトレードオフが 1 つあります。それは、同じページで複数の WebGL キャンバスを実行する際の問題です。でも全然平気です。
なぜそれをするのですか?そうしないと、WebGL 関数を呼び出すのが面倒になるため、あちこちでレンダラーをパラメーターとして渡す必要があります。これは、私が Three.js について実際に気に入らない点です。すべてのグラフィックスは Renderer オブジェクト内で処理されるため、Renderer オブジェクト全体が巨大で複雑になります。
グローバルに可視のコンテキストを使用する場合、OpenGL 定数について気にする必要はなく、レンダラー オブジェクトの可視性についても心配する必要はありません。
だから、私の質問は次のとおりです。このアプローチでトラップを期待する必要がありますか? gl
もちろん、変数が空になる可能性は別として。