1

最初にいくつかの背景(質問をする人がそれを提供するのが好きです):私は図書館プロジェクトを書いています。これは、単純な OpenGL の「グラフィックの歪み」ライブラリです。ユーザーは、単純な呼び出しで「リージョン」と呼ばれる特定のオブジェクトを作成できるはずです

myRegion = new DistortedRegion(w,h);

次に、それらにさまざまな歪みを定義して描画します。

myRegion.addTwistDistortion(...)
myRegion.draw(x,y);

それだけです。ライブラリは、OpenGL を使用して、さまざまなユーザー定義の方法で歪んだリージョン (実際には長方形のビットマップ) を描画します。

ここで、問題: ライブラリは、その頂点シェーダーとフラグメント シェーダーにアクセスする必要があります。これらは、リソースと共に「raw」フォルダーに格納されている .glsl ファイルです。そのためには Resources オブジェクトにアクセスする必要があり、そのためには Context オブジェクトが必要です。したがって、現在のところ、ライブラリは最初に呼び出しで初期化する必要があります

Distorted.init(Context)

これは私にとって大きな問題です。なぜなら、この IMHO は API 全体をぎこちなくするからです。このいまいましいコンテキストがなければ、何も初期化する必要はなく、ユーザーは必要なときにいつでもすぐに新しいオブジェクトを作成できます。これは、ドキュメントで説明するのがエレガントで簡単です。別の init() 呼び出しは、Context オブジェクトをライブラリに渡すためにのみ必要であり、Resources オブジェクトを取得するためにのみ必要であり、シェーダー コードを含む 2 つのファイルを開くためにのみ必要であり、これらすべてが非常に扱いにくいものになっています。 .

代わりに、シェーダー コードをライブラリ内の静的に初期化された文字列に単純に移動することを考えていましたが、これは開発にとって面倒です (シェーダーは数百行の長さの非常に複雑なコードであり、それらを別の .glsl ファイルに保持すると、とりわけシンタックスハイライトを持つことができます)

何かアドバイス?

4

1 に答える 1