【发布时间】:2017-05-08 07:57:37
【问题描述】:
当我将镶嵌控制着色器添加到渲染程序时,视口变黑。如果没有 TSC,顶点和片段着色器可以正常工作。我还检查了编译错误,但没有发生。
顶点着色器:
#version 410 core
layout (location = 0) in vec4 offset;
layout (location = 1) in vec4 color;
out VS_OUT {
vec4 color;
} vs_out;
void main(void) {
const vec4 vertices[3] = vec4[3]
(
vec4( 0.25, -0.25, 0.5, 1.0),
vec4(-0.25, -0.25, 0.5, 1.0),
vec4( 0.25, 0.25, 0.5, 1.0)
);
// Add "offset" to our hard-coded vertex position
gl_Position = vertices[gl_VertexID] + offset;
// Output the color from input attrib
vs_out.color = color;
}
镶嵌控制着色器:
#version 410 core
layout (vertices = 3) out;
void main(void) {
if (gl_InvocationID == 0) {
gl_TessLevelInner[0] = 5.0;
gl_TessLevelOuter[0] = 5.0;
gl_TessLevelOuter[1] = 5.0;
gl_TessLevelOuter[2] = 5.0;
}
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
}
曲面细分评估着色器:
#version 410 core
layout (triangles, equal_spacing, cw) in;
void main(void) {
gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position +
gl_TessCoord.y * gl_in[1].gl_Position +
gl_TessCoord.z * gl_in[2].gl_Position);
}
片段着色器:
#version 410 core
in VS_OUT {
vec4 color;
} fs_in;
out vec4 color;
void main(void) {
color = fs_in.color;
}
我忘记检查着色器链接错误。这就是我得到的:
WARNING: Output of vertex shader '<out VS_OUT.color>' not read by tessellation control shader
ERROR: Input of fragment shader '<in VS_OUT.color>' not written by tessellation evaluation shader
我该如何解决这个问题?
【问题讨论】:
-
如果它只适用于顶点和片段着色器,这意味着您没有绘制
GL_PATCHES基元。当您使用 TCS 时,您需要这样做,并设置每个补丁的顶点数。您将需要这样的电话:glPatchParameteri (GL_PATCH_VERTICES, N);某处。 -
我确实用 N=3 来称呼它,但根本没有三角形。