このシェーダーを使用するチュートリアルを勉強しています:
struct VSInput
{
vec3 Position;
vec2 TexCoord;
vec3 Normal;
};
interface VSOutput
{
vec3 WorldPos;
vec2 TexCoord;
vec3 Normal;
};
uniform mat4 gWVP;
uniform mat4 gWorld;
shader VSmain(in VSInput VSin:0, out VSOutput VSout)
{
gl_Position = gWVP * vec4(VSin.Position, 1.0);
VSout.TexCoord = VSin.TexCoord;
VSout.Normal = (gWorld * vec4(VSin.Normal, 0.0)).xyz;
VSout.WorldPos = (gWorld * vec4(VSin.Position, 1.0)).xyz;
};
struct FSOutput
{
vec3 WorldPos;
vec3 Diffuse;
vec3 Normal;
vec3 TexCoord;
};
uniform sampler2D gColorMap;
shader FSmain(in VSOutput FSin, out FSOutput FSout)
{
FSout.WorldPos = FSin.WorldPos;
FSout.Diffuse = texture(gColorMap, FSin.TexCoord).xyz;
FSout.Normal = normalize(FSin.Normal);
FSout.TexCoord = vec3(FSin.TexCoord, 0.0);
};
program GeometryPass
{
vs(410)=VSmain();
fs(410)=FSmain();
};
これは遅延レンダリング用のジオメトリ パス シェーダーです。QT ベースのプログラムに移植しようとしていますが、私のコードでは頂点シェーダーとフラグメント シェーダーを別々にしかロードできません。
上記を2つのロード可能なシェーダーに分割する方法を誰かが提案できますか?
また、私が理解している限り、このシェーダーには OpenGL コア 4.1.0 が必要です。これは本当に必要ですか、それとも下位レベル (3.3 としましょう) を使用して同じ結果を達成する他の方法はありますか?