Я изучаю руководство, в котором используется этот шейдер:
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)?