テッセレーション シェーダーを作成しようとしています。ただし、最初にパイプラインが自分のコンピューターで動作していることを確認したいので、非常に基本的なテッセレーション コードをいくつか書きました。
しかし、実行しようとすると、テッセレーション評価シェーダーがコンパイルされていないというリンカー エラーが発生し続けます。これが何を意味するか、または以下のコードが間違っているかどうかを知っている人はいますか?
テッセレーション.vert
#version 400
layout (location = 0 ) in vec2 in_position;
layout (location = 1 ) in vec4 in_color;
void main()
{
gl_Position = vec4(in_position, 0.0, 1.0);
}
テッセレーション.tcs
#version 400
layout( vertices = 2 ) out;
void main()
{
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
gl_TessLevelOuter[0] = float(2.0);
gl_TessLevelOuter[1] = float(2.0);
}
テッセレーション.tes
#version 400
layout( isolines ) in;
void main()
{
float u = gl_TessCoord.x;
vec3 p0 = gl_in[0].gl_Position.xyz;
vec3 p1 = vec3(0.5, gl_in[0].gl_Position.y, 0.0);
vec3 p2 = vec3(0.5, gl_in[1].gl_Position.y, 0.0);
vec3 p3 = gl_in[1].gl_Position.xyz;
float u1 = (1.0 - u);
float u2 = u * u;
// Bernstein polynomials
float b3 = u2 * u;
float b2 = 3.0 * u2 * u1;
float b1 = 3.0 * u * u1 * u1;
float b0 = u1 * u1 * u1;
// Cubic Bezier interpolation
vec3 p = p0 * b0 + p1 * b1 + p2 * b2 + p3 * b3;
gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * vec4(p, 1.0);
}
テッセレーション.frag
#version 400
layout ( location = 0 ) out vec4 FragColor;
void main()
{
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}