VBO を使用してウェーブフロント (.obj) ローダーをコーディングしています。
「usemtl」が呼び出されたときに、頂点、texCoord、法線データと一緒に textureID を送信することを考えています。
そのテクスチャ ID を使用して、glBindTexture を呼び出さずに頂点/フラグメント シェーダ内のテクスチャをバインドできますか?
そのテクスチャIDを使用して、glBindTextureを呼び出さずに頂点/フラグメントシェーダー内のテクスチャをバインドできますか?
いいえ。テクスチャはシェーダーにバインドされていません。それらはコンテキストにバインドされています。
技術を習得したい場合は、NV_bindless_textureでそのような機能を使用できますが、これはNVIDIA固有です。
これは一般的なマテリアルの問題であり、ジオメトリをレンダリングする前に切り替える必要があります。
最も簡単な方法は次のとおりです。
foreach object in renderQueue
set_material()
draw_geometry()
もちろん、1つのオブジェクトを2つの異なるマテリアルでレンダリングする必要がある場合、いくつかの問題が発生します。もう1つの問題はパフォーマンスにあります。通常、オブジェクトをマテリアルで並べ替えて、(テクスチャ、シェーダー、その他のデータの)切り替えを保存します。