私は、私のアプリケーションでInstrumentsからOpenGL ES解析ツールを実行しました。シェーダをコンパイルした後、preDarmingパスでglDrawArraysを呼び出す必要があると述べました。そこで、私が書いたシェイダーの時間を確認しましたが、プログラムを初めて実行するときはずっと遅いです。シェーダの最初の使用の遅延を修正するにはどうすればよいですか?
私のコードでは、シェーダユニフォーム/属性を知らない一般的なシェーダローダーがあります。コンパイルするだけです。そして、シェーダを予熱するのに最適な場所があるようです(したがって、どこにでもglDrawArraysを追加する必要はありません)。私は私のシェーダローダーでこれを追加しようと試み:
glUseProgram(prog);
glDrawArrays(GL_TRIANGLES, 0, 0);
それは遅延を固定し、私は、私はそれが安全であるかどうかわからないんだけどどんな制服/属性を設定していないよ以来。また、何とか回避策のように見えます。プログラムを予熱する最良の方法は何ですか?
シェーダの予熱について読んでいるのは初めてですが、優れた情報です。それに関する文献はありますか?それが最も役に立つでしょう。 乾杯。 –
GPU関連の実装の詳細はすべてベンダー固有で機密性が高いため、実際には誰も知らないし、常に変わるため、情報は固いものではないと言いたい。しかし、キャッシュされたリソースや遅延ロードされているリソースがある場合、コンセプトは同じままです。キャッシュを満たすためにフレームをレンダリングし、リソースをロードさせます。それにはそれほど多くはありません... –