Я изучаю a tutorial, который использует этот шейдер:программа Shader для Vertex + пиксельного шейдера
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 core 4.1.0. Действительно ли это необходимо или есть какой-то другой способ добиться того же результата с использованием более низкого уровня (скажем, 3.3)?
Это не является допустимым GLSL. Он близок, но у него есть некоторые смешные дополнительные вещи, которые должны быть связаны с конкретной средой, для которой она была написана. –
Загружается с помощью [glfx] (https://code.google.com/p/glfx/), и я не хочу перетаскивать его в свой код. Должен быть способ вернуться к действительному и чистому GLSL-коду. Я просто не знаю, как :(Любая помощь? –