0

だから、私の考えはそのようなことをすることです(コードはもちろん単純化されています):

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もちろん、変数が空になる可能性は別として。

4

1 に答える 1

1

悪いと定義する

多くの WebGL プログラムがこれを行います。関数はスコープ内でグローバルであるため、OpenGL はデフォルトでこれを行います。通常の OpenGL では、eglMakeCurrentコンテキストを切り替えるために呼び出す (または同等のものを呼び出す) 必要がありgl = contextToMakeCurrentます。

ですから、基本的にはあなた次第です。いつか複数の WebGL コンテキストが必要になると思われる場合は、コンテキストでグローバル変数を使用しない方が賢明かもしれません。eglMakeCurrentただし、いつでもコーディング スタイルにフォールバックできます。どちらにもプラスとマイナスがあります。

于 2013-02-28T18:38:33.123 に答える