質問

未定義の数の表示コンテキストがあり、それぞれがテクスチャを表示します。glGenTextures を呼び出すと、すべての表示コンテキストで同じ名前が返されます。これはうまくいきますか?同じ名前であっても、異なるテクスチャが保存され、表示されるのでしょうか?そうでない場合、これを回避するにはどうすればよいでしょうか?

役に立ちましたか?

解決

glGenTexture から同じ名前を取得することと、同じテクスチャが表示されることは同じではありません。

テクスチャ名はコンテキストの裁量による単なる整数であり、通常は 1 から始まり、glGenTexture ごとに増加しますが、必ずしもそうである必要はありません。実装はそのように機能する必要はありません (ただし、ほとんどの場合は機能します)。ただし、理論的には、たとえば、あらゆる種類のオブジェクトに対して増加する整数など、多少なりとも「乱数」を取得することもできます。テクスチャだけでなく、バ​​ッファやシェーダも含みます)、あるいはドライバのアドレス空間内の 32 ビット ポインタ アドレス、またはその他の難解なものさえも含まれます。名前が特定のものでなければならないという要件はありません。

従来の OpenGL では、glGenTexture を使用する代わりに独自の名前を作成することもできましたが、現在ではそれは合法ではありません。それが許可されたときに彼らがどう思ったかはわかりませんが、とにかく...:)

異なるコンテキスト内の同じ番号 (名前) は通常、異なるテクスチャになるか、まったくテクスチャが存在しない可能性があります。したがって、同じテクスチャ名を持つ別のコンテキストで同じテクスチャが表示される場合は、コンテキストが共有されているか、ドライバにバグがあるかのどちらかです。

wglCreateContextAttribsARB を使用する場合、2 番目のパラメーターは既存のコンテキスト (または null) のハンドルであることに注意してください。ここでコンテキスト ハンドルを指定すると、コンテキストも共有されます。 それなし glShareLists を明示的に呼び出します。おそらくそれは偶然に起こったことです。

他のヒント

テクスチャは(デフォルトでは)コンテキスト間で共有されません-これを明示的に有効にする必要がありますが、その方法はプラットフォーム固有です。

win32では wglShareLists であり、他のほとんどのプラットフォームではコンテキストの作成時に指定されます(たとえば、 aglCreateContext share パラメーターで> OS-Xで)。

私の知る限り、テクスチャ共有を有効にしていません。ただし、すべての表示コンテキストで同じテクスチャが表示されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top