1

私の質問は、同じデータを使用する複数のシェーダー ファイルに関連しています。

directX でできることは知っていますが、openGL でできますか?

vertexShader1 は私の cameraViewProjection を知る必要があるかもしれません vertexShader2 も同様に必要かもしれません

すっごく私ができる方法はありますか

共有変数ファイルを「#include」しますか?

たとえば、「ShaderedVariables」という別のファイルを作成したい場合、cameraView や ViewProjection などのワールド情報をそこに入れることができます

私はいたるところを見てきましたが、これが可能かどうかはまだわかりません。

4

1 に答える 1

3

OpenGL はファイルシステムの使い方を知りません。ファイルシステムがあることを知りません。そのため、ファイルを読み取ることができません。

ARB_shading_language_include を試すことができます (これもファイルを読み取らず、ファイルシステムをメモリ内に構築します)。しかし、現時点では NVIDIA だけがサポートしているようです。そのため、最も移植性の高いソリューションとは言えません。

一般に、定義が小さくて少ない場合は、同じものを各シェーダー ファイルに入れるだけです。

// Shader1:
uniform mat4 cameraMatrix;
void main() {...}

// Shader2:
uniform mat4 cameraMatrix;
void main() {...}

定義がより充実している場合は、いつでも独自のインクルード システムを構築できます。1 つだけでなく、複数のglShaderSource文字列を取ることに注意してください。したがって、一般的に使用される定義をメインのシェーダー文字列の前に置き、実際のシェーダーに実際に使用するものを選択させることができます。

于 2012-11-06T02:37:51.210 に答える