2009-04-22 21 views
6

現在、私は2番目のスレッドのメモリにイメージをロードしています。その後、表示ループ中に(テクスチャロードが必要な場合)テクスチャをロードします。OpenGLでテクスチャを動的にロードするにはどうすればよいですか?

OpenGLがそれを好まなかったので、2番目のスレッドでテクスチャを読み込めないことがわかりました。おそらくこれは可能ですが、私は何か間違ったことをしました。

一方、私の失敗が有効だった場合 - レンダリングループを中断することなくテクスチャをロードするにはどうすればよいですか?現在、テクスチャはメモリからロードするのに約1秒かかりますが、これは大きな問題ではありませんが、ユーザにとっては少し面倒です。

+0

これは、システムメモリからVRAMにテクスチャをロードするのに非常に時間がかかるようです。どのくらいの大きさで、OpenGLがミップマップレベルを生成していますか? –

+0

非常に大きく、医学的な画像です。 –

答えて

4

ファイルを読み込むツールを使用して、任意のスレッドのディスクからメモリにテクスチャを読み込むことができます。

ただし、OpenGLにバインドするときは、そのOpenGLコンテキストのレンダリングと同じスレッドで処理する必要があります。つまり、this discussionは、2番目のスレッドでPBOを使用することはオプションであり、プロセスを高速化できることを示しています。

+0

最初の段落はあまり役に立たない、私がheheと言ったことを繰り返す;)しかし、第2段落はリンクのおかげで非常に役立つように見えます!私は確かにそれをチェックします:) –

+0

ちょうどあなたがそこでやっていたことが有効であることを言って - あなたがそれを書いたかどうかはわかりませんでした。がんばろう! –

+0

ありがとう! :) –

1

好きなスレッド数でディスクからテクスチャをRAMに読み込むことはできますが、OpenGLはReedの答えに記載された理由で複数のスレッドでVRAMにアップロードされません。

ディスクからのローディングが最も遅い部分であるとすれば、おそらくスレッド化したいビットです。読み込みスレッドは、アップロードされるテクスチャのキューを構築します。このキューは、GLコンテキストを所有するスレッドによって消費されます(ただし、さまざまなスレッドによってそのキューにアクセスできます)。また、フレームごとにN個のテクスチャをアップロードする非スレッドアプローチを考えてみてください。ここで、Nはレンダリングを遅くすることのない数値です。

+0

@ジャスティン、答えに時間を割いてくれてありがとう。おそらく私の質問はひどく言い表せます。現在のところ、2番目のスレッドで負荷がかかっています(画像処理があるためロードするのに約10秒かかります).GLUTループ中にピクセルをVRAMにコピーするのは短時間です。要するに、ユーザーエクスペリエンスの面では「不快」な時間がかかります。 –

+0

オキー、それは意味をなさない - 何があなたのために働くかを理解するとき、ここに答えを投稿してください! – Justicle

関連する問題